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