LocalPackageのTestをmainのschemeで実行できるようにする

## TL;DR
- LocalPackageのテストがmainのschemeのテストと一緒に実行できなくてハマった。
- メインのschemeにTestTargetを追加したらできるようになった。

## はじめに
SwiftPackageManagerが市民権を得てきたことや有名企業のマルチモジュール化に関する発表したことを機に、iOSアプリ開発でもマルチモジュール化の流れが来ている気がしています。
iOSアプリのプロジェクトをマルチモジュール化していくにあたり、機能ごとやレイヤーごとにPackageを分割していく方法を採用してみたのですが、LocalPackageのTestを実行するのにハマってしまいました。
単純な解決方法だったんですが、あんまりネットに情報がなくて個人的に困ったので投稿します。

※SwiftPackageManagerについては以下を参照下さい。

https://swift.org/package-manager/

## LocalPakageのTestTargetとはどこのことか

ProjectにLocalPackageを追加すると以下のようなディレクトリが追加されます。

↓MyLibraryという名前にした場合

```
MyLibrary
├── Package.swift
├── README.md
├── Sources
│   └── MyLibrary
│       └── MyLibrary.swift
└── Tests
    └── MyLibraryTests
        └── MyLibraryTests.swift
```

※LocalPackageの追加方法はこちらを参照下さい。

https://developer.apple.com/documentation/swift_packages/editing_a_package_dependency_as_a_local_package

この時Test用のTargetも`MyLibraryTests`として追加されます。

```swift

    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "MyLibrary",
            dependencies: []),
        .testTarget(
            name: "MyLibraryTests",
            dependencies: ["MyLibrary"]),
    ]

```

今回実行したいTestはこの`MyLibraryTests`に記載しているテスト達です。

## LocalPackageのテストを個別に実施する。

上記の`MyLibraryTests`のみを動かす場合はschemeを`MyLibrary`に変更すれば実行可能になります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/1a08e613-94d1-d317-d3ea-d2a8ccbae3d2.png"width="800">

実行したいテストに対して`▶️`を押して実行しても良いですし、command+Uで`MyLibraryTests`のテストを全て実行することもできます。
一方で、schemeを`MyLibrary`にしている場合はそれ以外のテストは実行できません。
逆にschemeをメインのものに戻すと、今度は`MyLibrary`のテストが実行できなくなります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/2cd35bfa-d3e0-f060-955b-a2779ba6a3c3.png"width="350">　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/d6ff50de-4263-dd39-3375-f2bd129c3ec6.png"width="350">

この状態だと、例えばfastlane scanでテストを実行している時に、`MyLibraryTests`のテストが実行されずにCIを通過してしまいます。

ということがあり困ったのでした。

## LocalPackageのTestTargetをメインのschemeに追加して全TestTargetのテストを一度に実行できるようにする。

上記の問題を解決するには、タイトルの通り**メインのschemeにTestTargetを追加する必要があります**。

どういうことかと言うと、以下のようにEditSchemeから`MyLibrary`のTestTargetを追加すると一緒にテストが実行可能になります。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/69585c94-c06e-cf8d-1891-b11f6f12a394.png)

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/8a0587e1-78f3-df69-3067-2fd98b30fe0e.png)

![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/98b88a47-1062-1260-dae5-c763dbb4a546.png)

この作業をしないと追加したLocalPackageのテストをメインのTargetのテストと一緒に実行できないのでした。

単純なことでしたが結構ハマってしまったので同じようにハマっている人がいたこちらで解決できると嬉しいです。

## [おまけ]testTarget達はxctestplanにまとめておくと便利

僕はxctestplanを使ってschemeに追加するtestTargetをまとめています。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/56c71340-2c7d-5c23-642d-0df3d190afe3.png)
![名称未設定3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311282/80637ec7-c707-990e-0e21-30cef14c4b73.png)

xctestplanにまとめておくことで、localizationを切り替えてregionごとにテストが実行できたりするみたいです。

## まとめ
- LocalPackageのUnitTestがcommand+Uで実行できなくてハマった。
- メインのschemeにLocalPackageのTestTargetを追加したらできるようになった。