2

RestKit と CocoaLumberjack の両方を使用するプロジェクトに取り組んでいます。このプロジェクトは他のポッドも使用しますが、そのうちのいくつかは迅速にしか存在しません。依存関係の管理に cocoapods 0.38.2 を使用します。ポッドファイルは次のようになります (読みやすくするために他のポッドを削除しています)。

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 に直接依存していませんが、CocoaLumberjack を検出して、可能であれば使用しようとしますが、惨めに失敗します。ポッドを変更する必要がないように、プロジェクト レベルから RestKit を Lumberjack にリンクする方法はありますか?

サンプルプロジェクトはここにあります

4

1 に答える 1

3

あなたの疑いは正しいです。

RestKit はどうにかして CocoaLumberjack ヘッダー (DDLog.h がある場所) を認識しますが、プロジェクトのビルド時に適切にリンクされません。

これは RestKit の問題であり、自分のプロジェクト内で行うことはすべて回避策になります。したがって、間違いなく、プロジェクトでこれを修正する唯一の正しい方法はありません。

この問題の修正を含むプル リクエストを提出しました。


アップデート:

プル リクエストはマージされましたが、この更新の執筆時点では、RestKit の新しいバージョンはまだリリースされていません。

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

RestKit の Lumberjack ロギング機能は、使用する場合に指定する必要がある別のサブ仕様に移動されました。 :headリリースされたバージョンではなく、現在のマスターを使用するように CocoaPods に指示します。

于 2015-08-11T15:55:33.230 に答える