代码签名错误:SDK“iOS 11.0”中的产品类型“应用程序”需要代码签名

Posted

技术标签:

【中文标题】代码签名错误:SDK“iOS 11.0”中的产品类型“应用程序”需要代码签名【英文标题】:Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0' 【发布时间】:2017-09-28 21:08:55 【问题描述】:

我正在使用 GitLab CI 自动构建适用于 androidios 的应用程序。我为 iOS 构建的命令行一直失败并出现错误:

Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0'

我正在使用来自cordova-ios GitHub 的master 分支。由于这具有以下修复,如此处所述:After upgrading to xcode 9, cordova app won't build, error 70, requires provisioning profile

在我的build.json 中,我使用以下设置:


    "android": 
        "debug": 
            "keystore": "config/android.keystore",
            "storePassword": "<pass>",
            "alias": "debug",
            "password" : "<pass>",
            "keystoreType": ""
        ,
        "release": 
            "keystore": "config/android.keystore",
            "storePassword": "<pass>",
            "alias": "release",
            "password" : "<pass>",
            "keystoreType": ""
        
    ,
    "ios": 
        "debug": 
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "<team id>",
            "packageType": "development",
            "buildFlag": [
                "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
            ],
            "iCloudContainerEnvironment": "Development"
        ,
        "release": 
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "<team id>",
            "packageType": "app-store",
            "buildFlag": [
                "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
            ],
            "iCloudContainerEnvironment": "Production"
        
    

我确实使用了iCloudContainerEnvironment,因为我需要启用推送。 我使用正确的配置文件开始构建过程。我使用 CLI 参数执行此操作,因为我为几个不同的应用程序 IDS 构建应用程序:cordova build ios --device --provisioningProfile=&lt;uuid&gt;

但无论我做什么或尝试它都不会签署应用程序并不断抛出错误。

编辑:

根据@Jerry Horton 的建议,我将配置文件添加到build.json 文件中。我用配置文件名称和配置文件 UUID 进行了尝试。这两种情况都会引发以下错误,并且在platforms/ios/ 目录中找不到exportOptions.plist

Code Signing Error: Provisioning profile "iOS Team Provisioning Profile: nl.XXX.loc.app" is Xcode managed, but signing settings require a manually managed profile.

我什至删除了所有插件,以确保它们都不会妨碍。所以我的build.json 现在看起来像这样:


    "android": 
        "debug": 
            "keystore": "config/android.keystore",
            "storePassword": "<pass>",
            "alias": "debug",
            "password" : "<pass>",
            "keystoreType": ""
        ,
        "release": 
            "keystore": "config/android.keystore",
            "storePassword": "<pass>",
            "alias": "release",
            "password" : "<pass>",
            "keystoreType": ""
        
    ,
    "ios": 
        "debug": 
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "<team id>",
            "provisioningProfile": "<nl.XXX.loc.app or UUID>",
            "packageType": "development",
            "buildFlag": [
                "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
            ],
            "iCloudContainerEnvironment": "Development"
        ,
        "release": 
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "<team id>",
            "packageType": "app-store",
            "provisioningProfile": "<nl.XXX.app or UUID>",
            "buildFlag": [
                "EMBEDDED_CONTENT_CONTAINS_SWIFT = YES",
                "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO",
                "LD_RUNPATH_SEARCH_PATHS = \"@executable_path/Frameworks\""
            ],
            "iCloudContainerEnvironment": "Production"
        
    

ExportOptions.plist:

当我手动打开 op XCode 并手动创建存档/导出以进行调试时,我确实得到了一个 IPA,并且在此文件夹中有一个 ExportOptions.plist,如下所示:

<?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>
    <false/>
    <key>method</key>
    <string>development</string>
    <key>provisioningProfiles</key>
    <dict>
            <key>nl.XXX.loc.app</key>
            <string>nl.XXX.loc.app</string>
    </dict>
    <key>signingCertificate</key>
    <string>iPhone Developer</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>TEAMID</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
</dict>
</plist>

我真的看不出这里有什么问题。也许是变薄的部分?

【问题讨论】:

【参考方案1】:

您需要在 build.json 文件中指定配置文件,以便在 Cordova 构建阶段正确生成 exportOptions.plist 文件。尝试使用一种变体来查看它是否有效,然后您可能希望为每个应用程序构建变体保留 build.json 的变体。这实际上是我在我们的项目中所做的。我们的 grunt 构建脚本在“cordova add platform”和“cordova build”之前将 build-.json 复制到 build.json。

"provisioningProfile": "provisioning profile name or UUID"

运行Cordova build命令后,成功或失败生成exportOptions.plist@

cordova/app/platforms/ios/exportOptions.plist

我发现将其作为调试工具进行审查很有帮助。

【讨论】:

还是没有运气,我用一些输出编辑了这个问题。感谢您的时间和帮助 如果我执行命令 ionic cordova build ios --debug 而不是 ionic cordova build ios --device 构建成功。但是我没有得到任何 IPA 文件或任何 exportOptions.plist 文件 是的,--device 选项构建要安装在 iPhone 上的 .ipa。从 Xcode 9 开始,设备构建需要 exportOptions.plist 包含许多新的必填字段。不幸的是,这个文件是在运行“cordova build”命令时动态创建的。如果您按照***.com/questions/46344443/… 中的说明填充字段,它将每次都有效。 查看您的更新后,我认为您使用的配置文件名称不正确。配置文件安装在 ~/Library/MobileDevice/Provisioning\ Profiles/ 查看您的更新后,我认为您使用的配置文件名称不正确。安装后,配置文件将安装在 ~/Library/MobileDevice/Provisioning\ Profiles/ 目录中。还要注意名称是 .mobileprovision。从 developer.apple.com 重新下载配置文件很容易,在编辑器中打开,然后搜索 UUID。此外,名称是更好的选择,它是下载后的文件名与安装在 ~/Library/MobileDevice/Provisioning\ Profiles/ 后的文件名。您还可以在文本编辑器中打开任一文件并搜索名称和/或 UUID。

以上是关于代码签名错误:SDK“iOS 11.0”中的产品类型“应用程序”需要代码签名的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 错误:SDK“iOS 10.0”中的产品类型“应用程序”需要代码签名

CodeSign 错误:SDK“iOS 5.1”中的产品类型“应用程序”需要代码签名

SDK“iOS5.1”中的产品类型“应用程序”需要代码签名

SDK“iOS 11.2”中的产品类型“应用程序”需要代码签名

SDK“iOS 8.0”中的产品类型“应用程序”需要代码签名

抽象工厂模式和原型模式之间的区别?