Pour plusieurs raisons (public ciblé, non régression, couverture des tests, captures d’écrans…) il est important de tester sur plusieurs cibles. En se limitant à l’iPhone / iPod Touch, citons en particulier :
- iOS Simulator : iOS 6.0 / 6.1 (non Retina)
- iOS Simulator : iOS 6.0 / 6.1, Retina 3.5-inch
- iOS Simulator : iOS 6.0 / 6.1, Retina 4-inch
- iOS Simulator : iOS 7.0 / 7.1, Retina 3.5-inch
- iOS Simulator : iOS 7.0 / 7.1, Retina 4-inch
- (real device) iPod Touch 4e génération : iOS 6.1.3
- (real device) iPod Touch 5e génération : iOS 7.0.3
iOS Simulator | Résolution | iOS 6.0 / 6.1 | iOS 7.0 / 7.1 |
---|---|---|---|
iPhone | 320×480 | OK | n/a |
iPhone Retina 3.5-inch | 640×960 | OK | OK |
iPhone Retina 4-inch | 640×1136 | OK | OK |
Voici comment je m’en sors avec Appium 0.16.0, Xcode 5.1 et Xcode 4.6.3 installés sous OS X 10.8.5.
Pour iOS 7.1, facile, puisque c’est le niveau de SDK du simulateur par défaut. On fera donc simplement dans le test JUnit :
final DesiredCapabilities capabilities = new DesiredCapabilities();ou :
capabilities.setCapability("deviceName", "iPhone Retina (3.5-inch)");
driver = new RemoteWebDriver(new URL("http://localhost:4723/wd/hub"), capabilities);
(...)Rappelons que pour le simulateur, la capability « app » pointe vers l’application sur le poste de développement :
capabilities.setCapability("deviceName", "iPhone Retina (4-inch)");
(...)
capabilities.setCapability("app", "/Users/dandriana/Library/Developer/Xcode/DerivedData/"Pour iOS 6.1, c’est un peu plus compliqué, car pour lancer le simulateur, Apple Instruments sélectionne systématiquement le dernier SDK du simulateur par défaut dans Xcode. Il va donc falloir se passer de Xcode 5.1 et utiliser Xcode 4.6.3, grâce à la ligne de commande suivante :
+ MON_APPLI_DIR // XXX-abcdefetc.
+ "/Build/ProductsDebug-iphonesimulator/"
+ MON_APPLI_NAME + ".app"
);
$ sudo xcode-select -switch /Applications/Xcode-4.6.3.app/Contents/Developer/Et pour choisir la résolution, c’est le même code que ci-dessus, avec comme possibilités :
capabilities.setCapability("deviceName", "iPhone");Il n’y a pas à changer la capability "app".
capabilities.setCapability("deviceName", "iPhone Retina (3.5-inch)");
capabilities.setCapability("deviceName", "iPhone Retina (4-inch)");
En ce qui concerne les real devices, Appium va seulement avoir besoin de l’UDID et du bundleID :
capabilities.setCapability("device", "f98cda012etc.");À propos des simulateurs, pour info voici ce qui est donné par défaut :
capabilities.setCapability("app", "com.avcompris.MON-APPLI");
$ xcode-select --print-pathModifier ces valeurs soi-même (defaults write) ne change rien : Apple Instruments les remet à jour avec le SDK du simulateur par défaut.
/Applications/Xcode.app/Contents/Developer
$ defaults read com.apple.iphonesimulator
{
LocationMode = 3102;
SimulateDevice = "iPhone Retina (4-inch 64-bit)";
SimulatorWindowCenterX = 657;
SimulatorWindowCenterY = 497;
SimulatorWindowLastScale = 1;
currentSDKRoot = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk";
windowOrientation = 3;
}
Notons aussi que, même si Xcode 4.6.3 est également installé sur ma machine et sert bien d’aiguillage pour lancer un autre simulateur que celui du SDK 7.1, il est a priori impossible d’ouvrir le projet iOS avec cette installation de Xcode, puisque des formats de fichiers, notamment les Xib, sont incompatibles entre 4.6.3 et 5.1.