Open64

iOSDC day1

ykwsykws

TextKit 1 ではレンダリングできない言語があった

ykwsykws

TextKit 2 では、抽象化されているので、細かい調整を直接的には API から操作不能に

ykwsykws

typographicBounds iOS16 でバグがあったが iOS17 で解消されている
workaround が必要

ykwsykws

挟み込んだ動画が文字列に retain されるのでメモリリーク・循環参照に注意が必要

ykwsykws

自動フォールバックで TextKit 1 の API に触れてしまうと TextKit 2 の機能が使えなくなるので注意が必要

ykwsykws

TextKit 1 だけなら初期化時に指定する
TextKit 2 を使うなら、 fatalError など利用してデバッグで潰す必要がある

ykwsykws

SwiftUI から TextKit を使うのは難しい

選択肢としては、下記のケースがあり、アプリの要件に応じて選択する

  • TextKit 1
  • TextKit 2
  • SwiftUI
ykwsykws

ラクマ
マルチモジュールアーキテクチャへの移行

Swift への移行とリアーキが完了
SwiftUI の拡大と InterfaceBuilder の削除

Swift UI を避ける判断基準

  • TextField 系
  • Pull to refresh
  • スクロールによる追加読み込み(ページングがある検索結果画面など)

interface Builder の削除状況など
統計をとって年間でグラフ化するの良い
こういうのをファイル数ベースでも良いので GitHub の履歴からグラフ化できると面白いかも

ykwsykws

マルチモジュールの目的

  • 責務の分離
  • ローカルテストの高速化

段階的にモジュール分割

  1. CoreModules
  2. Repositories
  3. API Clients
  4. DataStores

同時並行で柔軟に進めている

効果

  • テストカバレッジ向上
ykwsykws

Git branch 戦略とリリースプロセスの自動化

  • develop/release 運用は並行リリースがつらい

  • main branch は tag と冗長
  • develop branch 廃止
  • pull requests 一覧の取得が困難
  • Bitrise でリリースプロセスの自動化で、 GitHub にリリースページを作成する
  • Pull Request の作成を GitHub Actions で自動化 <- 真似したい <- セルフ Approve ができる
ykwsykws

Documentation

  • 仕様の把握漏れ
  • 影響範囲が曖昧
  • QAが時間かかる
  • リリースに時間がかかる
  • GitHub Milestone わかりづらい
  • iOS, Android の共通の修正がわかりづらい

--

変更の種別で分類

  • 新機能
  • 不具合
  • リファクタリング

今後のリリース作業で PM との認識合わせにも有効そう

Impact Level
影響範囲を明示的にする

ykwsykws

Swift Syntax からソースコードを生成する利点

  • コメントを回避できる trivia
  • 構造的にマッチングする
  • 部分的な書き換えができる
ykwsykws

構文解析できないものは、 SwiftSyntax でも解析できない
コンパイラによって決まるものは判別できない

ykwsykws

SwiftSyntax 文字数は UTF8 のバイトサイズなので注意する

ykwsykws

Actor にすれば解決、するわけではない
Actor はスレッド同一性を保証しない
Managed Object が生成スレッド以外に持ち出される

ykwsykws
  • Sendable
  • Managed Object は発行元の MOC と同一スレッド
ykwsykws

Actor はデータ競合が発生しないことを保証し、実行単位の Job がどのスレッドで動くかに関与しない
Executor で Job 実行をカスタマイズできる

ykwsykws

座談会

  • パートナーと交代で時間を作る
  • キッズスペース
  • リサイクルボックス
  • 子どものライフサイクルに合わせて仕事の時間を調整

最近思うのは、
リモートワークで仕事部屋に子どもが入ってくるのではなく、
家族の空間に仕事をしている人がいる
と自覚するのが大事だと思い始めた

ykwsykws

Dolby Atmos
xR と相性が良さそう

オーディオの基礎知識が必要

ykwsykws
  • モノラル
  • ステレオ
    • Equal Power Panning
    • 仮想的な音の位置を変化させることができる
  • マルチチャンネル
    • 4 ch 映画
    • 5 ch サラウンド分離
    • 5.1 ch 低音成分の分離
      • 低音は人は聞きにくい
      • 音割れしやすい
      • 指向性がない
    • 6.1 ch バックが増える
    • 7.1 ch さらに増える

スピーカーの設置は大変

オブジェクトベースオーディオ

  • 音の位置をリアルタイムに計算
  • スピーカー向けレンダリング
  • ヘッドフォン向けレンダリング
    • 耳の入り口をシミュレートできれば再現できるという考え

オーディオ形式

  • Dolby Atmos
  • DTS:X - Blu-ray
  • 260 Reality Audio - Sony - 足元を含む全方位からの音に対応

オーディオは下位互換を大事にしている

ykwsykws

動的にレンダリングするので音量を揃えておく必要がある

ykwsykws

completion handler が使えないが Wrapper を作って解消する

ykwsykws

非同期処理データの状態管理

  • ロード中
  • 成功
  • 失敗

これらの組み合わせがありえる

ykwsykws
  • enum
  • Component

enum 導入前は、状態管理の変数とその管理が煩雑になる
組み合わせ爆発が起こりやすい

ykwsykws

成功、エラーとロード中の状態の組み合わせを表現する

.reLoading(V), .retryLoading(E) を用意する

enum の合成みたいなのができると良さそうだけど

ykwsykws

loading がどこからの遷移からで詳細に定義し直す

StateMachine でやることの簡略化とも言えそう

ykwsykws

enum を引数にとるコンポーネント

アプリの要件に合わせて責務の境界をコントロールできる

こういう設計をチームの状態に合わせてコントロールできると良さそう

ykwsykws

enum だけだとボイラープレートが増える
コンポーネントを利用してボイラープレートを削除する