RestKit 和 CocoaLumberjack 在 Xcode7 中集成为框架
Posted
技术标签:
【中文标题】RestKit 和 CocoaLumberjack 在 Xcode7 中集成为框架【英文标题】:RestKit and CocoaLumberjack integrated as frameworks in Xcode7 【发布时间】:2015-08-10 15:04:31 【问题描述】:我正在开发一个同时使用 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?
示例项目可以在here找到
【问题讨论】:
【参考方案1】:你的怀疑是正确的。
RestKit 以某种方式看到 CocoaLumberjack 标头(DDLog.h 所在的位置),但在构建项目时没有正确链接到它
这是一个带有 RestKit 的problem,您在自己的项目中所做的一切都是一种解决方法。因此可以说,在您的项目中没有一种正确的方法可以解决此问题。
我已经提交了一个拉取请求来解决这个问题。
更新:
拉取请求已合并,但在撰写此更新时,尚未发布新版本的 RestKit。
pod "RestKit", :head, :subspecs => ['Core', 'CocoaLumberjack']
RestKit 的 Lumberjack 日志记录功能已移至单独的子规范中,如果您想使用它,您必须指定该子规范。
:head
会告诉 CocoaPods 使用当前的 master 而不是发布的版本。
【讨论】:
感谢 Tim,我喜欢解决方案 2,这将使我的 CI 再次工作。你能看看similar problem I described here。也许你也可以帮我解决这个问题。以上是关于RestKit 和 CocoaLumberjack 在 Xcode7 中集成为框架的主要内容,如果未能解决你的问题,请参考以下文章
(20160604)开源第三方学习之CocoaLumberjack
项目中包含 CocoaLumberjack 时 GCDWebServer 无法编译