1

別のプロジェクトを含むプロジェクトに問題があります。2 番目のプロジェクトは、メイン プロジェクトに必要な SDK です。現時点では、SDK をメイン プロジェクトにスタティック ライブラリとして含めています。SDK とメイン プロジェクトの両方に、FBConnect と Unofficial Twitter SDK フレームワークが含まれています。私の問題は、これらのフレームワークが両方のプロジェクトに含まれているためだと思いますが、エラーなしで共存させる方法を見つけることができませんでした。

プロジェクトがデバッグ用にビルドされる場合、アーカイブ用にはビルドされず、その逆も同様です。同じ手順を実行することで毎回問題を解決できますが、デバッグ ビルドとアーカイブ ビルドの間に手順を必要とせずに問題を解決する方法を見つけたいと考えています。

プロジェクトがエラーなしでデバッグ用にビルドされると、アーカイブ ビルドを試みると次のようになります。

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_SBJSON", referenced from:
      objc-class-ref in FBRequest.o
      objc-class-ref in libSDK.a(ApiTvDiscussView.o)
      objc-class-ref in libSDK.a(ApiWebView.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

次に、リンクされたスクリーンショットに従って、FBConnect フレームワークで使用される SBJSON ライブラリの実装ファイルを、ターゲットのビルド フェーズのコンパイル ソースに追加します。

これにより、次のように別の問題が発生します。

    duplicate symbol _OBJC_METACLASS_$_OAHMAC_SHA1SignatureProvider in:
        /Users/Alan/Library/Developer/Xcode/DerivedData/App-gpvfsbaxxbvhsddtcbgkggquyltl/Build/Intermediates/ArchiveIntermediates/App/IntermediateBuildFilesPath/App.build/Release-iphoneos/App.build/Objects-normal/armv7/OAHMAC_SHA1SignatureProvider.o
./libSDK.a(OAHMAC_SHA1SignatureProvider.o)

    .
    .
    .
    .
    .

    duplicate symbol _OBJC_CLASS_$_TwitterDialog in:
        /Users/Alan/Library/Developer/Xcode/DerivedData/App-gpvfsbaxxbvhsddtcbgkggquyltl/Build/Intermediates/ArchiveIntermediates/App/IntermediateBuildFilesPath/App.build/Release-iphoneos/App.build/Objects-normal/armv7/TwitterDialog.o
        ./libSDK.a(TwitterDialog.o)
    duplicate symbol _OBJC_METACLASS_$_TwitterDialog in:
        /Users/Alan/Library/Developer/Xcode/DerivedData/App-gpvfsbaxxbvhsddtcbgkggquyltl/Build/Intermediates/ArchiveIntermediates/App/IntermediateBuildFilesPath/App.build/Release-iphoneos/App.build/Objects-normal/armv7/TwitterDialog.o
        ./libSDK.a(TwitterDialog.o)
    ld: 43 duplicate symbols for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

非公式の Twitter SDK フレームワークで使用される OAUTH ライブラリの実装ファイルをターゲットのビルド フェーズのコンパイル ソースから削除すると、これらのエラーが削除され、プロジェクト アーカイブのビルドが成功します。

デバッグ用にプロジェクトをビルドしようとすると、これらのエラーとは逆のエラーが発生します。まず、OAUTH ライブラリ シンボルが定義されていません。ソースをコンパイルするためにそれらを追加すると問題が解決し、SBJSON シンボルが複製されます。それらをコンパイル ソースから削除すると、デバッグ ビルドが正常に完了します。

これらを調和させて共存させる方法を知っている人はいますか?

4

1 に答える 1

0

Twitter ライブラリと Facebook ライブラリはどちらも、同じ SBJSON フレームワークに対してリンクしています。静的ライブラリを使用する代わりに、コードから両方をビルドします。これを行っている間に、SDK の 1 つから SBJSON 参照を削除します。

これが、私が静的ライブラリに対するビルドを嫌うもう 1 つの理由です。ソースコードがなく、ライブラリ作成者がクラス/メソッドにプレフィックスを付けていない場合、問題は解決できません。

または、新しくリリースされた Facebook SDK バージョン 3.1 を使用することもできます。最終的には SBJSON を FBSBJSON のプレフィックスにしました。

于 2012-09-27T11:04:00.720 に答える