从另一个框架和应用目标访问框架

Posted

技术标签:

【中文标题】从另一个框架和应用目标访问框架【英文标题】:Accessing a framework from another framework and an app target 【发布时间】:2017-01-05 21:47:30 【问题描述】:

我不确定如何正确配置构建设置,以便在另一个框架和我的应用程序目标之间共享框架 - 在这种情况下,共享框架是 Facebook SDK,但我不确定这是否是与我遇到的问题有关。

我希望喜欢的事情如何工作: 我希望我的框架包含 Facebook SDK,并且因为我的应用正在导入我的框架,所以它可以访问 Facebook SDK。不幸的是,我无法使用此配置进行构建。

首先,我在尝试从“我的应用”中引用 Facebook SDK 中的任何内容时收到unresolved identifier 构建错误。

如果我包含import FBSDKLoginKit,该构建错误就会消失,但我无法使用FBSDKLoginKit is not a dylib 进行编译。如果我随后在“我的应用程序”目标构建设置中包含 Facebook SDK 框架,我最终可以构建和运行,但在运行时我收到控制台日志警告所有 FBSDK 类都在“我的应用程序”和“我的框架”和“将使用两者中的一个。哪个未定义。”这是完全有道理的,因为我现在基本上已经编译了两次 Facebook SDK。

我认为我上面描述的是一个伞式框架,据我所知,Apple 不鼓励这样做。鉴于“我的应用程序”需要访问“FBSDK”和“我的框架”,而“我的框架”需要访问“FBSDK”,那么配置“我的应用程序”和“我的框架”的构建设置的正确方法是什么?获取有关重复实现的控制台日志?

【问题讨论】:

不是 Cocoapod,对吧? “我的框架”是否被带入工作空间? 对,我没有使用 Cocoapods。我有一个有两个目标的项目,“我的应用程序”和“我的框架”。 “我的框架”最终将与其他类似的应用程序共享代码,这就是它被从“我的应用程序”中拉出来的原因。 在项目中,转到框架的目标并选择常规选项卡。在“Linked Frameworks and Libraries”下,将“FBSDK”设置为“Optional”是否有效? 只需将您的框架和 FBSDK 添加到您的应用目标。您的框架可以正常调用所有 FBSDK 函数 @SushiGrassJacob 我仍然收到有关重复实现的控制台消息。 【参考方案1】:

实际上,这是 cocoapods 的一个已知问题,他们已经解决了,但尚未发布。我想它会在下一次 cocoapods 更新中修复。

你的实现没有问题。

来源:https://github.com/CocoaPods/CocoaPods/pull/7601

【讨论】:

以上是关于从另一个框架和应用目标访问框架的主要内容,如果未能解决你的问题,请参考以下文章

具有多个目标的核心数据框架

如何控制项目的访问权限来保证项目安全?SpringBoot 集成 Spring Security 安全框架使用指南

ATK-DataPortal 设计框架

Crashlytics从框架中的异常报告

更改项目目标框架后应用程序设置错误

为 iOS 和 watchOS 创建框架目标