关于ios:Fastlane在Bitrise上找不到配置文件

Fastlane cannot find provisioning profile on Bitrise

我正在使用Fastlane在本地构建iOS应用,没有任何问题。

我将match与单独的存储库配合使用,以跟踪证书和配置文件。

在本地它工作正常。

但是,在Bitrise上,出现此错误:

1
2
3
4
5
6
7
8
9
10
11
12
[05:23:16]: All required keys, certificates and provisioning profiles are installed ??
[05:23:16]: Setting Provisioning Profile type to 'app-store'
[05:23:16]: -----------------------
[05:23:16]: --- Step: build_app ---
[05:23:16]: -----------------------
[05:23:16]: $ xcodebuild -list -workspace Myapp.xcworkspace -configuration Debug
[05:23:17]: $ xcodebuild -showBuildSettings -workspace Myapp.xcworkspace -scheme Myapp -configuration Debug
[05:23:20]: Couldn't automatically detect the provisioning profile mapping
[05:23:20]: Since Xcode 9 you need to provide an explicit mapping of what
[05:23:20]: provisioning profile to use for each target of your app
[05:23:20]: No such file or directory @ rb_sysopen - /Users/vagrant/git/Pods/Target Support Files/Pods-Myapp/Pods-Myapp.debug.xcconfig
[05:23:20]: Detected provisioning profile mapping: {:"com.myapp.myapp"=>"match AppStore com.myapp.myapp"}

我尝试在Fastfile中显式映射配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
lane :beta do
    clear_derived_data
    increment_build_number
    match(app_identifier:"com.myapp.myapp", type:"appstore", clone_branch_directly: true)
    build_app(
        workspace:"Myapp.xcworkspace",
        scheme:"Myapp",
        configuration:"Debug",
        export_options: {
            method:"app-store",
            provisioningProfiles: {
               "com.myapp.myapp" =>"match AppStore com.myapp.myapp"
            }
        }
    )
    upload_to_testflight(skip_waiting_for_build_processing: true)
end

知道我需要解决什么吗?


第1部分:解决此问题并了解正在发生的事情

为了在本地复制/解决此问题,我建议禁用自动签名。这样,您将更接近CI / CD配置。您可能在本地有权访问允许其在本地工作的证书。禁用自动代码签名将完全向您显示XCode使用的证书。为此,可以使用disable_automatic_code_signing命令。

1
2
3
disable_automatic_code_signing(
    path:"demo-project/demo/demo.xcodeproj"
)

完成此操作后,您可以进入本地XCode,查看其使用的配置文件。这是第一步。我还建议从您的库中删除所有本地配置文件。 (更接近于Bitrise配置,一旦启动流程,该配置便不会加载任何配置文件)。
通过以下命令可以实现:

1
2
cd ~/Library/MobileDevice/Provisioning\\ Profiles
rm -fr *

完成此操作后,很可能将不允许您使用所需的目标(和配置)导出存档。希望它将在本地失败,就像在远程失败一样。从那时起,您可以进入XCode,查看通过match下载的不同配置概要文件,并弄清为什么它无法自动解决它。

第2部分:关于正在发生的事情以及如何解决它的有根据的猜测

我怀疑您正在尝试使用iPhone Developer的代码签名身份对代码进行编码,但是您正在使用的match命令会检索分发证书(iOS分发签名身份)。
使用自动签名,XCode会寻找与您的目标和配置相匹配的配置概要文件。它尝试查找iOS Developer证书,但这不是您使用match获取的证书。

解决此问题(如果是问题)的简单方法是在build_app之前和之后更改标志标识方法。您可以这样实现:

1
2
3
4
automatic_code_signing(
    path:"demo.xcodeproj",
    code_sign_identity:"iPhone Distribution"
)

或直接在您的build_app / Gym中使用code_sign_identity参数:

1
2
3
4
5
6
build_app(
    workspace:"Myapp.xcworkspace",
    scheme:"Myapp",
    configuration:"Debug",
    codesigning_identity:"iPhone Distribution" # or iPhone Developer
)


由于您使用的是Bitrise,为什么不使用它们的集成来自动进行代码签名和部署呢?我最近从Fastlane步骤转移到Bitrise步骤。在这里查看我的答案:https://stackoverflow.com/a/60836343/1271474