所以,我继承了一个具有以下设置的游戏项目:
- 游戏本身的核心 SWF,使用 Haxe (3.0)/NME (4.0.2) 编写,利用 Starling 框架,使用 FlashDevelop 编译为 Flash 目标
- 处理各种设备通信需求的 AS3 包装器(例如检测设备功能、管理手机锁定状态和暂停游戏/静音音乐等)。这被编译成自己的 SWF (AIR 3.6),这是实际启动的,随后加载“核心”SWF 并将其添加到舞台。
- 该 AS3 SWF 随后使用 ADT(也是 AIR 3.6)与其资产(包括核心 SWF)一起打包成目标格式 (APK/IPA)。
尽管有一些奇怪的复杂性,但整个事情运行得很好。我们创建了功能性、可用的应用程序,这些应用程序 a) 可在 Android 和 iOS 设备上运行,并且 b) 通过提交标准。
快进几个月;该游戏现已通过测试版,并准备好首次发布。安卓,一切顺利。另一方面,iOS……就在我们尝试将 1.0 上传到 iTunes Connect 的前几天,Apple 改变了他们的要求。突然,我们收到错误消息“提交到 App Store 的应用程序和应用程序更新必须使用 Xcode 5.1.1 或更高版本以及 iOS 7 SDK 或更高版本的公共 (GM) 版本构建。不要提交使用 beta 构建的应用程序软件。” 好吧,这个错误在 9 月份让许多开发人员感到困惑。最终 Adobe 发布了 AIR 15,打包的 IPA 再次满足了苹果的提交要求。
不幸的是,更新到 AIR 15 扰乱了小程序。我们现在可以上传 IPA,但具有讽刺意味的是,它无法在 iOS 设备上运行。加载屏幕(由纯 AS3“包装”SWF 生成)出现,但是当标题屏幕(由“核心”SWF 生成)应该出现时,什么都没有。黑屏,没有活动,或者(在以后的一些尝试中),即时,无消息的应用程序消失)。在 iOS 控制台上没有产生错误,在 FDB 中单步执行应用程序时没有发生任何不愉快的事情(直到应用程序消失并且 FDB 失去与远程主机的连接)。
其他重要信息:
我已经尝试更新过程中涉及的每个组件,包括 AIR 15 和 16 beta 的各种更新。所有列出的 haxelib。我们甚至尝试将“核心”项目(以最粗略的方式)移植到 OpenFL。所有这些都导致了适用于 Windows(桌面,而不是手机)的版本,适用于 Android,但不适用于 iOS。
Haxelib 库: 原始:
actuate: 1.6.4 [1.6.5]
air3: [0.0.1]
haxelib_client: [3.1.0-rc.3]
hxcpp: [3.0.2]
nme: [4.0.2]
openfl: [1.0.6]
openfl-tools: [1.0.10] 1.0.8
starling: [1.2.2]
swf: [1.0.2]
额外美味的崩溃:
actuate: 1.7.0 [1.7.5]
air3: [0.0.1]
haxelib_client: 3.1.0-rc.3 [3.1.0-rc.4]
hxcpp: 3.0.2 [3.1.39]
hxcs: [3.1.1]
lime: [2.0.0-alpha.4]
nme: [4.0.2] 5.1.8
openfl-compatibility: [1.0.1]
openfl-html5: [1.4.2-beta]
openfl-native: [1.4.0]
openfl-tools: [1.0.10]
openfl: 1.1.1 2.0.1 [2.1.2]
starling: [1.2.2]
swf: 1.0.2 [1.5.2]
tl;dr:旧版本的 AIR 应用程序可在 iOS 上运行,但无法提交到 iTunes。可以提交新版本,但在 iOS 上不起作用(导致死机黑屏或崩溃)
任何帮助——关于问题可能是什么的建议,我们可能能够找出问题的其他方法,甚至是通过提交阻塞(例如重新签名)获得工作应用程序的方法——将不胜感激。目前,不得不在其他框架等中重新设计整个游戏是一个非常站不住脚的解决方案。对于一家非常有前途的独立游戏开发公司来说,这基本上是生死攸关的局面。