iOS 製做自動打包腳本 Xcode8.3.2

 

 

本文包含如下內容:html

前言linux

1.shell腳本的編寫git

2.xcodebuild命令shell

3.完整的可用示例數據庫

參考資料json

 

 

 

 


 

前言後端

 

  作iOS開發,打包APP是比較頻繁的事情,每次都手動去配置一堆東西確實是比較乏味。xcode

另外,我目前負責維護的APP在發佈時,不一樣的Mode設置不一樣的AppIcon和BundleID,安全

因此要是能夠簡單執行一個腳本就完成打包的各類配置,那就輕鬆了!bash

  因而乎,我就在網上學習了一下實現自動打包的方法,可是好多都是老版本的教程。

因此我打算參考別人的教程,而後本身也研究研究,再把研究的結果和你們分享一下。

不喜勿噴哈,可是若是有好的建議,也歡迎你們提出!

 

  

Okay,follow me !

 

 

 

 


 

1.shell腳本的編寫

 

這段時間我學了學Go語言,也買了個阿里雲服務器來搗鼓,

而後就很天然地學了一些Linux指令和shell腳本編寫相關的知識。

忽然發現,咱們作iOS開發的也最好去學學後端、Linux指令和shell腳本編寫

 

爲何呢?

a) 學後端,你會想辦法去學習數據庫優化,寫出更高效的SQL語句;

b) 學後端,你會考慮到安全問題,寫出穩健性更好的代碼;

c) 學後端,你會去學不少極其實用的Linux命令,這樣有助於你更好地使用你的macbook,由於不少命令在macbook上也是能夠用的,這樣其實也豐富了你的基礎知識;

d) 學後端,你可能還得學習寫shell腳原本完成一些繁雜的工做,而學會shell腳本的編寫將讓你受益終生

e) shell腳本強大、易學、易用;

 

 

 

這裏附上一個Shell腳本學習網站,強大、易學、易用,請相信我!😄

 

 

 

 


 

2.使用xcodebuild命令進行打包

 

 

打開終端,輸入 man xcodebuild ,回車:

 

 

這裏有說明命令的用法,若是英語讀起來吃力,能夠複製到谷歌翻譯:

 

大意就是你能夠使用xcodebuild命令來build project或者workspace。

若是使用了Cocoapods,build的就必定是workspace了。

 

能夠使用-list, -showBuildSettings, -showsdks, -usage, and -version這些命令來查看一些相關的信息。

只是經過這些命令來查看對應的配置信息而已,這些命令對於打包不會產生什麼影響。

 

 

 

 

 

 

注意:如下示例shell腳本代碼中的變量都須要自定義並賦值!

 

 

【清理build工做目錄】項目根目錄執行:

clean -configuration ${development_mode} || exit

 

 

 

【打包】項目根目錄執行:

 xcodebuild \ archive -workspace ${project_path}/${project_name}.xcworkspace \ -scheme ${scheme_name} \ -configuration ${development_mode} \ -archivePath ${build_path}/${project_name}.xcarchive  || exit

 

archive 指明操做是打包;

-workspace 指明須要打包的是一個workspace而不是project,

  若是是打包project,這裏的路徑和問價明就更改成對應的project便可;

-scheme 通常和項目同名;

-configuration 指明打包模式是Debug仍是Release;

-archivePath 指明打包操做的路徑;

|| exit 指明若是這一條命令執行失敗,則退出當前shell;

 

 

 

【導出安裝包】項目根目錄執行:

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \ -configuration ${development_mode} \ -exportPath ${exportFilePath} \ -exportOptionsPlist ${exportOptionsPlistPath} || exit

 

有一些配置項和上面的 xcodebuild archive 是相同的,因此須要兩個命令的參數匹配

-exportPath 指明.ipa文件處處的路徑;

-exportOptionsPlist 指明 exportOptions.plist 文件的位置,這個文件是-exportArchive必需的參數;

 

 

 

實測exportOptions.plist文件裏能夠什麼都不配置,

只要Xcode的project或者workspace裏設置好了對應參數就好!

 

 

 

exportOptions.plist文件內容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

 

 

 若是經過Xcode打開這個exportOptions.plist文件,你也能夠爲其配置如下內容(資料來源):

method: (String) The method of distribution, which can be set as any of the following: app-store enterprise ad-hoc development teamID: (String) The development program team identifier. uploadSymbols: (Boolean) Option to include symbols in the generated ipa file. uploadBitcode: (Boolean) Option to include Bitcode.

 

 

 

 

 

 


 

3.完整的可用示例(加入了-quiet參數,只輸出錯誤和警告信息):

#! /bin/bash # created by Ficow Shen #工程絕對路徑 project_path=$(pwd) #工程名 project_name=自定義 #打包模式 Debug/Release development_mode=Debug #scheme名 scheme_name=自定義 #build文件夾路徑 build_path=${project_path}/build #plist文件所在路徑 exportOptionsPlistPath=${project_path}/exportOptions.plist #導出.ipa文件所在路徑 exportFilePath=${project_path}/ipa/${development_mode} echo '*** 正在 清理工程 ***' xcodebuild \ clean -configuration ${development_mode} -quiet  || exit echo '*** 清理完成 ***'



echo '*** 正在 編譯工程 For '${development_mode} xcodebuild \ archive -workspace ${project_path}/${project_name}.xcworkspace \ -scheme ${scheme_name} \ -configuration ${development_mode} \ -archivePath ${build_path}/${project_name}.xcarchive -quiet  || exit echo '*** 編譯完成 ***'



echo '*** 正在 打包 ***' xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \ -configuration ${development_mode} \ -exportPath ${exportFilePath} \ -exportOptionsPlist ${exportOptionsPlistPath} \ -quiet || exit if [ -e $exportFilePath/$scheme_name.ipa ]; then
    echo "*** .ipa文件已導出 ***" open $exportFilePath else
    echo "*** 建立.ipa文件失敗 ***"
fi
echo '*** 打包完成 ***'

 

 注意:

a.當須要輸入的shell命令過長時,能夠用\來進行合理的換行分隔;

b.若是須要打包的是project,則在archieve中將-workspace替換爲-project,

  而後將.xcworkspace的路徑替換爲.xcodeproj的路徑;

 

 

 

 

 

可供參考的建議:

a.在項目根目錄新建一個AutoPack目錄,將全部腳本放置到這個目錄中,

   打包完成後的.ipa文件也導出到這個目錄裏,便於統一管理;

    

 

  

b.若是須要替換BundleID,用git先保存項目的當前狀態,而後去修改Bundle Identifier

   這時候能夠經過git查看修改記錄,而後就知道BundleID的修改該如何寫腳原本執行了;

  

  

c.若是須要替換程序圖標,直接刪除Images.xcassets中的AppIcon.appiconset,

   而後複製新的進去便可,連同Contents.json文件也一塊兒替換掉

 

d.能夠將一些操做封裝爲函數便於重用,能夠在某個文件中使用source命令將函數體所在的文件包含進來;

 

 

 

 

 


 

如下是一些可供參考的示例腳本,請注意命令內部的空格分隔!

 

 

替換圖標的示例腳本:

#! /bin/bash
# created by Ficow Shen

useDebugIcon(){

    rm -rf 項目根目錄/Images.xcassets/AppIcon.appiconset || exit
    cp -r AutoPack/IconOfDebug/AppIcon.appiconset/ 項目根目錄/Images.xcassets/AppIcon.appiconset || exit

    echo '* 已更改AppIcon 爲:測試版 圖標'
}
useReleaseIcon(){
    
    rm -rf 項目根目錄/Images.xcassets/AppIcon.appiconset || exit
    cp -r AutoPack/IconOfRelease/AppIcon.appiconset/ 項目根目錄/Images.xcassets/AppIcon.appiconset || exit
    
    echo '* 已更改AppIcon 爲:正式版 圖標'
}

echo 'changeAppIcon.sh 加載完畢!'

 

 

 

  

替換BundleID的示例腳本: 

#! /bin/bash
# created by Ficow Shen

useDebugBundleID(){
    cd 項目根目錄.xcodeproj/
    # sed -i 直接修改源文件,'' 備份文件名, 's/要被取代的字串/新的字串/g', 須要設置bundleID的文件
    # 假設com.a.a是測試環境使用的,com.b.b是正式環境使用的
    sed -i '' 's/com.a.a/com.b.b/g' project.pbxproj || exit
    cd ..
    echo '* 已更改bundle ID 爲:com.b.b'
}
useReleaseBundleID(){
    cd 項目根目錄.xcodeproj/
    sed -i '' 's/com.b.b/com.a.a/g' project.pbxproj || exit
    cd ..
    echo '* 已更改bundle ID 爲:com.a.a'
}

echo 'editBundleID.sh 加載完畢!'

 

 

 

 

 

 

 

 


 

參考資料: 

iOS自動打包併發布腳本

[iOS]從零開始寫個自動打包IPA腳本

iOS 自動打包

 

 

 

 -- 感謝以上文章做者的熱心分享!😄

 

 

 


Ficow原創,轉載請註明出處:http://www.cnblogs.com/ficow/p/6823962.html

廣大喵 Ficow Shen

相關文章
相關標籤/搜索