【问题标题】:Setting Version of iOS simulator from Command line从命令行设置 iOS 模拟器的版本
【发布时间】:2013-04-13 03:36:24
【问题描述】:

上下文:使用 Xcode 的 UIAutomation 和模拟器 6.1 和 5.1 运行自动化脚本 Xcode 版本为 4.6.1

问题:从终端运行 shell 脚本时,UIAutomation 总是打开 6.1,即使我已将应用程序路径设置为 5.1。

我已经尝试在 5.1 上构建和运行,如果我从 Instruments 运行测试,我可以选择 5.1 的目标并且它工作正常。问题只是当我从命令行运行它时。

我检查了 iphonesimulator.plist 并且 currentSDKRoot 指向 5.1 路径,但是一旦 shell 脚本运行,它就会更改为 6.1。无论如何我可以强制它使用5.1吗?

经过数小时的搜索(包括最恰当的一个 - Launch a specific Hardware version of iOS simulator using instruments command line utility),似乎没有解决方案。

有一种方法可以使用默认值设置设备写入 com.apple.iphonesimulator \"SimulateDevice" '"iPad"' 我需要像默认值这样写 com.apple.iphonesimulator \"Version" '"5.1"' 虽然显然这不起作用。

任何指针将不胜感激。谢谢!

编辑:我希望这可以通过 XCode 5 解决,但我仍然遇到同样的问题,并且 iOS7 模拟器总是会打开!顺便说一句,有没有办法绕过这个问题 - 我敢肯定有很多运行多个模拟器版本。

【问题讨论】:

    标签: ios-simulator ios-ui-automation


    【解决方案1】:

    这并不优雅,但它是我们能够着手进行自动化设置的一种解决方法:

    从 App Store 安装 Xcode 5
    安装 Xcode 4.6.3 或从开发者门户的“Xcode 旧版本页面”
    重复旧版本的 Xcode,其中最大 sim 版本 == 您要运行的版本
    使用“sudo xcode-select -switch /path/to/Xcode.app”选择Xcode的版本

    希望有帮助!

    【讨论】:

    • 谢谢!这可能是目前最好的方法,因为通常我们在最新的 iOS 版本和一个较低的主要版本上运行测试以支持兼容性。如果我必须支持 5.1,那么我将安装一个早期版本的 XCode,它的最大 sim 为 5。
    • 编辑 - 由于代码现在使用 XCode 5 构建,我不能再使用 Xcode 4.6.3 :( 建议?
    【解决方案2】:

    我在 Jenkins 机器上运行自动化测试时也遇到了这个问题,我执行了以下操作以使用 6.1 版模拟器而不是 7.0 版模拟器测试我的应用程序:

    使用 Jenkins:

    第 1 步 = 我创建了一个使用 6.1 sdk 版本构建我的 ios 应用程序的作业。

    =============================================

    第 2 步 = 我使用 bash 脚本创建了第二个作业,该脚本执行以下操作:

    [进入 Xcode 应用程序位置进入 iphone 模拟器 sdk 目录]

    cd '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/'

    [将“iPhoneSimulator7.0.sdk”目录移动到另一个位置(我选择了桌面)]

    echo [在此处输入管理员密码] | sudo -S mv iPhoneSimulator7.0.sdk/${HOME}/Desktop

    [将“iPhoneSimulator6.1.sdk”重命名为“iPhoneSimulator7.0.sdk”]

    echo [在此处输入管理员密码] | sudo -S mv iPhoneSimulator6.1.sdk/ iPhoneSimulator7.0.sdk/

    =============================================

    第 3 步 = 我创建了执行我的测试的第三个作业。我的第二份工作下游的第三份工作。

    =============================================

    第 4 步 = 我创建了第 3 个作业的下游作业。第 4 个作业使用 bash 脚本,该脚本执行以下操作:

    [进入 Xcode 应用程序位置进入 iphone 模拟器 sdk 目录]

    cd '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/'

    [将“iPhoneSimulator7.0.sdk”重命名为“iPhoneSimulator6.1.sdk”]

    echo [在此处输入管理员密码] | sudo -S mv iPhoneSimulator7.0.sdk/ iPhoneSimulator6.1.sdk/

    [转到您移动“iPhoneSimulator7.0.sdk”的目录(在我的情况下,我将“iPhoneSimulator7.0.sdk”移动到桌面)]

    cd ${HOME}/桌面

    [将'iPhoneSimulator7.0.sdk'目录移回Xcode app sdk目录]

    echo [在此处输入管理员密码] | sudo -S mv iPhoneSimulator7.0.sdk/'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/'

    [我杀死所有与自动化相关的挥之不去的进程]

    ps ax|grep [b]ash|awk '{print $1}'|xargs kill -9

    ps ax|grep [i]nstruments|awk '{print $1}'|xargs kill -9

    =============================================

    我可能需要让这个过程更简单,但我认为它比在自动化机器上拥有多个 xcode 实例更好。

    【讨论】:

    • 如果您打算编辑我​​的帖子,请确保格式正确,以免线条相互碰撞
    • 我还通过使用名为 Parameterized Trigger Plugin 的 Jenkins 插件使这个过程更加简化。
    猜你喜欢
    • 2011-07-04
    • 2015-04-29
    • 2016-07-28
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多