簡介
持續集成是個“一次配置長期受益”的工作。但很多小公司都沒有。以前在做Windows開發配置感覺簡單一些,這次配置iOS的,感覺步驟還挺多。整理出來,分享給大家,不正確的地方請及時指正。
本文主要使用fastlane配置iOS的持續集成,自動編譯、打包出多個版本。
最近轉行iOS開發,首要任務是使用Jenkins(算是hudson的兄弟)配置iOS工程的持續集成。 查找各種資料後,整理出以下幾個關鍵詞。
jenkins搭建。
使用fastlane中提供的工具修改工程配置。
gym 或 ipa 工具編譯工程。
目標
源代碼
https://github.com/everettjf/ios_ci_fastlane_demo
安裝
fastlane和shenzhen都需要gem安裝,把gem更換為淘寶源。
安裝fastlane
sudo gem install fastlane
安裝shenzhen
sudo gem install shenzhen
示例步驟
在xcodeproj文件同級目錄下,執行
fastlane init
fastlane 很強大,甚至能自動截圖,自動提交AppStore審核,不過我只用最簡單的打包功能。 這裡會有一系列提問。
* Do you want to get started...? y * Do you have everything commited... ? y * App Identifier (com.krausefx.app): com.everettjf.fastlanedemo * Your Apple ID ([email protected]): [email protected] * ... updates to the App Store or Apple TestFlight? (y/n) n * Do you want to setup 'snapshot'... n * Do you want to use 'sigh'... n (是否自動下載provisioning文件) * The scheme name of your app: fastlanetest (如果就一個工程,也可不輸入)
上面有一步要輸入AppleID,是因為fastlane(的一個工具sigh,這個字母是H)會自動下載對應的provisioning文件。自動下載provisioning文件,對於經常增加測試設備的Developer證書挺方便。不過,示例就不自動下載了。
執行完成後,會在工程目錄下生成fastlane文件夾。
drwxr-xr-x 5 everettjf staff 170B Sep 8 22:32 fastlane drwxr-xr-x 10 everettjf staff 340B Sep 8 22:00 fastlanedemo drwxr-xr-x 5 everettjf staff 170B Sep 8 22:38 fastlanedemo.xcodeproj drwxr-xr-x 4 everettjf staff 136B Sep 8 22:00 fastlanedemoTests
我們需要修改fastlane文件夾的兩個配置文件:Appfile和Fastfile。(實際是ruby代碼)
1. 修改Appfile
app_identifier "com.everettjf.fastlanedemo" apple_id "[email protected]" for_lane :inhouse do app_identifier "com.everettjf.fastlanedemoqiye" apple_id "[email protected]" end
企業InHouse版本與AppStore的app_identifier、apple_id不同。 這裡for_lane 就是為後面Fastfile中定義的:inhouse版本設置單獨的信息。
2. 修改Fastfile
這個文件中要編寫每個版本的編譯和打包代碼(Developer版本、AppStore版本、InHouse版本、多個渠道版本), 每個版本要經過以下幾個步驟: - 修改版本號和build號(修改為外部傳入的版本,例如:1.0.0和100)
def prepare_version(options) #say 'version number:' #say options[:version] increment_version_number( version_number: options[:version], xcodeproj: PROJECT_FILE_PATH, ) #say 'build number:' #say options[:build] increment_build_number( build_number: options[:build], xcodeproj: PROJECT_FILE_PATH, ) end
def update_app_identifier(app_id) update_info_plist( xcodeproj:PROJECT_FILE_PATH , app_identifier:app_id, plist_path:"#{PLIST_FILE_PATH}" ) update_info_plist( xcodeproj:PROJECT_FILE_PATH , app_identifier:app_id, plist_path:"#{UNITTEST_PLIST_FILE_PATH}" ) end
def update_provision(typePrefix) update_project_provisioning( xcodeproj:PROJECT_FILE_PATH , profile:"./fastlane/provision/#{typePrefix}.mobileprovision", ) end
def set_info_plist_value(path,key,value) sh "/usr/libexec/PlistBuddy -c /"set :#{key} #{value}/" #{path}" end def set_channel_id(channelId) set_info_plist_value( "./../fastlanedemo/#{PLIST_FILE_PATH}", 'ChannelID', "#{channelId}" ) end
這步使用了工具shenzhen,也可以使用fastlane推薦的gym。
sudo gem install shenzhen
0
3.?編寫shell腳本
sudo gem install shenzhen
1
sudo gem install shenzhen
2
我們傳入主版本號和一個自增的id(一般是jenkins的build number)。
配置Jenkins
有了能一鍵編譯的腳本,讓Jenkins在獲取代碼後,調用build.sh就可以了。
安裝
sudo gem install shenzhen
3
配置獲取代碼,獲取代碼後調用shell:
sudo gem install shenzhen
4
蘋果開發者證書配置
假設我們有兩個開發者賬號,一個是標准開發者賬戶(99刀,個人或公司),一個是企業賬戶(299刀)。 - 標准開發者賬戶:[email protected]
sudo gem install shenzhen
5
企業賬戶:[email protected]
sudo gem install shenzhen
6
相關文檔
其他途徑
重要補充
文章首次發布於:everettjf.github.io