添加 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 项目出现新错误的主要内容,如果未能解决你的问题,请参考以下文章
在主要目标中包含 pod,而不是在 WatchKit 扩展中
无法添加名为 `trunk` 的 URL 为“https://cdn.cocoapods.org/”的源
Firebase、Fabric 和 Crashlytics,带有 -ObjC 链接器标志,没有 Cocoapods iOS