web-dev-qa-db-ja.com

XCTestsが物理デバイスで失敗する:「タイムアウトが原因でテストをキャンセルしています...」

XCTestsは次のメッセージで失敗しています:*** Canceling tests due to timeout in Waiting for test process to check in...これはここ数日で登場し始めたばかりです。私はXcode7.3.1を使用しており、iOS9.3.2はiPhone6で実行されています。私のアプリは主にSwiftで書かれています。

私はいくつかの同様の投稿を見ました:

  1. iOSデバイスでXCTestsを実行できません
  2. JNLPを介してJenkinsを使用する場合、iOSテストはシミュレーターで実行されません

これらの他の投稿では、この問題がコード署名で発生したものとして説明されています。コード署名は私の問題ではないようです。KeyChainAccessユーティリティを調べましたが、関連する期限切れの証明書が見つかりません。また、これまでのところ(非常に一時的に)問題を修正しているのは、iPhoneを再起動することです。 (残念ながら、その修正は長くは続きません。XCtestを数回実行すると、問題が再び発生する可能性があります)。私はJenkinsを実行しておらず、XCTestsだけを実行しています。

Xcodeを再起動し、DerivedDataフォルダーからすべてのファイル/フォルダーを削除しようとしましたが、どちらも問題を解決しません。

didはXcode8(最初のベータリリース)をインストールするだけです。でも、1、2回発売した以外は、普段は使っていません。この問題がインストールした直後に発生しているのは、奇妙なことに偶然のようです。

2016年6月25日更新

この問題をいくらか絞り込みました。タイムアウトの問題と同時に、他のいくつかの症状が現れます。

  1. XCTestファイルのprintステートメントからのコンソールロギングが停止します。
  2. タイマーの失敗-これが実際に問題の根本です。私のテストでは、最初にサーバーとの対話を待つ必要があります。ただし、待機では、コールバックを実行しないNSTimerが使用されます。
  3. ブレークポイントが機能しなくなります。

これらのXCTestを手動で実行していることに注意してください。つまり、各テストを個別に実行しているため、各テストにはビルドが含まれます。

また、これまでに以下をテストしました。

  1. Xcodeを再起動します(役に立ちません)
  2. Mac OS Xを再起動します(役に立たない)
  3. 派生データの内容を削除する(役に立たない)
  4. IPhoneを再起動すると役立ちますが、Xcodeテストの実行が許可されるのは再度のみです。
  5. IPhoneのwifiとホットスポットで実行してみました(問題に変更はありません)
  6. TODO:シミュレーターで実行
  7. これはケーブルまたはUSBポートの問題でしょうか?デバイスを接続しているケーブルを変更しても効果はありません。
  8. アプリを削除して再インストール/再構築しても効果はありません。
  9. さまざまなハードウェア(iOS9.3.2を実行しているiPadAir)で試してみました。同じ問題。

私の構成は、iOS 9.3.2、Xcode 7.3.1、Mac OS X 10.11.5(15F34)です。

18
Chris Prince

問題は、コマンドxcodebuildを発行した瞬間に、XCTestサーバーへの接続のタイムアウトが開始されるという事実(または、xcodebuildの重大なバグ)にあります。タイムアウトは120秒であるため、シミュレーターのコンパイルと起動に2分以上かかる場合、xcodebuildはこの「タイムアウトによるテストのキャンセル」エラーを表示します。

解決策は、ビルドを2つのコマンドに分割することです。 1つはビルド用で、もう1つはテストの実行用です。

> xcodebuild clean build build-for-testing <other options>
> xcodebuild test-without-building <other options>

これにより、ビルドなしのテストアクションを最初にコンパイルする必要がないため、タイムアウトの問題が解決されます。

19

7.3.1、iPad 9.3.3、Mac10.11.6でも同じ問題が発生しました

プロビジョニングプロファイルは問題なく、その面で問題はありません。

OPが述べた手順からヒントを得て、iPadとXCodeを2回(この順序で)再起動すると、問題は解決しました。 XCodeを再起動した後、iPadのプラグを抜いて、もう一度差し込む必要がありました。

派生データを削除したり、Macを再起動したりする必要はありませんでした。

私の友人も同様の問題に直面し、サンプルプロジェクトを提供することでAppleテクニカルサポートを求めました。Appleテクニカルサポートチームは、バグを報告するように彼に依頼しました。

6
bharatmeda

私はあなたと同じ問題を抱えています。私はあなたのように可能な限りすべてを試しました。それでも、それを解決する根本的な原因は見つかりません。この問題はXcode8の原因のようなものですが、それを証明するためのデバイスログやエラーメッセージが見つかりません。

更新:マイデバイスiPhone6s(9.3.1-> 9.3.2)iPhone5(9.3.1-> 9.3.2)両方ともこの問題が表示されますXcodeバージョン7.3.1(7D1014)Xcode-betaバージョン8.0(8S128D)

3
DaidoujiChen

他の人が確認できるように、ここに別のソリューションを追加したいと思いました。ラップトップが厳格なウイルス対策の対象である場合は、~/Library/Developerが免除されていることを確認してください。アンチウイルスが~/Library/Developer/CoreSimulator/Devices/.....を検疫していたため、この問題が発生していました。

テストプロセスが隔離されている場合、テストを実行するのは困難です。

0
John

Werner Altewischerの答えは正しいと思いますが、最新ではなく、表示されている最も早いエラーを確認することが常に重要です。

私の場合、質問に投稿されたエラーが表示されていましたが、その前に多数のコンパイルエラーがありました。

例.

Testing failed:
    '...' is not a postfix unary operator
    'count' is unavailable: there is no universally good answer, see the documentation comment for discussion
    Cannot convert value of type 'Int' to expected argument type 'IntMax' (aka 'Int64')
    Cannot convert value of type 'Int8' to expected argument type 'IntMax' (aka 'Int64')
    Cannot convert value of type 'Int16' to expected argument type 'IntMax' (aka 'Int64')
    Cannot convert value of type 'Int32' to expected argument type 'IntMax' (aka 'Int64')
    Cannot convert value of type 'UInt' to expected argument type 'UIntMax' (aka 'UInt64')
    Cannot convert value of type 'UInt8' to expected argument type 'UIntMax' (aka 'UInt64')
    Cannot convert value of type 'UInt16' to expected argument type 'UIntMax' (aka 'UInt64')
    Cannot convert value of type 'UInt32' to expected argument type 'UIntMax' (aka 'UInt64')

最終的に、TravisCIでターゲットのXcodeバージョンを更新せずに環境をアップグレードしたことに気付きました。

変化...

osx_image: xcode8.3

に...

osx_image: xcode9.3

私の.travis.ymlこれを修正しました。

0
Dwayne Forde