3

我开始在 jenkins 上使用 fastLane 和 match 进行代码设计。match 能够成功创建证书和配置文件。但是该build_app步骤失败,因为pbxproj文件将 CODE_SIGN_STYLE 设置为自动。我想在不修改pbxproj文件的情况下实现构建,因为开发人员使用自动签名。

快速文件

        lane :upload_debug_test_flight do
          setup_jenkins
          match
          build_app(scheme: "MyWork Dev", clean: true, export_method: "app-store")
          upload_to_testflight(.....)
        end

匹配文件:

    git_url("git@github.mywork/cert_repo.git")
    storage_mode("git")
    type("appstore")
    api_key_path("./test.json")
    app_identifier(["com.mywork.mywork-test"])
    username("developer@mywork.com")

在我们的 project.pbxproj 我们有

    CODE_SIGN_IDENTITY = "Apple Development";
    CODE_SIGN_STYLE = Automatic;
    PROVISIONING_PROFILE_SPECIFIER= ''

还尝试了以下方法,但仍然 gym/build_app 没有选择匹配的环境变量:

            build_app(
                skip_profile_detection: true,
                export_method: "app-store",
                export_options:{
                    signingStyle: "manual",
                    provisioningProfiles:{
                        "com.mywork.mywork-test": "match AppStore com.mywork.mywork-test"
                    }
                }
            )
4

1 回答 1

0

Gym ( build_app) 使用 Match 定义的配置文件映射进行归档 ( export_options),但不用于构建应用程序(这是两个不同的步骤)。

因此,您需要配置您的 Xcode 项目以使用特定配置文件,或者PROVISIONING_PROFILE_SPECIFIER在调用build_app.

如果开发者只使用Debug配置,可以在Debug和之间指定不同的设置Release。这样,您可以保留配置Automatic选项Debug并为配置手动指定代码签名身份和配置文件Release

如果您根本不想接触您的 Xcode 项目并从 fastlane 动态定义所有内容,您可以使用update_code_signing_settings操作来使用由 Match 管理的配置文件:

match(...)
profile_mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
update_code_signing_settings(
    use_automatic_signing: false,
    path: "path/to/your/project.xcodeproj",
    profile_name: profile_mapping['app_identifier'] # app_identifier could be an environment variable: ENV['APP_ID']
)
build_app(...)

另一种解决方案是将PROVISIONING_PROFILE_SPECIFIER变量传递给xcargs选项。请注意,它会更新所有目标中的值,因此如果您的应用程序扩展程序具有不同的配置文件,它可能无法正常工作。

build_app(
    ...
    xcargs: "PROVISIONING_PROFILE_SPECIFIER='profile_name'"
)
于 2022-01-07T10:35:15.567 回答