sta*_*Err 9 shell command-line ios-simulator
我试图自动化构建应用程序,运行单元测试,最后运行UI测试的过程.
我正在某些目录中通过命令行(xcodebuild -sdk iphonesimulator6.0)构建应用程序.
如何通过命令行(在〜/ Library/Application Support/iPhone模拟器//应用程序中)将此应用程序安装到iOS模拟器?
我试过了:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp
Run Code Online (Sandbox Code Playgroud)
但这会打开一个名为"iOS模拟器无法找到要模拟的应用程序"的新查找器窗口.
sta*_*Err 19
我制作了一个shell脚本,将应用程序安装到模拟器上.
#!/bin/sh
# Pick a uuid for the app (or reuse existing one).
if ! [ -f installApp.uuid ]; then
uuidgen > installApp.uuid
fi
UUID=$(cat installApp.uuid)
#create supporting folders
TOPDIR="$HOME/Library/Application Support/\
iPhone Simulator/6.0/Applications/$UUID/"
mkdir -p "$TOPDIR"
mkdir -p "$TOPDIR/Documents"
mkdir -p "$TOPDIR/Library"
mkdir -p "$TOPDIR/tmp"
mkdir -p "$TOPDIR/$1.app"
#copy all the app file to the simulators directory
cp -r * "$TOPDIR/$1.app"
Run Code Online (Sandbox Code Playgroud)
如何使用此脚本安装应用程序:
改变这一行:
TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/"
Run Code Online (Sandbox Code Playgroud)
反映你正在使用的iPhone模拟器的版本即6.0/ 7.1.
将脚本保存installApp.sh在project_name.app/文件夹中.
打开终端窗口并installApp从项目目录运行.
project_name.app/一个项目在里面.输入终端:
cd path/to/project_name.app /
./installApp将应用程序安装到模拟器.我从Jeffrey Scofield那里得到了这个想法:从命令行运行iOS模拟器
对于iOS8和新的XCode Apple改变了一些东西,并且很难通过命令行安装应用程序.它仍然可以做:
首先,您需要找到应用程序目录(假设您已安装应用程序): find ~/Library/Developer/CoreSimulator/Devices -name '*.app'
这将列出已安装自定义应用程序的所有路径.例如
/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app
device.plist文件.该文件将包含它正在模拟的设备:Run Code Online (Sandbox Code Playgroud)<dict> ... <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> ... </dict>
TOPDIR路径更改为$HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/从Xcode 6开始,您应该可以使用它simctl来完成此任务.
1)获取可用设备列表:
xcrun simctl list devices
Run Code Online (Sandbox Code Playgroud)
1a)假设您已jq安装,您可以使用它来仅获取实际可用的设备:
xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .availability | contains( "(available)" ) ) '
Run Code Online (Sandbox Code Playgroud)
1b)甚至可以通过iPhone或iPad进一步过滤:
xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) '
Run Code Online (Sandbox Code Playgroud)
2)获得要安装的设备的UDID后:
xcrun simctl install $DEVICE_UDID /path/to/your/app
Run Code Online (Sandbox Code Playgroud)
2a)或者,如果您只想安装到启动的设备:
xcrun simctl install booted /path/to/your/app
Run Code Online (Sandbox Code Playgroud)
如果你想在所有设备上运行相同的应用程序,这真的很方便:
1)重置/擦除所有模拟器:
xcrun simctl erase all
Run Code Online (Sandbox Code Playgroud)
2)为每个测试打开一个Simulator实例:
open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
(Ignore the 'Booted' error and switch hardware.)
Run Code Online (Sandbox Code Playgroud)
3)获取我们要安装的可用设备的UDID:
DEVICES=$( xcrun simctl list devices -j | jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) | select( .state == "Booted" ) | .udid ' )
Run Code Online (Sandbox Code Playgroud)
4)安装应用程序(必须为适当的模拟器SDK构建):
for device in DEVICES ; do xcrun simctl install $device /path/to/app ; done
Run Code Online (Sandbox Code Playgroud)
5)为方便起见,在每台设备上启动应用程序:
for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10539 次 |
| 最近记录: |