最近在基于cocoapods做SDK開發(fā)籍救,到了版本發(fā)布日遇到了個問題胸蛛。版本發(fā)布時污茵,需要將podspec文件推送到cocoapods官方倉庫中,在推送的時候報錯葬项,校驗不通過泞当。
網(wǎng)上很多cocoapods庫開發(fā)教程,本文不再贅述民珍,只單純描述一下遇到的問題襟士。
首先執(zhí)行 pod trunk push **.podspec --allow-warnings --use-libraries --verbose,突然報錯嚷量,提示如下圖
這是一個很經(jīng)典的錯誤陋桂。在日常開發(fā)過程中,xcode10經(jīng)常會出現(xiàn)這個錯誤蝶溶,其原因是xcode10采用了New Build System章喉,之前的一些內(nèi)容無法編譯通過。常見的解決辦法是在xcode中將編譯系統(tǒng)設(shè)置為 Legacy Build System身坐。
問題來了秸脱,cocoapods在執(zhí)行pod trunk push 或者 pod lib lint時,會自動生成一個xcode工程部蛇,而此時的xcode工程由于本機是xcode10, 所以默認(rèn)就是New Build System摊唇。那怎么辦呢?
有兩個解決方法涯鲁,一個是本機安裝xcode 9巷查,使用xcode-select命令將其設(shè)置為默認(rèn)編譯器;另一個是讓cocoapods使用Legacy Build System抹腿。
第一種方法太過粗暴了岛请,本文不再贅述,我們主要看下第二種方式警绩。那如何才能讓cocoapods使用Legacy Build System呢崇败?
我們繼續(xù)看剛才的報錯,是在執(zhí)行xcodebuild的時候報錯的,也就是說cocoapods內(nèi)部會執(zhí)行xcodebuild命令后室,我們首先得知道xcodebuild是否支持編譯系統(tǒng)的選擇缩膝。慶幸的是,通過一番搜索岸霹,可以通過添加選項來使其使用Legacy Build System疾层。
那么現(xiàn)在問題來了,xcodebuild命令并不是我們手動執(zhí)行的贡避,而是pod trunk push內(nèi)部執(zhí)行的痛黎,也就是說pod會在push之前進行一次校驗,校驗的時候會使用xcodebuild來進行編譯刮吧,編譯報錯舅逸,則直接終止push。如果我們能直接修改pod命令所對對應(yīng)的校驗?zāi)_本皇筛,那么問題就迎刃而解了。
那么如何找到這個校驗?zāi)_本呢坠七?首先在終端運行 gem which cocoapods命令水醋,該命令會輸出cocoapods.rb文件路徑。
與該文件同級的目錄下有個cocoapods目錄彪置,這個目錄下就存在一個名為 validator.rb文件拄踪,該文件就是我們要找的校驗?zāi)_本文件。
那么如何修改呢拳魁?xcode打開這個文件惶桐,搜索 def xcodebuild, 在對應(yīng)的代碼塊下添加 command += %w(-UseModernBuildSystem=NO),保存即可潘懊。
再次運行pod trunk push命令姚糊,通過。