Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multi-Module 101

Jierong Li
December 17, 2021

Multi-Module 101

どういう形のターゲットでマルチモジュール化について。

Jierong Li

December 17, 2021
Tweet

More Decks by Jierong Li

Other Decks in Programming

Transcript

  1. マルチモジュール メリット ▸ アプリから独⽴できる ▸ ビルドが早い ▸ プレビューが早い ▸ テストが早い

    ▸ アプリ起動なしでテスト実⾏できる ▸ ある程度疎結合な設計が強いられる
  2. DYNAMIC OR STATIC STATIC LIBRARY ▸ .framework的なもの⾒当たらない ▸ Static Library

    Link前後の実⾏ファイル(MultiModul) のサイズ ▸ 前:95,664 bytes ▸ 後:95,920 bytes ▸ 実⾏ファイルとしてビルドされる ▸ 動的ロードする時間がかからない ▸ 複数な実⾏ファイルがある場合サイズが数倍になる
  3. DYNAMIC OR STATIC DYNAMIC LIBRARY AND STATIC FRAMEWORK? ▸ Dynamic

    Library ▸ 仕組み上可能だけど、Dynamic Frameworkと同じように動的ロードする時間が必要な ら、リソース持てるFrameworkの⽅を使うのが便利 ▸ Static Framework ▸ Frameworkをembedしないとリソースが持てない ▸ ソースコードがアプリ実⾏ファイルとしてビルドされる ▸ Bundle(for: SomeClass.self)のようにFrameworkのBundleをアクセスできなくなる
  4. どういう形のターゲットでマルチモジュール化 DYNAMIC FRAMEWORK OR STATIC LIBRARY ▸ OS X時期 ▸

    実⾏ファイルサイズ削減視点で、Dynamicが推奨されたけど ▸ WWDC 2016:Overview of Dynamic Libraries ▸ 実⾏効率視点で、Staticが推奨された ▸ 総合的に ▸ Staticが優先 ▸ 実⾏ファイルサイズを考慮するなど⽌むを得ない場合Dynamic
  5. 動的ロードする時間を省けたいけど、リソースも持たせたい 問題 ▸ ⼿間がかかる ▸ Tuistがやってくれる ▸ Static LibraryではXcode Previewsが使えない

    ▸ 別途Xcode Previews⽤に同じDynamic Framework作成 ▸ さらに⼿間がかかる ▸ XcodeGenとTuistのようなXcode Project⽣成するツールであれば割と簡単 ▸ はたして正規⼿段か?
  6. SWIFT PACKAGE DYNAMIC OR STATIC ▸ library(name:type:targets:)のtypeによって決められる ▸ nilの場合DynamicとStatic両⽅可能、Xcodeが決めてくれる ▸

    Xcodeの決め⽅ ▸ Static優先 ▸ duplicate symbols回避するためにDynamic ▸ 例:アプリとアプリにリンクされたDynamic Frameworkに使われた場合
  7. どういう形のターゲットでマルチモジュール化 まとめ ▸ Build Phasesなくても困らない ▸ Swift Package ▸ Build

    Phasesが必須 ▸ Static Library + Bundle + Dynamic Framework(Xcode Previews⽤) ▸ Tuist使えば簡単にできる