受安卓之啟發,在Xcode有些編譯運行過程中,腳本化要比IDE快一些,也本著學習Xcode運行過程的方向,記錄一些學習的過程,在初寫此博客時,只學一點,記一點
- 系統 macOS10.12.6
- 工具 Xcode8.2.1 及 Xcode9.1
編譯
終端先進入項目路徑
切換Xcode版本
對于
- 電腦中裝了多個版本的編譯器
- 且項目在不同版本Xcode的下編譯運行的,需要切換到對應的Xcode
- 我的兩個Xcode都在/Applications路徑下,通過名稱相區別,如果你的Xcode是采取不同路徑,那么是先進入的Xcode路徑,后邊命令加上/Contents/Developer,完整命令如下:
- sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
- 查看當前編譯版本 xcodebuild -version
添加 team
這一點有點奇怪,對于命令編譯必須要在Xcode中配置好team,如果是自己練習項目,可以隨便找一個開發者賬號配置一個team,私人的無證書的賬號也可以,不然會team和簽名錯誤無workspace項目
對于沒有沒有集成pod的項目,也就是步存在workspace的項目,可以在項目路徑直接執行Xcodebuild,就可以編譯成功,其中參數
- -project preject 路徑,即xx.xcodeproj的路徑
- -scheme 一般為項目的名字,具體是設置在這里
對于已經設置schme的項目,可以通過Xcodebuild -list去查詢,找最下面的Schemes
- -configuration 區別是debug版本還是release版本,值分別為Debug 和 Release
- -alltargets 直接寫就好
---編譯命令為---
xcodebuild -project 5cell.xcodeproj -scheme 5cell
包含workspace項目
此時Xcodebuild 要加兩個參數
- -workspace 后面加workspace的路徑,如果已經cd到項目路徑下了,那么直接加workspace全名就好,即項目名.workspace
- -scheme 不在贅述
- -configuration 不在贅述
---完整編譯命令為:---
xcodebuild -workspace 5cell.xcworkspace -scheme 5cell -configuration Release
clean
- 在編譯的命令 的xcodebuilde 后面加上clean,類似于以下這樣
- xcodebuild clean -workspace 5cell.xcworkspace -scheme 5cell -configuration Release
- 依舊區分是不是workspace的項目
歸檔
命令為 xcodebuild archive,參數為:
- -workspace 不在贅述,和上面的編譯的時候是一樣的
- -scheme 不在贅述
- -configuration 不在贅述
- -archivePath 要到處的歸檔文件的路徑,一般最后一級路徑為 項目名.xcarchive其中.xcarchive要看做是一個文件夾而不是文件,所以要手動的創建一個項目名.xcarchive**
- -destination 值為 generic/platform=ios
導出IPA
命令為 xcodebuild -exportArchive,參數為
- -archivePath 歸檔出來的xcarchive的全路徑
- -exportPath 導出IPA的路徑,這個領隨意
- -destination 不贅述,和上一步一樣的
- exportOptionsPlist 配置plist路徑,這個馬上詳述
---大致命令如下---
xcodebuild -exportArchive -archivePath /XXX/xxx.xcarchive -exportPath /XXX/ipa -destination generic/platform=ios
-exportOptionsPlist /XXXX/ExportOptions.plist
配置文件
這個配置文件各種百度谷歌也沒有太確定的答案,只是知道一些配置信息,包括證書,已經打包的渠道用處,但是具體的鍵值不太明白
后來有博客提示先利用Xcode9導出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>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
這個是證書的一個標識碼,可以在開發者證書中看到,大致為一下圖片中我標紅的部分
- compileBitcode 是否開啟bitcode
- signingStyle 為Xcode9的一些特性,暫不做解釋,后續解釋
錯誤
-
錯誤主要圖如下
- 各種谷歌百度了一下偶發現答案,執行一下命令
- sudo gem install CFPropertyList
- rvm use system
版本
以上博客是針對Xcode8.2.1的編譯器,Xcode9的編譯器導出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**等標識,后續對這些鍵值做詳細的解釋補充
參考