2

我正在开发一个同时使用 RestKit 和 CocoaLumberjack 的项目。该项目还使用了其他一些 pod,其中一些仅存在于 swift 中。我使用 cocoapods 0.38.2 进行依赖管理,我的 podfile 看起来像这样(为了便于阅读,删除了其他 pod):

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'
use_frameworks!

pod 'RestKit'
pod 'CocoaLumberjack'

我需要使用use_frameworks!这些其他 pod,因为它们是 swift-only。我尝试使用 Xcode7 beta 5 编译它,我收到以下错误:

“_OBJC_CLASS_$_DDLog”,引用自:

  objc-class-ref in RKLumberjackLogger.o

ld:未找到架构 x86_64 的符号

所以我查看了有问题的文件,发现了这个:

#if __has_include("DDLog.h")
#import "RKLumberjackLogger.h"
#import "DDLog.h"

如果不存在,则看起来整个文件都没有解析DDLog.h,在这种情况下,我认为 RestKit 日志记录会退回到 NSLog 或其他什么。否则,使用 Lumberjack 日志记录,这正是我想要的。

经过一番调查,我怀疑 RestKit 以某种方式看到了 CocoaLumberjack 标头(DDLog.h 所在的位置),但在构建项目时没有正确链接到它。如果您有更好的想法,请随意质疑,但我可以确认转到 CocoaLumberjack 源并手动将 DDLog.m 作为成员添加到 RestKit 框架目标允许我正确编译项目。

所以,我的问题是,解决这个问题的正确方法是什么?RestKit 不直接依赖 CocoaLumberjack,而是尝试检测它并尽可能使用它,但失败得很惨。有没有办法从我的项目级别将 RestKit 与 Lumberjack 链接起来,这样我就不必修改 pod?

示例项目可以在这里找到

4

1 回答 1

3

你的怀疑是正确的。

RestKit 以某种方式看到 CocoaLumberjack 标头(DDLog.h 所在的位置),但在构建项目时没有正确链接到它

这是 RestKit 的一个问题,您在自己的项目中所做的一切都是一种解决方法。所以可以说,在你的项目中没有一种正确的方法来解决这个问题。

我已经提交了一个拉取请求来解决这个问题。


更新:

拉取请求已合并,但在编写此更新时,尚未发布新版本的 RestKit。

pod "RestKit", :head, :subspecs => ['Core', 'CocoaLumberjack']

RestKit 的 Lumberjack 日志记录功能已移至单独的子规范中,如果您想使用它,您必须指定该子规范。 :head将告诉 CocoaPods 使用当前的 master 而不是发布的版本。

于 2015-08-11T15:55:33.230 回答