Slide 1

Slide 1 text

CocoaPods/Carthage/SwiftPM 2016/07/31 集まれSwift好き!Swift愛好会

Slide 2

Slide 2 text

自己紹介 ・Kohei Tabata(@nerd0geek1) ・Saib Studio LLC ・iOS/Mac/tvOS Developer from 2011(MRCの時代から…) ・Fastlane大好き ・最近はBLEと仲良し。 Saib Studio LLC Kohei Tabata

Slide 3

Slide 3 text

http://next.saib-stud.io

Slide 4

Slide 4 text

背景 ・関わってるプロジェクトが多い(4〜8) ・コード再利用したい & コピペしたくない ・ライブラリ化したい ・Swift3リリース前にいい感じの方法論考えてみたい。

Slide 5

Slide 5 text

目次 ・ライブラリ管理の変遷 ・submodule/CocoaPods/Carthage/Swift PM ・各管理手法のメリット・デメリット(利用側) ・各管理手法のメリット・デメリット(作成側)

Slide 6

Slide 6 text

ライブラリ管理の変遷

Slide 7

Slide 7 text

Before CocoaPods… ・ライブラリのソースコードをそのまま取り込む(svn時代) ・gitのsubmoduleを利用し、リポジトリに追加 ・そこからsubmoduleした中からファイルを選択して追加

Slide 8

Slide 8 text

In 2011…

Slide 9

Slide 9 text

CocoaPods Initial Release!!

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

CocoaPodsの独壇場に

Slide 12

Slide 12 text

At the end of 2014…

Slide 13

Slide 13 text

Carthage Initial Release!!

Slide 14

Slide 14 text

感度高い人達が試し始める

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

夏頃には実戦投入するところも。

Slide 17

Slide 17 text

Swift Package Manager Coming soon…

Slide 18

Slide 18 text

submodule/CocoaPods/Carthage/Swift PM

Slide 19

Slide 19 text

submodule ・gitの機能 ・言語的な制約なし ・OSバージョンによる制約なし ・ライブラリのソースコードを手動でプロジェクトに追加する

Slide 20

Slide 20 text

submodule git submodule add [email protected]:nerd0geek1/PausableTimer.git git submodule add [email protected]:nerd0geek1/Logger.git .gitmodule git submodule update

Slide 21

Slide 21 text

CocoaPods ・rubyで書かれたパッケージマネージャー ・Objective-C/Swiftライブラリが対象 ・iOS4以上(Swift使う場合はiOS8以上)で利用可能 ・ワークスペースが作成され、アプリのプロジェクトビルド時に ライブラリもコンパイルされる(ObjCの場合)。

Slide 22

Slide 22 text

CocoaPods pod init Podfile pod install(or update)

Slide 23

Slide 23 text

Carthage ・Swiftで書かれたパッケージマネージャー ・Objective-C/Swiftライブラリが対象 (Objective-Cも使える、とご指摘くださった@ikesyoさん、ありがとうございます。) ・iOS8以上で利用可能 ・frameworkをビルドし、プロジェクトに取り込む

Slide 24

Slide 24 text

Carthage vi Cartfile Cartfile carthage update (--platform iOS)

Slide 25

Slide 25 text

Swift Package Manager ・Swiftで書かれたパッケージマネージャー ・Apple公式! ・Swiftライブラリのみが対象 ・Swift3(=Xcode8、iOS10)から利用可能 ・Swift Modulesで対応ライブラリを確認可能

Slide 26

Slide 26 text

Swift Package Manager vi Package.swift Package.swift swift build

Slide 27

Slide 27 text

各管理手法のメリット・デメリット (利用側)

Slide 28

Slide 28 text

submodule メリット ・4つの手法の中で、最も制約が少ない(言語、バージョン) デメリット ・ライブラリの導入、削除が煩雑 ・手動操作が多いため、最もミスが起きがち

Slide 29

Slide 29 text

CocoaPods メリット ・パッケージマネージャーの中で最もサポート範囲が広い (CocoaPods: iOS4( or iOS8)〜、Carthage:iOS8〜、SwiftPM:iOS10〜) ・ObjC、Swiftのライブラリで利用可能 ・パッケージマネージャーの中で最も情報が豊富 ・Podfileへの記述のみでライブラリのimportが完了するため、楽。 デメリット ・ObjCのライブラリについては、ビルド時に同時にコンパイルされるため、 ビルド時間は長くなる。

Slide 30

Slide 30 text

Carthage メリット ・ビルド時間が短縮される ・ObjC・Swiftのライブラリで利用可能 デメリット ・iOSの対象バージョンがやや狭い ・CocoaPodsより対応ライブラリが少ない ・初回ビルドがかなり長い。 ・情報がまだそれほど多くない ・オプションなしだとコケることがある(特にtvOSで。)

Slide 31

Slide 31 text

Swift Package Manager メリット ・対応プラットフォームが最も広い(iOS/MacOS/Linux) デメリット ・iOSの対象バージョンが最も狭い(iOS10〜) ・Swift3のライブラリでのみ利用可能。 ・対応ライブラリがメジャーなもののみ ・公式リリース前なので、情報が少ない

Slide 32

Slide 32 text

各管理手法のメリット・デメリット (作成側)

Slide 33

Slide 33 text

submodule メリット ・特別なことを何もしなくて良い ・仕様変更に伴い、ライブラリ側でアップデートを行う必要がない デメリット ・ライブラリ導入の手間が煩雑なため、あまり利用されない可能性あり

Slide 34

Slide 34 text

CocoaPods メリット ・現在、最も広く使われているので使われやすい。 ・公開のタイミングで、@CocoaPodsFeedがツイートしてくれる デメリット ・ライブラリ登録申請時までに用意するものが少し多い。 (.podspec, README.md、サンプルプロジェクト、Specsへの登録等々)

Slide 35

Slide 35 text

Carthage メリット ・Build SchemeをShared SchemeにするだけでCarthage対応となるので楽。 デメリット ・まだあまり導入しているところが多くないので、広まりにくい印象。

Slide 36

Slide 36 text

Swift Package Manager メリット ・複数Platformをカバーできる。 デメリット ・CocoaPods以上に面倒 ・プロジェクト構成などが他の手法と違うため、最初は戸惑いそう。

Slide 37

Slide 37 text

個人的所感 ・Objective-Cの資産については、CocoaPods/Carthageという形で残る。 ・Carthageは、ビルド時間の削減のために使われていきそう。 ・正直、現時点ではSwiftPMを使うメリットが見いだせない。。。 ・Perfectや、SwiftonのようなWeb frameworkが使われるようになれば、 クライアント・サーバのため、というところで使われるようになる?

Slide 38

Slide 38 text

ご静聴ありがとうございました

Slide 39

Slide 39 text

参考 • 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)