Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
振り返りながら学ぶPackage Manager
Search
jollyjoester
September 17, 2021
Programming
2
1.9k
振り返りながら学ぶPackage Manager
iOSDC2021にて
https://fortee.jp/iosdc-japan-2021/proposal/1d9f4c94-21c2-4e38-a440-fcd01b3a5826
jollyjoester
September 17, 2021
Tweet
Share
More Decks by jollyjoester
See All by jollyjoester
AIコードアシスタントとiOS開発
jollyjoester
1
330
市民のためのセキュリティ講座
jollyjoester
0
55
コミュニティMTG in WWDC24
jollyjoester
0
310
BengaluruでLTしてきた
jollyjoester
0
360
try! Swift Tokyo 2024
jollyjoester
0
350
エンジニアが直接会う場の価値について
jollyjoester
8
4.5k
来年Proposalを出すつもりで参加するときっともっと楽しい!
jollyjoester
0
380
My favorite sessions in WWDC 23
jollyjoester
0
690
みんなでAIと戯れよう
jollyjoester
0
160
Other Decks in Programming
See All in Programming
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
350
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
190
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.2k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
140
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
140
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.5k
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
0
280
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
430
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
520
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
It's Worth the Effort
3n
187
29k
Practical Orchestrator
shlominoach
190
11k
How to train your dragon (web standard)
notwaldorf
97
6.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Automating Front-end Workflow
addyosmani
1371
200k
Faster Mobile Websites
deanohume
310
31k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Transcript
振り返りながら学ぶPackage Manager 2021/09/17 iOSDC2021 jollyjoester
自己紹介 jollyjoesterです。 iPhoneに魅せられてiOSエンジニアに。 Swift愛好会やってます🍻 4年ぶり2回目のiOSDC発表で嬉しい🙌
このセッションではPackage Managerまだ詳しくない勢の方が 基本的な概念や仕組みといった知識を得て より適切にPackage Managerとお付き合いできるようになること を目標としています。 「なんかCarthageでエラーが出てるけどわからん→爆死」 「Swift PMが流行ってる!よくわからないけど早く移行しなきゃ→爆死」 みたい悲劇に適切に立ち向かえるようにしていきましょう💪
このセッションについて
• Package Managerとは? • iOSにおけるPackage Manager • 各Package Managerの仕組み •
周辺技術の歴史と進化 • まとめ アジェンダ
Package Managerとは
Package Manager > 各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を 管理するシステムである。by パッケージ管理システム:wikipedia いろいろな範囲を対象としたPackage Managerがある • Linux
: APT • Ruby : RubyGems • iOS: ◦ CocoaPods ◦ Carthage ◦ Swift Package Manager
Package Managerの機能 おおよそのPackage Managerが持っている機能 • どんなパッケージがあるのかを探す • 必要なパッケージのインストール・削除 • 依存関係の解決
• 設定管理
iOSにおけるPackage Manager
代表的なものは下記の3つ • CocoaPods • Carthage • Swift Package Manager iOSにおけるPackage
Manager
CocoaPodsの概要 登場 : 2011年 Platform : iOS, macOS, watchOS, tvOS
開発 : オープンソース、Ruby製 基本的な特徴 : • ソースベースの利用 ◦ アプリのビルド時にライブラリのビルドも行う • Xcode projectとの自動統合 • Centralized
Carthage 登場 : 2014年 Platform : iOS, macOS, watchOS, tvOS
開発 : オープンソース、Swift製 基本的な特徴 : • バイナリベースの利用 ◦ 事前にビルドしてライブラリを使う • Xcode projectは基本触らないよ • シンプル(依存解決とビルドのみ) • Decentralized
Swift Package Manager(Swift PM or SPM) 登場 : 2017年 •
Xcode11からiOSでも使いやすく Platform : iOS, macOS, watchOS, tvOS, Linux 開発 : オープンソース、Swift製、Apple製 基本的な特徴 : • 動きはCarthageに近い印象を受けるがManual運用は不要 • 標準!SwiftのビルドシステムやXcodeに組み込まれている • Cocoaアプリを超えてSwift言語のためのあらゆる環境で使える
各Package Managerの仕組み
③ライブラリのメタ データ(podspec) Specsに格納 CocoaPodsの使い方 ~ 提供者側 ~ GitHub等 Specs ①開発
②リポジトリに ソース等を格納 CocaPods/Specs c.f. Using Pod Lib Create
CocoaPodsの仕組み ~ 使用者側 ~ $ pod init $ pod install
①Podfile作る ②Podfile書く ③インストールする App.xcworkspace Podfile ④xcworkspace開く ⑤実行 ビルド▶
CocoaPodsの仕組み ~ 使用者側 ~ $ pod init $ pod install
①Podfile作る ②Podfile書く ③インストールする App.xcworkspace Specs GitHub Pods Podfile Spec見る ソース ダウンロード xcworkspace作る App.xcodeproj Pods.xcodeproj 統合 Podfile.lock ④xcworkspace開く 作成 ⑤実行 ビルド▶
Carthageの使い方 ~ 提供者側 ~ GitHub ①開発 ②リポジトリに ソース等を格納
Carthageの使い方 ~ 使用者側 ~ Cartfile ②インストールする $ carthage update --platform
iOS --use-xcframeworks ①Cartfile書く ③Xcodeprojに 紐付ける ④実行 ビルド▶ xcframework Manual
Carthageの仕組み ~ 使用者側 ~ Cartfile ②インストールする $ carthage update --platform
iOS --use-xcframeworks ①Cartfile書く ③Xcodeprojに 紐付ける Carthage GitHub Build checkouts ダウンロード ビルド▶ ④実行 ビルド▶ Manual xcframework Cartfile.resolved
Swift Package Managerの使い方 ~ 提供者 ~ GitHub ②開発 ③リポジトリに Package.swiftと
ソース等を格納 Package.swift ①Package.swift書く
Swift Package Managerの使い方 ~ 使用者側 ~ ①Xcodeで追加する Xcodeproj ②実行 ビルド▶
Swift Package Managerの仕組み ~ 使用者側 ~ ①Xcodeで追加する Xcodeproj ②実行 ビルド▶
DerivedData GitHub Build SourcePackage ダウンロード ビルド リンク
基本的な共通の仕組み ライブラリ提供者側 • ソースをGitHubに置く ◦ メタデータ的なものも置く場合も ライブラリ使用者側 • 何かしらの設定ファイルにライブラリの場所&バージョンを指定して •
ダウンロードしてきて(ソース?バイナリ?) • ビルドして(事前?アプリビルド時?) • プロジェクトにリンクして(自動?手動?) • 使う
周辺技術の歴史と進化
10 0.0.1 iOSアプリ開発におけるPackage Managerの歴史 2007 2008 2009 2010 2011 2012
2013 2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 0.38.0
10 0.0.1 Before CocoaPods 2007 2008 2009 2010 2011 2012
2013 2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 0.38.0 ◯Before CocoaPodsの時代 .aファイルとかを手動で入れてたりした記 憶がある 1.5.0 1.9.0
10 0.0.1 CocoaPods浸透 2007 2008 2009 2010 2011 2012 2013
2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 0.38.0 1.5.0 1.9.0 ◯CocoaPods浸透の時代 Package ManagerというものがiOS界隈 にも浸透 多くのライブラリがCocoaPodsに対応 このときはまだstatic libraryが主
10 0.0.1 Swiftの登場 2007 2008 2009 2010 2011 2012 2013
2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 ◯Swiftの登場 Swift登場! iOS dynamic frameworkサポート CocoaPods use_framework!サポート (dynamic framework) Carthage登場! 0.38.0 1.5.0 1.9.0
10 0.0.1 Swiftの浸透 2007 2008 2009 2010 2011 2012 2013
2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 ◯Swiftの浸透 Swift 多くのアプリで使われるように 課題: • アプリ肥大化 ◦ ビルド遅い • frameworkの多用 ◦ アプリの起動速度遅い • CI普及 Swift Package Manager 登場! 0.38.0 1.5.0 1.9.0
10 0.0.1 Swift周辺のビルド環境の進化 2007 2008 2009 2010 2011 2012 2013
2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 ◯Swift周辺の進化 Swift5.1 モジュールの安定化 Xcode10 SwiftのモジュールをStatic frameworkとしてビルドできる ように Xcode12 xcframeworkサポート Xcode11 XcodeからSwift Package Managerを使えるように 0.38.0 1.5.0 1.9.0
10 0.0.1 そして現在へ 2007 2008 2009 2010 2011 2012 2013
2014 2015 2016 2017 2018 2019 2020 2021 iOS Xcode CocoaPods Carthage SwiftPM Swift iPhone OS 1.0 iOS 4.0 iOS 8.0 iOS15 Swift 5.1 11 Swift 1.0 0.1 6 0.1 0.6.0 12 Swift 3.0 0.36.0 1.11.0 0.38.0 1.5.0 1.9.0 ◯成熟してきた? Swift Package Manager • リソースを含められるように CocoaPods, Carthage, Swift PM • xcframework対応 様々な課題が解決しつつある・・・
今後のPackage Managerについての私見 CocoaPods, Carthageも現役で使えることを確認しつつ、特に実用的になってきたSwift Package Managerに期待が高まった。 特にSwiftやXcodeと深く統合されていることを活かしてこれまでのPackage Manager が超えられなかった変化を期待したい。 e.g.
• xcodeprojという古い仕組みからの脱却 • CI利用を前提とした機能 各Package Managerは併用できるのでSwift Package Managerの検証を始めるちょう ど良いタイミングではないか。
まとめ
このセッションでは • Package Managerとは何かをおさらいしました。 • iOSにおける代表的なPackage Managerの仕組みをおさらいしました。 • Package Managerの周辺技術の発展の歴史をおさらいしました。
Package Managerとより良くお付き合いするヒントになれば幸いです。 変化していくiOS界隈を一緒に楽しんでいきましょう〜🍻 まとめ
メモ
おまけ:私見 • CocoaPods, Carthage, Swift Package Managerはそれぞれ進化していて 有用になった • Swift
Package Managerは急激に進化していて実用レベルに • そろそろ標準のSwift Package Managerだけサポートしたいというライブラリ 提供者が出てくるだろう • 各Package Managerは併用できるのでSwift Package Managerを試しはじ めておくと良いだろう • たぶん1, 2年単位で変化が来ると予想。 • あせらず自身のProjectとの状況を踏まえあせらず準備していこう。 🤔