當(dāng)Fastlane遇到Xcode9打包出來(lái)不一定是ipa而是坑

Fastlane簡(jiǎn)介

Fastlane 是用Ruby語(yǔ)言編寫(xiě)的一套自動(dòng)化工具集和框架有勾,每一個(gè)工具實(shí)際都對(duì)應(yīng)一個(gè)Ruby腳本,用來(lái)執(zhí)行某一個(gè)特定的任務(wù)。Fastlane的強(qiáng)大之處虱岂,就是可以將不同的工具action有機(jī)而靈活的結(jié)合在一起,從而形成一個(gè)完整的自動(dòng)化流程菠红,大大提高了日常的開(kāi)發(fā)測(cè)試效率第岖,推薦大家使用。

背景&現(xiàn)象

公司項(xiàng)目日常開(kāi)發(fā)中试溯,已經(jīng)使用了fastlane蔑滓,配合gitlab一起實(shí)現(xiàn)自動(dòng)打包以及分發(fā),使用期間感覺(jué)很順暢遇绞,沒(méi)有出過(guò)什么問(wèn)題键袱。但是,自從Xcode升級(jí)到Xcode9正式版之后打包一直出問(wèn)題摹闽,打不了包蹄咖。

環(huán)境配置

fastlane版本: 2.59.0

| Key                         | Value                                       |
| --------------------------- | ------------------------------------------- |
| OS                          | 10.13                                       |
| Ruby                        | 2.3.3                                       |
| Bundler?                    | false                                       |
| Git                         | git version 2.13.5 (Apple Git-94)           |
| Installation Source         | ~/.rvm/gems/ruby-2.3.3/bin/fastlane         |
| Host                        | Mac OS X 10.13 (17A365)                     |
| Ruby Lib Dir                | ~/.rvm/rubies/ruby-2.3.3/lib                |
| OpenSSL Version             | OpenSSL 1.0.2k  26 Jan 2017                 |
| Is contained                | false                                       |
| Is homebrew                 | false                                       |
| Is installed via Fabric.app | false                                       |
| Xcode Path                  | /Applications/Xcode.app/Contents/Developer/ |
| Xcode Version               | 9.0                                         |

*generated on:* **2017-09-30**

工程項(xiàng)目中 provisioning profile(以下簡(jiǎn)稱(chēng)pp文件),靈活運(yùn)用了match這個(gè)action外加手動(dòng)配置付鹿。

工程配置

錯(cuò)誤描述:

error

看到了框框的那句話(huà)澜汤,剛開(kāi)始以為是推送證書(shū)或者是provisioning profile的問(wèn)題铝量,然后手動(dòng)在此執(zhí)行了match,把證書(shū)什么的里里外外更新了一遍银亲,發(fā)現(xiàn)還是不起作用。沒(méi)辦法纽匙,只能翻看github 看看issue务蝠,看看有木有類(lèi)似的處理方案。

原因
image

所以說(shuō)烛缔,在執(zhí)行xcode -exportArchive的時(shí)候馏段,因?yàn)闄?quán)限訪(fǎng)問(wèn)鑰匙串,所以無(wú)法讀取到項(xiàng)目工程里的pp文件践瓷,進(jìn)而打包失敗院喜,并且報(bào)錯(cuò)說(shuō)缺少pp文件。

所以解決方法晕翠,在你的fastfile里gym action加入 allowProvisioningUpdates

gym(
    scheme: scheme,
    export_method: "ad-hoc",
    silent:true,
    output_directory:outputDirectory,
    output_name:ipaName,
    archive_path:outputDirectory,
    export_xcargs: "-allowProvisioningUpdates",
)

保存喷舀,再執(zhí)行一次打包命令,請(qǐng)注意淋肾,這個(gè)時(shí)候xcode會(huì)彈窗讓你確認(rèn)硫麻,點(diǎn)一直允許就是了。特別注意的是樊卓,如果和我們公司一樣的環(huán)境拿愧,那么那臺(tái)遠(yuǎn)程打包的服務(wù)器,在更新完fastfile第一次跑的時(shí)候碌尔,要遠(yuǎn)程連接上去手動(dòng)點(diǎn)擊確認(rèn)框浇辜,不然打包腳本就會(huì)一直卡在那里。

image

到此為止唾戚,Xcode9讀取鑰匙串權(quán)限的問(wèn)題就結(jié)束了柳洋。

但是,你以為這樣就結(jié)束了嗎颈走?就能打包成功了嗎膳灶?

緊接著又是另外一個(gè)錯(cuò)誤:

[圖片上傳失敗...(image-cde4d3-1527750575757)]

WTF,明明打包方式是ad-hoc立由,但是匹配的pp文件確是AppStore的轧钓?????

這必然是個(gè)坑

在此打開(kāi)了[官方文檔]看到了這么一句話(huà)

image

翻譯一下,如果你們沒(méi)用match這個(gè)action锐膜,來(lái)管理pp文件毕箍,我們推薦你在fastfile里面,自己定義一個(gè)map道盏,指定bundleID 和 pp文件而柑,以保證能夠正常構(gòu)建app文捶。但是我在文章開(kāi)頭就po圖了,我項(xiàng)目工程里的pp文件都是用match來(lái)管理的媒咳。所以剛開(kāi)始粹排,這段話(huà)被我忽略了。后續(xù)又是一陣在github issue上漫游涩澡。https://github.com/fastlane/fastlane/issues/10315 找到一個(gè)類(lèi)似的問(wèn)題顽耳。

既然bundleID,或者pp文件不對(duì)妙同,那我能不能?chē)L試著主動(dòng)寫(xiě)死正確的bundleID和pp文件名射富,放進(jìn)fastfile?

于是把gym加了個(gè)參數(shù)粥帚,不同環(huán)境下指定好:

        gym(
            scheme: scheme,
            export_method: "ad-hoc",
            silent:true,
            output_directory:outputDirectory,
            output_name:ipaName,
            archive_path:outputDirectory,
            export_xcargs: "-allowProvisioningUpdates",
            export_options: {
                provisioningProfiles: {
                    app_identifier => "match AdHoc #{app_identifier}"
                }
            }
        )

保存胰耗,重新run打包腳本,終于可以成功打包了????芒涡。

簡(jiǎn)單說(shuō)說(shuō)Xcode8和9打包

筆者由于fastlane問(wèn)題沒(méi)解決柴灯,所以這期間打包工作都是手動(dòng)完成的,Product - Archive然后等待Xcode自動(dòng)打费尽,這些操作相信大家都會(huì)的弛槐,不多說(shuō)了。選擇測(cè)試包之后依啰,彈出框框問(wèn)你是否瘦身乎串,一般別管就是。然后重點(diǎn)來(lái)了速警,相比Xcode8多了這么個(gè)頁(yè)面:

image

選擇pp文件叹誉,從網(wǎng)絡(luò)獲取,Xcode必須要登錄開(kāi)發(fā)者賬號(hào)闷旧,從賬號(hào)里面拉取相關(guān)pp文件长豁,還要自己選擇是哪個(gè)。

image

平時(shí)的測(cè)試包選擇“ad-hoc”就是忙灼,然后接著生產(chǎn)ipa匠襟。在Xcode8里,最終生成的一個(gè)ipa文件夾该园,里面就一個(gè)ipa酸舍,但是xcode9除了ipa之外,還有一些其他的東西里初,如下圖啃勉。


image

除了ipa之外,有個(gè)東西引起了我的注意ExportOptions.plist 預(yù)覽了一下這個(gè)plist双妨,里面就記錄了剛剛上幾步的一些選擇項(xiàng)淮阐。比如瘦身選項(xiàng)叮阅,還有個(gè)很關(guān)鍵的東西provisioningProfile這個(gè)字段是個(gè)dictionary。

image

難道沒(méi)有一種似曾相識(shí)的趕腳泣特?

再次看看這張圖:

image

紅框框的部分的最后浩姥,說(shuō)的plist就是它。這個(gè)就是Xcode在導(dǎo)出ipa的時(shí)候一些參數(shù)状您。另外及刻,手動(dòng)Xcode打包和在終端里面敲 xcodebuild -archivePath,xcodebuild -exportArchive -exportOptionsPlist 本質(zhì)是一樣的竞阐,都是打包,參數(shù)就是同一個(gè)暑劝。
再回過(guò)頭來(lái)骆莹,看看我們最終的解決方案,我們?cè)趃ym中添加了一個(gè)字段担猛,就是在寫(xiě)參數(shù)而已

export_options: {
                provisioningProfiles: {
                    app_identifier => "match AdHoc #{app_identifier}"
                }
            } 

可能原因

到這一步幕垦,在回頭看看以上出現(xiàn)的bundleID和PP文件不匹配錯(cuò)誤,在用match管理pp文件的前提下傅联,有可能是因?yàn)閄code9引起的問(wèn)題先改,打包流程或者參數(shù)讀寫(xiě)哪里有點(diǎn)變化,需要fastlane團(tuán)隊(duì)做進(jìn)一步適配更新蒸走。上文中issue的鏈接狀態(tài)到截止筆者寫(xiě)作完成之時(shí)仇奶,任是在open狀態(tài)。所以這個(gè)原因有待關(guān)注比驻,當(dāng)然也希望能有大佬在指出原因该溯,感激不盡~

至此為止,踩過(guò)的坑全部都填平了别惦。不光是fastlane狈茉,用其他的一些工具或者第三方的時(shí)候還是要多多關(guān)注github上的issue,這里是塊大大寶藏掸掸,等待被你挖掘氯庆!

更多技術(shù)面試題與非技術(shù)面試題可以加我QQ:2673218363 QQ群:725611317

作為一個(gè)開(kāi)發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要這是一個(gè)我的iOS交流群:725611317扰付,不管你是小白還是大牛歡迎入駐 堤撵,分享BAT,阿里面試題、面試經(jīng)驗(yàn)羽莺,討論技術(shù)粒督, 大家需要資料的加小編群哦!

1.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禽翼,一起剝皮案震驚了整個(gè)濱河市屠橄,隨后出現(xiàn)的幾起案子族跛,更是在濱河造成了極大的恐慌,老刑警劉巖锐墙,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礁哄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡溪北,警方通過(guò)查閱死者的電腦和手機(jī)桐绒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)之拨,“玉大人茉继,你說(shuō)我怎么就攤上這事∈辞牵” “怎么了烁竭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)吉挣。 經(jīng)常有香客問(wèn)我派撕,道長(zhǎng),這世上最難降的妖魔是什么睬魂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任终吼,我火速辦了婚禮,結(jié)果婚禮上氯哮,老公的妹妹穿的比我還像新娘际跪。我一直安慰自己,他們只是感情好喉钢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布垫卤。 她就那樣靜靜地躺著,像睡著了一般出牧。 火紅的嫁衣襯著肌膚如雪穴肘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天舔痕,我揣著相機(jī)與錄音评抚,去河邊找鬼。 笑死伯复,一個(gè)胖子當(dāng)著我的面吹牛慨代,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啸如,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侍匙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了叮雳?” 一聲冷哼從身側(cè)響起想暗,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妇汗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后说莫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杨箭,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年储狭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了互婿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辽狈,死狀恐怖慈参,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刮萌,我是刑警寧澤驮配,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站尊勿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畜侦。R本人自食惡果不足惜元扔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旋膳。 院中可真熱鬧澎语,春花似錦、人聲如沸验懊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)义图。三九已至减俏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碱工,已是汗流浹背娃承。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怕篷,地道東北人历筝。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像廊谓,于是被迫代替她去往敵國(guó)和親梳猪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 背景:Xcode更新9.4蒸痹,Application Loader還是3.0(為了方便春弥,應(yīng)用拷貝出來(lái)放在應(yīng)用程序中)...
    崠崠閱讀 879評(píng)論 3 1
  • 1呛哟、安裝 Window安裝: msi安裝包https://piccolo.link/sbt-0.13.16.msi...
    sz_土狼閱讀 330評(píng)論 0 0
  • 老是會(huì)聽(tīng)到身邊人抱怨說(shuō)"哎呀竖共,我什么時(shí)候才能擁有女神那樣雪白光澤的皮膚啊俺祠!我的臉怎么就不能小一點(diǎn)呢公给?我已經(jīng)吃得這么...
    這座島閱讀 267評(píng)論 0 0
  • 思想是在語(yǔ)言中生成的 熟悉的地方?jīng)]有風(fēng)景 生命最好的回應(yīng)是活得很快樂(lè) 二十多歲時(shí)結(jié)交一個(gè)四十多歲的朋友;四十多歲時(shí)...
    何啊精閱讀 202評(píng)論 0 0
  • 又是一個(gè)小雨天蜘渣,整個(gè)天空灰蒙蒙一片淌铐,失去了原有的那一份光彩,狂風(fēng)呼嘯著蔫缸,攜裹著暴雨腿准,背著不防水的背包,撐著會(huì)淋雨的...
    笛笳閱讀 227評(píng)論 0 0