RestKit и CocoaLumberjack интегрированы как фреймворки в Xcode7.

Я работаю над проектом, в котором используются как RestKit, так и CocoaLumberjack. В проекте также используются некоторые другие модули, некоторые из них существуют только в 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! из-за тех других модулей, которые предназначены только для быстрых. Я пытаюсь скомпилировать это с помощью 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 на уровне моего проекта, чтобы мне не приходилось изменять модули?

Пример проекта можно найти здесь


person lawicko    schedule 10.08.2015    source источник


Ответы (1)


Ваше подозрение верно.

RestKit каким-то образом видит заголовки CocoaLumberjack (где находится DDLog.h), но не связывается с ним должным образом при сборке проекта.

Это проблема с RestKit, и все, что вы будете делать в своем собственном проекте, будет обходной путь. Так что, возможно, нет единственно правильного способа исправить это в вашем проекте.

Я подал запрос на слияние с исправлением этой проблемы.


Обновлять:

Запрос на включение был объединен, но на момент написания этого обновления новая версия RestKit еще не была выпущена.

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

Функция ведения журнала Lumberjack в RestKit была перемещена в отдельный подраздел, который вы должны указать, если хотите его использовать. :head сообщит CocoaPods использовать текущий мастер вместо выпущенной версии.

person Tim Bodeit    schedule 11.08.2015
comment
Спасибо Тим, мне нравится решение 2, это позволит мне снова заставить мою CI работать. Не могли бы вы взглянуть на подобную проблему, которую я описал здесь. Может быть, вы могли бы помочь мне и с этим. - person lawicko; 12.08.2015