做自己的可可豆夾 @ cocoahead.tw
Upcoming SlideShare
Loading in...5
×
 

做自己的可可豆夾 @ cocoahead.tw

on

  • 1,001 views

Make a private cocoapod repo

Make a private cocoapod repo

Statistics

Views

Total Views
1,001
Views on SlideShare
999
Embed Views
2

Actions

Likes
5
Downloads
5
Comments
0

1 Embed 2

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

做自己的可可豆夾 @ cocoahead.tw 做自己的可可豆夾 @ cocoahead.tw Presentation Transcript

  • 做自己的可可豆夾 Objective-C 套件管理系統 cocoaheads.tw 2014 @Superbil
  • About me • 軟體工工程師、iOS 開發 • Git / Emacs • about.me/superbil • freenode #emacs.tw #g0v.tw #python.tw
  • 目錄 • 什麼是 cocoapods • 建立一個 podspec • 建立屬於自己的私人 repo • 編寫 podspec 的注意事項 • Podspec 裡面的奇技 巧
  • 什麼是 cocoapods • 語意化版本 (Semantic Versioning) 套件管理系統 • 快速( • 解決套件之間的相依性問題 懶)使用第三方元件
  • 為什麼要用 cocoapods • 語意化版本 (Semantic Versioning) 套件管理系統 • • 快速( • • 多人協作的時候,知道該不該升級元件 懶)使用第三方元件 pod search <Make_a_wish> 解決套件之間的相依性問題 • duplicate symbols
  • 使用 cocoapods • gem install cocoapods • • 建議先裝 homebrew,再裝ruby pod setup • 安裝完,設定 cocoapods 環境
  • 使用 cocoapods (2) • pod init • 在當前目錄下面尋找 xcode project ,
 並建立一個 Podfile • pod install • 依照 Podfile 中的需求,安裝到 xcode project
  • 使用 cocoapods (3) • platform :ios, '5.1' • xcodeproj `MyProject.xcodeproj` • pod 'JSONKit', • pod 'Reachability', '~> 3.0.0' '~> 1.4'
  • 更新 Pod • pod • • 依照目前(Podfile.lock)的 Pod 更新 pod update • 更新 Podfile 中的 Pods
  • 建立一個 podspec • podspec 表示一個單位 • pod spec create <NAME> • 只建立 podspec ,其他流程都要動手做
  • podspec Example
  • 自己做 Pod 流程 • 建立 pod spec create <NAME> • 增加 source code, example • 上傳 source code 並加上 git tag • 編寫 <NAME>.podspec • 驗證 pod spec lint <NAME>.podspec • 上傳 pod push origin <NAME>.podspec
  • 每一個 podspec 都要 樣做一次... 是一個需要耐心的過程
  • pod lib create • 使用 pod lib create <NAME> • clone_template • • git clone pod-template <NAME> configure_template • ruby! "_CONFIGURE.rb <NAME>
  • pod-template • • Assets CHANGELOG.md • NAME.podspec • POD_README.md • • Project Classes • • • • ios osx LICENSE Podfile • README.md • Rakefile • _CONFIGURE.rb
  • pod lib 開發流程 • pod lib create <NAME> • add source code and edit <NAME>.podspec • pod lib lint • pod push origin <NAME>.podspec
  • 建立自己的可可豆夾
  • pod repo 結構 • $HOME/repos/master/ps_name/version/ ps_name.podspec • repo 使用 git 做管理
  • pod repo add • pod repo add NAME URL [BRANCH] • Clones `URL` in the local spec-repos directory at `~/.cocoapods/repos/`. The • remote can later be referred to by `NAME`.
  • 編寫 Podspec 的
 注意事項
  • 語意化版本 (1) • pod 'JSONKit', '~> 1.4' • • • 可以使用不同的限制條件 會自動安裝 1.x 版的升級 pod 'JSONKit', '~> 1.4.1' • 自動升級只到 1.4.x
  • 語意化版本 (2) • 主版號.次版號.修訂號 • 主版號:當你做了不相容的 API 修改 • 次版號:當你做了向下相容的功能性新增 • 修訂號:當你做了向下相容的問題修正
  • pod lint 錯誤 (1) • WARN | Git sources should specify a tag • podspec 的 source 必需指到一個 tag
  • pod lint 錯誤 (2) • WARN | The summary should end with proper punctuation. • summary 少了句號。
  • pod lint 錯誤 (3) • pod lib lint 的檢查和 
 pod push origin <NAME>.podpsec 範圍不同 • 雖然 pod lib lint 雖然可以過,但是上傳的時候才 會出現錯誤
  • 先別說cocoapods 你知道相依性 ?
  • 相依性處理 • 盡可以把沒有相依性的元件先 整理出來 • 先把影嚮最小的做成一個 pod • subspec 裡面可以做一些簡單 的相依性處理 • 用 Category 去處理相依性
  • Podspec 裡面的
 奇技 巧
  • spec.xcconfig • s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$ (SDKROOT)/usr/include/libxml2"' } • 在 Target 的 project 的 HEADER_SEARCH_PATHS 加上參數 • HEADER_SEARCH_PATHS 為 MyProject.pbxproj 中的值,非介面上顯示的
  • spec.xcconfig • s.xcconfig = { 'OTHER_LDFLAGS' => '-ObjC' } • 手動加入 -ObjC 的 flags
  • other link options • s.libraries = 'xml2' • 會在 other link flags 加上 -llibxml2
  • spec.compiler_flags • s.compiler_flags = '-DGDATA_IPHONE=1', 'DGTM_INCLUDE_OAUTH2=1' • 在 target project 中 compiler flags 加入自定義的 參數
  • subspec • pod 'MyPodspec/Common' • 只要安裝 個 subspec 的方式
  • spec.default • pod 'MyPodspec' • 預設會安裝的東西,會先安裝 spec 下的再 default_subspec 的東西
  • resource 的相依性 • Pods-Target-resources.sh • • • 把 resource 複製到 Project 上 使用 subspec 來整理 resource spec.resource_bundles
  • spec.source • spec.version 若是 0.0.1 • 使用 0.0.1, 使用 個 version, source 可以使 用 :commit => "ABCDEFG.yooooooo" • s.source = { 
 :git => 'git://repo.git', 
 :commit => 'git_commit_hash'
 } http://guides.cocoapods.org/syntax/podspec.html#source
  • s.version 相容 • GData 已經有新版本,但是最新的程式碼在 trunk 上 • 建立特別的版號,然後把 podspec 放在自己的 repo 中 • pod 'GData', '~> 0.0.1-pp'
  • spec.post_install • 在元件安裝完之後,要做一些 事情時 • def s.post_install(target)
 puts <<-TEXT
 // mom, I am here !
 TEXT
 end • find ~/.cocoapods/repos/ -type f -exec grep -nH e "post_install" {} +
  • Ref • http://cocoapods.org/ • http://guides.cocoapods.org/syntax/podspec.html • https://github.com/CocoaPods/CocoaPods • https://github.com/CocoaPods/pod-template