Codesigndoc v2可在Bitrise上与Xcode 9完美协作

您友好的iOS Code Signing Doctor获得了 Codesigndoc 的新版本, 具有新功能和修复功能,使其可以与Xcode 9的代码签名完美结合。 😎

Codesigndoc可帮助您从计算机收集所有必需的代码签名文件( Codesign IdentitiesProvisioning Profiles ),以在Bitrise上成功签名Xcode / Xamarin项目。

该工具的v1版本使用了以下事实:如果使用xcodebuild / msbuild构建工具运行Xcode / Xamarin存档,则所用的代码签名文件将由构建工具记录。 Codesigndoc刚刚调用了特定于项目的build命令来存档您的项目,并解析该命令的输出以确定要收集的文件。

使用这些代码签名文件,您可以在Bitrise上存档您的项目。 为了能够收集所需的代码签名文件以将生成的存档导出到.ipafile,codesigndoc也已收集

  • 您的钥匙串中与档案库开发团队匹配的所有代码签名身份
  • 提供您的项目目标的捆绑软件ID的所有供应配置文件。

该解决方案有一些缺点:

  • Xcode的新构建系统不会记录使用的代码签名文件(这很糟糕,是吗?)。
  • 您可能需要使用其他团队来导出存档。
  • 如果您的钥匙串包含所需的Codesign Identity的重新制作版本,则两个版本都打包到证书(.p12)文件中。
  • 由于仅根据您的项目目标的捆绑软件ID收集了“供应配置文件”,因此即使“配置文件”不包含您项目的所有功能,它也可能已经收集了具有与您的项目匹配的捆绑软件ID的配置文件。

v2如何运作?

我们试图更新Codesigndoc使其工作与使用Xcode 9导出.ipa文件时类似。

要分发项目,您需要完成两个任务:

  1. 归档项目
  2. 将生成的存档导出到.ipa文件

新的Codesigndoc中的第一个任务没有更改:它仍然调用特定于平台的构建工具的build命令来存档您的项目。 但是,它不分析命令日志,而是分析生成的存档文件。

关于代码签名,档案看起来如何?

如果您的项目包含多个应用目标(主应用,监视应用,应用扩展以及监视应用扩展),则归档文件如下所示:

 code-sign-test.xcarchive 
 ├── Info.plist 
└── Products
└── Applications
└── code-sign-test.app
├── Info.plist
├── archived-expanded-entitlements.xcent
├── embedded.mobileprovision

├── PlugIns
│ └── share-extension.appex
│ ├── Info.plist
│ ├── archived-expanded-entitlements.xcent
│ └── embedded.mobileprovision

└── Watch
└── watchkit-app.app
├── Info.plist
├── archived-expanded-entitlements.xcent
├── embedded.mobileprovision

└── PlugIns
└── watchkit-app-extension.appex
├── Info.plist
├── archived-expanded-entitlements.xcent
└── embedded.mobileprovision

在这个档案中

  • 主要应用是: code-sign-test.app
  • 主应用程序的扩展名是: share-extension.appex
  • 监视应用程序是: watchkit-app.app
  • watch应用程序的扩展名是: watchkit-app-extension.appex

每个应用程序都包含Info.plistarchived-expanded-entitlements.xcentembedded.mobileprovision文件。

Info.plist文件包含目标的包标识符

基于archived-expanded-entitlements.xcent文件,我们可以确定目标的功能

在归档期间用于对目标进行签名的Provisioning Profile嵌入在embedded.mobileprovision

归档文件的根Info.plist文件包含archive命令使用的Codesign标识

因此,首先,通过分析.xcarchive文件,Codesigndoc无疑可以确定使用哪些代码签名文件对存档进行签名,以及.ipa导出代码签名文件需要满足哪些条件。

然后Codesigndoc:

  • $HOME/Library/MobileDevice/Provisioning Profiles目录中搜索已安装的Provisioning Profiles,并使用security工具调用从Keychain中读取代码签名证书
  • 根据您的项目要求(目标捆绑ID,目标功能,IPA导出方法)过滤这些文件
  • 通过根据其开发证书映射概要文件来创建代码签名组
  • 询问您要导出和导出所需文件的哪个codesign组

而已! 试试新的Codesigndoc ,让我们知道它如何为您服务! 🚀