LoginSignup
8
7

More than 3 years have passed since last update.

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

Posted at

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 でもうまくいくようになりそうな気はしてます)

8
7
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
8
7