CocoaPods使用總結(jié)

使用CocoaPods也有很長一段時(shí)間了见秽,最近幾個(gè)月的時(shí)間里也主導(dǎo)了公司私有Pods的創(chuàng)建和使用菜谣。在此期間踩過了不少坑,在踩坑的過程中也收獲了不少經(jīng)驗(yàn)崩溪,更加熟練地掌握了CocoaPods的一些指令的使用。本篇作為這段時(shí)間收獲的備忘斩松。

一伶唯、CocoaPods簡介

CocoaPods是專門為iOS工程提供第三方依賴庫的管理工具,通過CocoaPods惧盹,我們可以更方便地管理每個(gè)第三方庫的版本乳幸,而且不需要我們做太多的配置,就可以直觀钧椰、集中和自動(dòng)化地管理我們項(xiàng)目的第三方庫粹断。

CocoaPods將所有依賴的庫都放在一個(gè)名為Pods的項(xiàng)目下,然后讓主項(xiàng)目依賴Pods項(xiàng)目嫡霞。然后瓶埋,我們編碼工作都從主項(xiàng)目轉(zhuǎn)移到Pods項(xiàng)目。Pods項(xiàng)目最終會(huì)編譯為一個(gè)libPod-項(xiàng)目名.a靜態(tài)庫诊沪,主項(xiàng)目依賴于這個(gè)靜態(tài)庫养筒。

對于資源文件,CocoaPods 提供了一個(gè)名為 Pods-resources.sh 的 bash 腳本端姚,該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行晕粪,將第三方庫的各種資源文件復(fù)制到目標(biāo)目錄中。

CocoaPods 通過一個(gè)名為 Pods.xcconfig 的文件來在編譯時(shí)設(shè)置所有的依賴和參數(shù)渐裸。

CocoaPods是用 Ruby 寫的巫湘,并由若干個(gè) Ruby 包 (gems) 構(gòu)成的。在解析整合過程中昏鹃,最重要的幾個(gè) gems 分別是: CocoaPods/CocoaPods, CocoaPods/Core, 和 CocoaPods/Xcodeproj尚氛。

CocoaPod的核心組件

  • CocoaPods/CocoaPod
    這是一個(gè)面向用戶的組件,每當(dāng)執(zhí)行一個(gè) pod 命令時(shí)盆顾,這個(gè)組件都將被激活怠褐。該組件包括了所有使用 CocoaPods 涉及到的功能,并且還能通過調(diào)用所有其它的 gems 來執(zhí)行任務(wù)您宪。

  • CocoaPods/Core
    Core 組件提供支持與 CocoaPods 相關(guān)文件的處理奈懒,文件主要是 Podfile 和 podspecs。

  • Podfile
    Podfile 是一個(gè)文件宪巨,用于定義項(xiàng)目所需要使用的第三方庫磷杏。該文件支持高度定制,你可以根據(jù)個(gè)人喜好對其做出定制捏卓。更多相關(guān)信息极祸,請查閱 Podfile 指南慈格。

  • Podspec
    .podspec 也是一個(gè)文件,該文件描述了一個(gè)庫是怎樣被添加到工程中的遥金。它支持的功能有:列出源文件浴捆、framework、編譯選項(xiàng)和某個(gè)庫所需要的依賴等稿械。

  • CocoaPods/Xcodeproj
    這個(gè) gem 組件負(fù)責(zé)所有工程文件的整合选泻。它能夠創(chuàng)建并修改 .xcodeproj 和 .xcworkspace 文件。它也可以作為單獨(dú)的一個(gè) gem 包使用美莫。如果你想要寫一個(gè)腳本來方便地修改工程文件页眯,那么可以使用這個(gè) gem。

CocoaPods的安裝和配置厢呵,以及Podfile中第三方庫引用的語法規(guī)則(特別是版本號的語法格式)這里就不贅述了窝撵,下面挑重點(diǎn)講一講。

二襟铭、多target時(shí)Podfile該如何寫碌奉?

我的建議是使用Ruby語法,定義不同的分組寒砖,然后不同的target可以自由選擇依賴哪些分組道批,這種方式看起來更簡潔,對于多target的項(xiàng)目來說也更友好:

platform :ios, '8.0'

def commonPods #通用pods集
    pod 'AFNetworking', '~> 2.0'
    pod 'Masonry'
end

def appOnlyPods #app專用pods集
    pod 'MBProgressHUD'
end

def extensionPods #擴(kuò)展專用pods集
    pod 'GTSDKExtension'
end

target :TestCocoaPods do
    commonPods
    appOnlyPods

    target :TestCocoaPodsTests do
    inherit! :search_paths
    # Pods for testing
    end

    target :TestCocoaPodsUITests do
        inherit! :search_paths
        # Pods for testing
    end
end

target :SecondTarget do
    commonPods
end

三入撒、如何忽略Pods警告?

有些第三方Pod集成進(jìn)來會(huì)有一大堆警告信息椭岩,如果你看著比較難受想把它忽略的話茅逮,在Podfile中對應(yīng)的target或分組下加上關(guān)鍵字inhibit_all_warnings即可。

四判哥、如何直接引用第三方庫中的頭文件献雅?

在用CocoaPods集成第三方庫之后,默認(rèn)情況下塌计,我們需要使用類似#import <XXX/YYY.h>的方式引入第三方庫的頭文件挺身。我們可以在Build Settings -> User Header Search Paths中添加${SRCROOT}并設(shè)置成recursive,這樣我們就可以直接使用#impot "YYY.h"這種方式了锌仅。

五章钾、pod install or pod update?

如官方文檔所說,pod installpod update確實(shí)是大家最容易搞混的兩條指令热芹,很多人還沒搞清楚這兩條指令的區(qū)別贱傀,反正不管三七二十一上來就是一個(gè)pod update,大家一定要搞清楚這兩條指令的區(qū)別伊脓。

按照官方文檔所說府寒,pod install在第一次檢索集成第三方以及每一次在Podfile中新增、更改或刪除pod的時(shí)候使用。每一次執(zhí)行pod install命令株搔,它都會(huì)下載安裝新的pod剖淀,并且會(huì)把每一個(gè)安裝的pod的版本信息寫入Podfile.lock文件。Podfile.lock文件跟蹤每一個(gè)安裝的pod的版本并且上鎖纤房。每一次執(zhí)行pod install命令纵隔,只解決還沒有在Podfile.lock中列出的依賴:對于已在Podfile.lock中列出的pod,會(huì)下載指定的版本帆卓,不會(huì)檢查是否有新版本巨朦。對于沒有在Podfile.lock中列出的pod,它會(huì)搜索并安裝Podfile中指定的版本剑令。

直接執(zhí)行pod update命令會(huì)檢查安裝Podfile中列出的所有pod的新版本(往往比較慢)糊啡。

執(zhí)行pod update PODNAME命令會(huì)檢查PODNAME的新版本(不考慮Podfile.lock中記錄的版本信息),它會(huì)把PODNAME更新為最新版本吁津,只要跟Podfile中指定的版本匹配棚蓄。也就是說,pod update PODNAME將PODNAME更新到Podfile中指定的版本碍脏,可以是更新到老版本也可以是更新到新版本梭依,取決于Podfile。(比如:如果此時(shí)Podfile中指定了pod 'AFNetworking', '~> 2.0'典尾,此時(shí)執(zhí)行pod update AFNetworking并不會(huì)把AFNetworking更新到最新版本(因?yàn)榇藭r(shí)的版本滿足大于等于2.0版)役拴,必須先修改Podfile中的版本信息才會(huì)更新到指定版本)。

兩者的區(qū)別:

  • pod install命令來安裝新的pod钾埂,每次在Podfile中新增和刪除pod都使用pod install命令河闰。

  • 在Podfile中添加新的pod后應(yīng)該用pod install命令,而不是pod update命令褥紫。通過pod install命令安裝新的pod而不用擔(dān)心在同一進(jìn)程中修改已有的pod姜性。

  • pod update命令僅用在更新指定pod到指定版本或者更新所有pod。

我的建議是:該用pod install的時(shí)候不要用pod update PODNAME髓考。另外部念,盡量不要用pod update,因?yàn)樗侨繖z查一遍氨菇,不僅慢有時(shí)候還會(huì)出現(xiàn)坑儡炼。比如有一個(gè)依賴的第三方庫本來是2.0版本的用的好好的,因?yàn)樗菄獾馁Y源门驾,下載起來非常慢射赛,我們在沒有bug的情況下是不希望輕易去更新它的,那么如果你上來就是一個(gè)pod update指令奶是,OK楣责, 如果你Podfile中指定了每次使用最新版本(不指定版本號)竣灌,那么CocoaPods就會(huì)去下載最新的這個(gè)第三方庫,那在下載完成之前你還要不要做其他事情了秆麸?這還是情況好的初嘹,如果這個(gè)最新的版本一直下載失敗,所以一直集成失敗怎么辦沮趣?

六屯烦、如何創(chuàng)建私有Pod?

要?jiǎng)?chuàng)建私有Pod房铭,首先我們需要兩個(gè)私有倉庫驻龟,一個(gè)放私有Pod源碼,一個(gè)放私有Pod的說明書(類似公有Pod的CocoaPods/Specs)缸匪。

1翁狐、添加私有Spec倉庫到本地

pod repo add privateSpecs your_privateSpecs.git

如果執(zhí)行成功,之后便可以通過pod repo list命令查看本地Spec倉庫列表凌蔬,正常情況下會(huì)有一個(gè)公有的CocoaPods官方的master repo 和你的 privateSpecs repo露懒,并可以看到它們在本地的存放路徑(其實(shí)在~/.cocoapods/repos目錄下)。

2砂心、創(chuàng)建私有Pod

在私有Pod代碼所在文件夾下執(zhí)行pod spec create your_podName在該目錄下創(chuàng)建一個(gè)your_podName.podspec說明書文件懈词。之后的工作就是編輯這個(gè)說明書文件了,這里簡單注明一下規(guī)則:

Pod::Spec.new do |s|

  s.name         = "ATCategory"
  s.version      = "0.0.1"
  s.summary      = "共用擴(kuò)展類集合"
  s.description  = <<-DESC
  大家如果需要用到擴(kuò)展辩诞,都使用這里已有的擴(kuò)展啦坎弯。
                   DESC
  s.homepage     = "your_privatePodGit_address/ATCategory"
  s.author       = { "ApesTalk" => "https://github.com/apestalk" }
  s.platform     = :ios
  s.platform     = :ios, "8.0"
  s.source       = { :git => "your_privatePodGit_address", :tag => "#{s.version}"
  # 如果你有多個(gè)私有Pod放在一個(gè)倉庫里,你可以修改tag像下面這樣译暂,對應(yīng)打tag的時(shí)候的規(guī)則就對應(yīng)需要變成PodName-v0.0.1這樣子了
  # s.source       = { :git => "your_privatePodGit_address", :tag => s.name + "-v"+"#{s.version}"
}
  s.source_files  = 'ATCategory/**/*'
  s.public_header_files = 'ATCategory/Category/*.h'
  s.requires_arc = true
  s.frameworks = 'UIKit','Foundation'

# 依賴的系統(tǒng)library荞怒,這里是指系統(tǒng)的類似libz.tbd、libxml2.tbd這類的系統(tǒng)庫
# s.library = 'z' // 單個(gè)
# s.libraries = 'z','xml2' // 多個(gè)

# 第三方.a
# s.vendored_libraries =
# 第三方frameworks文件
# s.vendored_frameworks =
# 依賴關(guān)系秧秉,該項(xiàng)目所依賴的其他庫,如果有多個(gè)需要填寫多個(gè)s.dependency
# s.dependency 'AFNetworking', '~> 2.3'
# 資源文件地址
# s.resource_bundles = {
#   'ATCategory' => ['ATCategory/Images/*.png']
# }
end

3衰抑、提交源代碼并打tag

注意這里tag必須跟podspec文件中的tag保持一致象迎,因?yàn)镃ocoaPods是通過podspec文件中的tag去找源文件的,如果tag對應(yīng)不起來就會(huì)驗(yàn)證失敗呛踊。打好tag提交到遠(yuǎn)端砾淌。

4、驗(yàn)證podspec文件合法性和可選參數(shù)

有兩種驗(yàn)證方式谭网,一種是本地驗(yàn)證pod lib lint your_podName.podspec和聯(lián)網(wǎng)驗(yàn)證pod spec lint your_podName.podspec汪厨。建議大家都用聯(lián)網(wǎng)驗(yàn)證。

這里可選參數(shù)有:

  • --allow-warnings:允許警告
  • --sources=‘master,privateSpecs:指定源愉择,比如你的私有pod同時(shí)依賴了公有庫和私有庫劫乱,你必須指定源才行织中,因?yàn)槟J(rèn)只會(huì)去在公有源中查找對應(yīng)的依賴
  • --use-libraries:如果使用了靜態(tài)庫,記得加上它

5衷戈、提交說明書文件到私有說明書庫

pod repo push privateSpecs your_podName.podspec狭吼,同樣的加上上面驗(yàn)證時(shí)使用到的可選參數(shù)。

6殖妇、如何使用素材刁笙?

官方建議pod中的素材用bundle的形式避免和主項(xiàng)目中的文件名發(fā)生沖突,那么集成后我們?nèi)绾问褂胋undle中的素材呢谦趣?

NSBundle *bundle = [NSBundle mainBundle];
//NSBundle *bundle = [NSBundle bundleForClass:[ClassFromPodspec class]];//對于靜態(tài)庫疲吸,拿到的是mainBundle,如果是動(dòng)態(tài)庫前鹅,拿到的是類所在的bundle摘悴。使用動(dòng)態(tài)庫需要在Podfile中開啟use_frameworks!
NSURL *wttpodBundleURL = [bundle URLForResource:@"WTTPod" withExtension:@"bundle"];
NSBundle *wttpodBundle = [NSBundle bundleWithURL: wttpodBundleURL];
UIImage *img = [UIImage imageNamed:@"Chat_checkin_empty_stu" inBundle:wttpodBundle compatibleWithTraitCollection:nil];

7、關(guān)于subspec

如果我們的pod中文件比較多嫡纠,而我們又希望能像AFNetworking那樣集成后分幾個(gè)物理文件夾(默認(rèn)會(huì)把所有文件都放在一個(gè)物理文件夾下烦租,文件太多會(huì)顯得很亂),那么就要用到subspec來把我們的pod分成幾個(gè)獨(dú)立的子模塊除盏。


s.subspec '子模塊名稱' do |別名叉橱,不能和子模塊名稱相同,比如ss|

ss.source_files = ''

end

具體怎么用者蠕,大家可以參考AFNetworking.podspec文件中的寫法窃祝。

七、如何使用私有庫

如果我們同時(shí)使用了公有庫和私有庫踱侣,我們只需要在Podfile的頭部同時(shí)把公有庫和私有庫的source加上即可粪小。

八、pod search搜不到私有庫抡句?或者搜得到pod install失斕讲病?

在提交私有庫說明書之后待榔,先執(zhí)行一下pod repo update privateSpecs逞壁,然后再集成。

九锐锣、集成某一個(gè)pod速度過慢腌闯,比如MobileVLCKit總是下載失敗

把對應(yīng)版本的MobileVLCKit下載下來放在訪問速度更快的地方(比如內(nèi)網(wǎng)服務(wù)器或者本機(jī)用Python開啟一個(gè)FTP服務(wù))在本機(jī)master repo源中搜索找到對應(yīng)版本的MobileVLCKit.podspec.json文件,把其中的source改成我們存放MobileVLCKit.tar.xz文件地址雕憔,之后再執(zhí)行相關(guān)指令集成姿骏。

如何利用Python開啟一個(gè)本地FTP服務(wù):

cd到要共享的目錄下,執(zhí)行python -m SimpleHTTPServer 8000斤彼,之后同一個(gè)局域網(wǎng)內(nèi)就可以通過本機(jī)ip:8000訪問到該共享文件夾了分瘦。


"http":"http://192.168.210.111:8000/MobileVLCKit-3.1.2-bf58e19-37855b857a.tar.xz"

獲取本機(jī)IP地址的方法:按住Option的同時(shí)點(diǎn)下Mac菜單欄的無線網(wǎng)Icon蘸泻,在下拉列表中即可看到IP地址。也可以在終端中輸入ifconfig en0命令查看擅腰。

十蟋恬、驗(yàn)證podspec時(shí),報(bào)錯(cuò) symbol(s) not found for architecture i386

檢查一下是否私有Pod中使用到的什么文件不支持i386架構(gòu)趁冈,比如什么.a文件歼争。

解決辦法:在podspec文件中指定支持的架構(gòu)

valid_archs = ['armv7s','arm64',]
s.xcconfig = {
  'VALID_ARCHS' =>  valid_archs.join(' '),
}
s.pod_target_xcconfig = {
    'ARCHS[sdk=iphonesimulator*]' => '$(ARCHS_STANDARD_64_BIT)'
}

同樣的,如果在驗(yàn)證過程中遇到xcodebuild: Returned an unsuccessful exit code.卻不報(bào)具體的錯(cuò)渗勘,去看看NOTE類型的信息沐绒,如果看到missing required architecture i386 in file此類消息,說明某個(gè).a或者frawork不支持i386架構(gòu)旺坠,需要在podspec文件中寫明該pod支持哪些架構(gòu)乔遮。

十一、pod init失斎∪小蹋肮?

用Xcode9.4.1新建一個(gè)項(xiàng)目,然后執(zhí)行pod init(Cocoapods1.4.0版本)時(shí)提示失敗璧疗,錯(cuò)誤提示如下:


――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

### Command


/usr/local/Cellar/cocoapods/1.4.0/libexec/bin/pod init


### Report

* What did you do?

* What did you expect to happen?

* What happened instead?


### Stack


   CocoaPods : 1.4.0
        Ruby : ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
    RubyGems : 2.5.2
        Host : Mac OS X 10.13.3 (17D47)
       Xcode : 9.4.1 (9F2000)
         Git : git version 2.15.2 (Apple Git-101.1)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib



### Plugins


cocoapods-deintegrate : 1.0.2
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-stats       : 1.0.0
cocoapods-trunk       : 1.3.0
cocoapods-try         : 1.1.0


### Error


RuntimeError - [Xcodeproj] Unknown object version.
/usr/local/Cellar/cocoapods/1.4.0/libexec/gems/xcodeproj-1.5.4/lib/xcodeproj/project.rb:217:in `initialize_from_file'
/usr/local/Cellar/cocoapods/1.4.0/libexec/gems/xcodeproj-1.5.4/lib/xcodeproj/project.rb:102:in `open'
/usr/local/Cellar/cocoapods/1.4.0/libexec/gems/cocoapods-1.4.0/lib/cocoapods/command/init.rb:41:in `validate!'
/Library/Ruby/Gems/2.3.0/gems/claide-1.0.2/lib/claide/command.rb:333:in `run'
/usr/local/Cellar/cocoapods/1.4.0/libexec/gems/cocoapods-1.4.0/lib/cocoapods/command.rb:52:in `run'
/usr/local/Cellar/cocoapods/1.4.0/libexec/gems/cocoapods-1.4.0/bin/pod:55:in `<top (required)>'
/usr/local/Cellar/cocoapods/1.4.0/libexec/bin/pod:22:in `load'
/usr/local/Cellar/cocoapods/1.4.0/libexec/bin/pod:22:in `<main>'


――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

[!] Oh no, an error occurred.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=%5BXcodeproj%5D+Unknown+object+version.&type=Issues

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md

Don't forget to anonymize any private data!

Looking for related issues on cocoapods/cocoapods...
 - Pod Update: RuntimeError - [Xcodeproj] Unknown object version. Xcode Beta 5
   https://github.com/CocoaPods/CocoaPods/issues/8003 [closed] [17 comments]
   a day ago

 - RuntimeError - [Xcodeproj] Unknown object version.
   https://github.com/CocoaPods/CocoaPods/issues/7697 [closed] [28 comments]
   3 weeks ago

 - Pod init. Unknown object version
   https://github.com/CocoaPods/CocoaPods/issues/7907 [closed] [2 comments]
   03 Jul 2018

and 42 more at:
https://github.com/cocoapods/cocoapods/search?q=[Xcodeproj]%20Unknown%20object%20version.&type=Issues&utf8=?

這種失敗原因是Cocoapods和xcodeproj版本兼容問題坯辩。

嘗試了網(wǎng)上的解決辦法Run gem install xcodeproj:1.4.1,依然失敗崩侠。

解決辦法:打開項(xiàng)目漆魔,在Project Document下將Project Format從Xcode 9.3-compatible修改為Xcode 8.0-compatible即可。

Xocde_project_format

十二却音、在pod中引入項(xiàng)目文件報(bào)錯(cuò)(file not found)

在開發(fā)中有時(shí)候需要在pod中import項(xiàng)目中的文件進(jìn)行調(diào)試或測試(當(dāng)然這種情況比較少見)改抡,但是當(dāng)你輸入import的時(shí)候會(huì)發(fā)現(xiàn)系統(tǒng)根本沒法聯(lián)想到你想用的項(xiàng)目中的文件,即使你手動(dòng)寫入系瓢,也會(huì)報(bào)file not found的錯(cuò)誤阿纤。

此時(shí),可以在我們的Pods項(xiàng)目中的Build settings下找到 User Header Search Paths夷陋,添加一行阵赠,并設(shè)置$(SRCROOT)/..為recursive。注意有/..肌稻,意思是在上級目錄下遞歸查找文件。

十三匕荸、清除本地緩存(version重用)

如果在某個(gè)tag下(假設(shè)WTTestPodCache-v0.0.1)驗(yàn)證私有pod失敗爹谭,修改代碼后,我們還希望使用這個(gè)版本號而不是去修改podspec文件中的version字段榛搔。我們就需要清除Pod的本地緩存了诺凡,否則會(huì)因?yàn)樵搕ag對應(yīng)的緩存問題东揣,還是一樣驗(yàn)證不過。這時(shí)候我們需要先把代碼修改正確后提交腹泌,然后把本地和遠(yuǎn)程的原tag刪除嘶卧,最后在最新代碼節(jié)點(diǎn)上打一個(gè)相同的tag提交再次提交驗(yàn)證。---參考:CocoaPods清理本地緩存

我們在驗(yàn)證的時(shí)候加上--verbose參數(shù)凉袱,會(huì)看到CocoaPods有如下拷貝操作:

copyfromto.png

copying XXX from 后面跟著的就是本地緩存的地址芥吟,進(jìn)入該路徑下會(huì)看到WTTestPodCache,我們刪除本地和遠(yuǎn)程tag后专甩,本地該緩存依然存在钟鸵,當(dāng)執(zhí)行pod cache clean WTTestPodCache后,本地該緩存就不存在了涤躲,在驗(yàn)證私有Pod時(shí)CocoaPods就會(huì)嘗試再次從遠(yuǎn)程拉取棺耍。

  • 查看本地緩存列表 pod cache list

  • 清除本地緩存 pod cache clean XXX

十四、集成MobileVLCKit時(shí)報(bào)錯(cuò)Lzma library error

如果在驗(yàn)證pod种樱,安裝某個(gè)庫時(shí)報(bào)Lzma庫的錯(cuò)誤:

ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/tar xf /var/folders/tf/jlbz0pq91m16571fgc7ywbk80000gn/T/d20191016-38557-1l50cyi/file.txz -C /var/folders/tf/jlbz0pq91m16571fgc7ywbk80000gn/T/d20191016-38557-1l50cyi

MobileVLCKit-binary/MobileVLCKit.framework/MobileVLCKit: Lzma library error:  No progress is possible
tar: Error exit delayed from previous errors.

這屬于pod依賴的這個(gè)庫的壓縮包解壓失敗了蒙袍,Lzma library是用來解壓用的,如果壓縮包損壞了嫩挤,會(huì)導(dǎo)致解壓失敗害幅,從而報(bào)這個(gè)錯(cuò)誤,此時(shí)需要檢查壓縮包是否正常俐镐。

十五矫限、本地多個(gè)Ruby環(huán)境導(dǎo)致pod執(zhí)行失敗

如果執(zhí)行任意pod指令都失敗,失敗信息像下面這樣:

Ignoring ffi-1.13.1 because its extensions are not built. try: gem pristine ffi —version 1.13.1
Ignoring gem-wrappers-1.4.0 because its extensions are not builts. Try: gem pristine gem-wrappers —version 1.4.0
Traceback (most recent call last):
    23: from /USR/LOCAL/BIN/pod:23:in `<main>`
    22: from /USR/LOCAL/BIN/pod:23:in `load`
    21: from /Users/username/.rvm/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0/gems/cocoapods-1.9.3/bin/pod:36:in `<top (required)>`
    20: from /System/Library/Frameworks/Ruby.frameworks/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require`

如果是這樣子的話佩抹,根據(jù)錯(cuò)誤提示說明是本地有多個(gè)Ruby環(huán)境導(dǎo)致的叼风,應(yīng)該是中途什么時(shí)候看了一些教程安裝了rvm然后又裝了個(gè)Ruby,刪除rvm目錄下的Ruby即可棍苹。

十六无宿、慎用--skip-import-validation與--skip-tests

如果pod怎么都驗(yàn)證不過,始終只有這么一條提示([iOS] xcodebuild: Returned an unsuccessful exit code)枢里,沒有任何其他ERROR信息孽鸡,可以加上這兩個(gè)選項(xiàng)了讓pod驗(yàn)證通過。
--skip-tests: 在驗(yàn)證期間跳過構(gòu)建和運(yùn)行測試
--skip-import-validation: 跳過驗(yàn)證pod是否可以導(dǎo)入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栏豺,一起剝皮案震驚了整個(gè)濱河市彬碱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奥洼,老刑警劉巖巷疼,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異灵奖,居然都是意外死亡嚼沿,警方通過查閱死者的電腦和手機(jī)估盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骡尽,“玉大人遣妥,你說我怎么就攤上這事∨氏福” “怎么了箫踩?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辨图。 經(jīng)常有香客問我班套,道長,這世上最難降的妖魔是什么故河? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任吱韭,我火速辦了婚禮,結(jié)果婚禮上鱼的,老公的妹妹穿的比我還像新娘理盆。我一直安慰自己,他們只是感情好凑阶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布猿规。 她就那樣靜靜地躺著,像睡著了一般宙橱。 火紅的嫁衣襯著肌膚如雪姨俩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天师郑,我揣著相機(jī)與錄音环葵,去河邊找鬼。 笑死宝冕,一個(gè)胖子當(dāng)著我的面吹牛张遭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播地梨,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼菊卷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宝剖?” 一聲冷哼從身側(cè)響起洁闰,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎万细,沒想到半個(gè)月后扑眉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年襟雷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁烹。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸弄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卓缰,到底是詐尸還是另有隱情计呈,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布征唬,位于F島的核電站捌显,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏总寒。R本人自食惡果不足惜扶歪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摄闸。 院中可真熱鬧善镰,春花似錦、人聲如沸年枕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熏兄。三九已至品洛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摩桶,已是汗流浹背桥状。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留典格,地道東北人岛宦。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像耍缴,于是被迫代替她去往敵國和親砾肺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容