iOSDC Japan 2021 トーク一覧

他イベントOK レギュラートーク(40分)

Swift Packagesで自作ライブラリを作ろう

the_uhooi uhooi the_uhooi

ライブラリを自作してGitHubに公開したらカッコよくないですか?
私はカッコいいと思います。

ということでハンズオン形式でライブラリを自作していきます。
Swift Packagesを使えば swift package init を実行するだけでサッと作れます。

WWDC 21で紹介されたSwift Package Index、そしてCocoaPodsやCarthageに対応したらさらにカッコよくないですか?
各ライブラリ管理ツールに対応するまでがライブラリの作成です。
本トークではそこまで説明します。

40分後、大量のSwift製ライブラリがこの世に誕生していることでしょう。

【アジェンダ】
・Swift Packagesによるライブラリの作成
・Swift Package Indexの説明
・自作パッケージをSwift Package Indexに対応する
・自作パッケージをCocoaPodsに対応する
・自作パッケージをCarthageに対応する

【想定する聞き手】
・Swiftでライブラリを自作したい人
・ライブラリを自作する実績を解除したい人
・「ライブラリを自作したことがあるぜ」とドヤりたい人

【ゴール】
・Swift Packagesでライブラリを自作できる
・自作ライブラリを各ライブラリ管理ツールに対応できる

3
他イベントOK LT(5分)

忙しい人のためのハードウェア対応

_ykkc Takeshi Yokokoji _ykkc

私たちのチームは今年の6月に新規レジアプリ「STORES レジ」をリリースしました。
世の中でお会計の際に使われているレジですが、レジの機能をアプリで置き換えるためには様々な周辺機器との連携が必要でした。

例えばSTORES レジではこんなハードウェアに対応しました。

  • レシートプリンター
  • バーコードリーダー
  • キャッシュドロアー
  • クレジットカード / 電子マネー決済端末

このトークではハードウェア対応の全体像と苦労した点をご紹介させていただきます。

コンテンツ

  • ハードウェア対応の概要
  • CoreBluetooth Framework の使い方
  • External Accessory Framework の使い方
  • MFi登録申請の概要
  • ハードウェア対応で苦労したこと

ハードウェア対応?そんな仕事しないし...と思っているそこのあなた!
いつかあなたのプロジェクトにもハードウェア対応が必要になるかもしれません!
そんな時に役に立つTipsをお話しします!

2
採択 他イベントOK 2021/09/18 10:50〜 Track D レギュラートーク(20分)

初めてのハードウェア対応

_ykkc Takeshi Yokokoji _ykkc

私たちのチームは今年の6月に新規レジアプリ「STORES レジ」をリリースしました。
世の中でお会計の際に使われているレジですが、レジの機能をアプリで置き換えるためには様々な周辺機器との連携が必要でした。

例えばSTORES レジではこんなハードウェアに対応しました。

  • レシートプリンター
  • バーコードリーダー
  • キャッシュドロアー
  • クレジットカード / 電子マネー決済端末

このトークでは具体的な対応内容や苦労した点、ハードウェア対応の全体像などをご紹介させていただきます。

コンテンツ

  • ハードウェア対応の概要
  • CoreBluetooth Framework の使い方と具体的な実装例、ハマったところ
  • External Accessory Framework の使い方と具体的な実装例、ハマったところ
  • MFi登録申請の概要と流れ、弊社での具体的な対応例
  • ハードウェア対応で苦労したこと

ハードウェア対応?そんな仕事しないし...と思っているそこのあなた!
いつかあなたのプロジェクトにもハードウェア対応が必要になるかもしれません!
そんな時に役に立つTipsをお話しします!

他イベントOK LT(5分)

Swift でコマンドラインツールを作って業務改善を目指す話

Yut_Taj taji-taji Yut_Taj

Swift は今や iOS アプリの開発のみならず、サーバーサイドの開発やコマンドラインツールの開発に使うことができる言語になっています。
一方で、業務での Swift の活躍の場を考えると、(企業や開発メンバーの状況にもよりますが)サーバーサイドの開発言語としてはまだまだ選択肢に上がりづらい状況かなと思います。
そんな中で、 iOS アプリ開発以外の業務でも Swift を使いつつ、チームの業務フローの改善を行うべく Swift でコマンドラインツールを作成した話をします。

5
他イベントOK LT(5分)

iOS開発に使うキーボードの配列を決められず困っている話

log5 log5 log5

「プログラミングならUS配列のほうが向いている」という意見をみて、実際にJIS配列からUS配列に乗り換えてみたんです。
たしかに、Swift等でよく使うバックスラッシュや一般的なプログラミング言語等でよく使うイコール、シングルクォート、およびバッククォートを修飾キーなしで打てるのは素晴らしいです。
ところが、長年「かな」「英数」キーがある環境に浸かっていたせいか、英単語と日本語が混じった文章を書く際に Ctrl+スペースでの切り替えが割とストレスに感じるようになってしまい...
このまま慣らしていくべきなのか、それともJIS配列に立ち返るべきなのか、迷ってます。\

...という話をメインに

・US配列の左右のコマンドキーに「かな」「英数」キーを割り当てたときのトラブル
・JIS配列で修飾キーなしでバックスラッシュを入力できるようにするまで
・「そもそもあなたの場合、SwiftよりObjective-Cを書くことのほうが多いんだから、 を修飾キーなしで打てたほうが嬉しいんじゃない?」

みたいな話をする予定です。

※ 「キーボード自作すればいいのでは」系の話はたぶんしないです;;

3
採択 他イベントOK 2021/09/19 14:10〜 Track A レギュラートーク(20分)

UICollectionViewの最新のAPIを使いましょう

yhkaplan ジョシュア・カプラン yhkaplan

UITableViewはもう捨てましょう!SwiftUIのGridビューはまだまだUICollectionViewの力に追いついていません!

近年、UICollectionViewが激変し、飛躍的なパワーアップをしているので、最新の機能と使い方をまずおさらいします。また、今までの技術背景を説明した上でSwiftUIのGridやListと比較して、どのときにどのAPIを使えば良いかがわかるように説明します。そして、UITableViewがなぜiOS 14から特に存在意義が薄れていて、そのUIKitのキープレーヤーだったビューに「さよなら」と言う時期がなぜ近づいていそうかについても解説します。

近年の追加内容は以下のとおりですが、日々の開発でなかなか覚えきれないほどたくさんの機能やきめ細かな設定があるので、簡単に紹介して、UICollectionViewを保守しやすい形で最大限に活用できるように支援します。

  • iOS 9以前
  • iOS 10
    • DataSourcePrefetching
  • iOS 11
    • drag and drop
  • iOS 13
    • DiffableDataSource
    • CompositionalLayout
  • iOS 14
    • cell configuration
    • リストスタイル
    • DiffableDataSourceとCompositionalLayoutの進化
  • iOS 14.5
    • UIListSeparatorConfiguration
  • iOS 15
    • cell configurationの進化
    • DiffableDataSourceとCompositionalLayoutのさらなる進化
他イベントOK レギュラートーク(20分)

画像周りの最大限のパフォーマンスを引き出す秘訣

yhkaplan ジョシュア・カプラン yhkaplan

多くのアプリでネットワークからのデータをダウンロードして、画像を表示することがありますが、素朴な実装だと、わりとメモリーやCPUのパフォーマンス問題につながりやすいです。そのため、問題の特定方法から対応方法まで解説します。

また、画像周りのiOS 15 SDKの最新のAPIについて説明し、便利さと新しい罠についてふれます。例えば、SwiftUIの新しいAsyncImageビューが標準に用意されており、手に届きやすいのですが、どういうところに気をつけるべきかなどです。

また、画像が1画面に1枚という場合だけではなく、GridやUICollectionViewでのパフォーマンス最適化方法についても解説します。画像を20枚もアップロードできる機能でメモリー利用率を大幅に減らし、実際に業務で行った最適化した話を例として説明します。

8
他イベントOK LT(5分)

GitHub Actionsの上で1分半でSwiftLintを動かしてPRにコメントさせよう!

D_R_1009 Koji Wakamiya D_R_1009

複数人でも一人でも、プルリクエストを利用して開発しているとSwiftLintを利用してコードを"整え"たくなります。
しかし、プルリクエストの更新のたびに待たされるのはつらく、またpushしすぎたのでCIの無料分を超えてしまうのもつらいものです。
そこでStudyplus iOSアプリにて導入した、高速なプルリクエストチェックを紹介します。

SwiftはmacOSだけでなく、Linux上で動作させることができます。
このためGitHub Actions上でLinuxマシンを用いたSwiftLintによるチェックを利用することで、低コストでSwiftLintを導入できることになります。

本LTはfastlaneではなく、LinuxベースのDockerイメージにDangerイメージである danger-swift-with-swiftlint を紹介します。
SwiftLintをプルリクエストのチェックに導入する方法から、その効果、活用方法までお話しする予定です!

1
採択 他イベントOK 2021/09/19 14:50〜 Track A レギュラートーク(40分)

iOSアプリのセキュリティ基礎

saten_work saten saten_work

iOSアプリを作成する上でこれってセキュリティ上大丈夫だろうか?
セキュリティ上どういうところが危ないんだろう?って思ったことないでしょうか。
iOSアプリを作成する上でセキュリティ上気をつけた方が良い基礎を紹介します。

コンテンツ(予定):
・通信する上で気をつけた方が良いこと
  通信の暗号化とSSL証明書、ATS対応
・URLスキームの脆弱性
  URLスキームであり得る複数の攻撃手法と対策
・ハードウェアへの重要情報をどこに保存すれば良いの?
  Keychain、UserDefaults、ファイル保存などの保存方法とセキュリティの違いについて
・認証って何?
  OAuthなどのいくつかの認証フローの仕組みについて

他イベントOK レギュラートーク(20分)

チームでSwiftUIを書くために ~読みやすく保守しやすいSwiftUIの設計について考えたこと~

n_atmark あつや n_atmark

SwiftUIはWWDC19で発表された新たなUIフレームワークです。
宣言的にViewを実装することができるようになり、これまで利用してきたUIKitに比べ、UIの構成要素をより簡単に表現できるようになりました。

SwiftUIはUIKitに比べて、より柔軟にコードを記述することができますが、柔軟に記述できるがゆえに、チーム開発にSwiftUIを用いる場合により開発者の個性が出やすくなります。その結果、読みにくく保守しにくいコードに繋がると考えています。

このセッションでは、「読みやすく保守しやすい」という観点でSwiftUIを用いたViewの実装をどのように行っていけば良いのか考えたことについてお話しします。

・画面の構成要素を分かりやすく記述する方法について
・SwiftUIのコンポーネント設計とコンポーネント化の粒度について
・パフォーマンスを考慮したSwiftUIの実装について
・チームで統一した設計を行うための取り組みについて

このトークによって、SwiftUIの特性であるレイアウトのしやすさと、保守性を保ちながらチームで開発するための知見を得ることができるでしょう。

9
他イベントOK レギュラートーク(20分)

エンジニアもSwiftUIでお手軽アニメーションすっぞ!!

eitarox Eitaro Yamatsuta eitarox

アプリ開発をしていて、ちょっとアニメーションが入ったらオシャレになるのになぁというときありますよね。
調べて出てくるチュートリアルは、四角や丸が動き回るだけでアプリ内の実装例としては実感が湧きません。かといって、AfterEffectで動画を組んでLottieで載せるまではしたくない。
アニメーションまでマルっと設計してくれるイケUIデザイナーが隣に居ればいいのにーー。

でも実は、あのアプリのおしゃれっぽい動きも簡単な動作の組み合わせなんです!

本公演では、
「そもそもどう動かしたらカッコいいのか」というところから、
皆さんよく目にするアニメーションなどを参考に、簡単なコードの組み合わせでサンプルを実装していきます。

この20分でおしゃれ実装できるようになりましょう!!

  • アニメーションのデザインの基礎
  • アニメーションの基本動作
  • アニメーションで使うSwiftUIの基本コード
  • SwiftUIでの実装方法
  • その他
1
採択 他イベントOK 2021/09/19 14:50〜 Track C レギュラートーク(40分)

Swift Package中心のプロジェクト構成とその実践

d_date Daiki Matsudate d_date

Swift Package Manager(以下Swift PM)はXcodeに統合された公式のパッケージマネージャーです。
CocoaPodsやCarthageのように、他の方が作ったライブラリを導入・管理することができます。

しかし、Swift PMが管轄するのはライブラリに留まりません。
Xcodeと組み合わせることにより、アプリのプロジェクト構成を柔軟に変更することができます。
特別なツールを利用することはありません。これまで開発者を苦しめていたXcodeプロジェクトファイルのコンフリクトを解消するだけでなく、
マルチモジュールにおけるFrameworkの参照やリンクといった、手動で設定するには面倒な項目も簡単にセットアップできます。

このトークでは、まず、Swift PMをまだ利用したことがない方に向けてSwift PMの基本的な事柄をお話しし、Swift PMでのライブラリ管理をお手元のプロジェクトで利用できるようにします。
次に、Swift PMをアプリ開発のプロジェクトに導入することで、Assetsやローカライズファイルを含むほとんどのソースコードの管理をSwift Packageに移管する方法をお話しし、Xcode Projectの責務を軽くします。
そうして身軽になったXcode Projectを、今度は複数作ってみて、マルチプロジェクト・マルチモジュールな構成を実現します。
この構成により得られる素敵な特典と移行のやり方についてもお話しし、明日からみなさんのプロジェクト構成をアップデートしてもらうことを目指します。

他イベントOK レギュラートーク(20分)

アプリアイコンの歴史を振り返る

hcrane14 Hiromu Tsuruta hcrane14

アイコン、それはアプリの顔です。
そんなアイコンにはさまざまなメッセージが込められてます。

iPhoneが発売されてから10年以上が経ち、アイコンのデザインも多様化してきました。
そんな目まぐるしいアイコンの変化を振り返ってみようと思います。

セッション内容は

  • スキュアモーフィズムからフラットデザインへの変化
  • アイコンのデザインとバリエーション
  • ニューモーフィズムのこれから

などを予定しています。

4
採択 他イベントOK 2021/09/17 17:30〜 Track B レギュラートーク(40分)

agoraを使ってライブ配信機能を1ヶ月半でリリースした話

_asa08_ asa08 _asa08_

ここ1・2年いろんなサービスで実装されてるライブ配信機能。実装を検討されているサービスも多いのではないのでしょうか?

我が社もそんなビックウェーブにのるべく始まったライブ配信プロジェクトですが、エンジニアはバックエンド2人・iOS2人。
少ないリソース、少ない開発期間でリリースすべく、Clubhouseも使っているagoraというサービスを使用することにしました。

4人の戦士が1ヶ月半でリリースした知見をお話しします。

  1. ライブ配信機能一覧と分担
    ・agoraで用意されてる機能
    ・自社で担う部分とagoraに任せる部分
  2. コメント機能の設計といろんな使い方
    ・通常コメント
    ・ブロック機能
    ・ギフティング
  3. 発生した課題・問題たち
    ・難1 配信開始・配信終了の検知どうするの問題
    ・難2 画面レイアウトの設計複雑すぎ問題
    ・難3 リアルタイムで配信一覧を更新したい問題
  4. 小咄 ユーザーの推し機能
他イベントOK レギュラートーク(20分)

Bazel Sandboxingと仲良くしてもらう会

S_Shimotori_pub しもとり S_Shimotori_pub

皆さん、Bazelを使ったことはありますか?Bazel最大の特徴であり避けて通れないのがSandboxing機能です。予め指定した入力ファイル以外は使用できず、隔離された場所で実行され、予め指定したファイル以外は出力されません。また、得られた出力ファイルは入力ファイルから隔離しなければなりません。このお陰で同一ファイルからは必ず同じ結果が得られますし、キャッシュ削除も確実に行うことができます。安心ですね。

Re:View「config.ymlのあるディレクトリにPDFを出力したいんですけど!Bazelでは入力ファイルと出力ファイルを混ぜちゃダメなんですかー!」
Swiftコンパイラ「swiftdepsを再利用しないとincremental buildができないんですけど!Bazelったら前回の出力ファイルを使わせてくれないじゃないですかー!」

……Sandboxingに合わない操作をする彼らは、果たしてBazelと仲良くできるでしょうか?

【対象】

  • Bazel初心者の方
  • Bazelで何かビルドを試してみたいと思っていた方
  • Bazelでのファイルの扱いがそんなに厳しいとは知らなかった方
  • Sandboxing機能をオフにするのは流石に勿体無いと思った方

【取り扱うテーマ】

  • BazelにおけるSandboxingの特徴
    • 入出力ファイルの扱い
    • execroot内の構造
  • 相性の良くないツール・コマンドをどうにか扱う方法
    • Re:Viewのreview-pdfmaker
    • rules_swiftにおけるSwiftコンパイラのincremental build有効化
2
他イベントOK レギュラートーク(20分)

protocol, extension, generics を活用してFirestoreとの通信処理を共通化した話

minami1389 小林南実 minami1389

私は現在、Firebaseのデータベース機能の一つである Cloud Firestore を活用したアプリ開発を行なっています。
Firestoreに限らずアプリ開発においてサーバーとの通信を行う実装は、取得したい各データ毎に似たような処理を書いていくことになるので、なるべく共通化したいという思いがあります。

今回 Firestore との通信において、Swiftの言語機能である protocol, extension, generics を活用して共通化を実現しました。
本トークではこちらについてご紹介したいと思います。

2
採択 他イベントOK 2021/09/19 13:30〜 Track E レギュラートーク(20分)

App Clips はどこから来たのか&何者か&どこへ行くのか

log5 log5 log5

WWDC2020にて華々しくデビューしたApp Clipsですが、それから1年過ぎた現在においてはあまり見向きをされていないような印象があり、少し寂しく思うところです。
(というか、正直誰もApp Clips の話をしていない気がするのですが、私の周りだけでしょうか...)

そのようなわけで、この発表ではより多くの人に App Clips の魅力や伸び代をお伝えすべく
・App Clips が目指したかった(と思われる)もの
・App Clips にできること
のおさらいをしつつ
・App Clip をビルド、テストできるようになるまで
・iOS向けSDK の App Clip 対応時のTips
・App Clips が今後できるようになる(と思われる)こと
などについてもお話しします。

採択 他イベントOK 2021/09/19 13:30〜 Track D レギュラートーク(20分)

DateComponentsと仲良くなる

sankakuButton sato-shin sankakuButton

Date型はとても原始的なクラスで地球上の時間の一点を表現します。
例えば、Date(timeIntervalSince1970: 1631836800)は

  • JSTでは 2021年09月17日09時00分00秒00ミリ秒
  • UTCでは 2021年09月17日00時00分00秒00ミリ秒
  • PDTでは 2021年09月16日17時00分00秒00ミリ秒
    を表します。

このようにタイムゾーンによって表示上の日付や時間は変わってしまいます。
なので、誕生日などを表すときやサマータイムなどを考慮した時間計算にDate型は適していません。
DateComponents型はこういった悩みを解決してくれます。

日付計算においてDateComponents型はDate型よりも直感的で、使いやすいものになっています。
DateComponent型の使い方を学び、Date型に苦しめられるのとはおさらばしましょう。

採択 他イベントOK 2021/09/18 14:50〜 Track D レギュラートーク(40分)

Swift 5.5 async/await を支えるモナド、継続、コルーチン

inamiy 稲見 泰宏 inamiy

従来の iOS アプリ開発では、主に Grand Central Dispatch を用いた非同期計算(イベントループ、マルチスレッド、マルチコア)と、
それらの処理をパイプライン合成可能な単位にラップしたリアクティブプログラミングが主流でしたが、
Swift 5.5 の登場により、いよいよ言語仕様としての async/await と Structured Concurrency が導入されます。

普段、私たちが Swift プログラミングで書く同期的なコードが、 async/await キーワードを付けるだけで、いとも簡単に非同期のコードに変換できてしまう。
さらに、協調的マルチタスクによって、スレッドを大量消費したりブロッキングすることなく、実行途中の関数を一時停止したり再開できる。
まるで魔法のようにも見えるこれらの仕組みですが、その裏側は一体どのように動き、解釈できるのでしょうか?

理論的背景からコンパイラ・ランタイムの実装に至るまで、テーマが非常に多岐に渡るとても奥深い領域ですが、
今回の発表では主に前者について、関数型プログラミングの観点から解説を試みようと思います。

重要なキーワードは、ずばり「モナド」「継続(コールバック)」「コルーチン」。

関数型プログラミング界の三銃士を連れながら、皆様の心の中の継続を呼び起して協調的な発表になるよう目指します。

他イベントOK LT(5分)

Swift Package Managerに移行してみてわかったこと

n3k0w3n nekowen n3k0w3n

Swift Package ManagerはAppleが公式に提供するパッケージ管理ツールです。
Xcode 11から統合されたことによって、Xcode単体でライブラリの管理ができるようになりました。

当初はリソースやバイナリパッケージの対応、Xcode起動時に長いFetchが走ってしまいスムーズな開発が行えないなど様々な課題がありまだ移行は難しいという判断でしたが、アップデートでこれらが解決されより実用的になりました。

このトークでは、実際に既存のプロダクトで使っているライブラリ管理を移行してみて得られた知見や、遭遇した問題と対応方法についてざっと紹介します。

5