web-dev-qa-db-fra.com

XCTests Échec sur un périphérique physique: "Annulation des tests en raison d'un délai d'attente dépassé ..."

Les XCTests échouent avec le message: *** Canceling tests due to timeout in Waiting for test process to check in... Cela a juste commencé à arriver ces derniers jours. J'utilise Xcode 7.3.1, avec iOS 9.3.2 s'exécutant sur un iPhone 6. Mon application est principalement écrite en Swift.

J'ai vu des articles similaires: 

  1. Impossible d'exécuter XCTests sur un périphérique iOS
  2. Les tests iOS ne s'exécutent pas sur le simulateur lors de l'utilisation de Jenkins via JNLP

Ces autres publications parlent de ce problème comme étant lié à la signature de code. La signature de code ne semble pas être mon problème - j'ai consulté l'utilitaire KeyChain Access et je ne vois aucun certificat pertinent expiré. En outre, ce qui a pour but de résoudre (très temporairement) mon problème est de redémarrer mon iPhone. (Malheureusement, ce correctif ne dure pas longtemps - peut-être quelques exécutions de XCtests et le problème se pose à nouveau). Je ne cours pas Jenkins, juste XCTests.

J'ai essayé de redémarrer Xcode et de supprimer tous les fichiers/dossiers du dossier DerivedData mais aucun de ceux-ci ne résout le problème.

I did installez simplement Xcode8 (première version bêta). Mais à part de l'avoir lancé une ou deux fois, je ne l'utilise généralement pas. Il semble étrangement fortuit que ce problème se pose après l’avoir installé.

Mise à jour du 25/06/16  

J'ai réduit cette question un peu. Plusieurs autres symptômes apparaissent en même temps que le problème de délai d'attente: 

  1. La consignation de la console directement à partir d'instructions print dans les fichiers XCTest s'arrête. 
  2. L'échec de la minuterie - c'est en fait la racine du problème. Mes tests impliquent d’abord d’attendre une interaction du serveur, ce qui se produit. Mais l'attente utilise un NSTimer qui n'exécute jamais son rappel. 
  3. Les points d'arrêt cessent de fonctionner.

Il semble intéressant de noter que j'utilise ces XCTest manuellement. C'est-à-dire que j'exécute chaque test séparément, de sorte que chaque test implique une construction.

Aussi, jusqu'à présent, j'ai testé les éléments suivants:

  1. Redémarrer Xcode (n'aide pas)
  2. Redémarrer Mac OS X (ça n'aide pas)
  3. Supprimer le contenu des données dérivées (ne vous aide pas)
  4. Redémarrer l'iPhone - aide, mais ne permet que quelques tests Xcode à exécuter.
  5. Essayé de courir avec wifi contre hotspot sur iPhone (aucun changement à émettre)
  6. TODO: Courir avec simulateur
  7. Cela pourrait-il être un problème de câble ou de port USB? Changer le câble reliant le périphérique n'aide pas.
  8. La suppression de l'application et la réinstallation/reconstruction n'aident pas.
  9. Essayé sur différents matériels (iPad Air sous iOS 9.3.2). Les mêmes problèmes.

Ma configuration est la suivante: iOS 9.3.2, Xcode 7.3.1, Mac OS X 10.11.5 (15F34).

17
Chris Prince

Le problème réside dans le fait (ou plutôt: bug grave dans xcodebuild) que le délai de connexion au serveur XCTest commence au moment où vous exécutez la commande xcodebuild. Le délai d'attente est de 120 secondes. Par conséquent, si votre compilation + le démarrage du simulateur prend plus de 2 minutes, xcodebuild générera l'erreur "Annulation des tests en raison d'un délai d'attente".

La solution consiste à diviser la construction en deux commandes. Un pour la construction et un pour l'exécution des tests:

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

Cela résoudra le problème du délai d'attente, car l'action de test-sans-construction n'a pas à être compilée en premier.

19
Werner Altewischer

J'ai eu le même problème avec 7.3.1, iPad 9.3.3, Mac 10.11.6

Les profils de provisioning sont corrects et ne posent aucun problème à cet égard.

En prenant des allusions aux étapes mentionnées par OP, le problème a disparu après le redémarrage de l'iPad et du XCode à deux reprises (dans cet ordre). Après avoir redémarré XCode, j'ai dû débrancher l'iPad, puis le rebrancher.

N'a pas eu à supprimer les données dérivées ni à redémarrer le Mac.

Mon ami a également rencontré des problèmes similaires et a sollicité l'assistance technique Apple en fournissant un exemple de projet. L'équipe d'assistance Apple Tech a répondu en lui demandant de signaler un bogue.

6
bharatmeda

J'ai le même problème avec vous. J'ai essayé tous les moyens possibles comme vous. Et ne trouvez toujours pas la cause fondamentale pour le résoudre. Le problème est comme cause par Xcode8, mais je ne peux trouver aucun journal de périphérique ou message d'erreur pour le vérifier.

mise à jour: Mes appareils iPhone6 ​​(9.3.1 -> 9.3.2) iPhone5 (9.3.1 -> 9.3.2) apparaissent tous les deux ce numéro Xcode version 7.3.1 (7D1014) Xcode-beta version 8.0 (8S128D)

3
DaidoujiChen

Bien que je pense que la réponse de Werner Altewischer soit correcte, il est toujours important de regarder la première erreur que vous constatez, pas la plus récente.

Dans mon cas, je voyais l'erreur qui était signalée dans la question, mais il y avait de nombreuses erreurs de compilation avant cela.

ex.

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')

J'ai finalement réalisé que j'avais mis à niveau mon environnement sans mettre à jour ma version Xcode ciblée dans TravisCI.

En changeant...

osx_image: xcode8.3

à...

osx_image: xcode9.3

dans mon .travis.yml corrigé cela pour moi.

0
Dwayne Forde