前言
目前維護(hù)的項(xiàng)目的CI/CD持續(xù)交付流程是通過(guò)Jenkins+Fastlane+Github搭建的。一直以來(lái)都是運(yùn)行正常,不過(guò)由于前幾天APNs證書失效息罗,就要登陸到開(kāi)發(fā)者中心重新生成一個(gè)。這時(shí)候第一個(gè)坑過(guò)來(lái)了,由于登陸的賬號(hào)是公司類型迹蛤,之前沒(méi)有做過(guò)雙重認(rèn)證,蘋果要求一定要完成雙重認(rèn)證襟士,于是無(wú)可奈何之下(個(gè)人覺(jué)得設(shè)置過(guò)程過(guò)于復(fù)雜)盗飒,就給該賬號(hào)設(shè)置了雙重認(rèn)證。生成新的APNs證書交付給后臺(tái)之后陋桂,以為就順風(fēng)順?biāo)耍ó?dāng)然逆趣,在APNs這塊沒(méi)有任何問(wèn)題),結(jié)果第二天發(fā)現(xiàn)所有commit之后嗜历,build都失敗了宣渗,查看一下Jenkins的log,如下
Error: Unable to validate your application. Sign in with the app-specific password you generated.
If you forgot the app-specific password or need to create a new one, go to appleid.apple.com
app-specific password 一下子驚醒了我梨州,我居然沒(méi)注意到賬號(hào)設(shè)置雙重認(rèn)證之后對(duì)fastlane的影響痕囱,接下來(lái)就是第二個(gè)坑:沒(méi)法關(guān)閉雙重認(rèn)證。按理來(lái)說(shuō)普通賬號(hào)去到開(kāi)發(fā)者中心的管理頁(yè)面是可以關(guān)閉雙重認(rèn)證的暴匠,但是這個(gè)account holder類型的賬號(hào)就是沒(méi)有關(guān)閉按鈕鞍恢,所以這個(gè)方案也死了心。
不過(guò)還有一條比較便捷的路每窖,就是使用另外一個(gè)沒(méi)有開(kāi)啟雙重認(rèn)證的開(kāi)發(fā)者賬號(hào)綁定到fastlane帮掉,這個(gè)方案可行,只是我目前只有自己私人的賬號(hào)窒典,不太便于項(xiàng)目管理蟆炊,注冊(cè)一個(gè)新的好像又多余,那就嘗試fastlane提供的第三種解決辦法:FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD崇败。
方案落實(shí)
- 生成一個(gè)特殊的密碼盅称,這個(gè)需要到蘋果開(kāi)發(fā)者中心的賬號(hào)管理下進(jìn)行。
- 將該密碼拷貝保留后室,記為A(你在關(guān)閉密碼的生成頁(yè)之后缩膝,就再也無(wú)法看到改密碼了)。
- 執(zhí)行 fastlane spaceauth -u xxxx@email.com岸霹。
- 將生成的session文本拷貝下來(lái)保留疾层,記為B。
- 打開(kāi)終端輸入:vim ~/.bash_profile,打開(kāi)環(huán)境變量文件贡避,進(jìn)入編輯模式痛黎。
- 設(shè)置變量:
export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=A
export FASTLANE_SESSION=B - 保存關(guān)閉予弧,重啟機(jī)器。
- 查看變量是否設(shè)置成功:
echo $FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
和
echo $FASTLANE_SESSION - 在Jenkins那邊重新build一遍湖饱,然后.....
---------------------------失敗了------------------------------
嘗試了好幾次掖蛤,
---------------------------還是失敗了------------------------------
翻了一遍fastlane的文檔查找原因,可是沒(méi)有發(fā)現(xiàn)其他紕漏。
然后再研究一下Jenkins的log井厌,發(fā)現(xiàn)fastlane每次都會(huì)去登陸蘋果開(kāi)發(fā)者賬號(hào)蚓庭,并且都登陸成功(之前在keychain下有添加了開(kāi)發(fā)者賬號(hào)和相關(guān)密碼,fastlane能找到)仅仆,并沒(méi)有嘗試走 特殊密碼 驗(yàn)證流程器赞。于是去查一下這個(gè)特殊密碼的使用方法,結(jié)果過(guò)發(fā)現(xiàn)墓拜,特殊密碼也要搭配該賬號(hào)一起使用港柜,饒了個(gè)大圈,最終只是把keychain下開(kāi)發(fā)者賬號(hào)的密碼改為特殊密碼咳榜∠淖恚坑苦了老爹呀。
最終解決方案
- 放棄前面設(shè)置變量的一頓操作涌韩。
- 使用CredentialsManager重設(shè)開(kāi)發(fā)者賬號(hào)的密碼為特殊密碼授舟。