Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建iOS/OSX框架:在分发给其他开发人员之前是否需要对其进行代码设计?_Ios_Code Signing_Ios Frameworks - Fatal编程技术网

创建iOS/OSX框架:在分发给其他开发人员之前是否需要对其进行代码设计?

创建iOS/OSX框架:在分发给其他开发人员之前是否需要对其进行代码设计?,ios,code-signing,ios-frameworks,Ios,Code Signing,Ios Frameworks,我正在学习如何创建iOS和OSX框架。以iOS为例,到目前为止,以下步骤对我有效: xcodebuild框架使用-sdk iphonesimulator和构建操作 xcodebuild框架使用-sdk iphoneos和构建操作 使用lipo工具创建通用二进制文件,以便lipo-info生成预期的: fat文件Foo.framework/Foo中的体系结构是:i386 x86_64 armv7 arm64 问题是: 我读到我的框架可以由使用它的开发人员重新签名:“副本上的代码签名”,但我不明白它

我正在学习如何创建iOS和OSX框架。以iOS为例,到目前为止,以下步骤对我有效:

  • xcodebuild框架使用-sdk iphonesimulator和构建操作
  • xcodebuild框架使用-sdk iphoneos和构建操作
  • 使用lipo工具创建通用二进制文件,以便
    lipo-info
    生成预期的:
  • fat文件Foo.framework/Foo中的体系结构是:i386 x86_64 armv7 arm64

    问题是:

  • 我读到我的框架可以由使用它的开发人员重新签名:“副本上的代码签名”,但我不明白它的先决条件是什么,即在将其分发给其他开发人员之前,我是否应该将代码签名步骤添加到通用二进制文件的代码签名中?

  • 如果前面的是肯定的-我应该使用我的“iPhone发行版:…”身份还是“iPhone开发者:…”就足够了(这样我的框架作为某个iOS项目的一部分通过了各种验证,特别是应用商店验证)

  • 我回答的背景是“CodeSign错误:SDK‘iOS 8.3’中的产品类型‘Framework’需要代码签名”,我在许多第三方框架上看到过这种情况,或者“代码对象根本没有签名”(一个示例:我报告的问题)

    因此,我希望确保我的框架的用户在使用它们时不会遇到任何代码签名问题


    另外,当这个问题不适用于单个开发人员,而是适用于作为框架供应商的组织时,这个问题变得更加有趣。

    从阅读Carthage repo上的链接线程来看,它似乎相对简单。如果您正在分发二进制框架,您需要对其进行代码签名,如果您正在通过Carthage o分发源代码r可可豆豆荚你不知道,因为这些工具通过不同的方法处理这些问题

    分发二进制框架时需要对其进行代码签名的原因是,如果不对其进行代码签名,Xcode将无法生成框架二进制文件。如果尝试不对二进制框架进行代码签名,则会出现以下错误:

    CodeSign error: code signing is required for product type 'Framework' in SDK 'iOS 8.1'
    
    使用哪个身份对框架进行代码签名并不重要(iPhone开发者或iPhone发行版),因为正如您所指出的,框架将使用“代码签名副本”重新进行代码签名设置。这意味着在将框架复制到框架使用者的应用程序中时,框架将由框架使用者的开发人员配置文件中的相应证书重新进行代码签名。这意味着应用商店不会出现任何问题,因为它只会看到框架使用者的最终代码签名

    在一天结束时,您最好对您的.framework二进制文件进行代码签名,因为您不想维护一个奇特的构建过程,而且由于Xcode只输出已签名的框架,您不应该离默认值太远。无论如何,这并不重要,因为最终用户将对其重新签名。

    我打开了赏金:“从可信和/或官方来源寻找答案。”但从那以后就再也没有收到过这样的答复

    虽然@jackslash提供的答案是正确的,但它只讲述了故事的一部分,所以我想以一种我想在问这个问题时看到的方式来写我自己的故事

    这个答案的现实是:2015年7月。事情很可能会改变

    首先,让我们断言,框架的正确代码签名所需的操作应该分为框架开发人员必须采取的步骤和框架消费者必须采取的步骤。

    TLDR;

    对于OSX框架:开发者可以免费分发OSX框架,而无需对其进行代码签名,因为消费者无论如何都会重新对其进行代码签名。

    对于iOS框架:开发人员可以免费分发iOS框架,而无需对其进行代码签名,因为消费者无论如何都会重新对其进行代码签名,但在为iOS设备构建时,Xcode会强制开发人员对其框架进行代码签名。

    因为雷达:iOS框架的消费者被迫运行特殊脚本,如“复制框架”或“剥离框架”,该脚本使用
    lipo-remove
    从iOS框架剥离模拟器切片,并重新对剥离框架进行代码设计,因为此时它的代码设计身份无论是什么(或不是什么)作为lipo-remove操作的副作用去除。

    接下来是更长的答案


    这个答案不是“从可信和/或官方来源”得出的,而是基于大量经验观察得出的

    经验观察#1:消费者并不在意,因为他们会重新设计从开发人员那里获得的框架

    Github上著名开源项目的二进制框架发行版没有进行代码设计。Command
    codesign-d-vvvv
    在我曾经研究过的所有二进制iOS和OSX框架上给出了:“代码对象根本没有签名”。一些示例:和

    从这一观察结果可以清楚地看出,这些框架的作者希望由消费者代表他们进行代码签名,即消费者必须在“嵌入框架”中使用“复制时代码签名”标志“构建阶段由Xcode提供,或者使用一些自定义shell脚本手动执行相同的操作:代表消费者对框架进行代码设计

    我没有发现任何一个相反的例子:开放源代码框架中包含代码签名标识,因此在回答的其余部分中,我假设这种广泛采用的方法是正确的:框架开发人员没有必要将其框架分发给其他具有代码签名标识的开发人员因为消费者无论如何都会重新对其进行代码设计

    经验性观察#2仅适用于iOS,且为ent