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

振り返りながら学ぶPackage Manager

jollyjoester
September 17, 2021

振り返りながら学ぶPackage Manager

jollyjoester

September 17, 2021
Tweet

More Decks by jollyjoester

Other Decks in Programming

Transcript

  1. CocoaPodsの概要 登場 : 2011年 Platform : iOS, macOS, watchOS, tvOS

    開発 : オープンソース、Ruby製 基本的な特徴 : • ソースベースの利用 ◦ アプリのビルド時にライブラリのビルドも行う • Xcode projectとの自動統合 • Centralized
  2. Carthage 登場 : 2014年 Platform : iOS, macOS, watchOS, tvOS

    開発 : オープンソース、Swift製 基本的な特徴 : • バイナリベースの利用 ◦ 事前にビルドしてライブラリを使う • Xcode projectは基本触らないよ • シンプル(依存解決とビルドのみ) • Decentralized
  3. Swift Package Manager(Swift PM or SPM) 登場 : 2017年 •

    Xcode11からiOSでも使いやすく Platform : iOS, macOS, watchOS, tvOS, Linux 開発 : オープンソース、Swift製、Apple製 基本的な特徴 : • 動きはCarthageに近い印象を受けるがManual運用は不要 • 標準!SwiftのビルドシステムやXcodeに組み込まれている • Cocoaアプリを超えてSwift言語のためのあらゆる環境で使える
  4. ③ライブラリのメタ データ(podspec) Specsに格納 CocoaPodsの使い方 ~ 提供者側 ~ GitHub等 Specs ①開発

    ②リポジトリに ソース等を格納 CocaPods/Specs c.f. Using Pod Lib Create
  5. CocoaPodsの仕組み ~ 使用者側 ~ $ pod init $ pod install

    ①Podfile作る ②Podfile書く ③インストールする App.xcworkspace Podfile ④xcworkspace開く ⑤実行 ビルド▶
  6. CocoaPodsの仕組み ~ 使用者側 ~ $ pod init $ pod install

    ①Podfile作る ②Podfile書く ③インストールする App.xcworkspace Specs GitHub Pods Podfile Spec見る ソース ダウンロード xcworkspace作る App.xcodeproj Pods.xcodeproj 統合 Podfile.lock ④xcworkspace開く 作成 ⑤実行 ビルド▶
  7. Carthageの使い方 ~ 使用者側 ~ Cartfile ②インストールする $ carthage update --platform

    iOS --use-xcframeworks ①Cartfile書く ③Xcodeprojに 紐付ける ④実行 ビルド▶ xcframework Manual
  8. Carthageの仕組み ~ 使用者側 ~ Cartfile ②インストールする $ carthage update --platform

    iOS --use-xcframeworks ①Cartfile書く ③Xcodeprojに 紐付ける Carthage GitHub Build checkouts ダウンロード ビルド▶ ④実行 ビルド▶ Manual xcframework Cartfile.resolved
  9. Swift Package Managerの仕組み ~ 使用者側 ~ ①Xcodeで追加する Xcodeproj ②実行 ビルド▶

    DerivedData GitHub Build SourcePackage ダウンロード ビルド リンク
  10. 基本的な共通の仕組み ライブラリ提供者側 • ソースをGitHubに置く ◦ メタデータ的なものも置く場合も ライブラリ使用者側 • 何かしらの設定ファイルにライブラリの場所&バージョンを指定して •

    ダウンロードしてきて(ソース?バイナリ?) • ビルドして(事前?アプリビルド時?) • プロジェクトにリンクして(自動?手動?) • 使う
  11. 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
  12. 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
  13. 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が主
  14. 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
  15. 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
  16. 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
  17. 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対応 様々な課題が解決しつつある・・・
  18. このセッションでは • Package Managerとは何かをおさらいしました。 • iOSにおける代表的なPackage Managerの仕組みをおさらいしました。 • Package Managerの周辺技術の発展の歴史をおさらいしました。

    Package Managerとより良くお付き合いするヒントになれば幸いです。 変化していくiOS界隈を一緒に楽しんでいきましょう〜🍻 まとめ
  19. おまけ:私見 • CocoaPods, Carthage, Swift Package Managerはそれぞれ進化していて 有用になった • Swift

    Package Managerは急激に進化していて実用レベルに • そろそろ標準のSwift Package Managerだけサポートしたいというライブラリ 提供者が出てくるだろう • 各Package Managerは併用できるのでSwift Package Managerを試しはじ めておくと良いだろう • たぶん1, 2年単位で変化が来ると予想。 • あせらず自身のProjectとの状況を踏まえあせらず準備していこう。 🤔