ios項目腳本

受安卓之啟發,在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版本,值分別為DebugRelease
  • -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>&lt;thin-for-all-variants&gt;</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**等標識,后續對這些鍵值做詳細的解釋補充

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容