Swift 桥接头文件不适用于 use_frameworks

Posted

技术标签:

【中文标题】Swift 桥接头文件不适用于 use_frameworks【英文标题】:Swift bridging header file won't work with use_frameworks 【发布时间】:2016-09-13 02:18:05 【问题描述】:

我正在尝试使用 GoogleidentityToolkit 库来处理登录问题。我启用 use_frameworks!在我的 pod 文件上,但找不到模块 GITkit。我试图弄清楚发生了什么。据我所知,如果您使用“use_frameworks”,则不需要创建任何桥接头文件,因为 cocoapods 会将库编译为单个模块,因此稍后您可以照常在 *.swift 文件中导入。

在 Swift 中使用 Google Identity Toolkit 库需要什么?


这个问题是在 CocoaPods 1.0.0 发布一周后提出的(当时 CocoaPods 0.39.0 仍然很流行),Google Identity Toolkit 的可用版本是 2015 年的 1.1.3,但得到了在 2016 年 Google I/O 之后,弃用了 Firebase 身份验证 (pod 'FirebaseUI/Auth')。

【问题讨论】:

您是否尝试过清理和重建项目?它发生在我身上,我不得不清理项目。 @HossamGhareeb 我试过但没有成功。我在我的ViewController 类中做import GITkit,但找不到该模块。我是否需要添加桥头文件?谢谢 应该不是。可能是导入语法错误:),试试import GoogleIdentityToolkitimport GITKit 您能否指定您在提问时使用的 CocoaPods 版本? 【参考方案1】:

A) 创建一个名为 “ProjectName-Bridging-Header.h”在你的项目的根文件夹中。

B) 转到项目构建设置并设置以下值:

“安装 Objective-C 兼容性标头” "Objective-C Bridging Header"您的桥接标题的路径(例如 "ProjectName/ProjectName-Bridging-Header.h"

之后,您可以使用头文件来导入您想要在 swift 代码中使用的所有 ObjectiveC 文件。

注意:如果需要,在资源头和 Swift 编译器搜索部分中将路径设置为递归。

【讨论】:

是的@pavan 成功了,我的做法是正确的,但我错过了桥头文件的路径设置。我还在资源头和 Swift 编译器搜索部分将路径设置为递归,我认为它可能会有所帮助。 请注意,标头名称和位置无关紧要。并且不必与默认的相同。【参考方案2】:

以上答案都不适合我,或者不够精确。 在 Xcode 11.4 (Swift 5.2) 中,这个解决方案对我有用:

1. 在项目的根目录中创建一个新的头文件。我不确定文件名是否真正重要,但 Apple 自动生成的桥接头文件名为“ProjectName-Bridging-Header.h”。

2. 将您需要的所有导入添加到新创建的文件中。

3. 在 Project Navigator 中单击您的项目名称。

4. 在最上面的栏中选择“Build settings”,然后在稍低的栏中选择AllCombined

5.在右上角搜索“Swift Compiler

6.找到“Swift Compiler-General”标签,展开并双击“Objective-C Bridging Header”。

7. 您现在只需将您创建的桥接头文件拖到弹出窗口中并按回车键即可。一切就绪!

*请记住,每次项目的直接路径更改时,您都必须更新桥接头的路径

【讨论】:

这里的拖放对我来说是最重要的部分,在 Xcode 10 之前我正在复制文件路径 在 Xcode 10 中,您不会使用 CocoaPods 1.0.0 或 Google Identity Toolkit 1.1.3,因为它们都已被弃用。因此,您可能想展示一个与此问题实际相关的 Podfile.lock 示例。 第6步:复制粘贴$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h(无需拖拽)【参考方案3】:

我发现的最简单的方法是在 XCode 中创建一个伪造的 .swift 文件。这应该会提示自动创建桥接头。

    文件 > 新建 > 文件... 对于文件类型,选择 Swift。 允许 Xcode 手动创建 Swift 桥接头。 删除您最初创建的.swift 文件。

【讨论】:

我能找到的最好最简单的方法。 请注意,“All Swift Project”的情况正好相反。只需导航到 File > New > File > Objective-C File 并允许 Xcode 自动为您创建一个桥接头。【参考方案4】:
    在 Xcode 中添加一个新文件(File > New > File),然后选择“Source”并点击“Header File”。 将文件命名为“YourProjectName-Bridging-Header.h”。 创建文件。 导航到您的项目构建设置并找到“Swift 编译器 - 代码生成”部分。您可能会发现在搜索框中输入“Swift Compiler”以缩小结果范围会更快。注意:如果您没有“Swift 编译器 - 代码生成”部分,这意味着您可能还没有将任何 Swift 类添加到您的项目中。添加 Swift 文件,然后重试。 在“Objective-C Bridging Header”旁边,您需要添加头文件的名称/路径。如果您的文件位于项目的根文件夹中,只需将头文件的名称放在那里。示例:“ProjectName/ProjectName-Bridging-Header.h”或简单的“ProjectName-Bridging-Header.h”。或者,只需将桥接头文件从 finder 拖放到此空白字段。这会自动添加桥接头文件的路径。 打开您新创建的桥接头并使用#import 语句导入您的Objective-C 类。此文件中列出的任何类都可以从您的 swift 类中访问。

【讨论】:

【参考方案5】:

Swift 4 和 Xcode 9.3

    创建桥接头文件:

    Xcode> 文件/新建.../File> 头文件 将文件命名为“ProjectName-bridging-header.h” 保存到项目文件夹的根目录

    Xcode> 转到构建设置(在项目资源管理器窗格中选择最顶部的项目,应该是您的项目名称,然后在右侧窗格中选择“构建设置”主题)

    确保在“构建设置”下方选择“全部”和“组合” 在搜索框中输入“swift compiler”并找到“Objective-C Bridging Header”项 折叠并双击右侧进行编辑 插入上面1.的文件名->“ProjectName/ProjectName-bridging-header.h”(如果桥接文件保存在项目文件夹中,请注意文件夹路径)

    包括需要的 #import

【讨论】:

【参考方案6】:

首先在您的项目根级别创建名为“projectname-bridging-header.h”的桥接头文件。

现在在构建设置中设置您的桥接头文件路径及其 objc 兼容性标头。

完成后,清理并构建您的项目,它的工作正常。

【讨论】:

以上是关于Swift 桥接头文件不适用于 use_frameworks的主要内容,如果未能解决你的问题,请参考以下文章

无法使用桥接头将 Objective-C 文件导入 Swift 项目

无法使用桥接头将 Objective-C 文件导入 Swift 项目

无法导入桥接头 xcode 6.4

在桥接头中导入头文件导致的 Swift 编译器错误

在桥接头中导入头文件导致的 Swift 编译器错误

Swift:导入桥接头失败