2016-12-28 9 views
2

私はビデオにSound FXを追加するiOSアプリを持っています。今では、ストックされた写真アプリをサポートするためのアプリ拡張ターゲットを作成したいと考えています。しかし、私はiOSアプリからほとんどすべてのコードを複製する必要があります。私がこれまでに持っていた解決策は、AppDelegateにリンクされているアプリケーションのコードとApp Extensionで使用できないコードが共通のファイルを共有ファイルに入れて両方のターゲットに使用することです。この場合、コードの重複を避けるための良い方法はありますか?iOS既存アプリのアプリ拡張をベースにします。コードの重複を避けるには?

もう1つ質問:私がAppStoreで見たほとんどの拡張機能は1つの画面しか持っていませんが、これに関するルールはありますか?

私のアプリでは、ユーザにフォルダ&のフォルダからサウンドを選択させる必要があり、ナビゲーションコントローラが必要です。しかし、Navigation ControllerはApp Extensionで使用できません。Navigaion Controllerを構築するか、それとも良い方法がありますか?

答えて

1

iOS 7以前をターゲットにする必要がない限り、共通クラスを共有フレームワークに配置し、両方のターゲットからそのフレームワークを読み込むことができます。これにより、ディスク上にコードのインスタンスが2つ存在しなくなります。

OSが共有ライブラリの読み込みを処理する方法のため、実際のコードページはすべてアプリケーションと拡張機能の間で共有されるため、RAMを浪費することもありません。

+0

ほとんどのクラスはView Controllerで、クラス内ではApp Delegateを参照していますが、これはApp Extensionで使用できません –

+0

1つの解決策は抽象レイヤーを追加することです。たとえば、興味のあるデータをアプリケーションデリゲートに格納する代わりに格納するシングルトンクラスを作成することも、同じ名前の2つのクラスを作成することもできます。アプリケーションデリゲート、およびメソッド内で異なる何かをするエクステンションの別のものです。 – dgatwood

+0

もう1つのアプローチは、実際には拡張機能のいくつかの機能が必要ない場合は、アプリケーションデリゲートクラスとの弱いリンクになり、クラス自体がnilであるかどうかを確認し、そうであれば拡張機能で実行され、問題の動作をスキップします。 – dgatwood

関連する問題