将Objective-c框架导入Swift框架(Google Analytics + Cocoapod)

约翰·布什内尔

我正在尝试将常用的Swift代码集中到一个框架中,其中一部分代码使用Google Analytics(分析)。我以Cocoapod的身份引入了Google Analytics(分析),但是我无法像在原始项目中那样从新框架中访问它,因为它是Objective-C,并且框架中没有桥接头支持[我正在使用Swift 1.2]。

我通常在桥接标头中包含的代码行可以完成所有这些工作:

#import <Google / Analytics.h>

我究竟将其放置在项目中的什么位置,以使其像以前在桥接头中所做的那样工作?

我在Apple文档中发现有关混合Swift和Objective-C的内容是:

从同一框架目标中导入代码

如果您正在编写混合语言框架,则可能需要从Swift访问Objective-C代码和从Objective-C访问Swift代码。

将Objective-C导入Swift

要在与Swift代码相同的框架目标中导入一组Objective-C文件,您需要将这些文件导入框架的Objective-C伞形标头中。

从同一框架将Objective-C代码导入Swift

在“打包设置”下的“构建设置”下,确保该框架目标的“定义模块”设置被设置为“是”。在您的伞形头文件中,导入要公开给Swift的每个Objective-C头。例如:OBJECTIVE-C

导入<XYZ / XYZCustomCell.h>

导入<XYZ / XYZCustomView.h>

导入<XYZ / XYZCustomViewController.h>

我认为最相关的一句话是:

您需要将这些文件导入框架的Objective-C伞式标头

但是,此文件是什么以及如何创建它?

Apple的文档前面提到(在表格中):

Objective-C代码

导入到Swift

#import“ Header.h”

好吧,我尝试只创建一个文件“ Header.h”并导入它,但这是行不通的。我不知道他们想说什么。我在构建设置中找不到任何“伞”。

所以我的问题是,如何在我的Swift项目中导入此文件(#import <Google / Analytics.h>),以便可以像正常项目的桥接头中那样看到Google Analytics(分析)cocoapod框架?

更新:

我已经相信,objective-c桥接头文件可能是与项目同名的.h文件。我现在尝试在其中添加import语句,得到的错误是:

在框架模块“ JBS”中包含非模块化头

核蛋白

解决方案并不像应用程序那么简单。我们必须创建一个模块映射。

看一下这个示例仓库

在Swift代码内部,我们只能导入所谓的模块。诀窍是定义一个模块,该模块又包含我们需要Swift代码访问的所有ObjC标头。

的模块图部分这篇文章也可以帮助你。

尽管桥接头很方便,但它有一个关键的限制-您不能在框架项目中使用它。替代方法是使用模块。

为此,请在项目目录中创建一个要使用的库命名的目录。我在Xcode主持下的Shell中进行了此操作,将其命名为CommonCrypto。在目录内,创建一个封装库设置的module.map文件。对于CommonCrypto,module.map如下所示:

module CommonCrypto [system] { header "/usr/include/CommonCrypto/CommonCrypto.h" export * }

现在,将新模块添加到项目设置中“ Swift Compiler –搜索路径”下的“导入路径”。在模块路径中使用$ {SRCROOT}(例如$ {SRCROOT} / CommonCrypto)以确保该项目无论在何处签出都可以正常工作。

这样就可以将Swift中的CommonCrypto导入。请注意,使用此技术构建的任何框架的使用者也必须将模块添加到其Swift搜索路径中。

我按照上面文章中的步骤进行操作,并通过以下方式使其适合我的需要:

module Muse { header "Muse.framework/Headers/Muse.h" export * }

[system]为了安全起见,我删除了lexon(因为它删除了警告),并将框架放在了module.map文件所在的文件夹中。

此外,如果libc++.tbd需要,请不要忘记在框架目标中(在选项卡Linked Frameworks and Libraries部分中General包含和其他必需的依赖项

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章