16

我有一个 Xcode 项目,Xcode 8.1 (8B62) 有两个目标,一个用于应用程序的付费版本,另一个用于免费版本。他们都管理遥控器推送通知。由于我使用新框架 UNUserNotificationCenter.framwork 对 iOS 10 进行了更改,因此第一个目标一切正常,第二个目标出现链接错误。它在 iOS 9 下使用旧方法运行良好。我为这两个目标做了什么:

  • 功能:启用推送通知(权利已正确更新)
  • 在 AppDelegate.h 中:#import
  • 在 AppDelegate.m 中:使用新方法更新代码

两个目标的代码相同。

不幸的是,对于第二个目标,我有以下错误:

架构 arm64 的未定义符号:“_OBJC_CLASS _ $ _ UNUserNotificationCenter”,引用自:AppDelegate.o 中的 Objc-class-ref Ld:未找到架构 Clang 的符号:错误:链接器命令失败,退出代码为 1(使用 - v 查看调用)

我已经做了几次干净整洁的构建目标文件夹,重新启动Xcode,重新启动计算机但什么也没做。

在不同的论坛中找不到任何东西...

欢迎帮助。先感谢您。

4

3 回答 3

41

您没有链接到UserNotifications.framework.

  • 选择你的目标
  • 显示其“构建阶段”
  • 保证UserNotifications.framework存在于“Link Binary With Libraries”中

如果没有:

  • 单击“+”按钮并添加它
于 2016-11-19T10:53:58.940 回答
2

我遇到了几乎完全相同的问题,有两个目标,一个用于免费版本,一个用于付费版本。

我强烈怀疑不同之处在于,对于一​​个目标,“启用模块”是 YES(这是免费版本的目标,我正在为 Admob 执行 @import),而对于另一个目标,“启用模块”是不。就像魔术一样,对于“启用模块”为“是”的目标,我不必在构建阶段的“将二进制文件与库链接”中添加 UserNotifications.framework。但是,对于“启用模块”为否的目标,我得到了

Undefined symbols for architecture arm64:   "_OBJC_CLASS _ $ _ UNUserNotificationCenter

它通过手动将 UserNotifications.framework 添加到“Link Binary with Libraries”而消失了。

所以也许规则是,当且仅当未启用模块时才需要这样做。

于 2017-09-15T14:05:26.213 回答
1

确保UserNotifications.framework存在于您的Target > General > Linked Frameworks and Libraries

于 2016-11-19T11:15:13.710 回答