xcode 选择configuraftions 打包_分利宝IOS自动化打包
前言
在iOS開發中,我們常用的打包上傳方式就是用Xcode的archive方式打包。到了測試階段,需要頻繁的打包提交到測試平臺,整個流程包括:編譯-打包-上傳,整個過程需要我們去堅守每一步操作,提交app store同樣免不了一系列復雜動手操作過程。
對此,我們研究了iOS自動化打包,通過使用shell腳本,輸入命令,一鍵打包上傳,提高工作效率。
在了解自動化打包之前,我們先看下我們傳統的打包方式:
第一種打包方式:傳統打包方式(archive方式)
就是我們的傳統打包方式——利用Xcode進行archive(歸檔)操作,通過編譯、build構建、Archive存檔、Export導出ipa。
打包前準備工作: 設置好對應版本號,證書正確配置,或使用自動管理證書,然后選擇通用設備; 開始進行achive歸檔打包:點擊左上角product——>achive:如下圖:
通過編譯歸檔之后生成archive文件,再點擊右側的distribute App,如下圖:
然后選擇打包環境,如下圖,第1種: 生產環境,上傳到appStore的;第2種: 測試環境的上傳到蒲公英或fir上的;第3種:用于企業賬號發布;第4種: 開發調試用的,debug模式會輸出日志信息。開發測試一般用第2種或第4種。
按提示點擊next下一步操作,最后export導出來,會生成一個文件夾,里面裝了ipa包,就是我們需要上傳ipa包。通過xcode自帶的插件工具Application Locader(通過右擊Xcode圖標選擇Open Developer Tool)選擇ipa包上傳就行了。
第二種打包方式:也可以通過生成文件Payload文件夾,生成ipa包
操作步驟:
打包前準備:同樣要相關證書的配置,編譯能通過不報錯。 選擇要編譯的Shcheme,然后command+B編譯成功,在products文件夾里可以看到由之前的紅色變成了黑色如下圖:上圖(編譯前),下圖(編譯后)
右鍵編譯后的Projudct,show in Finder里面找到這個app如下圖:
在桌面建一個文件夾叫“Payload”,注意一個字母也不能改,然后把這個app放入這個文件夾里,壓縮成zip,再修改后綴為.ipa。上傳操作同第一種方式一樣。
自動化打包上傳
打包原理:
主要是通過shell腳本實現archive->生成ipa->上傳到第三方平臺(Fir.im 、蒲公英)或 App store這一系列過程的自動化。
準備工作:安裝fir-cli插件
打開終端輸入sudo gem install fir-cli,如下圖,這里輸入命令安裝的時候要注意下權限問題。
// 安裝指令
gem sudo install fir-cli
對于沒有安裝過rvm的,需要安裝rvm(一個命令行工具,可以提供一個便捷的多版本 Ruby 環境的管理和切換)
安裝rvm,網上有大把的教程。
相關環境配置、shell腳本編寫
根據需求,我這里做了3種環境配置,appStore、ad-hoc、development三種環境plist文件添加和設置,如下圖
用xcode創建這三份plist文件放在當前工程目錄里。這里制作了一份通用shell腳本(以fir和appStore為例):
#先清理目錄(由于歷史編譯存留的文件)
if [ -d ./ipaDir ];
then
rm -rf ./ipaDir
fi
if [ -d ./build ];
then
rm -rf ./build
fi
#ipa包存放路徑
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}
#輸入1:appStore(發布) ?2:ad-hoc(開發-測試) 3:dev(開發-測試)
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc 3:dev] "
read number
while([[ $number != 1 ]] && [[ $number != 2 ]] && [[ $number != 3 ]])
do
echo "Error! Should enter 1 or 2 or 3"
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc 3:dev] "
read number
done
#appStore
if [ $number == 1 ];then
development_mode=Release
exportOptionsPlistPath=${project_path}/exportAppstore.plist
exportIpaPath=${project_path}/ipaDir/${development_mode}
#ad-hoc
elif [ $number == 2 ];then
development_mode=Release
exportOptionsPlistPath=${project_path}/exportTest.plist
#dev
else
scheme_name=fenlibao_iphone_DEV
development_mode=Debug
exportOptionsPlistPath=${project_path}/exportTest_DEV.plist
fi
echo '/// 正在編譯工程:'${development_mode}
echo '///-----------'
#如果工程不是.xcworkspace類型而是.xcodeproj類型,則下面的.xcworkspace換成.xcodeproj
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive ?-quiet ?|| exit
echo '///--------'
echo '/// 打包中...'
echo '///--------'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
echo '///-------------'
echo '/// 開始上傳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 XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
else
#上傳到Fir
# 將XXX替換成自己的Fir平臺的token
fir login -T XXX
fir publish $exportIpaPath/$scheme_name.ipa
fi
exit 0
把shell腳本和三個plist配置文件放在工程目錄下,將shell腳本做相應修改:
換成自己項目的工程名和scheme名稱
#工程名 將XXX替換成自己的工程名
project_name=XXX
#scheme名 將XXX替換成自己的sheme名
scheme_name=XXX
下面代碼是在上傳appStore的時候需要知道appleID 和密碼
#驗證并上傳到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 XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
這里要注意的一點就是對于開啟了雙重認證的賬號,密碼不是賬號登錄密碼,而是app專用密碼,app專用密碼是要在開啟雙重認證之后,需要自己去開發者網站的用戶信息設置里去生成。
在上傳fir內測平臺的時候要自己fir平臺的token,進入fir我的應用去獲取token,獲取方式如下圖:
以上就完成了自動化的所有配置。1個shell腳本,3個plist文件對應三種打包環境,文件位置如下:
開啟一鍵打包上傳
接下來就是一行命令執行自動化打包上傳:
打開終端,cd到要打包的工程目錄下,輸入"./shell.sh" 回車,如下
這里會讓你選擇之前配置的3種環境中的一種環境,只能輸入1、2、3,如果輸入其他的數字會無效,讓你重新輸入,輸入之后回車就開始執行自動化打包上傳操作了,上傳成功顯示如下:
自動化打包注意事項
打包之前,確保證書配置正確,配置plist文件里面的compileBitcode設置為false,否則會打包報錯;
fir-cli安裝時由于系統版本原因會提示各種權限不足,解決方式: sudo gem install-n/usr/local/bin fir-cli;
根據工程類型是.xcodeproj類型還是.workspace,腳本編譯代碼改成相應的工程類型;
打包到appStore的時候,對于開啟雙重認證的開發者賬號,密碼必須為賬戶的app專用密碼,而不是開發者賬號的登錄密碼。
總結
傳統的打包方式耗費了我們開發者更多的時間和體力,而且效率低下,出錯率也要偏高;利用shell腳本自動化打包,降低了人工操作成本,加快了工作效率。
- END -
更多推薦內容
《分利寶微服務實踐》
《看看前端自動化構建,我們是這樣做的》
《Pytest進行UI自動化測試實用操作》
《每個Android開發都必須知道的利器》
《kubernetes 單master集群的搭建》
總結
以上是生活随笔為你收集整理的xcode 选择configuraftions 打包_分利宝IOS自动化打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql是自动表锁定吗_MySQL数据
- 下一篇: dz mysql日志清理_Discuz教