Xcode9 xcodebuild export plist 配

作者: wentianen | 来源:发表于2017-09-27 15:16 被阅读1235次

    前言

    在你的iOS团队中,如果在使用持续集成来完成自动化打包分发的工作,你可能会了解如何使用一些命令行工具来构建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阶段出错。

    一、现象

    • xcodebuild + Xcode9
      使用xcodebuild做打包构建时,执行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先手动构建一次,使用构建生成的plist配置就可以完成export操作。

    1. 使用Xcode9打开你的工程

      WX20170927-145849.png
    2. 执行打包操作:Product -> Archive


      BA2EB68B-F776-498D-BA7E-AE75D27047E8.png
    3. 打包完成后执行export操作(其中会需要你手动选择你的相关provison profile等信息),Xcode9会自动生成exportOptionsPlist文件,同时拷贝到你生成的ipa包的同级目录下。

    WX20170927-150056.png WX20170927-150109.png WX20170927-150124.png WX20170927-150209.png
    1. 直接使用Xcode9自动生成的exportOptionsPlist文件来进行xcodebuildexport操作,或者拷贝文件内容到你原来的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

    相关文章

      网友评论

        本文标题:Xcode9 xcodebuild export plist 配

        本文链接:https://www.haomeiwen.com/subject/pfjuextx.html