ios - 如何在另一个框架内添加一个框架(Umbrella Framework)

标签 ios frameworks

我已经使用 following tutorial 构建了一个框架.

而且我还得到了this框架。

我正在尝试在我的内部实现第二个框架,根据我在 Apple 文档中所读到的结果框架称为“Umbrella 框架”。

我使用拖放功能在框架中添加了第二个框架,并验证它是否在“Link Binary With Libraries”中。

在我尝试在我的框架的一个类中进行下一次导入之后:

#import <CrashReporter/CrashReporter.h>

我收到一条错误消息,因为导入的框架不可见。

我还看到了 stackoverflow 帖子: How to create an umbrella framework in iOS SDK?

更新

有没有人试过为 iOS 提取 PLCrashReporter 类并将其集成到项目中?

你可以找到我的尝试here .

最佳答案

分发另一个框架的诱惑是可以理解的,但非常不鼓励。我将尝试解释为什么会这样(有论据),并提供一些对您的情况有帮助的很好的替代方案。

Umbrella 框架是为了使用而设计的,只有当你是这两个框架的分发者时,你对它们有完全的控制权,它们才会一起分发。

Apple 关于这个主题有一句流行的话,他们说他们不鼓励伞式框架。

Don't Create Umbrella Frameworks

While it is possible to create umbrella frameworks using Xcode, doing so is unnecessary for most developers and is not recommended. Apple uses umbrella frameworks to mask some of the interdependencies between libraries in the operating system. In nearly all cases, you should be able to include your code in a single, standard framework bundle. Alternatively, if your code was sufficiently modular, you could create multiple frameworks, but in that case, the dependencies between modules would be minimal or nonexistent and should not warrant the creation of an umbrella for them.

首先,这是大多数开发人员在这种情况下所做的,因为有许多框架依赖于其他框架。

告知用户您的框架需要使用另一个第三方框架。在大多数情况下,这是完全标准的和预期的。然后在系统级别链接到它。就这么简单。您的框架将找到第三方并正常运行,就像使用原生框架一样。以 UIKit 为例。要链接到第三方,请按照下一节中的步骤操作。它当然可以通过标准方式完成,但使用像 CocoaPods 这样的工具将使您的项目更易于维护。

要完全回答您的问题,不要以通常的方式添加第三方框架,因为您可能会遇到问题和并发症,请使用 CocoaPods为您添加。通过这种方式,您可以消除可能的问题并获得 CocoaPods 的额外好处,让您获得所需的第三方的确切版本。

这是名为“CrashTest”的应用程序的 CocoaPods Podfile

target 'CrashTest' do
pod 'PLCrashReporter', '~> 1.2.0'
end

澄清一下,当您开发框架时,它仍将添加到您的项目中并可见。这里最大的区别是它将与您的框架分开分发,最终用户必须将两者都添加到他们的项目中才能使事情正常进行。

以下是这样做的原因。

例如,您希望在您的框架中包含 PLCrashReporter。假设另一个框架供应商也想将其包含在他们的框架中。使用这两个框架的应用程序将包含两次 PLCrashReporter(作为每个伞形框架的一部分)。甚至可能有不同的版本。这可能会导致用户应用程序内部出现严重问题。如果两个伞形框架都链接到 PLCrashReporter,如上一节所述,则可以完全避免此问题。

我在上面提到的另一点是版本控制。在分发一个伞形框架时,你需要能够控制所涉及的所有框架的版本,而你无法控制第三方框架。这将再次导致与上述问题类似的问题。

我知道这种方法不能直接回答问题,但它试图阻止不良做法,同时指出行业标准的做事方式。

关于ios - 如何在另一个框架内添加一个框架(Umbrella Framework),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681435/

相关文章:

ios - 无法绘制折线谷歌地图 : Swift 3

ios - 在自定义静态框架 iOS 中使用 magicalrecords 库

ios - iOS 是否会在应用程序启动时将所有系统动态框架加载到内存中?

programming-languages - .ac 扩展名是指什么?

javascript - iOS 上的 Phonegap fileReader 错误消息

ios - 协议(protocol)扩展中的 Swift 闭包

ios - 如何使特定的 TableView 单元格值出现在页脚 View 中?

ios - 如何修复 Firebase SIGABRT 崩溃 iOS

ios - iOS 文本布局框架

java - 在java中绘制 float 的图形