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

CocoaPods/Carthage/SwiftPM

 CocoaPods/Carthage/SwiftPM

28f57a43ae8eba102877b7a3d64f688a?s=128

Kohei Tabata

July 31, 2016
Tweet

Transcript

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

  2. 自己紹介 ・Kohei Tabata(@nerd0geek1) ・Saib Studio LLC ・iOS/Mac/tvOS Developer from 2011(MRCの時代から…)

    ・Fastlane大好き ・最近はBLEと仲良し。 Saib Studio LLC Kohei Tabata
  3. http://next.saib-stud.io

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

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

  6. ライブラリ管理の変遷

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

  8. In 2011…

  9. CocoaPods Initial Release!!

  10. None
  11. CocoaPodsの独壇場に

  12. At the end of 2014…

  13. Carthage Initial Release!!

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

  15. None
  16. 夏頃には実戦投入するところも。

  17. Swift Package Manager Coming soon…

  18. submodule/CocoaPods/Carthage/Swift PM

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

  20. submodule git submodule add git@github.com:nerd0geek1/PausableTimer.git git submodule add git@github.com:nerd0geek1/Logger.git .gitmodule

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

  22. CocoaPods pod init Podfile pod install(or update)

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

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

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

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

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

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

  29. CocoaPods メリット ・パッケージマネージャーの中で最もサポート範囲が広い (CocoaPods: iOS4( or iOS8)〜、Carthage:iOS8〜、SwiftPM:iOS10〜) ・ObjC、Swiftのライブラリで利用可能 ・パッケージマネージャーの中で最も情報が豊富 ・Podfileへの記述のみでライブラリのimportが完了するため、楽。

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

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

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

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

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

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

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

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

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

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