Help us understand the problem. What is going on with this article?

iOSのSwift Packageプロジェクトのテストをコマンドで実行する

Swift Package

WWDC19 で Swift Package Manager の機能が Xcode に統合されたことが発表され、ついに iOS のライブラリも Swift Package Manager で導入することができるようになりました。

https://developer.apple.com/videos/play/wwdc2019/410
https://developer.apple.com/videos/play/wwdc2019/408

※ beta 版の内容を含むため、以降の内容は今後結果が変わる可能性があります。この投稿は Xcode 11 beta 6 の動作に基づきます。

Swift Package として作った iOS ライブラリをコマンドでテストしたい

CIサービスなどでテストを動かすために、テストをコマンドで実行したい時があると思います。
今までの SPM プロジェクトであれば、下記のコマンドで実行できました。

$ swift test

しかし、iOS ライブラリを SPM で作った場合は、うまくいかないケースがあります。

上記のコマンドは macOS で動かした場合、 macOS プラットフォームのプロジェクトとして認識されるため、UIKit のような macOS では使えないフレームワークを利用している場合、ビルドエラーになってしまいます。

xcodebuild を使う

Swift Package として作成した iOS のプロジェクトには .xcodeproj ファイルがありませんが、 xcodebuild コマンドでテストを動かすことができました。

$ xcodebuild -scheme <パッケージ名> test -destination "name=iPhone XS" | xcpretty

scheme にはパッケージ名を指定します。 $ xcodebuild -list で名前を確認できます。

Bitrise で動かす

現時点では Bitrise はまだ Swift Package を認識してくれませんが、 Bash スクリプトを動かせるので Workflow に Script のステップを追加して、以下のスクリプトを書くとテストを動かせます。 (マニュアルセットアップする必要があります)

#!/usr/bin/env bash
# fail if any commands fails
set -e
set -o pipefail
# debug log
set -x

rm -rf *.xcodeproj
xcodebuild -scheme <パッケージ名> test -destination "name=iPhone XS" | xcpretty

現状ではライブラリを Carthage にも対応させるために .xcodeproj ファイルを swift package generate-xcodeproj で作成して、commit しておく必要があります。
しかし .xcodeproj ファイルがあると、 xcodebuild コマンドが Swift Package のパッケージ名を認識してくれなくなる問題があるようです。
そのため、 .xcodeproj を一旦削除してから、 xcodebuild を動かす必要があります。

まとめ

iOS の Swift Package プロジェクトでは、 swift test ではなく、 xcodebuild でテストを動かしましょう。
(今後、 swift test でもうまくいくようになりそうな気はしてます)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away