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
CocoaPods/Carthage/SwiftPM
Search
Kohei Tabata
July 31, 2016
Programming
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CocoaPods/Carthage/SwiftPM
Kohei Tabata
July 31, 2016
More Decks by Kohei Tabata
See All by Kohei Tabata
AIと協業する開発の進め方
nerd0geek1
0
180
営業活動なしで継続的に案件を受注する方法 / how to get a contract without sales as a freelance
nerd0geek1
2
1k
生体データを取り扱うアプリ開発の勘所
nerd0geek1
1
150
動線改善とステータス可視化で家庭内のストレスを軽減した話
nerd0geek1
3
4.6k
家庭をプロジェクトとして運営した話
nerd0geek1
2
4.4k
fastlaneの勉強会を主催して学んだこと、得たこと、悩んだこと
nerd0geek1
1
1.3k
みんなで育てるprecheck
nerd0geek1
1
860
matchとは?match導入のメリット
nerd0geek1
4
640
Improve your workflow with Sketch plugin
nerd0geek1
3
1.6k
Other Decks in Programming
See All in Programming
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
510
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
630
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
370
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
280
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
500
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
620
リアルな遅延を測る仕様
kota_yata
1
130
「人を評価する AI」の設計と実装
ryoyanara
0
240
AIの中の人になってみる
htkym
0
120
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
450
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
480
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
280
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
500
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
630
WCS-LA-2024
lcolladotor
0
810
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Believing is Seeing
oripsolob
1
200
Transcript
CocoaPods/Carthage/SwiftPM 2016/07/31 集まれSwift好き!Swift愛好会
自己紹介 ・Kohei Tabata(@nerd0geek1) ・Saib Studio LLC ・iOS/Mac/tvOS Developer from 2011(MRCの時代から…)
・Fastlane大好き ・最近はBLEと仲良し。 Saib Studio LLC Kohei Tabata
http://next.saib-stud.io
背景 ・関わってるプロジェクトが多い(4〜8) ・コード再利用したい & コピペしたくない ・ライブラリ化したい ・Swift3リリース前にいい感じの方法論考えてみたい。
目次 ・ライブラリ管理の変遷 ・submodule/CocoaPods/Carthage/Swift PM ・各管理手法のメリット・デメリット(利用側) ・各管理手法のメリット・デメリット(作成側)
ライブラリ管理の変遷
Before CocoaPods… ・ライブラリのソースコードをそのまま取り込む(svn時代) ・gitのsubmoduleを利用し、リポジトリに追加 ・そこからsubmoduleした中からファイルを選択して追加
In 2011…
CocoaPods Initial Release!!
None
CocoaPodsの独壇場に
At the end of 2014…
Carthage Initial Release!!
感度高い人達が試し始める
None
夏頃には実戦投入するところも。
Swift Package Manager Coming soon…
submodule/CocoaPods/Carthage/Swift PM
submodule ・gitの機能 ・言語的な制約なし ・OSバージョンによる制約なし ・ライブラリのソースコードを手動でプロジェクトに追加する
submodule git submodule add
[email protected]
:nerd0geek1/PausableTimer.git git submodule add
[email protected]
:nerd0geek1/Logger.git .gitmodule
git submodule update
CocoaPods ・rubyで書かれたパッケージマネージャー ・Objective-C/Swiftライブラリが対象 ・iOS4以上(Swift使う場合はiOS8以上)で利用可能 ・ワークスペースが作成され、アプリのプロジェクトビルド時に ライブラリもコンパイルされる(ObjCの場合)。
CocoaPods pod init Podfile pod install(or update)
Carthage ・Swiftで書かれたパッケージマネージャー ・Objective-C/Swiftライブラリが対象 (Objective-Cも使える、とご指摘くださった@ikesyoさん、ありがとうございます。) ・iOS8以上で利用可能 ・frameworkをビルドし、プロジェクトに取り込む
Carthage vi Cartfile Cartfile carthage update (--platform iOS)
Swift Package Manager ・Swiftで書かれたパッケージマネージャー ・Apple公式! ・Swiftライブラリのみが対象 ・Swift3(=Xcode8、iOS10)から利用可能 ・Swift Modulesで対応ライブラリを確認可能
Swift Package Manager vi Package.swift Package.swift swift build
各管理手法のメリット・デメリット (利用側)
submodule メリット ・4つの手法の中で、最も制約が少ない(言語、バージョン) デメリット ・ライブラリの導入、削除が煩雑 ・手動操作が多いため、最もミスが起きがち
CocoaPods メリット ・パッケージマネージャーの中で最もサポート範囲が広い (CocoaPods: iOS4( or iOS8)〜、Carthage:iOS8〜、SwiftPM:iOS10〜) ・ObjC、Swiftのライブラリで利用可能 ・パッケージマネージャーの中で最も情報が豊富 ・Podfileへの記述のみでライブラリのimportが完了するため、楽。
デメリット ・ObjCのライブラリについては、ビルド時に同時にコンパイルされるため、 ビルド時間は長くなる。
Carthage メリット ・ビルド時間が短縮される ・ObjC・Swiftのライブラリで利用可能 デメリット ・iOSの対象バージョンがやや狭い ・CocoaPodsより対応ライブラリが少ない ・初回ビルドがかなり長い。 ・情報がまだそれほど多くない ・オプションなしだとコケることがある(特にtvOSで。)
Swift Package Manager メリット ・対応プラットフォームが最も広い(iOS/MacOS/Linux) デメリット ・iOSの対象バージョンが最も狭い(iOS10〜) ・Swift3のライブラリでのみ利用可能。 ・対応ライブラリがメジャーなもののみ ・公式リリース前なので、情報が少ない
各管理手法のメリット・デメリット (作成側)
submodule メリット ・特別なことを何もしなくて良い ・仕様変更に伴い、ライブラリ側でアップデートを行う必要がない デメリット ・ライブラリ導入の手間が煩雑なため、あまり利用されない可能性あり
CocoaPods メリット ・現在、最も広く使われているので使われやすい。 ・公開のタイミングで、@CocoaPodsFeedがツイートしてくれる デメリット ・ライブラリ登録申請時までに用意するものが少し多い。 (.podspec, README.md、サンプルプロジェクト、Specsへの登録等々)
Carthage メリット ・Build SchemeをShared SchemeにするだけでCarthage対応となるので楽。 デメリット ・まだあまり導入しているところが多くないので、広まりにくい印象。
Swift Package Manager メリット ・複数Platformをカバーできる。 デメリット ・CocoaPods以上に面倒 ・プロジェクト構成などが他の手法と違うため、最初は戸惑いそう。
個人的所感 ・Objective-Cの資産については、CocoaPods/Carthageという形で残る。 ・Carthageは、ビルド時間の削減のために使われていきそう。 ・正直、現時点ではSwiftPMを使うメリットが見いだせない。。。 ・Perfectや、SwiftonのようなWeb frameworkが使われるようになれば、 クライアント・サーバのため、というところで使われるようになる?
ご静聴ありがとうございました
参考 • iOS SDK開発でOSSライブラリを使う際の基礎知識 (1/2) (http://www.atmarkit.co.jp/ait/articles/1304/12/news032.html) • CocoaPods/CocoaPods (https://github.com/CocoaPods/CocoaPods) •
メッセージングアプリSync開発の舞台裏(iOS) (http://engineer.wantedly.com/2015/09/09/sync-messenger-ios-project.html) • Carthage/Carthage (https://github.com/Carthage/Carthage) • Swiftのオープンソース化、Swift 3.0のロードマップ (https://realm.io/jp/news/swift-opensource/) • Swift Modules (https://swiftmodules.com/) • Practical Cross-Platform Swift (https://speakerdeck.com/jpsim/practical-cross-platform-swift)