Xcode9 xcodebuild export plist 配置

前言

在你的iOS團隊中,如果在使用持續(xù)集成來完成自動化打包分發(fā)的工作,你可能會了解如何使用一些命令行工具來構(gòu)建ipa文件,其中一款使用較為廣泛的是xcodebuild。

在我們的團隊中有部分打包工作就是使用的xcodebuild,腳本代碼大概如下:

ipaName = "${scheme}${buildConfiguration}"
// archive
xcodebuild -workspace ProjectName.xcworkspace -scheme ${scheme} -configuration ${buildConfiguration} clean archive -archivePath ./${ipaName}.xcarchive
// export
xcodebuild -exportArchive -archivePath ${ipaName}.xcarchive -exportOptionsPlist exportOptions_dev.plist -exportPath ./

exportOptions_dev文件如下:

<?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>development</string>
    <key>teamID</key>
    <string>yourTeamID</string>
</dict>
</plist>

以上配置在Xcode8及以下版本都可以正常運行的,在升級Xcode9以后上面的腳本會在export階段出錯。

一、現(xiàn)象

  • xcodebuild + Xcode9
    使用xcodebuild做打包構(gòu)建時,執(zhí)行exportArchive命令出錯,錯誤信息:
error: exportArchive: "AppName.app" requires a provisioning profile with the Push Notifications and App Groups features.
Error Domain=IDEProvisioningErrorDomain Code=9
"AppName.app" requires a provisioning profile with the Push Notifications and App Groups features." UserInfo={NSLocalizedDescription="AppName.app" requires a provisioning profile with the Push Notifications and App Groups features., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
// 或
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"ios-simple-objc.app\" requires a provisioning profile.\"
UserInfo={NSLocalizedDescription=\"ios-simple-objc.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"

二、原因

Xcode9 的打包需要指定以下信息,才能完成export操作:

  • provisioningProfiles
  • compileBitcode
  • method
  • signingCertificate
  • signingStyle
  • stripSwiftSymbols
  • teamID
  • thinning

三、解決步驟

你需要使用Xcode9先手動構(gòu)建一次,使用構(gòu)建生成的plist配置就可以完成export操作。

  1. 使用Xcode9打開你的工程

    WX20170927-145849.png

  2. 執(zhí)行打包操作:Product -> Archive


    BA2EB68B-F776-498D-BA7E-AE75D27047E8.png
  3. 打包完成后執(zhí)行export操作(其中會需要你手動選擇你的相關(guān)provison profile等信息),Xcode9會自動生成exportOptionsPlist文件,同時拷貝到你生成的ipa包的同級目錄下。

WX20170927-150056.png
WX20170927-150109.png
WX20170927-150124.png
WX20170927-150209.png
  1. 直接使用Xcode9自動生成的exportOptionsPlist文件來進行xcodebuildexport操作,或者拷貝文件內(nèi)容到你原來的exportOptionsPlist文件。
// Xcode9 export 生成的文件
DistributionSummary.plist
ExportOptions.plist
AppName.ipa
Packaging.log

四、示例

<?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>provisioningProfiles</key>
    <dict>
        <key>com.xingshulin.abc</key>
        <string>abc_dev</string>
        <key>com.xingshulin.abc.NotificationServiceExtension</key>
        <string>abc-Notification-dev</string>
    </dict>
    <key>signingCertificate</key>
    <string>iPhone Developer</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>yourTeamID</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
</dict>
</plist>

參考

New export options Plist in Xcode 9

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容