1

申し訳ありませんが、私の英語はあまり上手ではありません。私はコルドバ1.6.1を使用しています。新しい Cordova ベースのプロジェクトを作成し、それを拡張してプラグインを追加しました。作成したプラグインを使用して静的ライブラリをビルドし、このライブラリを含むプロジェクトを実行しようとしました (ライブラリは xcode のビルド設定にあります)。 plugins フォルダーにソースがない場合

アプリケーションを実行すると、次のエラーが発生します。

[INFO] ClientChannel(1) 初期化中... CDVPlugin クラス MNClientChannelPlugin (pluginName: MNClientChannelPlugin) が存在しません。エラー: プラグイン 'MNClientChannelPlugin' が見つからないか、CDVPlugin ではありません。Cordova.plist でプラグインのマッピングを確認してください。

これらのエラーに関するいくつかのコメント: 1) 最初の行は、私が書いた JavaScript コードのログです。これは、「初期化」機能が起動されたことを示しています。この関数は、MNClientChannelPlugin という名前のプラグインの init 関数を呼び出します。2) & 3) これらのログは、ネイティブの iOS cordova SDK から取得されます (CDVViewController.mm の getCommandInstance (2) および execute (3) 関数から呼び出されます)。

Codova.plist では、MNClientChannelPlugin をキーと値として配置します。この構成では、MNClientChannelPlugin ソース (.mm & .h) を Plugins フォルダーに配置すると機能しますが、MNClientChannelPlugin.mm で静的ライブラリを作成すると機能しません。(このライブラリをプロジェクトに含め、.h ヘッダーを Plugins フォルダーに入れました)。Cordova はライブラリでソースを見つけられないようです...

Cordova プラグインは Cordova.Framework にあり、.m および .h ファイルを含む Plugins フォルダーにはないため、プラグインを作成してライブラリにパッケージ化し、cordova ベースのプロジェクトで使用することは可能ですが、私はそうではありません私のために働きます...アーカイブとコミットを見てきましたが、解決策が見つかりませんでした。何が問題なのか誰か知っていますか?

4

2 に答える 2

1

そうです、私はこれに対する解決策を見つけました。

問題は次のとおりです。

  • MNClientChannelPlugin が静的ライブラリに保持されている
  • メイン プロジェクトが静的ライブラリを参照している
  • リンカは、メイン プロジェクトで実際に使用されているクラスのみをリンクするのに十分なほど賢いです。
  • リンカーが知る限り、MNClientChannelPlugin はどこにも参照されていないため、プロジェクトでは使用されません。
  • phonegap アプリが MNClientChannelPlugin インスタンスを要求した場合にのみクラスが読み込まれるため、どこにも参照されません。
  • クラスが最終的なバイナリにリンクされていないため、上記のエラーが発生します。

解決策は、リンカーに MNClientChannelPlugin オブジェクトを強制的に含めることです。

簡単なのは、メイン プロジェクトの「その他のリンカー フラグ」に -all_load を追加することです。これにより、プロジェクト内のすべての静的ライブラリ内のすべてのクラスがリンクされるというノックオン効果が得られます。しかし、それは機能します。

-force_load をスタティック ライブラリの名前とともに使用することをお勧めします。私は自分で試したことはありませんが、これに関するヘルプの投稿は次のとおりです。

xcode-project-target-settings-syntax-for-linker-flag-force-load-on-iphone

于 2012-05-10T14:14:27.517 に答える
0

Pushwoosh を使用していた場合 (使用していたと思います)、手順には、次のコードをコピーして貼り付ける必要があることが明確に記載されています。

<key>PushNotification</key>
<string>PushNotification</string>

Cordova.plist . したがって、私がかつて経験した上記のエラーがある場合は、それをコピーしてプラグインに貼り付けていないことを意味します。キーと文字列の値を正しい場所に移動すると、エラーが解消されます。

ハッピーハッキング!!!

于 2012-10-15T12:12:13.650 に答える