4

我在让我们的 CI 服务器构建我们的应用程序时遇到问题(如果相关,我们会使用 Jenkins)。

我们之前已经设置了我们的 Jenkins 构建以与 Fastlane/Sigh/Gym 一起使用,但是由于我们最近在我们的应用程序中添加了 iMessage 扩展,因此构建过程被破坏了。

我读过的所有内容都表明我应该使用 Match 来获取签名证书,而不是 Sigh,所以我已经转而使用它。

我也无法让 Sigh 工作,因为它生成的证书似乎忽略了两个证书都需要应用程序组功能的事实(两者都具有适当的“group.com.mycomp.myapp”应用程序组)

在我的本地开发机器上切换到 Match 后,我现在构建应用程序的成功有限。我现在在 Match 命令中使用一组应用程序标识符。

这确实成功地将证书下载到本地计算机。(经过多次尝试以及使用无效证书等来回转发后,我终于设法让这一步在 CI 服务器上工作)

接下来,在我的本地计算机上运行 Gym 成功,但在 CI 服务器上失败并显示以下消息:

SDK“iOS 10.1”中的产品类型“App Extension”需要代码签名

查看完整日志文件的最后,我可以看到消息

检查依赖项

未找到“com.mycomp.appname.iMessage”的配置文件:Xcode 找不到匹配“com.mycomp.appname.iMessage”的配置文件。

SDK“iOS 10.1”中的产品类型“App Extension”需要代码签名

我们 Fastfile 中的这条通道如下所示:

  lane :production_build do

    # grab the appropriate full paths
    project_path = File.expand_path("./", __FILE__)
    xcodeproj_path = File.join(project_path, 'AppName.xcodeproj')
    xcodeworkspace_path = File.join(project_path, 'AppName.xcworkspace')

    # update the correct entitlements file for production
    srcEntitlements = File.join(project_path, 'AppName-Prod.entitlements')
    destEntitlements = File.join(project_path, 'AppName.entitlements')
    print "copying Entitlements file\n from: #{srcEntitlements}\n to  : #{destEntitlements}\n"
    FileUtils.cp(srcEntitlements, destEntitlements)

    # switch the xcproject details to the appropriate team 
    # (we use different teams for Dev and Prod) 
    update_project_team(
      path: xcodeproj_path,
      teamid: "XYZZY"
    )
    # we have a couple of other steps here to ensure the project configuration
    # uses the correct AppIds but I've excluded them for brevity 

    # download the appropriate certs
    match(type: "appstore",
        app_identifier: ["com.mycomp.appname", "com.mycomp.appname.iMessage"],
        team_name: "Team Name",
        team_id: "XYZZY"
        )

    # These old Sigh commands appear to ignore the App Groups requirements 
    #    sigh(force: true, adhoc: true, app_identifier:"com.mycomp.appname")
    #    sigh(force: true, adhoc: true, app_identifier:"com.mycomp.appname.iMessage")
    gym(scheme: "AppName Production", workspace: xcodeworkspace_path) 
  end

我在两台机器上运行相同的组件和最新版本:

  • XCode v8.1
  • 快车道 v1.111.0
  • 健身房 v1.12.1
  • 匹配 v0.11.0
  • 叹息 v1.12.0

我猜这在我的本地开发计算机上正常工作,因为我总是在 XCode 中加载项目,我假设它修复了证书映射,而在 CI 服务器上我不这样做。

如何正确映射证书以便在 CI 服务器上工作?

或者,我该如何设置,以便 Sigh 生成具有正确应用组要求的证书?

4

0 回答 0