7

我使用 iOS 4.2 和 Xcode 3.2.5 创建了一个通用二进制文件。我正在尝试对应用程序进行一些自动化测试,并且由于 iPad 和 iPhone 版本之间的界面略有不同,因此我有单独的 UIAutomation 脚本。不幸的是,无论我做什么,当我单击 Instruments 中的录制按钮时,它总是使用 iPad 模拟器启动应用程序。如何强制 Instruments 启动 iPhone 模拟器?

通用应用程序在所有 3 种模拟设备(iPhone、iPhone (Retina) 和 iPad)的模拟器中运行良好。我可以通过 Xcode 管理 Active Executable,并且“构建和运行/调试”工作正常,正确使用指定的模拟器。当我启动 Instruments 时,我选择 iOS Simulator > All > Automation,然后为 iPhone 选择我的自动化脚本,然后将目标设置为 project-name/build/Debug-iphonesimulator/project-name。

4

4 回答 4

9

在从命令行运行自动化之前,只需将以下内容传递给 xcodebuild,即可创建 iPhone 通用应用程序的构建:

TARGETED_DEVICE_FAMILY=1

然后使用仪器运行您的自动化。

如果您想测试 iPad,请在没有该构建选项的情况下进行另一个构建,然后仪器/模拟器将默认返回 iPad

如需参考,请在此处查看 TARGETED_DEVICE_FAMILY 的文档:

http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

于 2011-11-18T04:08:02.377 回答
5

完全不需要弄乱您的应用程序:Instruments 允许您选择是使用 iPhone 还是 iPad 模拟器。假设您已经选择了您的应用程序:

  1. 单击目标选择器(当前显示您的应用名称)。
  2. 点击“编辑活动目标”
  3. 在底部附近,单击“选项”下拉菜单。
  4. 在列表底部,您可以选择“模拟器配置”。
于 2013-03-12T00:39:50.573 回答
4

一个非常简单的解决方案是在启动自动化之前修改应用程序的 Info.plist(无需重新构建应用程序)。使用 PlistBuddy 将 UIDeviceFamily 修改为适用于 iPhone 或 iPad。例如:

plistbuddy="/usr/libexec/PlistBuddy"
plistfile="$myapp/Info.plist"
if [ $device == "iphone" ]; then
 uidevicefamily=1
else
 uidevicefamily=2
fi
$plistbuddy -c "Delete :UIDeviceFamily" $plistfile
$plistbuddy -c "Add :UIDeviceFamily array" $plistfile
$plistbuddy -c "Add :UIDeviceFamily:0 integer $uidevicefamily" $plistfile
于 2012-03-22T16:46:39.507 回答
1

我也遇到了这个问题,我注意到这是因为无论我使用哪种运行设置,XCode 都显示 Simulator - 3.2,而它应该在 iPhone 模拟器上显示 SDK 版本的 4.0 或 4.1。

我可以通过将“目标设备系列”设置更改为 iPhone/iPad 来修复它,因为它以某种方式设置为 iPad。

于 2010-12-07T01:11:57.787 回答