【发布时间】:2015-08-21 21:17:54
【问题描述】:
我正在尝试将我常用的 Swift 代码集中到一个框架中,其中部分代码使用了 Google Analytics。我将 Google Analytics 作为 Cocoapod 引入,但我无法像在原始项目中那样从新框架访问它,因为它是 Objective-C 并且框架中没有桥接头支持 [我正在使用 Swift 1.2]。
我通常在桥接头中的代码行是:
#import
我究竟应该把它放在我的项目中的什么地方,以使这一切都像以前在桥接头中一样工作?
我在Apple's documentation about mixing Swift and Objective-C 发现的是这样的:
从同一框架目标中导入代码
如果您正在编写一个混合语言框架,您可能需要访问 来自 Swift 的 Objective-C 代码和来自 Objective-C 的 Swift 代码。
将 Objective-C 导入 Swift
在相同的框架目标中导入一组 Objective-C 文件 您的 Swift 代码,您需要将这些文件导入 框架的 Objective-C 伞头。
将 Objective-C 代码从同一框架导入 Swift
在 Build Settings 下的 Packaging 中,确保 Defines Module 该框架目标的设置设置为是。在你的伞 头文件,导入您要公开的每个 Objective-C 头文件 迅速。例如:目标-C
导入
导入
导入
我认为最相关的短语是:
您需要将这些文件导入到 框架的 Objective-C 伞头
但是这个文件是什么以及如何创建它?
Apple 的文档前面提到(在表格中):
Objective-C 代码
导入 Swift
#import "Header.h"
好吧,我尝试创建一个文件“Header.h”并导入它,但这不起作用。我不知道他们想表达什么。我在构建设置中找不到任何“保护伞”。
所以我的问题是,如何在我的 Swift 项目中导入此文件 (#import
更新:
我开始相信可能objective-c 桥接头是与项目同名的.h 文件。我现在尝试在那里添加 import 语句,我得到的错误是:
!在框架模块“JBS”中包含非模块化标头
【问题讨论】:
-
我也在为同样的事情苦苦挣扎——你有没有对它进行排序?
-
还没有。由于这个问题,我一直在避免使用 cocoapods,但我在技术上使用的是 Google Analytics 的旧实现。我期待苹果会在某个时候意识到这个问题并采取一些措施。也就是说,除非已经有办法而且我只是不知道它是什么。
-
@John 您是否能够解决“在框架模块中包含非模块化标头”问题?我正在尝试做同样的事情(通过伞形标头将 GoogleAnalytics cocoapod 框架导入到 swift 框架中)并且我遇到了同样的错误。
-
@nebs 我相信是的。至少是进步。请参阅我的答案以获得解释。
标签: objective-c swift google-analytics frameworks cocoapods