我很高兴看到另一个人正在尝试使用 Meteor 构建混合应用程序/扩展 Meteor Cordova iOS 应用程序,因为我面临着同样的问题。所以我很高兴与大家分享我的经验和方法。:-)
到目前为止,我最终采用了以下方法:
我使用流星构建为我的 iOS 应用程序创建了一个基本模板(不是流星运行 ios-device,因为我不知道 Meteor 是否对生产代码进行了一些优化)。
然后,我将 /platforms/ios 下的整个 Xcode 项目复制到另一个位置,并从那时起将这个新项目用作我的“主”项目。这个项目正在丰富本机代码,例如它还包括我需要的 Cocoa Pods。
当然,我也不想每次触发新的 Meteor 构建时都复制文件。至少,我希望更新 Staging/www 文件夹,因为这种情况经常发生。
所以我的第一个(相当天真的)方法是
- 删除主项目中的 Staging/www 文件夹
- 将其替换为 .meteor/local/.../ios/ 项目中的 Staging/www 文件夹的相对链接(使用 Xcode 的链接功能)
这种方法不起作用,因为 Meteor Xcode 项目中使用的 shell 脚本无法处理这些链接。
我的第二种方法是在文件系统级别创建符号链接。这可以正常工作,并且我可以在 Xcode 中按应有的方式构建项目。
我本可以对 Cordova 插件文件夹采用相同的方法,但我决定手动替换插件以便更好地控制它们,即使这意味着更多的努力。
拥有符号链接也意味着 Xcode 的版本管理(以及我用于所有内容的 SVN)将忽略 Staging/www 下的所有内容,这在我看来很好,因为我已经在 Meteor 项目中对 webapp 代码进行版本控制本身。
顺便说一句:我也在 Meteor 论坛上开始了一个关于混合移动应用程序的讨论线程,但到目前为止它并没有引起太大的吸引力:
https://forums.meteor.com/t/building-a-hybrid-meteor-cordova-app-share-experiences/8212
也许我们可以在那里跟进 Meteor 特定的事情,让 Meteor 社区参与讨论?
编辑:我也想分享一个完全失败的方法,至少对我来说,也许我太笨了......在我使用 Meteor 的 Xcode 模板作为起点之前,我也尝试过“反过来”,即我从我已经存在的 Xcode 应用程序项目开始,并尝试手动包含 Meteor 的 / Cordova 的部分。使用这种方法,我从未设法正确设置所有内容。我遇到了很多麻烦,还不得不调整很多编译器/链接器标志,甚至可以编译代码。这让我长出了很多白发。但即使在我设法编译所有内容之后,Meteor 在启动过程中仍然挂起——我从来不知道为什么。
我仍然面临的一个问题是 Meteor 的热代码推送功能在 iOS 上似乎存在一些严重问题,这些问题也被记录为 GitHub 问题。iOS应用程序可能会完全损坏并需要重新安装。我尝试了 mdg:reload-on-resume 包,但这并没有按预期工作,并且使事情变得更糟。据我从 GitHub 讨论中得知,最好在 Meteor 团队解决这些问题之前禁用热代码推送。由于代码推送而完全破坏应用程序并不是我的用户所期望的。