1

今日の初めに、作成中の静的フレームワークの xcode プロジェクトに単体テストを追加しようとしました。Unit Tests ターゲットをプロジェクトに追加した後、単体テスト テンプレートを正常に実行し、テストで既定のアサーションをキャッチすることができました。次に、テストしたいファイルを新しい SenTestCase サブクラスにインポートした後、テストを実行しようとしましたが、リンカー エラーが原因で UIColor カテゴリをテストでビルドできませんでした。リンカー エラーのテキストは次のとおりです。

Undefined symbols for architecture i386:
  "_CGColorGetComponents", referenced from:
      -[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
  "_CGColorGetNumberOfComponents", referenced from:
      -[UIColor(ColorExtension) hexValue] in StaticFramework(StaticFramework)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

次に、これら 2 つの参照がプロジェクト内のどこにあるかを見つけました。両方とも、次の機能の下で私のカテゴリに住んでいます。

- (NSString *)hexValue
{
    UIColor *color = self;
    const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor);
    const CGFloat * components = CGColorGetComponents(color.CGColor);
    return [NSString stringWithFormat:@"#%02X%02X%02X",
            (int)(255 * components[MIN(0,totalComponents-2)]),
            (int)(255 * components[MIN(1,totalComponents-2)]),
            (int)(255 * components[MIN(2,totalComponents-2)])];
}

私の記憶が正しければ、これらは両方とも NSColor クラスの一部です。もう少し調べてみると、ユニット テストのフレームワークのフォルダーで、UIKit.framework と Foundation.framework の両方が赤くなっていることにも気付きました。それらを再インポートしてビルドしようとしましたが、これでも問題は解決しません。

興味深いことに、私の静的フレームワークは、関連するテストも実行されない限り、正常にビルドおよび実行されます。この関数をコメント アウトすると (そして使用するたびに)、単体テストは問題なくビルドされます。UIKit.framework と Foundation.framework が欠落しているためにリンカーが NSColor プロパティを見つけられない可能性があるという私の仮定は正しいでしょうか? これらのプロパティがこれらの問題を引き起こしている理由、またはそれらを修正するために私ができることを説明できる追加の提案はありますか?

どんな助けでも大歓迎です。助けてくれてありがとう。

4

1 に答える 1

0

リンカー エラーは、CoreGraphics 関数を使用しているが、CoreGraphics フレームワークをリンクしていないことを示しています。

プロジェクト/ターゲットを更新して CoreGraphics.framework をリンクすると、リンカーの問題が解決されます。

于 2013-05-01T19:09:14.643 に答える