xcode打包腳本
『壹』 iOS自動化打包腳本(Shell)
相比於Xcode打包,自動化腳本打包可以更有效地解放生產力,不需要一步步操作等待.
ExportOption.plist 文件配置如下圖所示,
[圖片上傳失敗...(image-8ab379-1626745287775)]
<figcaption style="display: block;">ExportOptions.plist</figcaption>
provisioningProfiles 字典中的值是項目的 bundle id 以及對應描述文件的名字, 配置該文件有一個取巧的方法, 直接使用Xcode打包, 之後直接導出 ipa 即可得到一份該文件, 如下圖所示:
[圖片上傳失敗...(image-5ca4e4-1626745287775)]
<figcaption style="display: block;">Xcode打包獲取ExportOptions.plist文件</figcaption>
注意: 如果是使用Xcode自動打包需要更改 plist 文件中的 signingStyle 的值為 manual
xcodebuild 更多詳細使用, 在終端中輸入:
『貳』 Xcode9打包腳本報錯requires a provisioning profile with the Push Notifications feature.
解決辦法,手譽知純動用Xcode archive 一份,然後會生成正確的對應的plisty文件,然後再把這個plist文件按你打包配置猛孝的文件名位置放過去,就行了,實慶咐際原因在於:
文件一覽
『叄』 iOS開發知識體系之《腳本自動化打包--xcodebuild》
iOS腳本自動化打包方案--xcodebuild
本文主要xcodebuild腳本自動化打包並上傳到蒲公英或者AppStore,廢話不多說,直接上干貨!
先了解一下xcodebuild打包需要的一些指令
-workspace XXX.xcworkspace
XXX.xcworkspace需要編譯工程的工作空間名稱,如果工程不是.xcworkspace的,可以不需要-workspace XXX.xcworkspace這段話
-scheme XXX
XXX是工程名稱,-scheme XXX是指定構建工程的名稱
-configuration Release
填入打包的方式是Debug或Release,就跟在Xcode中編譯前需要在Edit scheme的Build configuration中選擇打出來的包是Debug還是Release包一樣,-configuration就是配置編譯的Build configuration
-archivePath ./myArchivePath
配置生成.xcarchive的路徑, ./表示生成在當前目錄下,myArchivePath是生成的.Archive文件名稱
ODE_SIGN_IDENTITY=證書
配置打包的指定證書,如果該工程的Xcode已經配置好了證書,那麼不加入這段話也可以,打包出來的證書就是Xcode中配置好的。
PROVISIONING_PROFILE=描述文件UUID
配置打包的描述文件,同上,Xcode已經配置好了就不用在填入這段話了
CONFIGURATION_BUILD_DIR
配置編譯文件的輸出路徑,如果需要用到.xcarchive文件內部的dSYM等文件,可以使用改欄位指定輸出路徑。
如果工程是勾選了Automatically manage signing,那麼就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE,今天這里講到的Automatically manage signing自動配置證書,手動配置的就不多說了,有興趣的話可以自己研究。
xcode工程配置自動獲取證書,如下圖:
打包所需要文件
配置打包的ExportOptions.plist文件,可以在任意一個Xcode工程中新建一個ExportOptions.plist文件。dev和adHoc和AppStore的配置文件內容不一樣,可以先手動打包後看下plist文件的樣式,這里提供一個樣例:
這里method對應的value為打包對應的環境,有development、ad-hoc、app-store、enterprise根據打包環境來配置不同的值
編譯腳本命令
xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID
導出ipa包命令
xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out
-archivePath ./myArchivePath.xcarchive指定需要打包的.xcarchive路徑,./myArchivePath.xcarchive表示在當前終端路徑下的myArchivePath.xcarchive文件
-exportOptionsPlist ./ExportOptions.plist指定打包需要的ExportOptions.plist配置文件路徑
-exportPath ./out指定打包輸出的路徑, ./out表示打包結果輸出在終端的當前路徑下的out文件家中。如果沒有out文件夾會自動創建一個
腳本操作
首先:cd到需要自動打包的工程下
然後:在終端中輸入touch xcodebuild.sh創建xcodebuild.sh腳本文件
然後:雙擊打開腳本寫入下面 腳本內容(請確保所有版本的plist配置文件都寫好了)
最後:在終端中輸入./xcodebuild.sh運行腳本,按照步驟完成打包選擇(如果運行的時候出現Permission denied,請先在終端中執行chmod a+x *.文件的後綴名後,在運行,相當於提高腳本文件的許可權)
腳本內容
此腳本包含了自動上傳蒲公英的選擇操作,根據輸入指令來執行具體操作
腳本實現
具體詳細腳本見GitHub地址: https://github.com/Luck-666/xcodebuild.sh.git 如果好用記得給star,謝謝!
如腳本打包執行遇到問題可留言溝通!
『肆』 iOS打包ipa方法(.app->.ipa)
注意: itunes里的「我的應用程序」是指電腦上的程序,不要求聯機,可以把裡面的app刪除
不用打開XCODE編譯運行即可實現打包
Xcode菜單欄->Proct->Archive->三選一,一般選後兩個。
局限性:個人開發一般採用這種方法,但是當一個證書多人使用時就稍顯麻煩。一般多人開發時都是採用衡腔明provisioning profile+P12文件來進行真機調試。上述方法在最後導出ipa包時需要輸入appleID,這時還要向團隊的其他人要。採用provisioning profile+P12真機調試的方式不要求開發者知道appleID以及密碼,密碼一般放在leader那裡;
在xcode編譯產生出.app包的基礎上進行進一步處理,通過簡單的壓縮以及改後綴名即可實現ipa打包。
兩種實現方式:腳本自動處理(推薦,一勞永逸)、手動處理。
Step1: 新建文件夾,命名為「distribute」,在其中新建distribute.sh腳本文件,內容為:(注意:下面所有appName都是你項目真正的名稱)
Step2: 將要轉化的.app文件放到distribute/文件夾下,目錄結構為:
此時可能會提示 permission denied
執行 "chmod 777 distribute.sh"命令賦予許可權
再執行一次distribute.sh,顯示以下進度,完成。
Step1: 新建「Payload」文件夾,注意名字咐告要一字不差;
Step2: 將你的.app包放到Payload中,注意app的名字不做任何更改,就用xcode生成圓鍵的app名稱;
Step3: 在Payload文件夾上右鍵壓縮成zip,然後將生成的.zip文件後綴改成.ipa即可
『伍』 xcode 創建腳本,打包時刪除動態庫的模擬機架構
ios8 之後, 蘋果開放了動態庫.也就是我們可以拍喊打包動態庫, 但動態庫如果上傳到iTunes 是不能包含模擬機架構的. 所以就要求我們在打包時先刪除模高悉擬機的架構.
可以添加一個run 腳本幫我襲念野們完成, 參考網址
下圖就是腳本
Shell: /bin/sh
該腳本將查看你構建的應用程序的Frameworks文件夾~~ end
『陸』 Xcode12 iOS SDK製作問題
近期打包SDK時突然發現以前的打包腳本不管用了,真機包和模擬器包無法合成,在終端使用 lipo -create 手動合成發現:
原因:Xcode12模擬器默認添加了arm64架構,真機禪氏包和模擬器包都包含了arm64架敬者構。
修改方法如下:
另外附上賀稿散打包腳本:
腳本使用:
『柒』 Xcode使用Run Script腳本
由於某次上高手毀線,忘記修改Display Name,鑄成大錯。
Xcode可以使薯汪用腳本,在打包時修改Display Name、Bundle Id等信息。
一、在Build Phases添加腳本
1.2 自增長Build Number
二、在Scheme里添加腳本
在這里寫可以不用寫判斷Debug或戚備Release模式
三、錯誤
可能會出現錯誤:
編譯前clean一下,就可以解決了。
這是由於PRODUCT_BUNDLE_IDENTIFIER並沒有改過來導致的。
所以在打包上傳之前,需要clean一下。
參考資料:
『捌』 iOS一鍵自動編譯打包提交
在開始之前先嘮叨兩句自己對iOS自動化打包的接觸,覺得沒啥看頭滴老鐵可以略過直接從第二部分開始。項目自動打包提交的優勢不用說了,很高效便捷的東西,很早就接觸到了,但是一直沒有用到項目中,分析一下主要有以下幾個原因:
總結以上原因,一直沒有用到自動打包技術。而現在的情況是,
基於以上的情況,所以想自己寫一個自動打包的腳本,能夠實現 只運行一句命令就自動編譯打包發布 ,啥都不要做,掛著就行,打包完自動打開頁面提醒。
打包所需要的文件已經掛在 Github 上了。只需要把 BuildTool 文件夾 復制 到 項目主目錄 ,注意是復制!不是拖入項目主目錄,因為蘋果審核有屏蔽fir關鍵詞。然後打開終端, cd 到 BuildTool 文件夾,輸入 sh build.sh 命令,回車,開始執行此打包腳本。
具體的使用方法和參數配置 shell腳本 裡面已經有非常詳細的注釋。
有 AppStoreExportOptions.plist 和 AdHocExportOptions.plist 兩個plist文件,分別對應發布到AppStore和AdHoc(蒲公英、fir)。簡單說一下裡面的屬性:
寫完腳本後,發現已經有老鐵對打包腳本做了很詳細的分析了: 詳解Shell腳本實現iOS自動化編譯打包提交 。也有老鐵早就寫了iOS自動打包的腳本: xcode_shell 。
看了一下,功能也比較全,比如上傳包到自己的伺服器、上傳完成發郵件測試人員。但是現在已經有第三方平台也做到了比這更多的功能,比如蒲公英,還可以手機簡訊通知測試人員,有專門的頁面外鏈,支持持續集成等。
老鐵們如果還有什麼建議,歡迎在下面給我留言或私信。🤗 🤗 🤗
問題一(更新於2018年11月14日):
升級 Xcode 10 以上版本,蘋果採用新的構建系統,之前的 xcodebuild clean 命令已經無法使用,如果用這個命令的話會報錯,蘋果給的建議是刪除根目錄下的 build 目錄文件夾,刪除就可以完整打包了。但是每次打包都需要再刪除一遍,由於這個目錄的主要作用就是存儲 該項目的歷史構建包(Archive歸檔文件和iPA包) ,所以解決辦法是:
參考資料: build_system_release_notes_for_xcode_10
『玖』 iOS如何打包支持真機+模擬器
xcode從12版本之後不再推薦大家將模擬器和真機的mach-o文件進行合並,因為他們有很大的區別,也佔用大量的資源,更合理的做法是通過一種技術,讓xcode自動切換真機和模擬器環境察茄的sdk包,xcode為我們帶來了xcframework來處理鍵辯這個問題。簡單來說,xcframework就是將不同架構的framework「合並」到一個(這里的合並不是真的合並,他們本質上還是兩個framework),在具體的app打包之後又會只採用相應架構。
為了方便打包,我寫了一個腳本,大家把下面的腳本,修改稿沒缺下target_name後,放到framework項目根目錄並執行,就可以在 dist 目錄下發現打包好的xcframework,他的使用和framework完全一致!!
『拾』 一鍵實現多環境ipa打包以及鏈接下載全過程
2018年4月27日
一.jenkins實現不同環境用不同證書打包首燃 (這樣uat,pro線上襲芹辯環境就可以用生產證書(ad-hoc)打包,測試極光推送等功能)
第一步.工程裡面創建開發和生產拍缺的打包文件
生產的(主要是以下幾個地方的區別)
第二步:需要用生產證書打包的,改成對應的pp文件,建議用release, 這樣debug模式 uat和pro環境本機工程上還可以調試。(生產證書無法聯機調試)
第三步:不同環境指定不同打包腳本 (注意shell if條件判斷一定要有左右空格,if [ ${i} == "UAT」] 這樣會有問題的),注意用release打包。
成功:
2017年6月1日
已修改腳本 支持最新版本xcode8.3
2016年10月23日
一.實現效果(一級目錄和二級目錄)
1.使用
a.直接運行腳本就可以
b.或者配置在jenkins上
如果您發現本文對你有所幫助,如果您認為其他人也可能受益,請把它分享出去。