昨天晚上升級了CocosPads1.0, 只是安裝成功了,現在項目裡面運行pod install又發現了幾個問題,昨天折騰的太晚了。今天繼續折騰吧。
今天終於徹底搞定了CocosPods1.0,包括安裝,運行和一個開源項目PodFile的1.0升級。
<!-- more -->
運行pod install時發現CocoaPods 提示有1.0版本了,於是打算升級一下。
CocoaPods 1.0.0 is available.
To update use: gem install cocoapods
結果就出現了下面的錯誤,分析了下原因是/usr/bin/xcodeproj目錄路徑錯了,網上搜了下解決問題,使用sudo gem install -n /usr/local/bin cocoapods --pre 命令順利安裝成功。
$ sudo gem install cocoapodsERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj$ ls -al /usr/bin/xcodeprojls: cannot access /usr/bin/xcodeproj: No such file or directory$ sudo gem install -n /usr/local/bin cocoapods --preSuccessfully installed xcodeproj-1.0.0Fetching: molinillo-0.4.5.gem (100%)Successfully installed molinillo-0.4.5Fetching: cocoapods-try-1.0.0.gem (100%)Successfully installed cocoapods-try-1.0.0
在項目下運行pod install 報錯了:
od install/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/sources_manager.rb:159:in `<module:SourcesManagerMissingConstant>': uninitialized constant Pod::SourcesManagerMissingConstant::Set (NameError) from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/sources_manager.rb:158:in `<module:Pod>' from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/sources_manager.rb:3:in `<top (required)>' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/core_overrides.rb:1:in `<top (required)>' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods.rb:71:in `<module:Pod>' from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods.rb:17:in `<top (required)>' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:69:in `require' from /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/bin/pod:36:in `<top (required)>' from /usr/local/bin/pod:23:in `load' from /usr/local/bin/pod:23:in `<main>'
網上搜了下,發現這個issue已經close了,但好像沒有更新啊,https://github.com/CocoaPods/CocoaPods/pull/5288
只好自己看代碼修改一下:
修改 /Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/sources_manager.rb
在第二行增加
require 'set'
儲存檔案,需要輸入密碼的。
繼續運行pod install, 結果又報下面的錯誤:
edhita $ pod installRe-creating CocoaPods due to major version update.[!] `:head` dependencies have been removed. Please use normal external source dependencies (`:git => 'GIT_REPO_URL'`) instead of `:head` for `EDHFontSelector`.
這個看提示應該是個版本相容問題了,還是先去仔細看看官方的CocoaPods 1.0的release說明吧。
應該是不支援:head這個文法了,並且必須有target。
這裡有個官方遷移指南
擁抱 CocoaPods 1.0
下面用正在研究的markdown編輯器Edhita的Podfile做個升級的例子吧,
原地址 https://github.com/tnantoka/edhita/blob/master/Podfile
遷移前的代碼:
platform :ios, "8.0"source 'https://github.com/CocoaPods/Specs.git'pod 'EDHFinder', '~> 0.1'pod 'EDHFontSelector', :headpod 'EDHInputAccessoryView', '~> 0.1'pod 'Google-Mobile-Ads-SDK'pod 'Colours', '~> 5.5'pod 'FXForms', '~> 1.2'pod 'GHMarkdownParser', '~> 0.1'pod 'VTAcknowledgementsViewController', '~> 0.12'pod 'Bootstrap', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/Bootstrap/Bootstrap.podspec'pod 'Megrim', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/Megrim/Megrim.podspec'pod 'github-markdown-css', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/github-markdown-css/github-markdown-css.podspec'post_install do |installer| require 'fileutils' FileUtils.cp_r('Pods/Target Support Files/Pods/Pods-acknowledgements.plist', 'Edhita/Assets/Pods-acknowledgements.plist')end
升級到cocosPods 1.0後的代碼
platform :ios, "8.0"source 'https://github.com/CocoaPods/Specs.git'target 'Edhita'pod 'EDHFinder', '~> 0.1'pod 'EDHFontSelector', '~> 0.1'pod 'EDHInputAccessoryView', '~> 0.1'pod 'Google-Mobile-Ads-SDK'pod 'Colours', '~> 5.5'pod 'FXForms', '~> 1.2'pod 'GHMarkdownParser', '~> 0.1'pod 'VTAcknowledgementsViewController', '~> 0.12'# pod 'Bootstrap', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/Bootstrap/Bootstrap.podspec'# pod 'Megrim', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/Megrim/Megrim.podspec'# pod 'github-markdown-css', podspec: 'https://raw.githubusercontent.com/tnantoka/podspecs/master/Specs/github-markdown-css/github-markdown-css.podspec'post_install do |installer| require 'fileutils' # FileUtils.cp_r('Pods/Target Support Files/Pods-Edhita/Pods-Edhita-acknowledgements.plist', 'Edhita/Assets/Pods-acknowledgements.plist')end
我偷懶注釋了一些不需要的代碼,運行pod install, Xcode開啟Edhita.xcworkspace, 就能編譯通過了。效果如下
Edhiha
這次CocoaPods 1.0的升級體驗還真是坑啊,經曆了4年半的開發才發布1.0版本啊,不知道該說什麼好了。
珍愛生命,新項目擁抱Carthage吧。但也不能不用CocoaPods啊,那麼多開源項目都用了啊,還是暫時先不要升級1.0了。
文/offbye(簡書作者)
原文連結:http://www.jianshu.com/p/a45b8b708ecb
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。