6

私はiOS 8の拡張機能に取り組んでいます。私は多くのマニュアルを読みましたが、どれもアプリに拡張機能を簡単に追加できることを示しており、それで十分だと思われます。

しかし、ここには多くの落とし穴があります:

  1. 拡張機能を追加した後、新しい拡張ターゲットを追加したときに作成されたビュー コントローラーにいくつかのクラスをインポートする必要があります。ここでの大きな用途は、それらすべてを追加する必要があることです。巨大なプロジェクトがある場合、それは簡単な作業ではありません。解決策は、拡張ターゲットを選択してから、Build Phases -> Compile Sources でプラス ボタンを押し、ホット キー CMD+A を使用してすべての .m ファイルをターゲットに追加することです。

  2. すべてのファイルを追加した後、一部のメソッドが機能しないことがわかり、次のエラーが表示 されます。'sharedApplication' is unavailable: not available on iOS (App Extension)したがって、解決策はチェックするマクロであり、コードifndef Extensionを呼び出すことができsharedApplicationます。

  3. #import <Foundation/Foundation.h>#import <UIKit/UIKit.h>。したがって、私はこの問題を理解していませんが、交換FoundationするUIKitとうまくいき、関連するすべての問題がなくなります。

  4. ココアポッド。私たち全員が CocoaPods を使用しているため、拡張機能がプロジェクト コードの一部を使用する必要があり、そのコードが CocoaPods ライブラリを使用している場合はlink_with 'ProjectTarged', 'ExtensionTarget'、Pod ファイルに追加してpod install再度作成し、ライブラリを新しい拡張ターゲットにバインドする必要があります。

これが私が直面した主なポイントです。必要なファイルを拡張ビューコントローラーにインポートするだけだと言ったので、誰かがその問題を解決する方法を提案できるかもしれません。AFNetworkingインポートされたファイルには、などのいくつかのライブラリRestKitと、メイン プロジェクトの他のネストされたクラスが含まれています。拡張機能からバックエンド サーバーにデータを渡すいくつかのメソッドを呼び出すには、このクラスが必要です。したがって、1 つのファイルですが、多くの問題があります。

4

3 に答える 3

2

CocoaPods ライブラリから問題を取り除くには、ポッドのビルド設定内のビルドオプションsharedApplicationを変更するだけです。

入力して検索し、下の画像のようにRequire Only App-Extension-Safe API値を変更します。NO

ここに画像の説明を入力

おそらく、すべてのポッドに対してこれを行う必要があります。

于 2015-05-02T08:46:35.340 に答える
2

1) 実際に使用する拡張ターゲットにファイルを追加するだけです。ファイルを見つけて必要なものだけを取得し、ファイル インスペクターでそれらを両方のターゲットに追加することをお勧めします。

2) はい、そうです。それをチェックするライブラリを更新するか、フォークして自分で修正する必要があります。

3) アプリ拡張機能の 1 つを作成するときに、デフォルトのテンプレートを参照していると思います。はい、Foundation ではなく UIKit を使用する必要があります。Foundation は iOS または OS X で動作しますが、UIKit アプリケーションを作成している場合は明らかに十分ではありません。

4) link_with コマンドは、Podfile 内のすべてのポッドを、リストされているすべてのターゲットにリンクします。それが必要な場合は、それを実行してください。拡張機能に Pod の小さなサブセットのみが必要な場合は、次を使用します。

target 'whateverTarget', :exclusive => true do
    pod 'SomePod'
end
于 2015-04-27T20:09:17.293 に答える