日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xcode 选择configuraftions 打包_分利宝IOS自动化打包

發(fā)布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xcode 选择configuraftions 打包_分利宝IOS自动化打包 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

在iOS開發(fā)中,我們常用的打包上傳方式就是用Xcode的archive方式打包。到了測試階段,需要頻繁的打包提交到測試平臺,整個流程包括:編譯-打包-上傳,整個過程需要我們?nèi)?jiān)守每一步操作,提交app store同樣免不了一系列復(fù)雜動手操作過程。

對此,我們研究了iOS自動化打包,通過使用shell腳本,輸入命令,一鍵打包上傳,提高工作效率。

在了解自動化打包之前,我們先看下我們傳統(tǒng)的打包方式:

第一種打包方式:傳統(tǒng)打包方式(archive方式)

就是我們的傳統(tǒng)打包方式——利用Xcode進(jìn)行archive(歸檔)操作,通過編譯、build構(gòu)建、Archive存檔、Export導(dǎo)出ipa。

打包前準(zhǔn)備工作: 設(shè)置好對應(yīng)版本號,證書正確配置,或使用自動管理證書,然后選擇通用設(shè)備; 開始進(jìn)行achive歸檔打包:點(diǎn)擊左上角product——>achive:如下圖:

通過編譯歸檔之后生成archive文件,再點(diǎn)擊右側(cè)的distribute App,如下圖:

然后選擇打包環(huán)境,如下圖,第1種: 生產(chǎn)環(huán)境,上傳到appStore的;第2種: 測試環(huán)境的上傳到蒲公英或fir上的;第3種:用于企業(yè)賬號發(fā)布;第4種: 開發(fā)調(diào)試用的,debug模式會輸出日志信息。開發(fā)測試一般用第2種或第4種。

按提示點(diǎn)擊next下一步操作,最后export導(dǎo)出來,會生成一個文件夾,里面裝了ipa包,就是我們需要上傳ipa包。通過xcode自帶的插件工具Application Locader(通過右擊Xcode圖標(biāo)選擇Open Developer Tool)選擇ipa包上傳就行了。

第二種打包方式:也可以通過生成文件Payload文件夾,生成ipa包

操作步驟:

打包前準(zhǔn)備:同樣要相關(guān)證書的配置,編譯能通過不報(bào)錯。 選擇要編譯的Shcheme,然后command+B編譯成功,在products文件夾里可以看到由之前的紅色變成了黑色如下圖:上圖(編譯前),下圖(編譯后)

右鍵編譯后的Projudct,show in Finder里面找到這個app如下圖:

在桌面建一個文件夾叫“Payload”,注意一個字母也不能改,然后把這個app放入這個文件夾里,壓縮成zip,再修改后綴為.ipa。上傳操作同第一種方式一樣。

自動化打包上傳

打包原理:

主要是通過shell腳本實(shí)現(xiàn)archive->生成ipa->上傳到第三方平臺(Fir.im 、蒲公英)或 App store這一系列過程的自動化。

準(zhǔn)備工作:安裝fir-cli插件

打開終端輸入sudo gem install fir-cli,如下圖,這里輸入命令安裝的時候要注意下權(quán)限問題。

// 安裝指令

gem sudo install fir-cli

對于沒有安裝過rvm的,需要安裝rvm(一個命令行工具,可以提供一個便捷的多版本 Ruby 環(huán)境的管理和切換)

安裝rvm,網(wǎng)上有大把的教程。

相關(guān)環(huán)境配置、shell腳本編寫

根據(jù)需求,我這里做了3種環(huán)境配置,appStore、ad-hoc、development三種環(huán)境plist文件添加和設(shè)置,如下圖

用xcode創(chuàng)建這三份plist文件放在當(dāng)前工程目錄里。這里制作了一份通用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

#腳本執(zhí)行目錄/工程絕對路徑

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

#導(dǎo)出.ipa文件所在路徑

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

#輸入1:appStore(發(fā)布) ?2:ad-hoc(開發(fā)-測試) 3:dev(開發(fā)-測試)

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

#驗(yàn)證并上傳到App Store

# 將-u 后面的XXX替換成自己的AppleID的賬號,-p后面的XXX替換成自己的密碼(注:如果已開啟雙重認(rèn)證,則密碼為專用密碼,專用密碼要在開啟雙重認(rèn)證后才能開啟)

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腳本做相應(yīng)修改:

換成自己項(xiàng)目的工程名和scheme名稱

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

project_name=XXX

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

scheme_name=XXX

下面代碼是在上傳appStore的時候需要知道appleID 和密碼

#驗(yàn)證并上傳到App Store

# 將-u 后面的XXX替換成自己的AppleID的賬號,-p后面的XXX替換成自己的密碼(注:如果已開啟雙重認(rèn)證,則密碼為專用密碼,專用密碼要在開啟雙重認(rèn)證后才能開啟)

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

這里要注意的一點(diǎn)就是對于開啟了雙重認(rèn)證的賬號,密碼不是賬號登錄密碼,而是app專用密碼,app專用密碼是要在開啟雙重認(rèn)證之后,需要自己去開發(fā)者網(wǎng)站的用戶信息設(shè)置里去生成。

在上傳fir內(nèi)測平臺的時候要自己fir平臺的token,進(jìn)入fir我的應(yīng)用去獲取token,獲取方式如下圖:

以上就完成了自動化的所有配置。1個shell腳本,3個plist文件對應(yīng)三種打包環(huán)境,文件位置如下:

開啟一鍵打包上傳

接下來就是一行命令執(zhí)行自動化打包上傳:

打開終端,cd到要打包的工程目錄下,輸入"./shell.sh" 回車,如下

這里會讓你選擇之前配置的3種環(huán)境中的一種環(huán)境,只能輸入1、2、3,如果輸入其他的數(shù)字會無效,讓你重新輸入,輸入之后回車就開始執(zhí)行自動化打包上傳操作了,上傳成功顯示如下:

自動化打包注意事項(xiàng)

打包之前,確保證書配置正確,配置plist文件里面的compileBitcode設(shè)置為false,否則會打包報(bào)錯;

fir-cli安裝時由于系統(tǒng)版本原因會提示各種權(quán)限不足,解決方式: sudo gem install-n/usr/local/bin fir-cli;

根據(jù)工程類型是.xcodeproj類型還是.workspace,腳本編譯代碼改成相應(yīng)的工程類型;

打包到appStore的時候,對于開啟雙重認(rèn)證的開發(fā)者賬號,密碼必須為賬戶的app專用密碼,而不是開發(fā)者賬號的登錄密碼。

總結(jié)

傳統(tǒng)的打包方式耗費(fèi)了我們開發(fā)者更多的時間和體力,而且效率低下,出錯率也要偏高;利用shell腳本自動化打包,降低了人工操作成本,加快了工作效率。

- END -

更多推薦內(nèi)容

《分利寶微服務(wù)實(shí)踐》

《看看前端自動化構(gòu)建,我們是這樣做的》

《Pytest進(jìn)行UI自動化測試實(shí)用操作》

《每個Android開發(fā)都必須知道的利器》

《kubernetes 單master集群的搭建》

總結(jié)

以上是生活随笔為你收集整理的xcode 选择configuraftions 打包_分利宝IOS自动化打包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。