添加 watchkit 时带有 cocoapods 的 Swift 项目出现新错误

Posted

技术标签:

【中文标题】添加 watchkit 时带有 cocoapods 的 Swift 项目出现新错误【英文标题】:Swift project with cocoapods new errors when watchkit added 【发布时间】:2015-06-30 00:53:47 【问题描述】:

我有一个使用 Objective C SDK 的 Swift ios 项目。 SDK 代码使用 cocoapods 安装和更新。 Swift 项目中有一个桥接头文件。该项目经过多次编译运行,完全可以运行。当然,既然已经构建并运行了,那么工作区文件就是它的打开方式……

我为它添加了一个 watchkit 扩展。我运行 pod update 来创建一个新的锁定文件。我确认 watchkit 中的搜索路径包括 pods/recursive。我在Watchkit Extension中添加了头文件。

这三个步骤是我能找到的关于使 cocoapods 托管代码与 Watchkit 一起工作的唯一建议。

我得到三个错误。他们是:

Undefined symbols for architecture x86_64:

  "_OBJC_CLASS_$_SparkCloud", referenced from:
      __TMaCSo10SparkCloud in InterfaceController.o

  "_OBJC_CLASS_$_SparkDevice", referenced from:
      __TMaCSo11SparkDevice in InterfaceController.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

是否有人对可能允许项目编译的进一步步骤提出建议?

【问题讨论】:

【参考方案1】:

如问题中所述,此 Swift IOS 项目使用 cocoapods 来管理提供对 Cloud API 的访问的客观 C SDK。

将 WatchKit 扩展添加到 Xcode 项目后执行这些步骤。

在项目主文件夹(蓝色,顶部)的 Info 选项卡中,请注意在 Debug 部分中,WatchKit Extension 旁边有一个 None 条目。将此更改为 Pods.debug。单击它并选择 Pods.debug。

在 Release 部分下,将 WatchKit Extension 从 None 更改为 Pods.release

现在点击 WatchKit Extension Target 并选择 General 标签。此处链接的框架和库将为空。单击加号并从列表 libPods.a 中选择并添加它,确保选择了必需选项(右侧)。

这应该完成让您的 cocoapods 库可访问 WatchKit 扩展下的 InterfaceController.swift 文件的工作,您可以在该文件中编写“运行”手表的代码。

【讨论】:

【参考方案2】:

您的项目中似乎缺少 SparkCloud.framework。您可以通过以下方式添加它:

单击左窗格左上角的项目(蓝色图标)。

导航到“构建阶段”。

在“将二进制文件与库链接”下,单击加号按钮。

从列表中找到 SparkCloud.framework 并点击添加。您可能还想添加 Spark SDK 所需的任何其他框架。

This will ensure that the Spark frameworks are found by the linker.

单击构建,错误应该会消失。

【讨论】:

以上是关于添加 watchkit 时带有 cocoapods 的 Swift 项目出现新错误的主要内容,如果未能解决你的问题,请参考以下文章

WatchKit 扩展在 CocoaPods 下不起作用

在主要目标中包含 pod,而不是在 WatchKit 扩展中

WatchKit 无法从 Pod 导入库

带有可可豆荚的 GHUnit

无法添加名为 `trunk` 的 URL 为“https://cdn.cocoapods.org/”的源

Firebase、Fabric 和 Crashlytics,带有 -ObjC 链接器标志,没有 Cocoapods iOS