Today 拡張機能 (またはウィジェット) も備えたアプリを作成しています。拡張機能とそれを含むアプリの間でコードを共有するために Apple が推奨する方法は、アプリと拡張機能の両方が使用できる組み込みフレームワーク内に共有コードを配置することです。私が理解しているように、共有コードを記述し、共有コードをフレームワークをターゲットにしてから、アプリと拡張機能の両方でフレームワークを依存関係として宣言することになっています。ただし、実際には、アプリはフレームワークを問題なく認識しますが、Today 拡張機能は認識しません。
より具体的には、今日の拡張機能 (「ウィジェット」と呼びます) とアプリのタブ (「アプリ」と呼びます) の両方のコントローラーに単純なテーブル ビューを配置し、次に共有コードを持つフレームワーク (私は「フレームワーク」と呼びます)。ウィジェットには、テーブル ビューを含む TodayViewController が付属しています。このテーブル ビューには、CalendarCell という名前のカスタム セルがあります。したがって、関連する共有クラス/ファイルは次のとおりです。
- TodayViewController.h/m
- CalendarCell.xib
- CalendarCell.h/m
そしてもちろん、共有されていないウィジェット ストーリーボードとアプリ ストーリーボードがあります。
そのため、私のアプリ ターゲット ビルド フェーズでは、Framework をターゲットの依存関係として、また Widget をターゲットの依存関係として持っています (ターゲットを作成したときにそのようになり、それを削除しても何の役にも立たないようです)。同様に、Widget ターゲット ビルド フェーズでは、Framework をターゲットの依存関係として持っています。フレームワークは、TodayViewController.m と CalendarCell.m をコンパイル ソースとしてリストし、CalendarCell.xib をバンドル リソースとしてリストします。
Widget がCalendarCell.m、TodayViewController.m、および CalendarCell.xib をコンパイル ソースおよびバンドル リソースとしてリストしない場合、ウィジェットは機能しません。具体的には、TodayViewController.m がリストされていない場合、アプリはシミュレーターで実行することさえできません (この人と同じエラーが発生します)。TodayViewController.m がリストされているが、他のソース ファイル/リソースがリストされていない場合、本体のない拡張子を取得します (この他の人が取得したものと同じです)。アプリはフレームワークを問題なく認識し、これらのファイルをコンパイル ソースまたはバンドル リソースとしてリストする必要がないことに注意してください。失敗するのはウィジェットだけです。
誰かがこれについて考えているなら、私はそれを感謝します。Xcode 6 / iOS 8 のバグ? それとも私が間違っているのですか?