关于 iOS 代码签名策略 - 当我们在没有代码签名的情况下归档项目并稍后使用配置文件将其导出时会发生啥?

Posted

技术标签:

【中文标题】关于 iOS 代码签名策略 - 当我们在没有代码签名的情况下归档项目并稍后使用配置文件将其导出时会发生啥?【英文标题】:About iOS code signing strategy - what happens when we archive a project without code signing, and export it with profile later?关于 iOS 代码签名策略 - 当我们在没有代码签名的情况下归档项目并稍后使用配置文件将其导出时会发生什么? 【发布时间】:2021-08-02 06:54:34 【问题描述】:

我对代码签名策略有一些疑问,根据签名的顺序(我无法通过搜索找到答案)。

也就是说,

如果我们不在 ARCHIVE 上提供任何代码签名身份和配置文件,然后在导出步骤中提供它们,会发生什么情况?例如,
xcodebuild archive \
    -project <ProjectName>.xcodeproj \
    -sdk iphoneos \
    -scheme <SchemeName>
    -configuration Release \
    CODE_SIGN_IDENTITY="" \#disable code sign 
    CODE_SIGNING_REQUIRED=NO \#disable code sign
    CODE_SIGNING_ALLOWED=NO \#disable code sign

以上是没有代码符号的存档代码。 在下面,为了导出,我使用exportOptions.plist 提供配置文件。

xcodebuild -exportArchive -archivePath <ProjectName>.xcarchive -exportOptionsPlist <ProjectName>/exportOptions.plist -exportPath <ProjectName>.ipa

如果我使用带有分发选项的配置文件,这是否可用于应用商店分发?

在归档项目时,这些正确的选项是否可以提供配置文件的详细信息? (我搜索了很多示例,但答案略有不同)。
xcodebuild archive \
    -project <ProjectName>.xcodeproj \
    -sdk iphoneos \
    -scheme <SchemeName> \
    -configuration Release \
    CODE_SIGN_IDENTITY="****...D21C78" \
    PROVISIONING_PROFILE="********-****-..."

上面的代码不断出错:&lt;ProjectName&gt; requires a provisioning profile. Select a provisioning profile in the Signing &amp; Capabilities editor,即使我正在使用 CLI。

如果有任何问题的解决方案,请指导我。任何可以参考的文件/纸张或其他材料也可以。

【问题讨论】:

【参考方案1】:

(自我回答我的问题)

所以,对于第一个问题,我做了很多实验,发现空签名的存档可以导出,但不能部署到设备上。

要正确部署 ipa(exported) 文件,应使用 codesign 命令对归档文件进行签名。

为此,它们应包含权利和共同设计身份。

codesign -s IDENTITY --entitlements PATH_TO_ENTITLEMENTS_FILE ... PROJECT_PATH/~~~/NAME.app

对于第二个问题,我找不到答案,但是可以使用诸如空签名存档-> 代码设计-> 导出之类的策略。

【讨论】:

以上是关于关于 iOS 代码签名策略 - 当我们在没有代码签名的情况下归档项目并稍后使用配置文件将其导出时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

iOS小技能:RSA签名验签加密解密的原理

iOS小技能:RSA签名验签加密解密的原理

iOS小技能:RSA签名验签加密解密的原理

iOS 包签名及重签名

ios掉签恢复教程(内含安卓福利和企业不死签名)

各个品牌的代码签名中都有时间戳,是干啥用的?