web-dev-qa-db-fra.com

Existe-t-il un moyen de simuler plusieurs iphones avec xcode/iphone sim?

Je planifie un jeu qui nécessite plusieurs utilisateurs et je me demandais s’il était possible de lancer plusieurs instances du simulateur iPhone. Je n'ai rien vu dans les menus ni dans les résultats de recherche Google, mais je voulais simplement m'assurer que rien ne me manquait.

42
Abel

Autant que je sache, non seulement vous ne pouvez pas exécuter plusieurs instances du simulateur, mais, le moment venu, vous ne pouvez pas non plus exécuter plusieurs instances du débogueur.

Cela signifie que pour créer des applications multi-périphériques, vous devez attribuer un seul Mac à un seul iPhone/périphérique tactile (ou une seule instance de simulateur) exécutant chacun votre application.

J'ai commencé à chercher à savoir si VMWare ou Parallels pouvait être intégré, mais il n'y a pas grand chose à faire sans pirater le système d'exploitation.

Je suggère de déposer une demande de fonctionnalité avec http://bugreporter.Apple.com .

11
Ramin

C'est possible mais seulement avec plusieurs utilisateurs.

Lisez ceci: http://www.coderebel.com/2010/08/31/iphone_simulator

En supposant que vous ayez deux projets (P1, P2) que vous souhaitez déboguer simultanément, procédez comme suit.

Étapes à suivre pour mettre en place:

  1. Créez un nouvel utilisateur (U2) sur votre Mac
  2. Donnez-lui un accès R/W à P2, en particulier à son dossier de construction.
  3. Téléchargez l'application de lancement à partir du site ci-dessus et copiez-la dans Applications.

Étapes pour déboguer:

  1. Fermez Xcode et le simulateur s'il est en cours d'exécution
  2. Lancez l'iPhone Launcher.app avec U1.
  3. Lancez Xcode avec U1, chargez P1, lancez le débogage.
  4. Lancez l'iPhone Launcher.app avec U2.
  5. Lancez Xcode avec U2, chargez P2, démarrez le débogage.

Malheureusement, c'est un P.I.T.A. avoir à changer d'utilisateurs de temps en temps mais jusqu'à présent, je n'ai pas trouvé de meilleure solution. J'espère que cela t'aides.

61
lvsti

Il existe un moyen de le faire facilement sans utiliser plusieurs utilisateurs. Gardez à l'esprit que vous ne serez pas connecté au débogueur cependant. N'oubliez pas que l'explication ci-dessous concerne XCode 6+. Vous pouvez ignorer cette explication et faire défiler l'écran jusqu'à la section d'emballage ci-dessous.

À partir d'une réponse ici nous pouvons voir que vous pouvez lancer n'importe quel simulateur depuis la ligne de commande:

ouvrir -a "iOS Simulator" --args -CurrentDeviceUDID 

Vous pouvez trouver le deviceID (ainsi que tous vos simulateurs) en exécutant la commande xcrun simctl list sur la console. Il va générer une liste comme celle-ci. L'ID de périphérique est le code entre accolades:

== Runtimes ==
iOS 8.3 (8.3 - 12F69) (com.Apple.CoreSimulator.SimRuntime.iOS-8-3)
== Devices ==
-- iOS 8.3 --
    iPhone 4s (99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8) (Shutdown)
    iPhone 5 (K262AF11-ADD2-4FDA-ACBA-8C80DD9D4AA1) (Shutdown)
    iPhone 5s (337KDC51-0A4B-47DB-8966-83562FD92C93) (Shutdown)
    iPhone 6 Plus (9GK714E2-F713-4F98-A96E-C72ACD6571A8) (Shutdown)
-- iOS 8.2 --
    etc continued....

Par conséquent, pour exécuter le simulateur en utilisant l'exemple ci-dessus, exécutez cette commande sur la console:

open -n /Applications/Xcode.app/Contents/Developer/Applications/iOS\ Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

Nous utilisons à la place l'indicateur -n car l'indicateur -a spécifie l'application à utiliser pour ouvrir le fichier, tandis que l'indicateur -n ouvre une nouvelle instance de la ou des applications même si elle est déjà en cours d'exécution. Utilisez la commande man open pour connaître toutes ces informations.

Assurez-vous également que vous avez le bon chemin pour votre simulateur.

Une dernière chose à noter, si vous utilisez le simulateur de cette façon, il y a de fortes chances que vous ayez un nombre limité de simulateurs. Et comme il est limité, vous voudrez peut-être le lancer sans interrompre celui qui est déjà à l'écran. Nous pouvons résoudre ceci à partir de cette réponse ici où il vous montre comment create a new simulator and delete one.

Donc, en résumé, voici ce que vous faites pour les lancer.

A) Créez d’abord un simulateur avant de le lancer.

Utilisation: simctl crée "nom" "identifiant de type d'appareil" "identifiant d'exécution"

xcrun simctl create "mynewsimulator" "iPhone 6" "com.Apple.CoreSimulator.SimRuntime.iOS-8-3"

Vous trouverez l'ID d'exécution à partir de la commande xcrun simctl list que j'ai exécutée ci-dessus. Après avoir exécuté la commande ci-dessus, le deviceID sera imprimé sur l'écran de la console. Prenez-en note car vous aurez besoin du dernier argument pour lancer le simulateur présenté ci-dessous. Supposons que cet identifiant était 99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

B) le lancer

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID '99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8'

C) supprimez-le une fois que vous avez terminé avec votre simulateur

xcrun simctl delete 99Z06AC6-A2D6-46E7-B4F7-BA4F5F3F39C8

Tout cela peut être placé dans un seul fichier .sh pour une exécution facile .. Veuillez noter de mettre les commandes wait ou sleep après chaque commande si vous décidez de mettre tout cela dans un fichier sh.

[EDIT 2017] Je vois que XCode 9 supportera désormais plusieurs simulateurs. En attendant de voir comment cela va fonctionner.

Si vous possédez une licence de serveur Mac OS X, vous pouvez également virtualiser une instance de Mac OS X Server et exécuter un second simulateur dans la machine virtuelle.

1
Mike

Pris en charge à partir de Xcode 9 sur.

(Source: WWDC 2017)

0
julien_c

Suivez ces étapes pour tester votre application.

Vous devez d'abord faire une chose pour l'ensemble du processus: Allez dans Projet -> Modifier les paramètres du projet -> cochez l'option - Construisez des cibles indépendantes en parallèle.

  1. Code de débogage qui créera votre application dans le simulateur. Par exemple, le nom de votre application est - Instance
  2. Fermer le simulateur
  3. Allez dans Projet-> Nouvelle cible -> Instance2 Ajoutez le "Nom complet de l'ensemble: Instance2" dans le fichier Instance2.info.plist Définissez le nom de l'exécutable: Instance2Select Instance2 Target -> Aller au projet -> Définir Cible active -> Instance2Build avec Instance2

Remarque: Faites tout avec précaution sinon vous devez réinitialiser votre simulateur Pour réinitialiser le simulateur -> Exécuter le simulateur -> Simulateur iPhone -> Réinitialiser le contenu et les paramètres ...

Maintenant, vous avez deux applications dans le simulateur et vous pouvez tester l'application sur toutes les instances.

J'espère que ça vous aidera :)

0
Ravikant Nagar

Dans XCode 4, vous pouvez exécuter plusieurs instances tout en étant en mode débogage.

Ce que j'ai fait était de créer un duplicata de ma cible et d'exécuter l'original et le duplicata. Si vous utilisez la fenêtre de sortie, vous pouvez choisir la sortie que vous regardez.

0
the_e

J'ai réussi à le faire fonctionner en combinant réponse par Ivsty avec celui-ci .

Fondamentalement, vous créez deux utilisateurs (A et B), exécutez des simulateurs dans chacun d'eux, exécutez le serveur VNC sur l'utilisateur B, puis vous vous connectez à partir de l'utilisateur A pour accéder à l'écran B sans avoir à changer d'utilisateur. 

0
Andrej Karadzic

Hmm ... Je ne pense pas que vous manquez rien ici. Autant que je sache, le SDK ne dispose d'aucune technologie capable d'émuler plusieurs périphériques - bien que ce soit une fonctionnalité utile. Je pense que votre seule option serait d’obtenir un deuxième appareil iPhone OS, ou d’avoir un ami qui possède également un appareil iPhone OS pour vous permettre de l’utiliser à des fins de test.

0
RexOnRoids