iOS shell 腳本自動打包

iOS 自動打包shell腳本

功能

  • git 拉取代碼
  • CocoaPods 更新
  • 根據配置,選擇證書、修改版本號、構建版本號、修改項目環境配置
  • 自動打包
  • 導出 ipa 文件,并重新命名 ipa
  • 利用 FTP 上傳 ipa 文件到服務器上

所需要了解的知識點

  • shell腳本語言
  • Git
  • CocoaPod
  • xcodebuild
  • PlistBuddy
  • FTP

shell 腳本語言

菜鳥教程

需要掌握的知識點:

  • 變量

  • 傳遞參數

  • 流程控制

  • 文件包含

  • Linux 命令

    • 當前路徑獲取
    • 文件是否存在
    • 新建文件夾
    • 修改文件名稱
    • sed 命令
    • 刪除文件/文件夾

Git

  • 拉取代碼(這里采取的是 http)

    git clone -b 分支名 項目代碼地址
    

CocoaPods

這里不做描述

xcodebuild

可以查看 自動打包 xcodebuild

PlistBuddy

可以查看 PlistBuddy

FTP

FTP 是一個用于計算機網絡上在客戶端和服務器之間進行文件傳輸的應用層協議。
在這里需要利用 FTP 命令在服務器創建文件夾和上傳文件

創建目錄文件

# 創建目錄
ftp -n<<!
open $host
user $user_name $pass_word
binary
hash
# 創建文件夾
mkdir $path
close
bye
!
  • host : 服務器地址
  • user_name : 賬號
  • pass_word : 密碼
  • path : 所需要創建的文件路徑,需要注意的是,這里不能多級創建目錄,只能在已有的目錄下進行創建,不能多級創建

上傳

curl -u $user_name:$pass_word -T $ipa_path $ftp_path/
  • user_name : 賬號
  • paas_word : 密碼
  • ipa_path : ipa 文件路徑
  • ftp_path : 需要上傳到的服務器路徑

Mac 安裝 ftp 命令

若提示 ftp 命令找不到,則需要安裝 ftp 命令,因為在新的 Mac 系統中已經去掉了自帶的 telnet 命令和 ftp 命令,所以需要安裝 ftp 命令。

在終端中依次執行以下命令:

brew install telnet 
brew install inetutils 
brew link --overwrite inetutils

如果沒有安裝 Homebrew,則安裝 Homebrew

Homebrew官網
將以下命令粘貼到終端安裝 Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

思路

  • 在腳本文件所在的目錄下,創建一個 IPADir 目錄,然后再根據項目名稱創建一個文件夾,再根據打包的時間作為文件夾名創建一個文件夾出來
  • 利用 Git 將最新的代碼 clone 下來,更新 CocoaPods
  • 根據配置的環境變量、版本號、構建版本號依次修改項目環境(開發環境/測試環境/上架)、修改info.plist文件的版本號和構建版本號、修改證書和描述文件
  • 打包
  • 導出 ipa 文件
  • 按照規格修改 ipa 文件名
  • 利用 ftp 上傳 ipa 文件到服務器上

實現shell腳本自動打包

  1. 創建一個 autoArchiveConfiguration.sh 用于每次打包參數變量配置

    • project_name : 工程名字 (若有多個項目,可以根據工程名字創建對應的文件夾,存放 ipa 文件和 clone 代碼)
    • version : 版本號
    • build_version : 構建版本號
    • archive_model : 打包環境(主要區分打包測試,還是上傳到App Store)
    • loginLine : 打包環境(主要是域名的切換)

    以上就是需要配置的變量,然后腳本文件會根據這些變量,自動打包成對應項目的 ipa 文件

  2. 創建 codeSignProvisiongProfile.sh 文件,顧名思義是用來配置項目證書和描述文件的,如果只有一個項目,則可以不創建這個文件,這里主要是因為多個項目,區分開來

    • test_code_sign_identity : 打包測試證書
    • test_provisioning_profile : 打包測試描述文件 UUID
    • test_development_team : 打包測試 developmentTeam
    • test_provisioning_profile_specifier : 打包測試描述文件名稱
    • dis_code_sign_identity : 生產證書
    • dis_provisioning_profile : 生產環境描述文件 UUID
    • dis_development_team : 生產環境development Team
    • dis_provisioning_profile_specifier : 生產環境描述文件名稱
    • branch_name : 項目所處的分支名稱

    在這測試證書,使用的是 Ad Hoc 證書,接下主要說下 code_sign_identityprovisioning_profile_specifier 如何配置

    • code_sign_identity的配置

      鑰匙串 → 我的證書 → 打開項目對應的證書

      image

      直接復制所圈出的那塊區域

    • provisioning_profile_specifier 則是在下載描述文件時,給描述文件所名稱,比如 **_AdHoc.mobileprovision,所需要的是 **_AdHoc

    至于 描述文件 UUID 的獲取,在 xcodebuild 中有講解,如何去獲取到一個描述文件的 UUID,這里就不做詳細的描述了

  3. 創建 uploadFile.sh 文件,通過這個腳本文件,實現將 ipa 文件上傳到服務器上去

  4. 創建 autoArchive.sh 文件,通過這個腳本文件,包含以上三個文件,進行腳本運行,然后實現自動打包和上傳

在這里著重描述一下,如何去修改 info.plistproject.pbxproj

第一種方式: sed -i -r 修改 info.plistproject.pbxproj 文件

我們可以通過 sed -i -r 的命令方式對內容進行修改,-i代表著修改文件內容,-r 代表著可以通過正則表達式去配置到我們需要修改的內容,格式為:

sed -i -r "s/需要配置的正則表達式/需要替換的內容/g" 文件路徑

舉個例子,在這里,需要修改 Appdelegate.m 中的環境配置變量

# [ 需要轉義,$ 在正則表達式里面是代表尾部,而在 shell 中表示取值,所以也需要轉義
sed -i -r "s/\[GYHSLoginManager shareInstance\].loginLine.*\$/[GYHSLoginManager shareInstance].loginLine = $loginLine;/g" $appdelegate_path;

我們可以通過這個方式,對我們所需要修改的變量進行修改,但是每次執行完成后,都會在所在的文件夾中會自動生成對應的 -r 文件,這個文件我們不需要,所以要進行刪除操作

# 刪除 AppDelegate-r 文件
rm -rf $appdelegate_path-r

第二種方式:PlistBuddy 修改 info.plistproject.pbxproj 文件

其實 project.pbxproj 文件,也是一種plist 文件,所以我們完全可以使用 PlistBuddy 來修改
比如我們需要修改版本號

# 修改版本號
/usr/libexec/PlistBuddy -c "set CFBundleShortVersionString 版本號" info.plist的路徑

修改打包證書,也就是修改 project.pbxproj 文件的內容.
我們先打開 project.pbxproj 文件,然后搜索 CODE_SIGN_IDENTITY,如果搜索不到,在工程配置中將證書配置取消自動配置,并且進行一次手動配置證書和描述文件操作,然后再重新搜索 CODE_SIGN_IDENTITY。就會發現 CODE_SIGN_IDENTITYbuildSettings 的元素,而 buildSettings 又是另外一個很長的字符串的元素,在這里我的是 8A91212723A33A290030DB0E, 而8A91212723A33A290030DB0E又是objects的一個元素,這是 Debug 模式下的后去,還有Release,也是同樣的方式去獲取.
接下來,修改這個元素

/usr/libexec/PlistBuddy -c "set :objects:8A91212723A33A290030DB0E:buildSettings:CODE_SIGN_IDENTITY iPhone Distribution" project.pbxproj的路徑

這樣就修改完成了,我們需要修改工程中的 CODE_SIGN_IDENTITYCODE_SIGN_IDENTITY[sdk=iphoneos*]DEVELOPMENT_TEAMPROVISIONING_PROFILE_SPECIFIER,別忘了 DebugRelease 環境下都需要修改

通過以上兩種方式,都可以對內容進行修改,只不過 PlistBuddy 只能修改 plist 類型的文件。

以上就是關于自動打包的一些介紹

最后附上代碼:
自動打包代碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370