iOS XCode自動化編譯相關

2021-06-20 07:42:38 字數 1438 閱讀 5611

原文:

/usr/bin/xcodebuild -target targetname clean

第二步編譯:

/usr/bin/xcodebuild -target targetname

第三步打包:

xcodebuild -target targetname code_sign_identity="iphone distribution:******"

前有寫過《最近研究xcodebuild批量打包的一些心得》因為當時已經研究過乙個工程多target,所以在多target的基礎上,很容易按照target名字進行打包,於是建立了一堆的target以後,然後寫了乙個指令碼批量打包。然後想著以後打包省事兒,直接指令碼一執行,走你。結果今天需要再打一批包,拿到列表以後一看發現:新加了幾個渠道,去掉了幾個渠道。哎呀,媽呀,這個列表咋還是變的呢?這麼一來,我可以不用刪除多餘的target,但是需要新建target呀,細想一下發現:我新建target只是為了加乙個變數,用來區分這個target,那麼我可不可以直接以渠道名為引數傳給xcodebuild然後就自動生成不同的target呢?

說幹就幹,先前查資料的時候,有看到說可以給xcodebuild傳引數的:

xcodebuild -sdk *** -target *** symroot=*** api_type=1

api_type就是要識別的macro嘍,果斷換成自己的區別標識,一通編譯打包以後,發現:不好使!神馬情況呢?一通google以後發現有說用gcc_preprocessor_definitions可以。還是用上面的例子:

xcodebuild -sdk *** -target *** gcc_preprocessor_definitions="api_type=1"

發現這樣竟然是好使的,於是又用下面的語法試了試:

xcodebuild -sdk *** -target *** gcc_preprocessor_definitions="api_type=一"

xcodebuild -sdk *** -target *** gcc_preprocessor_definitions="api_type=a"

發現,這個macro只能用數字!也就是說,雖然你傳進去乙個api_type=1,而編譯器也只是在最開始執行編譯以前定義了乙個巨集:

#define api_type 1

而這麼定義法是只能用數字,不能用字母,更別提字串或者中文了。花了挺長的時間才學習到這個東東,那麼接下來就變得簡單了:

把所有的渠道擱到乙個靜態的陣列裡。然後通過每次傳入不同的序列號打成不同的渠道包唄。

到這裡,終於,可以由一堆target變回兩個target了(乙個用來作編譯打包時的模板;乙個自己測試時用)。

完整的**片段:

xcodebuild clean

xcodebuild -target iphone gcc_preprocessor_definitions="qudaonum=9"

iOS Xcode9 自動化指令碼打包

一 清理xcode工程,避免上次打包生成的編譯檔案影響本次打包 清理完成後控制終端會輸出 clean succeeded 二 編譯 archive xcode工程,匯出.xcarchive檔案 引數說明 project 指定需要編譯的xcode工程中的.xcarchive檔案的路徑 scheme 指...

自動化相關

8種元素定位的底層實現 元素操作 瀏覽器常用操作api 元素資訊操作api 滑鼠操作 鍵盤操作 元素等待 下拉框彈出框 滾動條切換frame表單 多視窗切換 截圖cookie 解決驗證碼 解決 回歸測試 專案在發新版本之後對專案之前的功能進行驗證 解決 壓力測試 可以理解多使用者同時去操作軟體,統計...

android自動化ANT編譯

雖然谷歌一直在推gradle自動打包編譯。但是乙個新的東西總是需要時間與成本的。其實做android開發不寫編譯指令碼是沒問題的。但是可能有特殊情況,比如需要一次編譯多個版本,而各種版本之間的差異不大,比如只改了androidmanifest.xml中的某些內容。這時才需要自己動手。如何花費最少的時...