CocoaPods使用注意事項
網(wǎng)上關(guān)于如何使用CocoaPods的文章太多了,我想我就不在重復(fù)敘述了。這里我想把我使用過程中遇到的問題或者心得給大家分享下。
<br />
1、Podfile.lock
通過pod install安裝第三方庫完畢后,CocoaPods會把庫放在了Podfile.lock里面,這個文件很重要。它鎖定了庫的版本,最直接的保護(hù)作用就是防止多人共同協(xié)作開發(fā)的時候,你的版本是1.0,而我的是2.0,產(chǎn)生的混亂問題。
截取一段我的Podfile.lock中的內(nèi)容,可以看到我的AFNetworking是被鎖定在2.6.3版本的。
PODS:
- AFNetworking (2.6.3):
- AFNetworking/NSURLConnection (= 2.6.3)
- AFNetworking/NSURLSession (= 2.6.3)
- AFNetworking/Reachability (= 2.6.3)
- AFNetworking/Security (= 2.6.3)
- AFNetworking/Serialization (= 2.6.3)
- AFNetworking/UIKit (= 2.6.3)
- AFNetworking/NSURLConnection (2.6.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/NSURLSession (2.6.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/Reachability (2.6.3)
- AFNetworking/Security (2.6.3)
- AFNetworking/Serialization (2.6.3)
- AFNetworking/UIKit (2.6.3):
- AFNetworking/NSURLConnection
- AFNetworking/NSURLSession
2、install和update的區(qū)別
我建議按照以下方式進(jìn)行,在 Podfile 中添加了新的庫,應(yīng)該使用pod install,而不是pod update。這樣可以只安裝新的庫 ,不會同時把已經(jīng)存在的庫也更新掉。
只有想更新某個或者全部 pod 時,你才應(yīng)該使用pod update。
3、安裝庫后的鏈接錯誤
由于我們的項目是中途加入了CocoaPods,項目工程以前就一直在用AFNetworking等知名第三方庫。通過CocoaPods引入后,編譯工程,發(fā)現(xiàn)報了AFNetworking相關(guān)的鏈接錯誤。</br>
具體錯誤內(nèi)容為
Undefined symbols for architecture arm64
開始懷疑是不是引用庫的方式問題,后來發(fā)現(xiàn)不是。真實原因在于other link flags缺少-l"AFNetworking"。</br>
更新:引用的庫多了,不能每次安裝完都要手動在other link flags里添加吧。通過搜索,我發(fā)現(xiàn)在other link flags選項添加$(inherited)就可以了。這樣每次運(yùn)行cocoapods安裝庫,就可以自動完成引用的工作。
4、某個庫引起的糟糕錯誤
這個描述是不是很籠統(tǒng)。但是過程卻是真實發(fā)生的,而且讓我費(fèi)了周折。我們的推送服務(wù)用了某光,用的一直很穩(wěn)定,但是以前是直接引入代碼的方式。改為pod加載后,在配合svn的使用,居然其他同事在執(zhí)行pod install出現(xiàn)了許多意想不到的錯誤,而且pod工程目錄許多文件夾都因為錯誤沒有創(chuàng)建成功。podfile刪除后,重新執(zhí)行pod install也不好使了。。。很無語。我手動進(jìn)入Targets Support Files目錄下,找到與這個庫相關(guān)的配置代碼(Pods.release.xcconfig和Pods.debug.xcconfig),手動刪除??偹闶呛昧?。
5、多個targets的podfile寫法
給每一個target添加相同的pod寫法不太優(yōu)雅,看了一個stackflow的帖子,推薦以下的寫法。
platform :ios, '7.0'
def shared_pods
pod 'SDWebImage', '~>3.7'
pod 'TTTAttributedLabel'
end
target 'YourTarget1' do
shared_pods
end
target 'YourTarget2' do
shared_pods
end