代码签名错误:在iOS 11.0的SDK中,产品类型为“应用程序”的代码必须进行代码签名。

3
我正在使用GitLab CI自动构建Android和iOS应用。我的iOS命令行构建一直失败,并显示以下错误信息:
“代码签名错误:在SDK 'iOS 11.0'中,'Application'产品类型需要代码签名。”
我正在使用cordova-ios GitHub上的“master”分支,因为它包含如下修复内容,如此处所述:升级到xcode 9后,cordova应用程序无法构建,错误70,需要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参数构建应用程序,因为我要为几个不同的应用程序ID构建该应用程序:cordova build ios --device --provisioningProfile=<uuid>

但是,无论我做什么或尝试什么都无法签署该应用程序,并且一直在抛出错误。

编辑:

根据@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:

当我手动打开 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个回答

1

为了在Cordova构建阶段正确生成exportOptions.plist文件,您需要在build.json文件中指定配置文件。尝试使用一种变化来查看是否有效,然后您可能希望为每个应用程序构建变体保留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

我发现这很有帮助,可以作为调试工具进行复习。


仍然没有运气,我编辑了问题并附上了一些输出。感谢您的时间和帮助。 - Mark Veenstra
如果我执行命令 ionic cordova build ios --debug 而不是 ionic cordova build ios --device,则构建将成功。但是此时我不会得到任何IPA文件或任何exportOptions.plist文件。 - Mark Veenstra
经过审核您的更新,我认为您正在使用的配置文件名称是不正确的。这些配置文件被安装在~/Library/MobileDevice/Provisioning\ Profiles/目录下。 - Jerry Horton
经过查看您的更新,我认为您正在使用的预配文件名称不正确。这些配置文件在安装后会被安装在/Library/MobileDevice/Provisioning\ Profiles/目录中。此外,请注意名称是<UUID>.mobileprovision。很容易从developer.apple.com重新下载配置文件,在编辑器中打开,然后搜索UUID。同时,名称是更好的选择,是此文件在下载后与在/Library/MobileDevice/Provisioning\ Profiles/中安装之前的名称。您还可以在文本编辑器中打开任何文件并搜索名称和/或UUID。 - Jerry Horton
似乎我的 build.json 没有被读入 cordova-cli。我在详细输出中看到了这一行:https://github.com/jrryhrtn/cordova-ios/blob/800e26c3d32f4c7f1c0d7e93e4e57b66571d9ae6/bin/templates/scripts/cordova/lib/build.js#L93。但它总是为空的。即使我使用 --buildConfig="build.json" 指定了 build.jsonbuild.json 位于项目根目录中。我仍然使用 cordova 6.5.0,也许这就是原因? - Mark Veenstra
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接