混合 cordova web 和原生 iOS 代码

Posted

技术标签:

【中文标题】混合 cordova web 和原生 iOS 代码【英文标题】:Mixing cordova web and native iOS code 【发布时间】:2016-09-08 17:23:46 【问题描述】:

我继承了一个将 Web 代码与本机代码混合的 Cordova 项目。

我使用的是cordova CLI 6.3.1,cordova ios平台版本是3.9.2。

在工作时,我在控制台中遇到了这个警告。

将此版本的 Cordova 与旧版本的 cordova-ios 一起使用是 被弃用。考虑升级到 cordova-ios@4.0.0 或更高版本。

但是,当我尝试使用 cordova platform update ios --save 更新 ios 平台版本时,它会完全清除“平台”文件夹中的所有文件 - 目前包括所有自定义 iOS 项目文件,即自定义类等等。

我们的项目设置是否存在根本问题? 混合和匹配cordova web 和本机iOS 代码的推荐方法是什么,以便更新cordova ios 平台不会破坏一切?

【问题讨论】:

【参考方案1】:

通常,/platforms 下的文件是根据在/www 中所做的更改动态生成的。运行cordova prepare ioscordova build ioscordova platform update ioscordova run ios,将始终核对platforms/ios 文件夹并根据/www 撤消它。

您提到您的项目具有自定义本机代码。该本机代码是作为cordova插件构建的吗?如果是这样,那么您应该很好地遵循标准工作流程。在/www 工作。测试您的项目cordova run ios

如果没有,您可能需要考虑重构作为插件的本机代码。

以plugin's 代码结构为例。 关注guide,了解如何开始开发插件。

【讨论】:

确切地说,本机代码并非都是插件。所以通常你会期望所有的原生代码都是一个插件?? 我的意见是,应该。这样,如果您想支持一个额外的平台,您只需将功能添加到您的插件中,并且网络代码库保持不变。该插件充当您的界面,应该是唯一改变的东西。 在我的情况下,另一个平台可能是 android,对吧?在这种情况下,您需要编写一个全新的插件,不是吗?我有点希望在运行您提到的命令类型后,从平台文件夹之外的某个位置复制非插件本机代码会有一些约定。不幸的是,显然不是。 是的。 iOS、安卓、Windows 手机。这些都是 Cordova 支持的平台。你不需要重写你的插件。您只需要在插件定义中添加另一个条目即可包含您支持的新平台。请参阅我的更新答案以获取一些链接。

以上是关于混合 cordova web 和原生 iOS 代码的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何以编程方式将视图添加到情节提要视图

在混合 Cordova iOS 应用程序中使用 iosrtc 插件的问题

使用 Cordova 进行混合移动应用程序开发

我可以将原生 GoogleMap 添加到我的 Cordova 混合应用程序吗?

Cordova+vue 混合app开发创建Cordova项目

Cordova+vue 混合app开发创建Cordova项目