實現Xcode 9自動化打包

weixin_34321977發表於2017-11-30

自動化打包指令碼

#!/bin/sh

#需要接受3個引數 1、scheme名 2、工程目錄 3、工程名字

#project目錄
PROJECT_PATH=$1
#project名稱
PROJECT_NAME=$2
#scheme名稱
SCHEME_NAME=$3
#現在時間(做資料夾名稱使用)
DATE=`date +%Y%m%d%H%M`
#歸檔檔案地址
ARCHIVE_PATH=$PROJECT_PATH/$DATE/$SCHEME_NAME

#通過archive歸檔出對應的xcarchive檔案
#對應步驟:
#1、清理工程
#2、歸檔工程
#3、工程名稱
#4、設定工程Scheme
#5、設定Debug或者Release模式
#6、歸檔輸出地址
#7、特殊設定,可忽略,為了讓過程更清晰
xcodebuild clean \
archive \
-project "$PROJECT_PATH/$PROJECT_NAME" \
-scheme "$SCHEME_NAME" \
-configuration "Release" \
-archivePath "$ARCHIVE_PATH" \
| xcpretty

echo "--------------------------------------"

#通過歸檔檔案打包出對應的ipa檔案
#對應步驟:
#1、打包命令
#2、歸檔檔案地址
#3、ipa輸出地址
#4、ipa打包設定檔案地址
xcodebuild -exportArchive \
-archivePath "$ARCHIVE_PATH.xcarchive" \
-exportPath "$PROJECT_PATH/$DATE" \
-exportOptionsPlist "$PROJECT_PATH/ExportOptions.plist"

open $PROJECT_PATH

前排提示:需要確保工程在沒使用指令碼的情況下也可以成功的進行歸檔與打包,指令碼只是為了簡化過程


遇到過的問題

  1. xcodebuild: error: The flag -scheme is required when specifying -archivePath but not -exportArchive.
    問題在於當你設定了 archivePath 的時候,必須要設定對應的是哪一個 scheme 。否則的話,命令不知道是對哪個 scheme 進行歸檔操作,無法繼續進行
  2. This project contains no schemes.
    通過命令xcodebuild -list查詢工程中包含有哪些 scheme 的時候,提示該工程沒有 scheme。
    解決方法:
    1、開啟管理 scheme 介面
    3992845-ac62b5822bc623d2.png
    進入管理 scheme

    2、開啟對應的 Shared 開關
    3992845-1514382982e93422.png
    scheme 管理介面

    3.exportOptionsPlist 內容
    如果不確定exportOptionsPlist中的內容有哪些,那麼可以通過 Xcode 打包來獲取對應的.plist的內容,再作刪減等處理。
    1、Export 對應的Archive
    3992845-4d4039a958db3880.png

    2、選擇 Development (其他的暫時沒試過)
    3992845-b3f81bf1ab7c021e.png
    打包介面

    3、 然後選擇對應的配置,一直 next 直到打包出來就好
    4、打包出來之後,在資料夾中會有多個檔案,ExportOptions.plist即為所需的.plist檔案
    3992845-a851c86bf1a788d7.png

    5、ExportOptions.plist 內容分析
    3992845-26d1fa1872c04f8f.png
    ExportOptions.plist

    其中除了 provisioningProfiles,其他皆為可選的屬性,猜測會自動從 xcode 環境或者鑰匙串中獲取到對應的值
key value
compileBitcode 是否編譯 bitcode
method 打包型別(app-store/ad-hoc/enterprise/development)
provisioningProfiles key 為 bundleId、value 為描述檔名稱(如下圖 Provisioning Profile 可獲取)
signingCertificate 證書名(如下圖Code Signing Identity 可獲取,或直接使用 iPhone Developer/iPhone Distribution )
signingStyle Automatic/Manual(手動設定或者自動設定,筆者這邊設定為 Manual)
stripSwiftSymbols 通常為 true
teamID 賬號ID(如下圖 Development Team 可獲取)
thinning 瘦身處理(為none即可)
3992845-a29c64387bda4546.png
Build Settings

相關文章