RoboVM 的最低 iOS 版本支持

Minimum iOS version support for RoboVM

我刚刚尝试使用 "iOS Device App" 启动配置在我的 iPod Touch(2ng 代)上启动我使用 RoboVM 构建的应用程序。它为 "thumbv7" 目标进行了完整构建,上传了一些文件,并在 VerifyingApplication 步骤中停止并显示以下消息:

'Launching ...' has encountered a problem.
An internal error occurred during: "Launching ...".
DeviceOSVersionTooLow

我的 iPod 是 运行 iOS v4.2.1 (8C148) 并且我的应用程序(至少我写的部分)仅使用从 iOS 3.1 或更早版本开始可用的功能(CADisplayLink 是我使用最多 "advanced" 的功能)。

这给我留下了以下问题:

正如 Mario Zechner 在链接 post 中解释的那样,RoboVM 目前支持 iOS 7 及更高版本,也可以非正式地支持 iOS 6。

https://groups.google.com/d/msg/robovm/u6hk8kSFfuY/XEtQayXW6_sJ

经过更多的挖掘和测试,我现在想出了(我认为是)这个问题的几乎完整的答案。

快速免责声明:我仍在使用 RoboVM v1.5 和 Xcode v6.4,因为它们可以很好地满足我的需求,而且我坚信 "if it ain't broke, don't fix it".所以,这里的一些信息可能已经过时了。

有两个因素在起作用:对特定设备平台(ARMv6、ARMv7 等)的支持以及对特定版本 iOS 的支持。

RoboVM 很早就放弃了对 ARMv6 的编译器支持,因此除了使用旧安装的 RoboVM 编译应用程序版本之外,支持 ARMv6 设备的工作不多now-a-days。

iOS版本支持比较灵活:

v1.0 beta 4 起,RoboVM 的 Info.plist.xml 支持名为 MinimumOSVersion 的条目,例如:

<key>MinimumOSVersion</key>
<string>5.0</string>

此条目确定是否允许在设备上安装应用程序。如果您将其设置为高于设备 OS 版本并尝试在设备上执行该应用程序,您将在启动期间收到以下错误消息:

Launch failed. Check the RoboVM console for more information.
 DeviceOSVersionTooLow

因此,我假设此设置还决定了该应用程序是否在特定设备的 iTunes 商店中提供。

如果不指定这个键值,以前默认为5.0,但是to fix some issue with XCode 7,去年9月份默认改为6.0。

请注意,此设置显然不能保证该应用 将 运行 在给定设备上。

理论到此为止。现在进行一些实际实验:

我能够将 iPhone 3GS 降级到 iOS v4.1.1 并尝试 运行 最简单的 RoboVM hello world 应用程序 OS版本设置为 4.1。该应用程序可以正常安装,但在启动时会立即崩溃,而 Eclipse 控制台没有任何调试日志。将 phone 升级回 iOS v6.1.6 后,应用程序 运行 正常。因此,即使在 ARMv7 设备上,RoboVM v1.5(和更高版本,我假设)不再支持 v4.1.1(可能更低)

我还得到了 iPad 1 运行ning iOS v5.1.1,即 the latest available version of iOS for this device。将最低 OS 版本设置为 5.1.1,我的完整游戏应用程序可以安装并且 运行 在设备上运行良好。但是,当 RoboVM 尝试从 IDE 启动应用程序时,在设备上安装应用程序后启动失败并出现以下异常:

AppLauncher failed with an exception:
java.lang.RuntimeException: Launch failed: Unexpected response '' to command 'QListThreadsInStopReply'
    at ...

我可以 运行 然后单击应用程序的图标,它可以正常工作,只是调试它(就像在 Eclipse 控制台中看到 System.out 一样)不起作用。

结论:

通过在Info.plist.xml中将MinimumOSVersion设置为5.1.1,RoboVM v1.5搭配Xcodev6.4可以支持all iOS 具有 ARMv7 或更好处理器的设备,前提是它们 运行 iOS v5.1.1 或更好(iOS v5.1.1 适用于所有 ARMv7 或更好的设备) .

因此,此设置可以支持 所有 iOS 2009 年或之后发布的设备,仅排除前两个 iPhone(1 和 3G ) 和 iPod Touch(第一代和第二代)。从 iPhone 3GS 开始可以支持 iPhone,从第三代开始可以支持 iPod Touch,并且可以支持所有 iPad。

要全面了解 iOS 设备,您可以查看 iOSSupportMatrix