web-dev-qa-db-fra.com

Cordova: démarrer une image d'émulateur iOS spécifique

Je développe une application mobile multiplate-forme utilisant Cordova, principalement axée sur iOS au stade du développement.

Pour mon processus de développement, l'idéal serait de pouvoir démarrer mon application Cordova directement à partir de la ligne de commande et de la charger dans un émulateur spécifié. Je peux le faire en exécutant ce qui suit à partir du répertoire racine du projet:

$cordova run --debug --emulator iOS

Cela fonctionne correctement et donne lieu à un simulateur iOS exécutant mon application dans un iPhone 4 simulé Retina avec iOS 7.0.3.

Outre cet appareil simulé, j'aimerais également tester (par exemple) un iPad. J'ai ces images d'émulation installées et je peux y démarrer mon application manuellement dans Xcode. De plus, la commande list-emulator-images (située dans project_dir/platforms/ios/cordova/lib) donne la sortie suivante:

"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"

Cependant, le problème est le suivant: je n'arrive pas à comprendre comment démarrer l'émulateur autrement que par défaut (ce qui semble être l'image d'émulation iPhone Retina (4-inch).). La sortie correspondante de cordova help donne les informations suivantes:

run [--debug|--release]
    [--device|--emulator|--target=FOO]
    [PLATFORM] ............................ deploys app on specified platform devices / emulators

J'ai essayé des choses comme celles-ci:

cordova run --debug --emulator=iPad iOS

Et de nombreuses variantes, mais pas de chance. Chaque fois qu'il commence dans le même émulateur.

La documentation pour l'outil de ligne de commande ne fournit aucune information à cet égard, et une recherche étendue dans Google a également échoué. Est-ce que je manque quelque chose de trivial? Ou est-ce que j'essaie de faire quelque chose de bizarre? J'espère vraiment que quelqu'un ici a de l'expérience avec cela et peut apporter des réponses.

Merci d'avance!

edit: oublié de mentionner explicitement; Je fais tout ça sur un Mac. Comme mentionné précédemment, exécuter l'application dans différents émulateurs/simulateurs sous Xcode fonctionne correctement.

113
EggMeister

Pour savoir quelles sont les images de simulateur disponibles, vous pouvez les lister.

$ cordova emulate ios --list
Available iOS Virtual Devices:
    iPhone-4s, 9.3
    iPhone-5, 9.3
    iPhone-5s, 9.3
    iPhone-6, 9.3
    iPhone-6-Plus, 9.3
    iPhone-6s, 9.3
    iPhone-6s-Plus, 9.3
    iPad-2, 9.3
    iPad-Retina, 9.3
    iPad-Air, 9.3
    iPad-Air-2, 9.3
    iPad-Pro, 9.3

Puis utilisez l’un des noms de simulateur dans le paramètre --target:

cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"

Important Quittez le simulateur avant de lancer un autre simulateur cible (dans la barre de menus, sélectionnez Simulator->Quit).

Tenez compte du fait que vous devrez peut-être quitter le simulateur iOS via le menu pour passer d’un iPhone 3,5 à 4 pouces.

la liste dynamique est disponible dans platforms/ios/cordova/lib/list-emulator-images

325
csantanapr

Comme dit csantanapr vous pouvez utiliser:

cordova emulate ios --target="iPhone-4s"

mais, dans ce cas, le projet cordova (ou PhoneGap ou autre) sera lancé sur le simulateur de l'iPhone 4s avec iOS version 7.0.3 .

Si vous souhaitez lancer le projet sur le même simulateur, mais avec une autre version iOS (7.1 ou 8.0, si les versions existent dans votre système)?

De corse, vous pouvez faire comme par exemple cobberboy :

démarrez un émulateur spécifique et choisissez votre version d'ios en utilisant directement ios-sim.

Mais vous pouvez améliorer l’option --target de la commande cordova run.

Au début, vous devez vous assurer de la version iOS cible disponible sur votre système.

Pour cela, utilisez la réponse de cobberboy :

$ ios-sim showdevicetypes

Ensuite, vous devez ouvrir le fichier your_project_dir/platforms/ios/cordova/lib/run.js et trouver des lignes de code comme ci-dessous:

// validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

Pour utiliser iPhone-4s, 7.1 (ou un autre), ajoutez-le simplement au tableau validTargets.

var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

Et en

cordova emulate ios --target="iPhone-4s, 7.1"

votre --target="iPhone-4s, 7.1" sera valide.

Et la fonction deployToSim de run.js:

function deployToSim(appPath, target) {
// Select target device for emulator. Default is 'iPhone-6'
if (!target) {
    target = 'iPhone-6';
    console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
}
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
    '--devicetypeid', 'com.Apple.CoreSimulator.SimDeviceType.' + target,
    // We need to redirect simulator output here to use cordova/log command
    // TODO: Is there any other way to get emulator's output to use in log command?
    '--stderr', logPath, '--stdout', logPath,
    '--exit'];
return spawn('ios-sim', simArgs);
}

convertir iPhone-4s, 7.1 en argument valide com.Apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1 pour ios-sim.

17
Ruslan Soldatenko

TL; DR

Vous pouvez démarrer un émulateur spécifique et choisir votre version d'ios en utilisant directement ios-sim.

export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.Apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log

Détails

Quand j'ai couru ceci:

cordova emulate ios --target="iPad"

et regardé les processus en cours, j'ai vu ceci (sur une seule ligne):

ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app 
        --stderr ./platforms/ios/cordova/console.log 
        --stdout ./platforms/ios/cordova/console.log 
        --family ipad 
        --exit

En recherchant plus loin dans ios-sim , il semble y avoir quelques options plus spécifiques, en particulier:

--devicetypeid <device type>    The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
  e.g "com.Apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"

Alors j'ai fait ce que cela suggérait et ai couru ios-sim avec un argument "showdevicetypes" et j'ai obtenu ceci:

$ ios-sim showdevicetypes
com.Apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.Apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.Apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.Apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.Apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0
10
cobberboy

Ne pas inclure le numéro de version

cordova run ios --target="iPhone-6s"
7
Ariel Ibarra

À partir de Xcode 8.3.2 ...

Vieux fil, je sais, mais il semble peut-être que la réponse a légèrement changé. Les astuces des articles précédents dans ce fil ont aidé, mais la lecture de la documentation incluse dans le code, <cordova-project>/platforms/ios/cordova/lib/run.js

Exécutez ./platforms/ios/cordova/lib/list-emulator-images pour répertorier les images d'émulateur disponibles. N'incluez pas le numéro de version à la fin lorsque vous lancez l'appel cordova dans l'émulateur souhaité.

cordova run ios --emulator --target="iPad-Air"

Voir plus

4
David Vezzani

sortie la plus rapide de la liste des périphériques: $ instruments -s devices

Utilisez simplement le nom de l'appareil sans la version.

3
Tino Rüb

Je ne peux pas commenter la réponse ci-dessus en raison de ma faible réputation, mais la liste des cibles est disponible à partir de:

start-emulator 

sous

your platform/ios/cordova/lib/

Ceci dit, je ne peux pas faire fonctionner l'émulateur de rétine ipad ...

3
Sergio

Exécute le simulateur iOS avec une requête Web en fonction de la génération déjà générée pour l’application Cordova. Exécuter cette demande depuis le navigateur ouvre le simulateur sur mac avec iPhone 8Plus version: http: // nomhôte: 3000/cordova/build/[xxxx-buildnumber]/emulate? Target = iPhone-8-Plus

0
Oleg Bondarenko

La réponse de @ Birja fonctionne actuellement, mais la commande d'exécution qu'il a finalement utilisée est toujours fausse alors voici la bonne réponse:

Pour répertorier tous les périphériques disponibles dans le simulateur cordova run ios --list

Il en résultera quelque chose comme ceci:

Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 12.2
Apple-Watch-Series-2-38mm, watchOS 5.2
iPhone-5s, 12.2
iPhone-6, 12.2
iPad-Air-2, 12.2
iPad--5th-generation-, 12.2
iPad-Pro--9-7-inch-, 12.2
iPad-Pro, 12.2
iPad-Pro--12-9-inch---2nd-generation-, 12.2
iPad-Pro--10-5-inch-, 12.2
iPad--6th-generation-, 12.2
iPad-Pro--11-inch-, 12.2
iPad-Pro--12-9-inch---3rd-generation-, 12.2

cordova run ios --target "iPad-Pro, 12.2" Utilisez n'importe quelle cible ci-dessus. Pour exécuter en simulateur.

0
Black Mamba

Différents simulateurs iphone et ipad

  1. cordova run ios --list

  2. cordova émuler ios --target "iPhone-7"

0
BIRJA KUMAR