目錄
1.核心組件
1.1 CocoaPods / CocoaPod
1.2 CocoaPods / Core
1.3 CocoaPods / Xcodeproj
2.安裝和更新
3.Pod Commands
4.Podfile
5..podspec Syntax
6.支持第三方開發者將CustomSDK pod到自己的工程,如何做?
7.制作支持安裝第三方靜態庫podspec和podfile
8.制作支持subspec的podspec 文件
9.對CocoaPods文檔查看的支持
10.清理pod install配置后的工程
11.CocoaPods實用網站
12. Pod install 開源庫實戰
1.核心組件
1.1 CocoaPods / CocoaPod
這是面向用戶的組件,每當你執行一個pod命令時,這個組件將被激活。它包括了所有實用CocoaPods的功能,並且還能調用其他gem包來執行任務。
1.2 CocoaPods / Core
Core gem提供了與CocoaPods相關的文件(主要是Podfile和podspecs)的處理。
1.2.1 Podfile
Podfile用於配置項目所需要的第三方庫。它能被高度定制,所以你可以盡可能地給它添加你想要的特性。
1.2.2 Podspec
.podspec文件描述了一個庫將怎樣被添加進工程中。.podspec文件可以標識該第三方庫所需要的源碼文件、依賴庫、編譯選項,以及其他第三方庫需要的配置。
1.3 CocoaPods / Xcodeproj
這個包負責工程文件直接關系的處理。它能創建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作為一個獨立的包使用,當你要編寫修改項目文件的腳本時,可以考慮使用CocoaPods/Xcodeproj。
2.安裝和更新
安裝CocoaPods這個工具,需要用到gem(ruby的第三方庫管理工具)。MacOS中默認支持gem,但是有時安裝或更新cocoapods,需要更高版本的gem支持。
[sudo] gem update --system,升級gem。(用此命令可能仍然無法升級gem, 可嘗試將gem包下載到本地(速度很快),細節https://rubygems.org/)
經驗累積:
1、chmod 775 /usr/local,修改usr/local的訪問權限,使[sudo] gem install cocoapods有權限安裝。
2、operation not permitted - /usr/bin/xcodeproj,gem list可以查看到所有安裝到本機的包,我電腦上的本地路徑:/Library/Ruby/Gems/[version]/gems。查看目錄下specifications目錄,可能無xcodepro.gemspec文件,則從cocoapod的github上下載對應版本的文件。即可解決
3、operation not permitted - /usr/bin/pod, 使用此命令安裝
sudo gem install -n /usr/local/bin cocoapods,即指定pod的路徑。出現此問題,應該是gem的環境變量配置不正確。
關於安裝舊版本:
sudo gem uninstall cocoapods
Password:
Select gem to uninstall:
1. cocoapods-0.34.4
2. cocoapods-0.35.0
3. All versions
刪除新版本,自然便在舊版本了。如果之前未安裝過指定的舊版本,則:
sudo gem install cocoapods -v 0.25.0
3.Pod Commands
1、查看pod所有命令:pod help
2、查看具體命令用法: pod <command> —help, 例如:pod try —help
3、安裝和配置第三方庫: pod install. 如果想看到具體細節,pod install --verbose.一個很不錯的link: http://blog.jobbole.com/53365/
4、檢測並更新新版本庫:pod update。可以通過pod outdated查看Pods中已過期的第三方開源庫。pod install & pod update區別: 例如:Podfile中,pod ‘SVProgressHUD’,而未指定此開源庫版本。pod install,如果SVProgressHUD已存在Pods中,則直接使用它。但是,pod update,會重新下載最新版本到Pods中。
5、產生`~/.cocoapods/repos`: pod setup. Cocoapods目錄中保持了它支持的所有第三方開源庫信息. 更新,sudo rm -fr ~/.cocoapods/repos/master, 再pod setup。也可以使用git進行更新。
6、搜索第三方開源庫: pod search <open source>, 在cocoapods這個目錄中搜索。也可以在http://cocoapods.org中搜索第三方庫。
4.Podfile
具體可以查看: http://guides.cocoapods.org/syntax/podfile.html
1). pod ‘objection’’version’;
例如,pod ‘MCDateExtensions’,不指定版本,在pod update時會獲取最新的版本;pod ‘MCDateExtensions’’~>1.0.0’,獲取的版本信息是[1.0.0, 1.1.0). ~>是參照ruby的語法的,~>x.y.z, 的意思是版本號 x,y 固定,但可以大於等於 z。通常版本號的命名有其慣例:x major 版本號升級表示有 API 發生不向后的兼容性變動,y minor 版本號升級表示有功能新增,z tiny 版本號升級表示 bugs 修正。因此 “~> x.y.z” 可以讓我們保有升級彈性,又不致於升級太多讓程序發生不兼容錯誤;
2). 從本地pod files, pod 'AFNetworking', :path => '~/Documents/AFNetworking'此目錄下一定要有.podspec文檔
3). 從git server端pod files
To use the master branch of the repo:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => ‘develop’
Or specify a commit:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
4)、 pod 'ShareKit/Facebook' 支持子模塊的導入。
5)、Pod install依次做了什么?
步驟:
http://blog.jobbole.com/53365/
6)、較優的git倉庫管理
將Podfile & Podfile.lock & workspace放到git倉庫中管理
原因:
Podfile.lock, 保證每個team成員使用的第三方庫是同一個版本的
Workspace, 如果由CocoaPods生成,則沒有必要。如果workspace是自己創建的,就需要。
7)、注釋
單行注釋: #
多行注釋:
=begin
codes to comment
=end
5..podspec Syntax
1、pod spec create ‘name’產生一個name.podspec文件,可仔細閱讀此文件,熟悉.podspec語法;
2、pod spec lint ‘name’.podspec 用來build .podspec文件是否有錯。
6.支持第三方開發者將CustomSDK pod到自己的工程,如何做?
解決以下幾個問題:
1). 在工程中創建一個.podspec文件,並讓其編譯通過;
編譯.podspec文件使用命令,pod spec lint name. 官方文檔: 這份文檔:http://guides.cocoapods.org/making/making-a-cocoapod.html
2). 將自定義的.podspec納入Cocoa Spec管理;
a. 需github上一個account,並fork cocoa spec;
b. 將更改push到fork cocoa spec responsity上;
c. new pull request -> compare across forks;
3). 處理CustomSDK version update;重復2中的III.
7.制作支持安裝第三方靜態庫podspec和podfile
1) 如何制作podspec文件參照OpenSSL:
https://github.com/krzyzanowskim/OpenSSL
2) 如果寫Podfile以支持從本地導入OpenSSL:
例如:pod 'OpenSSL', :path => '../OpenSSL'(此為OpenSSL在本地的路徑),從網上下載的包中,有一個快捷的OpenSSL.podspec文件和OpenSSL-Universal.podspec文件。刪除快捷方式打開的OpenSSL.podspec文件,將OpenSSL-Universal.podspec文件重命名為OpenSSL.podspec,並將此文件中s.name = "OpenSSL-Universal"修改成s.name = "OpenSSL"。
雖然,從理論上可以用pod ‘OpenSSL’, :podspec => '../OpenSSL /OpenSSL-Universal.podspec'方式指定,但是實際操作卻不成功,不知道為什么。
8.制作支持subspec的podspec 文件
參照例子ShareKit :
9.對CocoaPods文檔查看的支持
link: http://cocoadocs.org
如何將自己寫的代碼產生apple 風格的文檔:
1. 安裝Alcatraz和VVDocumenter-Xcode這兩個xcode插件,
安裝 Alcatraz,link: http://alcatraz.io
可以在此路徑下找到:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins. Relaunch Xcode and type in /// above any code you want to write a document to.
2. Download the link: https://github.com/tomaz/appledoc, 安裝appledoc.
或者brew(unix tool)安裝。安裝方法:cd到appledoc的下載路徑;sudo sh install-appledoc.sh; sudo sh install-appledoc.sh -b /usr/bin -t ~/Library/Application\ Support/appledoc.
3. 可以在終端上輸入appledoc —help查看它的用法。Simple Example: appledoc ./NoticeBandSDK --project-name NoticeBandSDK --project-company "mophie-inc" --company-id com.mophie-inc.SDKDoc --output ./,會在當前目錄產生一個txt,告訴你文檔所在路徑。Xcode中所有文檔路徑: ~/Library/Developer/Shared/Documentation/DocSets
10.清理pod install配置后的工程
- 文件清理
刪除Podfile.lock,workspace,Pods目錄
- 工程配置清理
1、打開要清理的工程,選擇Build Phases, delete Manifest.lock & Copy pods Resources & Run script。
2.Framework&Header search path清理
- 清理工程添加文件
選擇工程,到Link Binary With Libraries,刪除libPods.a和類似於libPods***.a的動態庫
11.CocoaPods實用網站
- 官網:http://cocoapods.org
- 查cocoapods文檔 http://cocoadocs.org
- Stackoverflow主頁: http://stackoverflow.com/search?q=CocoaPods
- github主頁 https://github.com/CocoaPods
12. Pod install 開源庫實戰
- pod 'LayerKit'
用pod這個工具導入源碼,其實這個工具做的還不錯,但是如果導入的工程是framework,則目前遇到的就各種出錯了,比如這個LayerKit。所以,如果以后用到的是framework,還是選擇手動導入吧。
如何手動導入LayerKit這Framework?
1. 在與工程文件同級目錄下,創建Framework這個目錄,將LayerKit.Framework拷貝到此目錄下;
2. 將這個目錄添加進工程中;
3. 工程的Framework search path,需要將Framework這個目錄路徑添加進去;
4. 如果做到步驟3便結束,會報這樣的錯誤
dyld: Library not loaded: @rpath/LayerKit.framework/LayerKit Reason: image not found
解決辦法:in the target's General tab, there is an Embedded Binaries field, add framework there, and the crash is resolved.
可參照此鏈接: http://stackoverflow.com/questions/24333981/ios-app-with-framework-crashed-on-device-dyld-library-not-loaded-xcode-6-beta
運行程序時,會有如下打印:
LayerKit client v0.17.0 loaded
為了找到4步驟中的解決方案,真真是苦了臣妾了,差點完全舍棄掉pod。不過幸好pod做的事情比較多,所以把pod做好的事情,再手動做一篇,太麻煩了。因此,又回到了pod的陣營,只是以后導入framework,我是不打算用它了。