2022 iOSDC Day0感想
iOSDC Japan 2022
今年もやってきました。iOSDC Japan。
https://fortee.jp/iosdc-japan-2022
9/10の前夜祭と9/11のday2に現地で参加してきたので感想を残したいと思います。
ノートアプリのテキストエディタの解体新書
https://fortee.jp/iosdc-japan-2022/proposal/aad51596-674f-4b8a-a24b-868e84453e9a
資料
サンプルコード
https://github.com/fromkk/TextEditorSample
内容メモ
- noteアプリで新しいテキストエディタを実装した際に考えを解説
- 入力した後にスクロール追従
- Drop & Drag
- iPadのデザインをreadableContentGuideで良い感じに
- 画像の埋め込み
- ツールバーはUIToolbarではなく、UIViewで作成。UIScrollViewを入れたかったため
- URLのパーサー
- Appleのパーサーは>と半濁点(゜)を一つの文字として認識してしまう
- 参考:https://tama-san.com/old/document03.html
感想
UIViewを組み合わせてスクロール調整するデザインは自分が苦手としている実装の一つです。
めっちゃ参考になりました。
SwiftUI Navigation のすべて
https://fortee.jp/iosdc-japan-2022/proposal/0b6f453a-68f0-4300-9ab2-cb1e3457eb53
資料
https://github.com/pointfreeco/swiftui-navigation
内容
- SwiftUI Navigationの種類
- Tab
- Alert
- Sheet
- NavigationView * NavigationLink、非推奨
- OSによる変化が激しいNavigation
- NavigationView -> NavigationStack
- ActionSheet APIは非推奨に
- 今はConfirmation DialogをiOS 15から使う。ダイアログっていう名前だけどアクションシートを表示できる
- Alert APIもいくつか非推奨のAPIができた
- iOS 16 NavigationStack * NavigationLink
- NavigationStackにわたす引数のvalue引数に応じてNavigationLinkが反応する
- 渡したデータの型ごとに遷移ができる
- swiftui-navigation
- https://github.com/pointfreeco/swiftui-navigation
- Fire and Forget APIとState driven API
- Navigationの問題
- 複数のNavigationを管理しだすと無駄な状態が増える
- 3つのオプショナルプロパティを保持すると8パターンをハンドリング必要
- 複数のNavigationを管理しだすと無駄な状態が増える
- Navigation APIの課題に立ち向かう
Binding<Value?>
をBinding<Value>
に変換- Value?をValueに変換するイニシャライザーはBindingにもあるがバグがあるそうで独自実装したそう
- Optional itemのみを要求するAPIを考える
- 3つのプロパティをenumで状態管理する
感想
NavigationStack便利そうだなって思った。
管理する状態を減らすテクニック参考になりました。
swiftui-navigation、状態管理うまくやっていそうでいいライブラリーですね。
SwiftPMのプラグイン機能をiOSアプリ開発に活用する
https://fortee.jp/iosdc-japan-2022/proposal/4f56de04-0d5c-49ba-b2f8-12b25e36ad32
資料
サンプルコード
https://github.com/usami-k/XcodeSwiftPMSample
内容
- SwiftPMのおさらい
- Swift Playgrounds AppはXcodeとプロジェクト形式が異なる
- XcodeプロジェクトとSwiftPM
- Xcodeから配布パッケージを利用
- アプリのコードをパッケージ化する
- ローカルのSwiftパッケージをアプリでインポートする
- ほとんどパッケージにできる
- App.swiftだけをアプリプロジェクトのファイルとして他をAppFeatureパッケージにしてしまう
- メリット:
- Xcodeプロジェクトのソースコード管理が減る
- アプリ内のモジュール分割が容易になる
- プラグイン機能の活用方法
- 配布されているプラグインを利用
- プラグインを自分で実装
- ブルドツールプラグイン
plugin
を指定する- ビルド前、ビルド中で処理できる
- 外部ツールも使える
- Mac内のコマンドも実行できる
- 公開されているコマンドラインツールも利用できる
- XcodeとSwiftPMプラグイン
- Xcode 13.3以降で動作する
- Xcode 14でSwiftPM対応が改善されている
- 一部動作に問題あり
- Xcodeで外部プラグイン利用するとCPU使用率100%になる
- 動きがもたつく
- 外部プラグインの中でartifact bundleを使っていると発生する
- ローカルプラグインの中でartifact bundle使うと大丈夫
感想
プラグインとは、ビルド中に処理を挟める機能。
今まで、XcodegenやCocoapodsはできたけどSwiftPMではできなかったのがSwift 5.6でできるようになったそう。
アプリ開発、SwiftPMでモジュール分割できるようになった。
やり方頭に入れたい
関連記事
https://qiita.com/usamik26/items/1c2cec0903fea2e03344
ChaChaPoly and You, CryptoKit Explained
資料
https://fortee.jp/iosdc-japan-2022/proposal/c39553cc-c340-455e-b2f1-bcc07113ef42
サンプルコード
https://github.com/monolithic-adam/CryptoKitExample2022
内容
- CryptoKit
- WWDC 2019で登場
- Hash Functions
- パスワードを平文で送らないでハッシュにして送る
- Symmetric Key
- 同じキーで暗号化と復号化する
- そのキーを共有したいと復号化できない
- Cipher Types
- AES-GCM
- ChaChaPoly(モバイル端末だとおすすめ、早いそう)
- SymmetricKeyを生成
- キーチェーンに保存
- ChaChaPoly.SealedBox
- データを封印
- 復号化には封印したデータとkeyを指定
感想
CryptoKit使いやすそうな設計でした。
暗号化が必要な実装のときにまた触れたいと思いました。