我需要使用命令行启动使用特定语言的iOS模拟器。所以我发现我可以使用
instruments -w <device>
它工作得很好,我可以设置特定的设备。但是如何运行特定语言的模拟器呢?我尝试过添加
-AppleLanguages -AppleLocale
但有一些警告:
Instruments Usage Error : Specified target process is invalid: -AppleLanguage
谢谢!
要运行您的应用程序,必须安装并找到(如果没有,将打开默认语言)
使用此命令以某种语言运行您的应用程序
xcrun simctl launch <deviceid> <appid> -AppleLanguages "(pt-BR)"
样品:
xcodebuild -sdk iphonesimulator8.4 -arch i386 install DSTROOT=SomeFolder
xcrun instruments -w "iPhone 6 (8.4 Simulator)"
xcrun simctl install booted SomeFolder/Applications/YourApp.app
xcrun simctl launch booted com.yourdomain.yourapp -AppleLanguages "(pt-BR)"
使用特定语言启动
iOS Simulator
的唯一方法是更改其 .GlobalPreferences.plist
文件的内容。使用 xcrun
工具将不起作用,因为它会将参数传递给启动的应用程序,并且不会更改模拟器本身的语言。对 .GlobalPreferences.plist
的操作非常困难,因为它是二进制 plist
文件,因此您无法将其修改为“正常”xml
。更改其内容最简单的方法就是编写简单的Xcode Command Line Tool application
,FoundationSDK
拥有修改二进制文件plists
所需的所有工具。
export UDID=202B1006-C2DE-4CC6–8791–6EA4C3782XXX
plutil -replace AppleLocale -string "en_GB" ~/Library/Developer/CoreSimulator/Devices/$UDID/data/Library/Preferences/.GlobalPreferences.plist
xcrun simctl shutdown $UDID
xcrun simctl boot $UDID
如果您需要更改 iOS 模拟器上的区域设置而不重新启动它,您可以使用以下最少命令:
xcrun simctl spawn booted defaults write 'Apple Global Domain' AppleLocale -string es_ES
xcrun simctl spawn booted defaults write 'Apple Global Domain' AppleLanguages -array es
killall -HUP SpringBoard
此方法改编自此要点。
Appium 更进一步,重新启动附加服务以确保完全本地化,如 Appium 的 iOS 模拟器设置中所示:
要重新启动这些服务,您可以使用:
xcrun simctl spawn booted defaults write 'Apple Global Domain' AppleLocale -string es_ES
xcrun simctl spawn booted defaults write 'Apple Global Domain' AppleLanguages -array es
xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
xcrun simctl spawn booted launchctl stop com.apple.locationd
xcrun simctl spawn booted launchctl stop com.apple.tccd
xcrun simctl spawn booted launchctl stop com.apple.akd
我创建了一个脚本以方便使用,例如
./change_ios_locale_without_reboot.sh en_GB