0

私は最近、Webkit モデルが Apple の Lion と Safari の最終リリースでサポートされなくなり、NPAPI を使用するために全員が Firebreath プロジェクトに移行していることを知りました。

次のネイティブ フレームワークとリンクする基本的な Cocoa アプリケーションがあります。

  1. コアグラフィックス
  2. コアデータ
  3. IOKit
  4. PFEventTaps (これは Pfiddlesoft.com によるサードパーティ フレームワークです)

私はプラグインを使用したことがないので、これは私にとって少し新しいことです。Richard bateman によって書かれた MAC チュートリアルから始め、ガイドラインに従った後、最終的には個人プロジェクト用の firebreath プロジェクト テンプレートにたどり着きました。私が行った次のステップは、すべての Objective-C クラスをソース ファイル フォルダーに配置し、4 つのフレームワークとのリンクを追加することでした。最後に、プラグインで公開する必要がある新しいパブリック メソッドを MyProjectPluinApi.h に追加しました。 registerMethod("MyMethod", make_method(this, &WilmerPlugInAPI::MyMethod ));

firebreath プロジェクトをビルドすると、多くのコンパイル エラーが発生します。そのうちの 1 つは非常に繰り返し発生するエラーです NSString was not declared in this scope.。エラーは NSObjCRuntime.h を指しています

今まで、XCODE 3.2.6 でこのビルドを正常に取得できませんでした

ここで何が問題なのですか?このテンプレート プロジェクトで CPP スタイルを実現するには、すべてのコードを変更する必要がありますか? または、何らかの方法でフレームワークをリンクできますか? 見ることができるサンプルはありますか?

詳細: 2011 年 11 月 7 日: 簡単なプロジェクトでテストしようとしていました。

  • まず、プロジェクト testOfFB を作成します
    • /users/Me/Firebreath-dev/build/projects/testofFB に生成されます
  • 次に、クラス testFBApi.cpp を変更し、名前を testFBApi.mm に変更します。
  • testMath.m という名前の Objective-c クラスを作成し、名前を testMath.mm に変更しました。
  • 署名付きの Add メソッドを追加します。

    -(long) Add:(long)a:(long)b:(long)c;
    
  • 最後に、ファイル testFBApi.mm を次のように変更します。

    registerMethod("add", make_method(this, &testFBAPI::add ));
    
  • add メソッドの実装では、objective-c クラス メソッド「add」のインスタンスを作成して、objective-c メソッドの呼び出しをテストします。インクルードを行い、ファイル /Mac/projectDef.cmake を次のように変更しました。

    target_link_libraries(${PROJECT_NAME}
        ${PLUGIN_INTERNAL_DEPS}
        ${Cocoa.framework} // added line
        ${Foundation.framework} //added line
    )
    

prepmac.sh スクリプトを実行してから xcode ソリューションをビルドすると、同じエラーが表示され、testFBApi が宣言されていないなどのエラーが表示されます。

4

1 に答える 1

0

もう少し情報がないとなんとも言えませんが、必要なフレームワークをインポートするには、cmake ファイルを更新する必要があるかもしれません。xcodeで手作業で行っている場合は、おそらく同様に機能するはずですが、私はその方法を試していません. cmake で追加しても、xcode のフレームワーク リストには追加されませんが、そこにあるはずです。

Objective-C コードと C++ コードを同じファイルで使用する必要がある場合は、より一般的な .m (objective-c) 拡張子ではなく、.mm ファイル拡張子 (objective-c++) を使用する必要があります。

これ以外に、何が間違っているのかを推測するために、あなたのコードをもっと見る必要があります。たとえば、インクルードが欠落していると思います。古いプロジェクトに PCH があった場合、新しいプロジェクトでは使用されていない可能性が高いことに注意してください。

cmake を使用してフレームワークを追加する方法の詳細については、http://www.firebreath.org/display/documentation/Using+Librariesを参照してください。

于 2011-11-07T01:07:56.613 に答える