如何在 iOS SDK 中创建伞形框架?

Posted

技术标签:

【中文标题】如何在 iOS SDK 中创建伞形框架?【英文标题】:How to create an umbrella framework in iOS SDK? 【发布时间】:2015-02-13 14:31:33 【问题描述】:

我想在 ios SDK 中创建一个伞式框架。我的要求是:

我有一个名为“Framework A”的框架,我想创建另一个名为“Framework B”的框架。我想将“Framework A”作为子框架添加到“Framework B”中,用户只需在他们的项目中导入“Framework B”即可同时使用“Framework A”和“Framework B”。换句话说,“框架 B”将作为“框架 A”的包装。我通过以下链接从 Apple 中读出了有关框架创建的信息:

https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.html

但它没有公开创建伞式框架的方法。

请建议一步一步的方法来创建一个伞形框架。

【问题讨论】:

How to add a framework inside another framework (Umbrella Framework)的可能重复 【参考方案1】:

我们都知道,Apple 非常不鼓励创建伞式框架。但苹果也表示可以通过 Xcode 实现。 https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html#//apple_ref/doc/uid/20002254-BAJHGGGA

我在 Xcode 5.1 上通过这些简单的方法实现了创建伞形框架。我们只需要处理一些特殊的配置来将子框架链接到伞形框架。这是我的方法:-

1) 通过此处描述的方法在 Xcode 5.1 上安装真正的Static iOS Framework:- https://github.com/kstenerud/iOS-Universal-Framework。

现在可以使用 Xcode 中的新选项创建“静态 iOS 框架”。

2) 创建Static iOS Framework 并将Target-> Build Settings-> Architectures-> Architectures 设置更改为标准架构。这将创建具有所有标准架构的框架。

3) 调整Target-> Build Phase-> Copy Headers 中的Public Header 文件。我们可以在这里设置头文件的可见性。

4) 将 SubFramework 链接到 Target->Build Phase -> Link Binary With Libraries 中的 UmbrellaFramework。根据我们的使用情况,我们可能还需要链接其他标准框架。

5) 如果需要,我们可能还需要在Target-> Build Phase-> Copy Bundle Resources 中添加Bundle Resources。

6) 我们可能还需要将-ObjC 添加到Target-> Build Settings->Linking-> Other Linker Flag,因为我们可能需要加载一个大型子框架,其中需要加载许多类别或还需要加载其他框架。

7) 使用Target-> Build Phases-> +-> New Copy File Build Phase 添加Copy File

8) 将其 Destination 更改为 Frameworks 并在那里添加 SubFramework.framework。这会将 SubFramework 复制到 Umbrella Framework。

9) 对于演示,我在 UmbrellaFramework 类中添加了两个演示方法。一种用于演示伞形框架方法调用,一种用于调用 subFramework 方法。

10) 选择 iOS Device 并从 Menu->Product->Archive 存档 UmbrellaFramework 项目。这将创建我们的伞形框架,仅此而已。

11) 现在是时候创建一个新的演示项目,并将其与 UmbrellaFramework 链接。

12) 只需导入 UmbrellaFramework 标头并调用这两个方法。它将在日志窗口中显示 Hello 消息。

【讨论】:

不幸的是,到目前为止,我在 Xcode 6 上还没有成功。 'iOS 通用框架'github.com/kstenerud/iOS-Universal-Framework 也应该添加对 Xcode 6 的支持。 我试过那个,但也没有运气。 Apple 记录了伞形框架的使用,却没有提供任何关于如何创建它们的指导,这真是该死的耻辱。 @MohdIftekharQurashi。获取子框架未找到错误。 在最终应用中使用伞形框架时,有没有人尝试过这个问题? dyld:库未加载:@rpath/embeddedframework.framework/embeddedframework 引用自:/private/var/containers/Bundle/Application/EA127B01-9444-4660-B0F6-1A75A74CB330/sampleapp.app/Frameworks/umbrellaframework.framework/umbrellaframework 原因: 图片未找到 在 Xcode 8 中对我不起作用,仍然出现链接器错误【参考方案2】:

要创建包含子框架的基于 Swift 的 Umbrella 框架,您可以按照此处记录的分步指南进行操作:Umbrella framework

【讨论】:

以上是关于如何在 iOS SDK 中创建伞形框架?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mapbox iOS SDK 3.0 版中创建自定义图像标记?

在 ios sdk 中创建半圆形旋钮

iOS - 如何在没有第三方框架的情况下在 Swift 中创建自定义动画横幅

如何使用 Swift 4 在 iOS 9+ 中创建瀑布布局

如何在 Parse cloud Javascript SDK 中创建此查询?

如何在 Facebook SDK 中创建自定义分享按钮