Changement d'apparence automatisé
Xcode 11.4
Apple a publié une puissante mise à jour de Xcode qui contient quelques éléments utiles à ce sujet. L'apparence peut désormais être sélectionnée directement dans le simulateur. Il suffit de sélectionner Features > Toggle Appearance
o + + A . Le changement automatique d'apparence pourrait néanmoins être important, par exemple pour les tests automatisés de capture d'écran en ligne de commande. Le script devient facile comme ça en utilisant Xcode 11.4 :
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# The value to use is now just 'dark' or 'light'
appearance=dark
for device in "${device_ids[@]}"; do
xcrun simctl boot $device
xcrun simctl ui $device appearance $appearance
done
Plus besoin de tuer le simulateur ou de le réinitialiser, ce qui représente un gain de performance considérable. De même, il n'est plus nécessaire de jouer avec des outils plist, jamais. Gardez à l'esprit que vous devez utiliser les identifiants de périphériques disponibles dans le runtime que vous utilisez. Pour les trouver, utilisez xcrun simctl list
.
Voir aussi mon script complet : https://github.com/Blackjacx/Scripts/blob/master/set-simulator-style.sh
Xcode 11.3
Il existe un moyen d'utiliser la ligne de commande pour faire passer un simulateur du mode clair au mode foncé. Si vous disposez d'un tableau contenant les identifiants de vos appareils, vous pouvez procéder comme suit :
device_ids=("C741F3CD-FDAC-49EA-A4DB-7F797B97291E" "428183B6-3EB8-4D36-9938-9D07C141BF49")
# Determine the plist value for the desired style: "dark" -> 2 / "light" -> 1
style=2
for device_id in "${device_ids[@]}"; do
plist_path="${HOME}/Library/Developer/CoreSimulator/Devices/${device_id}/data/Library/Preferences/com.apple.uikitservices.userInterfaceStyleMode.plist"
printf '\n%s' "Set style $style for device $device_id ($plist_path)"
killall "Simulator"
xcrun simctl shutdown booted
xcrun simctl erase $device_id
# Crate the plist since it might not be available after erase
[[ ! -f "$plist_path" ]] && /usr/libexec/PlistBuddy -c "save" $plist_path
# Set the style mode
plutil -replace UserInterfaceStyleMode -integer $style $plist_path
done
Si vous voulez spécifier des noms de périphériques dans votre script - puisque les ID des périphériques sont différents sur différentes machines - vous pouvez aussi facilement trouver leurs id en utilisant le code bash suivant :
device_names=("iPhone SE" "iPhone 8" "iPhone 11 Pro" "iPhone 11 Pro Max")
device_ids=()
for name in "${device_names[@]}"; do
id=$(xcrun simctl list --json | jq ".devices | .[] | .[] | select(.name == \"$name\") | .udid" | cut -d\" -f2)
device_ids+=("$id")
done
printf '%s\n' "${device_ids[@]}"