“スーパーセット”を作成できますかXcodeのターゲット?

StackOverflow https://stackoverflow.com/questions/412103

質問

ユニットテストの目的で、リリースアプリケーションファイルのすべてと、UIユニットテストに役立つコードを含む追加ファイルを含むiPhoneプロジェクトターゲットをXcodeで作成します。

元のアプリケーションターゲットを複製することでこれを行うことができます。ただし、これに関する問題は、新しいソースファイルをアプリターゲットに追加するたびに、UnitTestUIターゲットにも追加する必要があることです。大したことではなく、両方のターゲットにファイルを追加することを常に覚えておくのは不便です。

元のアプリターゲットに追加されたすべてのファイルが単体テストターゲットにも自動的に追加されるように、依存関係を設定する方法はありますか?

役に立ちましたか?

解決

Xcodeでは、相互に直接依存するターゲットを作成できます。セットアップの単純さや複雑さに応じて、新しいターゲットを追加する際に、その他カテゴリでこれを支援できる製品以外のターゲットがいくつかあります。メインプロジェクトのターゲットに直接依存する単体テストを実行するための特定のターゲットを作成することは非常に一般的であり、Appleおよび多くのブログで文書化されています。

ただし、状況によっては、新しいUIテストターゲットで多くの調整が必要になる場合がありますが、一度設定すると、メンテナンスが非常に簡単になります。正確な状況がわからないため、段階的に答えを出すことはできませんが、一般的なガイドラインは次のとおりです(状況に合わせて微調整します):

  1. ほとんどの設定が同じになるため、元のターゲットのコピーを作成します。
  2. 新しいターゲットを選択してインスペクターを開きます(⌘ I)
  3. 直接依存関係の下で、+ボタンをクリックしてメインターゲットを選択します。
  4. 必要に応じて、追加のドキュメント/ソース/ルールなどを使用して、新しいターゲットを設定します。

ドラッグアンドドロップしたい場合は、元のターゲットを(ターゲットの開閉用三角形の下から)新しいターゲットにドラッグすると、依存関係が自動的に設定されます。

今、アクティブなターゲットとしてテストターゲットを選択すると、それらのルールで常にビルドされます。また、メインターゲットでソースを追加/変更する場合、テストターゲットをビルドするときにソースが適切に再構築されます。ソースファイルをテストターゲットに追加することも忘れないでください。さまざまなXcodeドキュメントを読んで、利用可能な多くのターゲットテンプレートを試してみることをお勧めします。長期的には、製品の使用効率が大幅に向上します。非常に大規模なプロジェクトや複雑なプロジェクトであっても、方法を知っていれば、Xcodeでかなり簡単に実行できる気の利いたことがたくさんあります。

他のヒント

いいえ、ありません。単体テストターゲット内のすべてのファイルを必要とする特別な理由はありますか?これには、main.mと、テストしていないすべてのクラス(ビュークラスなど)が含まれます。実際、main.mがユニットテストに含まれている場合、ユニットテストはどのように適切に実行されますか?

ほとんどのアプリケーションを静的ライブラリとして構築することで問題を解決しました。静的ライブラリは、アプリと単体テストの両方のターゲットにリンクされています。

私のプロジェクトのターゲットは次のようになります:

  • libMyApp
    • .mファイルのコンパイル
  • MyApp.app
    • libMyApp(依存関係)
    • ライブラリとリンク:libMyApp.a
  • UITest.app
    • libMyApp(依存関係)
    • ライブラリとリンク:libMyApp.a

これにより、 .m ファイルを" libMyApp"にのみ追加できます。アプリとテストの両方で利用できるようにし、再コンパイルする必要さえありません。

唯一の落とし穴は、静的ライブラリがObjective-Cカテゴリをサポートしていないように見えることです。そのため、それらを各ターゲットに個別に追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top