3
3

TestPlanを新しく作りたくなかったから無理やりねじ込んだ話

Last updated at Posted at 2024-05-28

開発環境

Xcode 15.4
Swift 5.10

話の概要

iOS のプロジェクトを作成するとき、"Include Test" を選択すると、自動的に Test Plans が作成されます。

スキーママネージャを確認すると、次のように表示されます。

[プロジェクト名](Autocreated)

image.jpeg

しかし、このスキーマを削除した場合、Test Plans を手動で作成する必要があります。そのため、作成した Test Plans ファイルをプロジェクト内に配置する必要があります。

Test Plans とは

Xcode 11 から追加されたテストに関する機能です。
Test Plan を利用すると、さまざまなテストの設定を1つのJSONファイル(.xctestplan)に書いておき、実行時にまとめて実行することができる優れものです。

今回やったこと

誤ってスキーマを削除してしまったため、手動で Test Plans を作成することになりました。
しかし、新しいファイルを作成するのは避けたかったので、自動的に作成された Test Plans と同様にプロジェクトファイルを編集する方法を選びました。

今回はその知見を共有します。

設定ファイルの場所

自動生成されたテストプランは、.xcodeproj/xcschemes/[プロジェクト名].xcscheme に保存されています。
この中の <TestAction> セクションに記述する必要があります

AutocreateTestPlan の追記

<TestAction> セクション内に shouldAutocreateTestPlane の設定がない場合、以下のように追記します。

   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">

これにより、スキーマ名が

[プロジェクト名](Autocreated)

(Autocreated) 部分に反映されます。

ビルド対象の設定

ユニットテスト、UIテストを実行するように設定するため、以下のように設定します。
ユニットテストおよび UI テストを実行するように設定するため、以下のように <Testables>

      <Testables>
         <TestableReference
            skipped = "NO"
            parallelizable = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "3F91F191F191F191F191F1"
               BuildableName = "[プロジェクト名]Tests.xctest"
               BlueprintName = "[プロジェクト名]Tests"
               ReferencedContainer = "container:[プロジェクト名].xcodeproj">
            </BuildableReference>
         </TestableReference>
         <TestableReference
            skipped = "NO"
            parallelizable = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "3F91F1762BBA1762BBA1762BBA"
               BuildableName = "[プロジェクト名]UITests.xctest"
               BlueprintName = "[プロジェクト名]UITests"
               ReferencedContainer = "container:[プロジェクト名].xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>

BlueprintIdentifier はユニットテスト、UIテストで異なるので注意してください。

参考資料

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3