iOS Continuous Integration
Github:https://github.com/bobwongs/BWiOSPackage
iOS Xcode Project
Xcode打包
腳本打包
iOS ipa包
持續集成
自動化測試
Reference
經驗總結
Follow Me
Workspace
簡單來說,Workspace就是一個容器,在該容器中可以存放多個你創建的Xcode Project, 以及其他的項目中需要使用到的文件。使用Workspace的好處有,1),擴展項目的可視域,即可以在多個項目之間跳轉,重構,一個項目可以使用另一個項目的輸出。Workspace會負責各個Project之間提供各種相互依賴的關系;2),多個項目之間共享Build目錄。
Project
指一個項目,該項目會負責管理生成一個或者多個軟件產品的全部文件和配置,一個Project可以包含多個Target。
Target
一個Target是指在一個Project中構建的一個產品,它包含了構建該產品的所有文件,以及如何構建該產品的配置。
Scheme
一個定義好構建過程的Target成為一個Scheme。可在Scheme中定義的Target的構建過程有:Build/Run/Test/Profile/Analyze/Archive
Build Setting
配置產品的Build設置,比方說,使用哪個Architectures?使用哪個版本的SDK?。在Xcode Project中,有Project級別的Build Setting,也有Target級別的Build Setting。Build一個產品時一定是針對某個Target的,因此,XCode中總是優先選擇Target的Build Setting,如果Target沒有配置,則會使用Project的Build Setting。
Build Phases
Target Dependencies
Compile Sources(編譯資源,可設置Compiler Flags)
Link Binary With Libraries
Copy Bundle Resources(直接拷貝到包裡面的資源)
Run Script(運行腳本,運行腳本不用拷貝到Bundle
打包機制
流程
xcodebuild -> Package;
xcodebuild
流程細節
Check dependencies(檢查項目配置,如Code Sign) -> Preprocessor -> Compile -> Link -> Copy Resource、Compile Xib、CompileStoryboard、CompileAssetCatalog -> Generate DSYM File -> ProcessProductPackaging -> Code Signing(需要訪問鑰匙串信息) -> Validate -> Result;
Result
.app和.DSYM;
Code Signing
Code Signing Identity
Provisioning Profile
Reference:Terminal執行命令,查看輸出信息
Package
把.app文件放入命名為“Payload”的新建文件夾中,對“Payload”文件夾進行壓縮,對壓縮生成的文件修改後綴名為.ipa,這樣,就能生成有效的ipa包了;
Xcode可視化打包
Select Generic iOS Device -> Xcode Menu Bar - Product -> Archive -> Select Package Type -> Select Provisoning Profile -> Export ipa or Upload to App Store
腳本打包思路設計
配置參數設計
腳本修改項目配置和項目代碼
xcodebuild clean和remove上次打包生成的文件
xcodebuild
Package, Denominate ipa file, Move files
Back up DSYM
配置參數設計
Configuration-Release or Debug
後台環境
包類型
App Store
InHouse
Adhoc
Bundle ID
App版本號
App Display Name
命令
xcodebuild命令
可構建的對象
workspace:必須和“-scheme”一起使用,構建該workspace下的一個scheme。
project:當根目錄下有多個Project的時候,必須使用“-project”指定project,然後會運行
target:構建某個Target
scheme:和“-workspace”一起使用,指定構建的scheme。
構建行為
clean:清除build目錄下的文件,build目錄和其子目錄沒有被移除
build: 構建
test: 測試某個scheme,必須和"-scheme"一起使用
archive:打包,必須和“-scheme”一起使用
獲取參數
$1、$2。。。、$n,n代表參數編號,$0為第一個參數,在此為腳本的路徑,$#獲取參數個數
param1=$1 param2=$2
文件操作
查找文件
命令:find
修改文件
修改文件名
命令:mv(move files)
mv file.txt new_file.txt # 帶上文件格式 mv directory new_directory # 修改目錄名
查找和修改文件內容
命令:sed(stream editor)
替換指定文本 sed -i ".tmp" "/words_to_find_which_line/s/replaced_word/new_word/" file_path 參數說明 -i:備份原文件,修改文件的操作不可逆,如果需要查看原來的內容,則可以在備份文件中進行查看,此腳本執行之後會生成一個.tmp文件,謹慎進行移除 .tmp:備份的原文件名稱 words_to_find_which_line:通過文本找到需要修改的目標文本屬於哪一行 s:替換操作 replaced_word:被替換的文本 new_word:新文本 替換目標位置文本 sed -i ".tmp" "/words_to_find_which_line/s/regular_expression/new_word/" file_path 示例 sed -i ".tmp" "/kEnvironment/s/=.*;/= new_tag;/" file_path # 更換kEnvironment的值,不修改其余部分,如後面對代碼的注釋 說明 .*:正則表達式規則,“.”表示任意字符,“*”表示任意長度
移除文件
命令:rm(remove)
rm path/file.format # 移除文件 rm -r path/directory # 移除目錄,-r命令可以刪除非空目錄
移動文件:mv(move files)
mv file_path/file.format new_file_path/new_file.format
項目的腳本
本項目Shell腳本放置在工程根目錄下,腳本文件為package.sh;
Reference
終端查看對應的Manuel手冊
待完善
腳本讀取和修改Xcode工程文件信息,如版本號、包類型、授權文件等;
腳本中的參數編寫需要設計得更加靈活;
學習方向
正則表達式
Shell Script
操作文本能力的提高
Python腳本的學習
ipa包的解壓
修改後綴名,把後綴名修改為Mac OS可解壓的,如:ipa -> zip;
.app包轉換為有效的.ipa包
方式一:把.app文件拖入iTunes“我的應用”,再從iTunes中拖出來,就是一個.ipa文件啦;
方式二:把.app文件放入命名為“Payload”的新建文件夾中,對“Payload”文件夾進行壓縮,對壓縮生成的文件修改後綴名為.ipa;
從優秀App的ipa包中提煉信息
如微信等知名應用的ipa包;
持續集成
編譯,發布,自動化測試
目的
減少風險
減少重復過程
自動化構建
自動化構建的的首要前提
Anyone should be able to bring in a virgin machine, check the sources out of the repository, issue a single command, and have a running system on their machine.
自動化構建的的首要前提是有一個支持自動化構建的命令行工具,可以讓開發人員可以通過一個簡單的命令運行當前項目。
命令行工具
自動化構建的命令行工具比持續集成的概念要誕生得早很多,幾十年前,Unix世界就已經有了Make,而Java世界有Ant,Maven,以及當前最流行的Gradle,.Net世界則有Nant和MSBuild。作為以GUI和命令行操作結合的完美性著稱的蘋果公司來說,當然也不會忘記為自己的封閉的iOS系統提供開發環境下命令行編譯工具:xcodebuild
持續集成平台Jenkins
待研究,下載不了Jenkins
自動化測試
構建iOS持續集成平台(一)——自動化構建和依賴管理:http://www.infoq.com/cn/articles/build-ios-continuous-integration-platform-part1/
一步一步構建iOS持續集成:Jenkins+GitLab+蒲公英+FTP:http://www.jianshu.com/p/c69deb29720d
手把手教你利用Jenkins持續集成iOS項目:http://gold.xitu.io/post/57b01d50128fe10055bbc6d5
Jenkins:https://jenkins.io/index.html
Manual:xcodebuild
Mac OS Terminal中的Shell腳本命令操作後不可以撤銷
Xcode Command+B是按照當前設定的Scheme進行Build,而不是固定選擇Release進行Build
Github:https://github.com/BobWongs