前言:自動化打包根本目的是為了節約時間,把重復且無技術含量的事情交給機器去做。Jenkins是基於Java開發的一種持續集成工具,用於監控持續重復的工作。搭建Jenkins前,請確認mac系統上已經搭建好了Java環境。
一、Jenkins安裝
打開Jenkins官網下載最新的pkg安裝包(選擇Mac OS)。安裝完成之后,Safari可能會自動打開,如果沒有自動打開,打開瀏覽器,輸入http://localhost:8080。
這時候可能出現這個頁面,這個問題的原因就是Java環境有問題,需要重裝Java環境。下載Java的JDK
一般會有2個版本可選,選一個下載即可,下載完安裝后打開終端,cd進入到jenkins.war包所在目錄,執行以下命令:
$ java -jar jenkins.war --httpPort=8080
httpPort指的就是Jenkins所使用的http端口,這里指定8080(默認的就是這個),可根據具體情況來修改。待Jenkins啟動后,在瀏覽器頁面輸入以下地址:http://localhost:8080這樣就可以打開Jenkins管理頁面了。
如果已經安裝完java環境,則顯示:
輸入終端命令:
hujintaodeMacBook-Pro:~ MengYu$ sudo su
使用vim編輯,並復制密碼 0b4e9c1d8524401182338a4d63612ae3
Password: sh-3.2# vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword [1]+ Stopped(SIGTSTP) vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
創建你的賬號信息
安裝成功~
二、拷貝文件
2.1
將 /Users/用戶名/Library的MobileDevice 文件夾拷貝到 /Users/Shared/Jenkins/Library 下
注意:是將MobileDevice這個文件夾拷貝過去,而不是MobileDevice里的文件,/Users/Shared/Jenkins/Library 目錄下是沒有MobileDevice這個文件夾,所以先創建一個MobileDevice文件夾。
在終端輸入:
sudo mkdir /Users/Shared/Jenkins/Library/MobileDevice
sudo cp -r /Users/MengYu/Library/MobileDevice/ /Users/Shared/Jenkins/Library/MobileDevice/
注意:曾遇到/Users/xxx/Library/下沒有MobileDevice文件夾,原來是新機上沒有安裝Xcode。
2.2
將/Users/用戶名/Library/Keychains/下的login.keychain及login.keychain-db這兩個文件拷貝到/Users/Shared/Jenkins/Library/Keychains文件夾下面
注意:Mac OS 10.12以下的沒有login.keychain-db這個文件,只需要拷貝login.keychain文件。
在終端輸入:
cd /Users/Shared/Jenkins/Library/ sudo mkdir Keychains sudo cp /Users/MengYu/Library/Keychains/login.keychain ./Keychains/ sudo cp /Users/xxx/Library/Keychains/login.keychain-db ./Keychains/
再將這個login.keychain拷貝到桌面上
在終端輸入
sudo cp /Users/MengYu/Library/Keychains/login.keychain ~/Desktop/
注意:如果/Users/xxx/Library/Keychains/目錄下沒有login.keychain這個文件,就復制login.keychain-db文件到指定目錄,然后將復制在桌面上的該文件改后綴為.keychain。
三、修改鑰匙串權限、~/Library權限以及電腦用戶管理權限
3.1
打開鑰匙串,找到相應的證書
右鍵密鑰顯示簡介,在訪問控制那一項里勾選允許所有應用程序訪問此項目,並存儲更改。
3.2
找到Library資源庫文件夾,顯示簡介,設置共享與訪問權限,everyone讀與寫都可以
3.3
進入mac系統偏好設置 — 用戶與群組 — 其他用戶 — jenkins ,勾選允許用戶管理這台電腦,並右鍵選擇高級選項,將名字改為jenkins
四、Jenkins插件及系統設置(Keychains和證書配置)
4.1進入管理插件,在可選插件里所有關鍵字,下載安裝插件Keychains and Provisioning ProfilesManagement和 Xcode integration
點擊系統管理,並 添加插件 Keychains(鑰匙串插件)
4.2 login.keychain和證書配置
如何導出Xcode自動生成的Provisioning Profiles文件
1.打開終端輸入下列命令,回車,進入到Xcode管理的.mobileprovision文件目錄
#whoami 命令讀取系統用戶名 cd /Users/`whoami`/Library/MobileDevice/Provisioning\ Profiles/
2.通過BundleId 遞歸查找.mobileprovision文件,兩個:一個development ,一個distribution版本
-r遞歸查找,因為.mobileprovision是一個二進制文件,不加會報錯
-l只顯示文件名
grep -r -l com.tencent.xin .
3.如何區分dev和dis
繼續輸入下面的代碼,會打開Finder並選中文件。選中這個文件后,按空格鍵,會生成mobileprovision文件的預覽窗口,里面會顯示對應的信息,仔細找一下就能區分了
open -R ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision
4.顯示詳細的預覽信息
security cms -D -i ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision
打印結果如下,是一個XML文件,如果有ProvisionedDevices字段(設備列表),說明是dev版本的,dis版本的沒有這個字段。
<?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> <key>AppIDName</key> <string>aaa</string> <key>ApplicationIdentifierPrefix</key> <array> <string>X9ASDF2345</string> </array> <key>CreationDate</key> <date>2018-02-03T14:19:45Z</date> <key>Platform</key> <array> <string>iOS</string> </array> <key>DeveloperCertificates</key> <array> <data>MIIFmjCCBIKgAwIBA..省略 </array> <key>Entitlements</key> <dict> <key>keychain-access-groups</key> <array> <string>X9ASDF2345.*</string> </array> <key>get-task-allow</key> <true/> <key>application-identifier</key> <string>X9ASDF2345.com.xxxx.aaa</string> <key>com.apple.developer.team-identifier</key> <string>X9ASDF2345</string> </dict> <key>ExpirationDate</key> <date>2019-02-03T14:19:45Z</date> <key>Name</key> <string>iOS Team Provisioning Profile: com.xxxx.aaa</string> <key>ProvisionedDevices</key> <array> <string>6126203adse3dbab4012374e5c01e2a497b9aa66</string> </array> <key>TeamIdentifier</key> <array> <string>X9SABCD345</string> </array> <key>TeamName</key> <string>xiaoming</string> <key>TimeToLive</key> <integer>365</integer> <key>UUID</key> <string>5b857e06-f2ed-4256-88a3-0d7847e34371</string> <key>Version</key> <integer>1</integer> </dict>
選取拷 在桌上login.keychain以及項 相對應的Provisioning Profile 並upload, 可以導入多個, 且應該是/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles目錄下的provisioningProfile.
注意:開發證書和provision profile 一定要對應正確,不然命令行打包會認證不了而失敗
password 一定要填寫正確的鑰匙串的密碼
Code Signing Identity 是從鑰匙 找到相應的證書,然后顯示簡介復制 來,這 Identities 少要填 兩項,是因為這 放 個的話后 的設置 Code Signing Identity 能 動對應上。
Provisioning Profiles Directory Path 這 項 填寫/Users/用戶名/Library/ MobileDevice/Provisioning Profiles
注意:路徑里Provisioning Profiles是Provisioning\ Profiles
此外,Xcode工程必須手動配置證書,並取消自動配置證書
五、開始構建打包任務
5.1點擊新建任務,填寫名字,選擇自由風格,點擊確定進行創建
5.2添加源碼管理工具和SVN倉庫地址,這里使用Subversion 進行管理,倉庫地址去掉@和昵稱-xxx@
添加構建者並且Add設置為Jenkins
添加賬號:
5.3.構建觸發器配置
配置為每五分鍾自動打包一次
5.4構建環境勾選Keychains和Mobile Provisioning Profiles.
5.5增加構建步驟,執行Shell
Shell腳本如下:
a.自動配置證書的Shell腳本
#——————————————自動證書 ———————————————— # 工程名 APP_NAME="TEST" # 證書 CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)" # info.plist路徑 project_infoplist_path="./${APP_NAME}/Info.plist" #取版本號 bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}") #取build值 bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}") DATE="$(date +%Y%m%d)" IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa" #要上傳的ipa文件路徑 IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}" echo ${IPA_PATH} echo "${IPA_PATH}">> text.txt # 下面2行是沒有Cocopods的用法 echo "=================clean=================" xcodebuild -target "${APP_NAME}" -configuration 'Release' clean echo "+++++++++++++++++build+++++++++++++++++" xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' SYMROOT='$(PWD)' xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}" # 設置上傳到 Fir FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2" fir l ${FIRTOKEN} fir p ${IPA_PATH}
b.手動配置證書的Shell腳本
# 工程名---- 手動證書 APP_NAME="TEST" # 證書 CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)" # info.plist路徑 project_infoplist_path="./${APP_NAME}/Info.plist" #取版本號 bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}") #取build值 bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}") DATE="$(date +%Y%m%d)" IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa" #要上傳的ipa文件路徑 IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}" echo ${IPA_PATH} echo "${IPA_PATH}">> text.txt # 下面2行是沒有Cocopods的用法 echo "=================clean=================" xcodebuild -target "${APP_NAME}" -configuration 'Release' clean echo "+++++++++++++++++build+++++++++++++++++" xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)' xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}" # 設置上傳到 Fir FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2" fir l ${FIRTOKEN} fir p ${IPA_PATH}
5.6構建后步驟
可以發送郵件、上傳蒲公英等操作
然后保存,應用。