代码签名错误:产品类型需要代码签名'应用程序'在SDK' iOS 11.0'

时间:2017-09-28 21:08:56

标签: ios xcode cordova

我正在使用GitLab CI自动为Android和iOS构建应用程序。我的iOS命令行版本因错误而失败:

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

我正在使用master GitHub中的cordova-ios分支。由于这具有以下修复,如此处所述: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,因为我需要启用推送功能。 Als我使用正确的配置文件启动构建过程。我使用CLI参数执行此操作,因为我为几个不同的应用ID ID构建了应用:cordova build ios --device --provisioningProfile=<uuid>

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

修改

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

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 个答案:

答案 0 :(得分: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构建命令后,成功或失败导出exportOptions.plist @

cordova/app/platforms/ios/exportOptions.plist

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