Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CocoaPodsのはなし※ ただしObjective-Cに限る
@hironytic
CocoaPods
https://cocoapods.org/
Objective-C/Swiftライブラリの依存管理
RubyでいうところのRubyGems + Bundler
Node.jsでいうところのnpm
Gettig Started - はじめよう
インストール
$ sudo gem install cocoapods
↓
セットアップ
$ pod setup
※ 実のところ、この辺のことは覚えてません‥‥
使い方
Pod(ライブラリ)を必要とするプロジェクトに
カレントフォルダを移す。
HogeFuga/ ← ここ
├ HogeFuga/
│ ├ AppDelegate.h
│ ├ AppDelegate.m
│ │ :
├ HogeFugaTests/...
Podfileの作成
使いたいPodを記述する。
空のファイルから作ってもいいが、
便利なコマンドも
$ pod init
↓
HogeFuga/
├ HogeFuga/
│ ├ AppDelegate.h
│ ├ AppDelegate.m
...
Podfile
こんなのができてる。
# Uncomment this line to define a global platform for your project
# platform :ios, '6.0'
target 'HogeF...
Podfile
使いたいPodを記述する。
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
target 'Hoge...
メモ:バージョンの指定
指定 意味
'1.3' 1.3
'>1.3' 1.3より上(1.3は含まない)
'>=1.3' 1.3以上(1.3を含む)
'<1.3' 1.3未満(1.3は含まない)
'<=1.3' 1.3以下(1.3を含む)
'~>...
Podのインストール
$ pod install
↓
HogeFuga/
├ HogeFuga/
│ ├ AppDelegate.h
│ ├ AppDelegate.m
│ │ :
├ HogeFugaTests/
│ ├ HogeFugaTe...
Podを使った開発
以後は*.xcworkspaceの方をXcodeで開く。
HogeFuga/
│ :
├ HogeFuga.xcodeproj
├ HogeFuga.xcworkspace ← こっち
│ :
ライブラリへのヘッダパス
ライ...
使いたいPodが増えた
Podfileを修正。
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
target 'Ho...
Podfile.lock
podinstallで作られたファイル
HogeFuga/
├ HogeFuga/
│ ├ AppDelegate.h
│ ├ AppDelegate.m
│ │ :
├ HogeFugaTests/
│ ├ Hoge...
Podfile.lock
PODS:
- BFTaskPromise (2.1.0):
- Bolts/Tasks (~> 1.2)
- Bolts/Tasks (1.2.0)
- Realm (0.93.2):
- Realm/Headers...
Podfile.lock
インストールされたPodのバージョンが書かれてい
る。
podinstallしても、ライブラリのバージョンが勝手
に上がったりはしない。
Podfile.lockはソース管理(git)に追加しよう!
バージョンを更新し...
Pods
podinstallで作られたファイル
HogeFuga/
├ HogeFuga/
│ ├ AppDelegate.h
│ ├ AppDelegate.m
│ │ :
├ HogeFugaTests/
│ ├ HogeFugaTest...
Pods
インストールしたPodのソースファイル等と
それをビルドするプロジェクト
HogeFuga/
│ :
└ Pods/
├ BFTaskPromise/
├ Bolts/
├ Headers/
├ LocalPodspecs/
├ Re...
Pods
公式サイトのドキュメントの要約
追加するメリット
チェックアウト後のpodinstallが不要
Podの取得元(GitHub)がダウンしていてもOK
Podが確実に同一だと保証できる
除外するメリット
リポジトリを小さくできる
通常は...
Podの作り方
‥‥その前に準備を
CocoaPods Trunk
認証とPodリリースのためのAPI
デバイス毎に「セッション」を登録。
次のように一度だけ実行。
$ pod trunk register mailaddr@example.com 'Your Name' --d...
Podの作り方
必要なもの
Podに含めるソース、ライブラリ
*.podspecファイル
LICENSEファイル
テンプレートから作成
質問に答えていくと、Podの種を作ってくれる。
$ pod lib create [pod name]
↓ 実は初めて実行してみた
$ pod lib create Piyo
Cloning `https://github...
テンプレートから作成
こんな感じのファイル群が生成される。
Piyo/
├ .git/
├ .gitignore
├ .travis.yml
├ _Pods.xcodeproj
├ Example/
│ ├ Piyo/
│ ├ Piyo.xco...
Podspec
Piyo.podspec
Pod::Spec.new do |s|
s.name = "Piyo"
s.version = "0.1.0"
s.summary = "A short description of Piyo."
s...
Podのバージョンの付け方
に従って付ける。Semantic Versioning
X.Y.Z (例:1.0.4)
X: メジャーバージョン
APIに互換性がなくなったら上げる
Y: マイナーバージョン
APIの後方互換を保った機能追加で上げる...
Podの開発中
Podfileに:pathを付けると
開発中のPodをインストールできる。
Piyo/
├ Example/
│ │ :
│ └ Podfile ← これ
├ LICENSE
├ Piyo.podspec
├ Pod/
└ RE...
リリース
1. Podの検証
2. タグを作って自分のリポジトリへプッシュ
podspecのs.source=で指定したリポジトリ/タグ
3. Specs repoへプッシュ
$ pod lib lint
:
s.version = "0.1....
おまけ
Private Pods
オープンじゃないPod
社内ライブラリとか
利用方法
参照
というか、使ってみたことがないのです。
いつか利用してみたら、また報告します。
https://guides.cocoapods.org/making/pri...
Carthage(カルタゴ)
https://github.com/Carthage/Carthage
CocoaPodsのライバル
CocoaPodsとの違い
Specs Repoに相当するものがない
workspaceを強制しない
基本はD...
以上、CocoaPodsのはなしでした。
CocoaPodsのはなし
Upcoming SlideShare
Loading in …5
×

CocoaPodsのはなし

1,692 views

Published on

第4回徳島スマホアプリ開発勉強会で話したスライド

または http://hironytic.github.io/RevealSlides/slides/cocoapods/index.html

Published in: Engineering
  • Be the first to comment

CocoaPodsのはなし

  1. 1. CocoaPodsのはなし※ ただしObjective-Cに限る @hironytic
  2. 2. CocoaPods https://cocoapods.org/ Objective-C/Swiftライブラリの依存管理 RubyでいうところのRubyGems + Bundler Node.jsでいうところのnpm
  3. 3. Gettig Started - はじめよう インストール $ sudo gem install cocoapods ↓ セットアップ $ pod setup ※ 実のところ、この辺のことは覚えてません‥‥
  4. 4. 使い方
  5. 5. Pod(ライブラリ)を必要とするプロジェクトに カレントフォルダを移す。 HogeFuga/ ← ここ ├ HogeFuga/ │ ├ AppDelegate.h │ ├ AppDelegate.m │ │ : ├ HogeFugaTests/ │ ├ HogeFugaTests.m │ │ : └ HogeFuga.xcodeproj $ cd path/to/HogeFuga
  6. 6. Podfileの作成 使いたいPodを記述する。 空のファイルから作ってもいいが、 便利なコマンドも $ pod init ↓ HogeFuga/ ├ HogeFuga/ │ ├ AppDelegate.h │ ├ AppDelegate.m │ │ : ├ HogeFugaTests/ │ ├ HogeFugaTests.m │ │ : ├ HogeFuga.xcodeproj └ Podfile ← これができる
  7. 7. Podfile こんなのができてる。 # Uncomment this line to define a global platform for your project # platform :ios, '6.0' target 'HogeFuga' do end target 'HogeFugaTests' do end
  8. 8. Podfile 使いたいPodを記述する。 # Uncomment this line to define a global platform for your project platform :ios, '8.0' target 'HogeFuga' do pod 'BFTaskPromise', '~> 2.0' end target 'HogeFugaTests' do end
  9. 9. メモ:バージョンの指定 指定 意味 '1.3' 1.3 '>1.3' 1.3より上(1.3は含まない) '>=1.3' 1.3以上(1.3を含む) '<1.3' 1.3未満(1.3は含まない) '<=1.3' 1.3以下(1.3を含む) '~>1.3.2' 1.3.2 <= ver < 1.4(いい感じに) '~>1.3' 1.3 <= ver < 2.0(いい感じに)
  10. 10. Podのインストール $ pod install ↓ HogeFuga/ ├ HogeFuga/ │ ├ AppDelegate.h │ ├ AppDelegate.m │ │ : ├ HogeFugaTests/ │ ├ HogeFugaTests.m │ │ : ├ HogeFuga.xcodeproj ├ HogeFuga.xcworkspace ← 増えた ├ Podfile ├ Podfile.lock ← 増えた └ Pods/ ← 増えた
  11. 11. Podを使った開発 以後は*.xcworkspaceの方をXcodeで開く。 HogeFuga/ │ : ├ HogeFuga.xcodeproj ├ HogeFuga.xcworkspace ← こっち │ : ライブラリへのヘッダパス ライブラリのコンパイル・リンク そのまま#importしてビルドするだけ。
  12. 12. 使いたいPodが増えた Podfileを修正。 # Uncomment this line to define a global platform for your project platform :ios, '8.0' target 'HogeFuga' do pod 'BFTaskPromise', '~> 2.0' pod 'Realm' end target 'HogeFugaTests' do pod 'Realm/Headers' end ↓ $ pod install
  13. 13. Podfile.lock podinstallで作られたファイル HogeFuga/ ├ HogeFuga/ │ ├ AppDelegate.h │ ├ AppDelegate.m │ │ : ├ HogeFugaTests/ │ ├ HogeFugaTests.m │ │ : ├ HogeFuga.xcodeproj ├ HogeFuga.xcworkspace ← 増えた ├ Podfile ├ Podfile.lock ← 増えた └ Pods/ ← 増えた
  14. 14. Podfile.lock PODS: - BFTaskPromise (2.1.0): - Bolts/Tasks (~> 1.2) - Bolts/Tasks (1.2.0) - Realm (0.93.2): - Realm/Headers (= 0.93.2) - Realm/Headers (0.93.2) DEPENDENCIES: - BFTaskPromise (~> 2.0) - Realm - Realm/Headers SPEC CHECKSUMS: BFTaskPromise: 25007577307dcd4dc657a143ac6a63f3356652c2 Bolts: d176cb1e0012175589e389a9db49b85e27787576 Realm: 2fdd0ae74f730e190384e0338d8a0d3654df8220
  15. 15. Podfile.lock インストールされたPodのバージョンが書かれてい る。 podinstallしても、ライブラリのバージョンが勝手 に上がったりはしない。 Podfile.lockはソース管理(git)に追加しよう! バージョンを更新したければ? $ pod update [POD_NAMES ...]
  16. 16. Pods podinstallで作られたファイル HogeFuga/ ├ HogeFuga/ │ ├ AppDelegate.h │ ├ AppDelegate.m │ │ : ├ HogeFugaTests/ │ ├ HogeFugaTests.m │ │ : ├ HogeFuga.xcodeproj ├ HogeFuga.xcworkspace ← 増えた ├ Podfile ├ Podfile.lock ← 増えた └ Pods/ ← 増えた
  17. 17. Pods インストールしたPodのソースファイル等と それをビルドするプロジェクト HogeFuga/ │ : └ Pods/ ├ BFTaskPromise/ ├ Bolts/ ├ Headers/ ├ LocalPodspecs/ ├ Realm/ ├ TargetSupportedFiles/ ├ Manifest.lock └ Pods.xcodeproj ソース管理に追加するか、除外(.gitignore)するか? → CocoaPods公式サイトは追加を推奨。
  18. 18. Pods 公式サイトのドキュメントの要約 追加するメリット チェックアウト後のpodinstallが不要 Podの取得元(GitHub)がダウンしていてもOK Podが確実に同一だと保証できる 除外するメリット リポジトリを小さくできる 通常は、Podの取得元が生きている限り、同じもの がインストールされるはず 使っているPodのバージョンが異なるブランチ間で のマージがやりやすい
  19. 19. Podの作り方
  20. 20. ‥‥その前に準備を
  21. 21. CocoaPods Trunk 認証とPodリリースのためのAPI デバイス毎に「セッション」を登録。 次のように一度だけ実行。 $ pod trunk register mailaddr@example.com 'Your Name' --description='macbook cocoapods.orgからメールが届くので、 そのメールのリンクをクリック。 登録済みセッションの一覧を見るには $ pod trunk me
  22. 22. Podの作り方
  23. 23. 必要なもの Podに含めるソース、ライブラリ *.podspecファイル LICENSEファイル
  24. 24. テンプレートから作成 質問に答えていくと、Podの種を作ってくれる。 $ pod lib create [pod name] ↓ 実は初めて実行してみた $ pod lib create Piyo Cloning `https://github.com/CocoaPods/pod-template.git` into `Piyo`. Configuring Piyo template. ------------------------------ To get you started we need to ask a few questions, this should only take a minute. 2015-07-04 21:25:09.912 defaults[82243:2285211]  The domain/default pair of (org.cocoapods.pod-template, HasRunbefore) does not exist If this is your first time we recommend running through with the guide:   - http://guides.cocoapods.org/making/using-pod-lib-create.html  ( hold cmd and double click links to open in a browser. )  Press return to continue. What language do you want to use?? [ ObjC / Swift ]  >  objc Would you like to include a demo application with your library? [ Yes / No ]  >  yes Which testing frameworks will you use? [ Specta / Kiwi / None ]  > 
  25. 25. テンプレートから作成 こんな感じのファイル群が生成される。 Piyo/ ├ .git/ ├ .gitignore ├ .travis.yml ├ _Pods.xcodeproj ├ Example/ │ ├ Piyo/ │ ├ Piyo.xcodeproj │ ├ Piyo.xcworkspace │ ├ Podfile │ ├ Podfile.lock │ ├ Pods/ │ └ Tests/ ├ LICENSE ← MITLicenseになってた ├ Piyo.podspec ├ Pod/ │ ├ Assets/ │ └ Classes/ └ README.md
  26. 26. Podspec Piyo.podspec Pod::Spec.new do |s| s.name = "Piyo" s.version = "0.1.0" s.summary = "A short description of Piyo." s.description = <<-DESC An optional longer description of Piyo * Markdown format. * Don`t worry about the indent, we strip it! DESC s.homepage = "https://github.com/<GITHUB_USERNAME>/Piyo" # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screens s.license = 'MIT' s.author = { "Hironori Ichimiya" => "hiron@hironytic.com" } s.source = { :git => "https://github.com/<GITHUB_USERNAME>/Piyo.git" # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  27. 27. Podのバージョンの付け方 に従って付ける。Semantic Versioning X.Y.Z (例:1.0.4) X: メジャーバージョン APIに互換性がなくなったら上げる Y: マイナーバージョン APIの後方互換を保った機能追加で上げる Z: パッチバージョン APIの後方互換を保ったバグフィックスで上げる
  28. 28. Podの開発中 Podfileに:pathを付けると 開発中のPodをインストールできる。 Piyo/ ├ Example/ │ │ : │ └ Podfile ← これ ├ LICENSE ├ Piyo.podspec ├ Pod/ └ README.md ※ Piyo/Example/Podfile pod "Piyo", :path => "../"
  29. 29. リリース 1. Podの検証 2. タグを作って自分のリポジトリへプッシュ podspecのs.source=で指定したリポジトリ/タグ 3. Specs repoへプッシュ $ pod lib lint : s.version = "0.1.0" : s.source = { :git => "https://github.com/<GITHUB_USERNAME>/Piyo.git", :ta : $ pod trunk push Piyo.podspec
  30. 30. おまけ
  31. 31. Private Pods オープンじゃないPod 社内ライブラリとか 利用方法 参照 というか、使ってみたことがないのです。 いつか利用してみたら、また報告します。 https://guides.cocoapods.org/making/private- cocoapods.html
  32. 32. Carthage(カルタゴ) https://github.com/Carthage/Carthage CocoaPodsのライバル CocoaPodsとの違い Specs Repoに相当するものがない workspaceを強制しない 基本はDynamic Frameworkを使う方式なのでiOS 8以 降のみに対応→ 今後普及するはず というか、使ってみたことがないのです。 いつか利用してみたら、また報告します。
  33. 33. 以上、CocoaPodsのはなしでした。

×