引用的框架需要 Xcode6 代码签名吗?

Posted

技术标签:

【中文标题】引用的框架需要 Xcode6 代码签名吗?【英文标题】:Xcode6 code signing required for referenced frameworks? 【发布时间】:2015-02-03 01:02:52 【问题描述】:

Xcode 6.1.1

我们正在尝试签署我们的应用程序以进行分发(甚至只是为了在物理设备上进行测试)。我们的项目中有一个引用的框架。我们的印象是我们应该只签署我们的应用程序本身(并且我们已经设置了所有代码签名身份、配置文件等),但我们不应该签署这个外部框架,因为我们没有编写它。它应该从父项目获取其代码签名凭据。

但是,每次我们尝试在物理设备上运行时,此引用的框架都会引发构建错误:“CodeSign 错误:SDK 'ios 8.1' 中的产品类型'Framework' 需要代码签名”。

这是否意味着我们实际上必须对此进行代码签名?

具体来说,我们尝试使用的框架是 Alamofire。

【问题讨论】:

【参考方案1】:

我认为这取决于这些框架的来源:

如果它们是您的(即与您的项目捆绑在一起的内部库),您需要对其进行签名。 如果它们来自您从源代码构建的开源项目(即来自 Cocoapods 的 pod),则必须对它们进行签名。 如果它们来自第 3 方开发者,则它们应该已经签名。

在目标的“构建阶段”下有一个名为“嵌入框架”的步骤,您可以在其中指定要在包中嵌入的框架以及要对代码签名的内容:

他们是否已经有签名并不重要:你的将替换那里的任何内容。

您可以随时使用 codesign 命令行工具检查框架的证书状态:

xcrun codesign --verify --verbose [MYFramework.framework/MYFramework]

并使用以下命令打印歌唱实体:

xcrun codesign --display --verbose [MYFramework.framework/MYFramework]

【讨论】:

对于 Xcode 7,这似乎不再适用。我有“复制代码签名”,但框架没有得到代码签名。奇怪的是我知道框架是签名的,因为我在一个单独的项目中构建了代码,并用我的“iPhone Developer”证书对其进行了签名。此外,当我构建我的应用程序时,会出现警告:“跳过复制阶段条,二进制是代码签名的”。所以每个人都认为它是代码签名的,但是当我尝试上传到 App Store 时,它​​抱怨框架没有代码签名并且不会接受二进制文件。 Catch-22,不知道该怎么办... 目前我对 Xcode 7 没有任何问题。该框架必须使用与应用程序相同的证书进行签名,否则 iTunes 会抱怨。如果您的钥匙串中有多个证书,“iPhone Developer”有时会为不同的项目选择不同的证书。 看来,在 XCode 8 中,如果您想单独分发动态框架,您根本不需要对动态框架进行代码设计。因此,您只能在整个应用程序构建过程中依赖最终签名。但我听说嵌套框架存在一些问题——它们可能在复制阶段未签名,这是一个问题。

以上是关于引用的框架需要 Xcode6 代码签名吗?的主要内容,如果未能解决你的问题,请参考以下文章

SDK“iOS 8.0”中的产品类型“应用程序”需要代码签名

每个 .exe 代码签名操作都需要 Digicert USB 令牌吗? (EV代码签名证书)

10.9.5 下的 Xcode 6.0.1 会自动使用新的“版本 2 签名”对我的应用程序进行签名吗?

Xcode 10:代码签名我的App + Framework失败,因为签署第三方依赖框架(PromiseKit)失败。适用于Xcode 9

为啥我们不能在 xcode 6.1.1 中为推送通知选择配置文件和代码签名

上传到 App Store 时出错“缺少代码签名权利”