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)
就可以了柳琢。這樣每次運行cocoapods安裝庫,就可以自動完成引用的工作。
4柬脸、某個庫引起的糟糕錯誤
這個描述是不是很籠統(tǒng)痘绎。但是過程卻是真實發(fā)生的,而且讓我費了周折肖粮。我們的推送服務(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