受安卓之啟發(fā),在Xcode有些編譯運(yùn)行過程中勾扭,腳本化要比IDE快一些毡琉,也本著學(xué)習(xí)Xcode運(yùn)行過程的方向,記錄一些學(xué)習(xí)的過程妙色,在初寫此博客時(shí)桅滋,只學(xué)一點(diǎn),記一點(diǎn)
- 系統(tǒng) macOS10.12.6
- 工具 Xcode8.2.1 及 Xcode9.1
編譯
終端先進(jìn)入項(xiàng)目路徑
切換Xcode版本
對(duì)于
- 電腦中裝了多個(gè)版本的編譯器
- 且項(xiàng)目在不同版本Xcode的下編譯運(yùn)行的身辨,需要切換到對(duì)應(yīng)的Xcode
- 我的兩個(gè)Xcode都在/Applications路徑下丐谋,通過名稱相區(qū)別,如果你的Xcode是采取不同路徑煌珊,那么是先進(jìn)入的Xcode路徑号俐,后邊命令加上/Contents/Developer,完整命令如下:
- sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
- 查看當(dāng)前編譯版本 xcodebuild -version
添加 team
這一點(diǎn)有點(diǎn)奇怪定庵,對(duì)于命令編譯必須要在Xcode中配置好team吏饿,如果是自己練習(xí)項(xiàng)目,可以隨便找一個(gè)開發(fā)者賬號(hào)配置一個(gè)team蔬浙,私人的無證書的賬號(hào)也可以找岖,不然會(huì)team和簽名錯(cuò)誤無workspace項(xiàng)目
對(duì)于沒有沒有集成pod的項(xiàng)目敛滋,也就是步存在workspace的項(xiàng)目许布,可以在項(xiàng)目路徑直接執(zhí)行Xcodebuild,就可以編譯成功绎晃,其中參數(shù)
- -project preject 路徑,即xx.xcodeproj的路徑
- -scheme 一般為項(xiàng)目的名字庶艾,具體是設(shè)置在這里
對(duì)于已經(jīng)設(shè)置schme的項(xiàng)目袁余,可以通過Xcodebuild -list去查詢,找最下面的Schemes
- -configuration 區(qū)別是debug版本還是release版本咱揍,值分別為Debug 和 Release
- -alltargets 直接寫就好
---編譯命令為---
xcodebuild -project 5cell.xcodeproj -scheme 5cell
包含workspace項(xiàng)目
此時(shí)Xcodebuild 要加兩個(gè)參數(shù)
- -workspace 后面加workspace的路徑,如果已經(jīng)cd到項(xiàng)目路徑下了煤裙,那么直接加workspace全名就好掩完,即項(xiàng)目名.workspace
- -scheme 不在贅述
- -configuration 不在贅述
---完整編譯命令為:---
xcodebuild -workspace 5cell.xcworkspace -scheme 5cell -configuration Release
clean
- 在編譯的命令 的xcodebuilde 后面加上clean,類似于以下這樣
- xcodebuild clean -workspace 5cell.xcworkspace -scheme 5cell -configuration Release
- 依舊區(qū)分是不是workspace的項(xiàng)目
歸檔
命令為 xcodebuild archive,參數(shù)為:
- -workspace 不在贅述硼砰,和上面的編譯的時(shí)候是一樣的
- -scheme 不在贅述
- -configuration 不在贅述
- -archivePath 要到處的歸檔文件的路徑,一般最后一級(jí)路徑為 項(xiàng)目名.xcarchive其中.xcarchive要看做是一個(gè)文件夾而不是文件恶阴,所以要手動(dòng)的創(chuàng)建一個(gè)項(xiàng)目名.xcarchive**
- -destination 值為 generic/platform=ios
導(dǎo)出IPA
命令為 xcodebuild -exportArchive,參數(shù)為
- -archivePath 歸檔出來的xcarchive的全路徑
- -exportPath 導(dǎo)出IPA的路徑冯事,這個(gè)領(lǐng)隨意
- -destination 不贅述,和上一步一樣的
- exportOptionsPlist 配置plist路徑括授,這個(gè)馬上詳述
---大致命令如下---
xcodebuild -exportArchive -archivePath /XXX/xxx.xcarchive -exportPath /XXX/ipa -destination generic/platform=ios
-exportOptionsPlist /XXXX/ExportOptions.plist
配置文件
這個(gè)配置文件各種百度谷歌也沒有太確定的答案岩饼,只是知道一些配置信息薛夜,包括證書,已經(jīng)打包的渠道用處梯澜,但是具體的鍵值不太明白
后來有博客提示先利用Xcode9導(dǎo)出IPA晚伙,會(huì)有此配置文件,現(xiàn)在將文件具體鍵值羅列如下
<?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>compileBitcode</key>
<true/>
<key>method</key>
<string>development</string>
<key>signingStyle</key>
<string>automatic</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>XXXXX</string>
<key>thinning</key>
<string><thin-for-all-variants></string>
</dict>
</plist>
- method 取值為
- app-store
- enterprise
- ad-hoc
- development
-
teamID
這個(gè)是證書的一個(gè)標(biāo)識(shí)碼漓帚,可以在開發(fā)者證書中看到,大致為一下圖片中我標(biāo)紅的部分
- compileBitcode 是否開啟bitcode
- signingStyle 為Xcode9的一些特性午磁,暫不做解釋,后續(xù)解釋
錯(cuò)誤
-
錯(cuò)誤主要圖如下
- 各種谷歌百度了一下偶發(fā)現(xiàn)答案昧辽,執(zhí)行一下命令
- sudo gem install CFPropertyList
- rvm use system
版本
以上博客是針對(duì)Xcode8.2.1的編譯器登颓,Xcode9的編譯器導(dǎo)出IPA的配置文件鍵值有一定的修改,如下:
<?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>method</key>
<string>app-store</string>
<key>provisioningProfiles</key>
<dict>
<key>XXX</key>
<string>XXXXXX</string>
</dict>
<key>signingCertificate</key>
<string>iPhone Distribution</string>
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>****</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
增加了provisioningProfile和** uploadSymbols**等標(biāo)識(shí)咕痛,后續(xù)對(duì)這些鍵值做詳細(xì)的解釋補(bǔ)充
參考