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://t.co/mof246BqdQ

サンプルコード
https://github.com/fromkk/TextEditorSample

内容メモ

  • noteアプリで新しいテキストエディタを実装した際に考えを解説
  • 入力した後にスクロール追従
  • Drop & Drag
  • iPadのデザインをreadableContentGuideで良い感じに
  • 画像の埋め込み
  • ツールバーはUIToolbarではなく、UIViewで作成。UIScrollViewを入れたかったため
  • URLのパーサー

感想

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
  • Navigationの問題
    • 複数のNavigationを管理しだすと無駄な状態が増える
      • 3つのオプショナルプロパティを保持すると8パターンをハンドリング必要
  • 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
  • Hash Functions
    • パスワードを平文で送らないでハッシュにして送る
  • Symmetric Key
    • 同じキーで暗号化と復号化する
    • そのキーを共有したいと復号化できない
  • Cipher Types
    • AES-GCM
    • ChaChaPoly(モバイル端末だとおすすめ、早いそう)
  • SymmetricKeyを生成
    • キーチェーンに保存
  • ChaChaPoly.SealedBox
    • データを封印
    • 復号化には封印したデータとkeyを指定

感想

CryptoKit使いやすそうな設計でした。
暗号化が必要な実装のときにまた触れたいと思いました。