iOS 高效開發(fā)必備技巧之自動化打包(shell xcode11 上傳App Store 蒲公英等平臺)

閑話不說裙秋,直接來干貨牺堰。

內(nèi)容概況

1.shell 打包導出ipa 包,自動上傳 App Store搅裙、蒲公英皱卓、Fir等

今日親測驗證 xcode11 下,App Store上傳成功部逮,蒲公英上傳成功復制代碼

2.準備工作

腳本文件娜汁、檢測證書匹配性 拿到需要用到的各平臺參數(shù)復制代碼

3.打包過程中遇到的問題及解決方案

針對xcode10和xcode11出來的一些問題的特別說明其他問題復制代碼

4.參考文獻

之前收藏的幾篇不錯的博客,供大家一起分享學習甥啄。復制代碼

5.延續(xù)看圖說話的方式進行分享存炮。


操作步驟

涉及到的文件有3個:

腳本文件:https://github.com/kepuna/archiveScript


涉及的腳本文件

將這3個文件放到工程內(nèi),具體安放位置見下圖:


腳本文件存放位置

其中exportAppStore.plist 也做了相應的修改,具體見圖:


上傳App Store plist文件修改

exportTest.plist 具體內(nèi)容見圖:


上傳蒲公英之類的平臺的plist文件

備注一下:我在:https://github.com/kepuna/archiveScript?這個基礎上進行了改造穆桂,需要注意的點都進行了詳細的備注宫盔,改造內(nèi)容如下:


#使用方法

if[ ! -d ./IPADir ];

then

mkdir -p IPADir;

fi

#工程絕對路徑

project_path=$(cd`dirname $0`;pwd)

#工程名 將XXX替換成自己的工程名

project_name= XXX

#scheme名 將XXX替換成自己的sheme名

scheme_name=XXX

#打包模式 Debug/Release

development_mode=Debug

#build文件夾路徑

build_path=${project_path}/build

#plist文件所在路徑

exportOptionsPlistPath=${project_path}/exportTest.plist

#導出.ipa文件所在路徑

exportIpaPath=${project_path}/IPADir/${development_mode}

echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "

##

readnumber

while([[ $number !=1]] && [[ $number !=2]])

do

echo "Error! Should enter 1 or 2"

echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "

readnumber

done

if[ $number ==1];then

development_mode=Release

exportOptionsPlistPath=${project_path}/exportAppstore.plist

else

development_mode=Debug

exportOptionsPlistPath=${project_path}/exportTest.plist

fi

echo '///-----------'

echo '/// 正在清理工程'

echo '///-----------'

xcodebuild \

clean -configuration ${development_mode} -quiet? ||exit

echo '///--------'

echo '/// 清理完成'

echo '///--------'

echo ''

echo '///-----------'

echo'/// 正在編譯工程:'${development_mode}

echo '///-----------'

?# UseModernBuildSystem 編譯模式,NO 采用傳統(tǒng)的(legacy build system)享完,YES采用現(xiàn)在的(new build system)

?# 工程里面有pod 使用 archive -workspace ${project_path}/${project_name}.xcworkspace

?# 工程里面沒有pod 使用? archive -project ${project_name}.xcodeproj

xcodebuild \

-UseModernBuildSystem=NO \

archive -workspace ${project_path}/${project_name}.xcworkspace \

-scheme ${scheme_name} \

-configuration ${development_mode} \

-archivePath ${build_path}/${project_name}.xcarchive? -quiet? ||exit

echo '///--------'

echo '/// 編譯完成'

echo '///--------'

echo ''

echo '///----------'

echo '/// 開始ipa打包'

echo '///----------'

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \

-configuration ${development_mode} \

-exportPath ${exportIpaPath} \

-exportOptionsPlist ${exportOptionsPlistPath} \

-quiet ||exit

if[ -e $exportIpaPath/$scheme_name.ipa ];then

echo '///----------'

echo '/// ipa包已導出'

echo '///----------'

open $exportIpaPath

else

echo '///-------------'

echo '/// ipa包導出失敗 '

echo '///-------------'

fi

echo '///------------'

echo '/// 打包ipa完成? '

echo '///-----------='

echo ''

echo '///-------------'

echo '/// 開始發(fā)布ipa包 '

echo '///-------------'

if[ $number ==1];then

#驗證并上傳到App Store

# 將-u 后面的XXX替換成自己的AppleID的賬號灼芭,-p后面的XXX替換成自己的密碼

#altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"

#"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u "XXXXXXXXX" -p "XXXXXXX" -t ios --output-format xml

#"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u? "XXXXXXX" -p "XXXXXXX" -t ios --output-format xml

# 驗證并上傳到APP Store? xcode11之后方法? 驗證成功

# apiKey apiIssuer? 蘋果后臺找? 下面用XXXXX 代替

xcrun altool --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -t ios --apiKey"XXXXX"--apiIssuer"XXXXXXXXXX-XXXXX-XXXXX-XXXXX-XXXXXXXXXX"--verbose

xcrun altool --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -t ios --apiKey"XXXXX"--apiIssuer"XXXXXXXXXX-XXXXX-XXXXX-XXXXX-XXXXXXXXXX"--verbose

else

##上傳到Fir? 沒有進行實名認證,暫不驗證

## 將XXX替換成自己的Fir平臺的token

#fir login -T XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

#fir publish $exportIpaPath/$scheme_name.ipa

#上傳蒲公英? 成功驗證

#uKey? _api_key 將用XXXXX代替般又,在蒲公英里面找

echo '/+++++++ 上傳蒲公英 +++++++/'

curl -F"file=@$exportIpaPath/$scheme_name.ipa"\

-F "uKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \

-F "_api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \

https://qiniu-storage.pgyer.com/apiv1/app/upload

append_path="已上傳到蒲公英"

mv $exportIpaPath $exportIpaPath$append_path

echo '/+++++++ 成功上傳到蒲公英 +++++++/'

fi

exit 0

補充:運行shell腳本:


運行腳本

需要特別提醒的地方

1.編譯模式

2.工程中是否有pod

3.上傳App Store的時候彼绷,注意xcode11 前后的命令不同

4.關于兩個plist中需要注意的地方

5.操作完一次,我們工程里面跟我們導入的3個文件同路徑下會生成2個文件茴迁,再下次再進行打包前需要刪掉寄悯,否則clean不成功,也就不會繼續(xù)打包了堕义。

如果你的工程編譯方式使用的是legacy build system 這種方式猜旬,那么我們需要做下面的操作,因為我們打包的時候倦卖,這里默認是new build system洒擦。


編譯模式和是否有pod


xcode11前后打包命令

xcode11之后,我們打包的時候怕膛,需要使用密鑰熟嫩,這個過程中多了2個參數(shù),同時還需要一個文件作為必備條件褐捻,我們這2個參數(shù)和文件的來源掸茅,見下圖:


xcode11使用密鑰打包


測試用的pilst文件修改


App Store上傳的plist文件修改


特別提醒的第五個問題

蒲公英打包的時候,需要用到的2個參數(shù)來源舍扰,見下圖:


蒲公英參數(shù)

常出現(xiàn)的一些報錯問題倦蚪,列舉幾個典型的。尤其是xcode11的問題

1.由編譯模式問題引起的問題边苹,解決方法上面截圖已寫

ld: library not found for -lAFNetworking clang: error: linker command failed with exit code 1 (use -v to see invocation)

2.xcode11 打包的時候,在沒有正確存放.private_keys 文件時候裁僧,會報下面錯誤

Could not find private key file: AuthKey_5ZGKY5BF7J.p8, in any of the following locations. ./private_keys or /private_keys or /.private_keys or /.appstoreconnect/private_keys 以下任何位置找不到私鑰文件:AuthKey_XXXXX.p8个束。

./private_keys或<用戶主目錄> / private_keys或<用戶主目錄> /。private_keys或<用戶主目錄> /聊疲。appstoreconnect / private_keys

Could not find private key file: AuthKey_4PBMS86V4B.p8, in any of the following locations.



xcode11打包問題

這個問題的具體解決方案上面已經(jīng)截圖了茬底,這次再發(fā)一遍。這塊容易出錯获洲。

補充:隱藏文件.private_keys 需要注意的點: 如果我們的根目錄阱表,沒有顯示出隱藏文件,那么我們可以使用下面兩種方式讓其顯示根目錄。

第一種:

在 macOS Sierra及以上(Mojave)最爬,我們可以使用快捷鍵 ??.(Command + Shift + .) 來快速(在 Finder 中)顯示和隱藏隱藏文件了涉馁。

第二種:

在終端使用:

//顯示隱藏文件defaults write com.apple.finder AppleShowAllFiles -booltrue

//不顯示隱藏文件defaults write com.apple.finder AppleShowAllFiles -boolfalse

最后需要重啟Finder:

重啟Finder:窗口左上角的蘋果標志-->強制退出-->Finder-->重新啟動

顯示隱藏文件之后,我們就可以在根目錄進行創(chuàng)建.private_keys 文件了爱致。

處理Private文件


運行正常

3.證書相關問題 這個具體問題需要具體分析烤送,保證 證書匹配就好了


證書問題

成功上傳蒲同英


蒲公英上傳成功

不錯的一些博客分享,這里有自動打包過程中遇到的其他問題糠悯,我們可以參考學習

http://www.cocoachina.com/articles/26201

掘金中的 daisyduan 也是我啊 帮坚,??

https://juejin.im/post/5e0373dd6fb9a01627128e2e

https://juejin.im/post/5e03370f6fb9a01633075326

https://juejin.im/post/5e05fbfe6fb9a0163514e9e9

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市互艾,隨后出現(xiàn)的幾起案子试和,更是在濱河造成了極大的恐慌,老刑警劉巖纫普,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰署,死亡現(xiàn)場離奇詭異,居然都是意外死亡局嘁,警方通過查閱死者的電腦和手機溉箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悦昵,“玉大人肴茄,你說我怎么就攤上這事〉福” “怎么了寡痰?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棋凳。 經(jīng)常有香客問我拦坠,道長,這世上最難降的妖魔是什么剩岳? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任贞滨,我火速辦了婚禮,結(jié)果婚禮上拍棕,老公的妹妹穿的比我還像新娘晓铆。我一直安慰自己,他們只是感情好绰播,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布骄噪。 她就那樣靜靜地躺著,像睡著了一般蠢箩。 火紅的嫁衣襯著肌膚如雪链蕊。 梳的紋絲不亂的頭發(fā)上事甜,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音滔韵,去河邊找鬼逻谦。 笑死,一個胖子當著我的面吹牛奏属,可吹牛的內(nèi)容都是我干的跨跨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼囱皿,長吁一口氣:“原來是場噩夢啊……” “哼勇婴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘱腥,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤耕渴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后齿兔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橱脸,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年分苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了添诉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡医寿,死狀恐怖栏赴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靖秩,我是刑警寧澤须眷,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站沟突,受9級特大地震影響花颗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惠拭,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一扩劝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧求橄,春花似錦今野、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽催什。三九已至涵亏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背气筋。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工拆内, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宠默。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓麸恍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搀矫。 傳聞我的和親對象是個殘疾皇子抹沪,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344