Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GANMA!にSwift PMを 導入した話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
masayuki sano
May 19, 2022
Programming
0
500
GANMA!にSwift PMを 導入した話
iOS Snack bar #1 2022/05/13
masayuki sano
May 19, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
SourceGeneratorのススメ
htkym
0
200
AI & Enginnering
codelynx
0
120
Grafana:建立系統全知視角的捷徑
blueswen
0
330
AI巻き込み型コードレビューのススメ
nealle
2
970
dchart: charts from deck markup
ajstarks
3
1k
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.6k
CSC307 Lecture 04
javiergs
PRO
0
660
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
750
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
Google's AI Overviews - The New Search
badams
0
910
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
54
Building Flexible Design Systems
yeseniaperezcruz
330
40k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
120
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
The Language of Interfaces
destraynor
162
26k
Transcript
GANMA!にSwift PMを 導入した話 FLINTERS 佐野真之 iOS Snack bar #1 2022/5/13
自己紹介 FLINTERS / GANMA! iOSエンジニア 1600万ダウンロード突破! プレミアム会員(サブスク)、広告、GANMA!コイン、グッズ、書籍など
アジェンダ • GANMA!へのSwift Package Managerの段階的導入 ◦ ライブラリ管理 ◦ Embedded Framework
→ Swift Package ◦ Viewなどの移行 • その後の効果
Swift PM導入の背景 • xcodeprojファイルのコンフリクト • Embedded frameworkを気軽に作成しづらい • Swift PMでライブラリ管理
• Embedded frameworkをSwift Packageへ • マルチモジュール化 SwiftPMに対応したライブラリも増えてきたこともあり段階的に導入していく 課題感
Swift PM導入 app.xcworkspace/contents.xcworkspacedata Package.swift プロジェクトナビゲーター ワークスペースの編集、Package.swiftを追加 既存コードをAppに移動
<1st step> Cocoa Pods x Swift PMへ SwiftPMに対応 → Swift
PM バイナリ形式のxcframework → Swift PM それ以外の広告SDKなど → CocoaPods Carthage → 削除 モジュールへ依存追加 Package.resolved
Swift PMと CocoaPodsでのコンフリクト Swift PMでFirebase、CocoaPodsでAdMobをインストールした場合 GoogleAppMeasurementがどちらからもインストールされてしまう Podfile MyAdMob.podspec.json コンフリクトする依存を削除
Appでのライブラリ使用 App側でSwiftPMでインストールしたライブラリを使用したい場合は 必要なライブラリをModuleに含めてFrameworkをプロジェクトに依存を追加
<2nd step> Embedded Frameworkの移行 まずはEmbedded frameworkをSwift Packageに移行 そのあと第3ステップでViewやPresentationも移行 App ∟View
∟ ViewModel, Presenter ∟ Resources Embedded framework ∟DataLayer ∟ ModelLayer ∟ DomainLayer ∟ ApplicationLayer 以前のGANMA!のプロジェクト構成
Module、Frameworkの作成 Sources以下のディレクトリを .targetでModuleとして作成 .libraryで複数ModuleからFrameworkを作成 xcodeprojのようにコンフリクトしない!
Appへの取り込み FrameworkをAppのプロジェクトに追加していけばOK あとはモジュール単位でimport していくだけ App/File.swift imoprt ModelLayer ModelLayer.Model() ModelLayer =
Framework ModelLayer = Module
<3rd step> マルチモジュール化 xib, storyboardを使用する場合 App ∟View ∟ ViewModel, Presenter
∟ Resources 表示確認をしながら少しずつViewLayerに分離中 ViewのSwift Packageへの移動 コードからxibを使用する場合 Appに残っているコードをSwift Packageに移し モジュールを作成しやすいようにしていく
Assetモジュール作成 Appの画像や色のアセットを ViewLayerでも使用したい SwiftGenの自動生成コードを Assetモジュールとして分離 SwiftGenでの自動生成コード
@_exported import @_exported importにより同一モジュールでのimport Assetsを 書かなくても使用可能 @_exported import Assets //
import Assets がいらない File1.swit File2.swit Module A import ModuleA // Assets使用可能 File1.swit Module B
導入の効果 • マルチモジュール化しやすくなった。ミニアプリつくりやすい • アプリサイズが減った ◦ 23.5MB -> 20.6MB •
ライブラリバージョン変わってもコマンド叩かなくていい • ビルド時間短縮
まとめ Swift Package Managerでライブラリ管理、モジュール分割を段階的に行った。 今後はさらにマルチモジュール化を進めていく予定。