我开发了适用于iOS和Android的应用程序,而且我正在寻找在这两个平台之间共享代码的最佳方式。
我想要做的是以原生创建所有视图(UI部分),但共享逻辑代码(控制器+模型)。
在我发现的所有内容中,有3件事似乎相当不错:
1)C ++ - >使用c ++构建库文件对于逻辑,我将能够在2个平台中使用.dll文件
2)Azure移动应用服务。是否有可能成为网络服务中的所有逻辑?问题是,如果我没有访问互联网,我的应用程序将无法使用,对吧?
3)我听说过很多关于Facebook使用的React本机,但它似乎用于创建UI,但我更喜欢用原生的方式创建它。我可以只对逻辑做出反应吗?
答案 0 :(得分:14)
看起来你有三个选择:
你不能只有一个已编译的.dll,并期望它适用于iOS和Android。它们都必须在不同的体系结构中编译,并且必须是iOS上的静态库。
Dropbox以这种方式完成,他们已经提供了很多笔记和示例代码,以及您可以使用的代码,因此can take a look.
<强>赞成强>
•设置完毕后非常简单 •没有额外的依赖关系,错误等(如Xamarin / React Native)
<强>缺点强>
•设置和使用它需要大量的额外工作:您需要设置其他编译步骤并为两个平台编写包装器。
•尝试为两种不同的体系结构编译相同的代码时,您肯定会遇到的其他一些挑战
Here's a SO post on how to do it in detail...
在这种情况下,此选项似乎极端使用。您被迫使用C#并引入另一层依赖项和错误。你说你不想为UI使用其他语言,所以我不推荐它。
现在这是一个可行的选择。您可以在JS中编写脚本,并在Android和iOS中使用本机代码。
Here's an article on how to share code with code examples...
不幸的是,它使用React Native for UI,但您可以easily call React Native functions from native code.
使用它有很多不足之处,包括调用是异步的,因为它们是在另一个线程上执行的,所以你必须为返回某些东西的函数实现某种回调系统。
<强>赞成强>
•似乎易于设置和编写
<强>缺点强>
•您必须为每个返回内容的函数实现本机回调 •使用它有很多文件描述的垮台:
•事件可以从任何地方发送,他们可以介绍 意大利式风格的依赖项进入你的项目。
•事件共享命名空间,这意味着您可能会遇到某个名称 碰撞。什么使得碰撞不会被静态检测到 他们很难调试。
•如果您使用相同React Native组件的多个实例 你想区别于你的活动的角度, 您可能需要引入某种标识符并传递它们 以及事件(您可以使用本机视图的reactTag作为 标识符)。
我想我会选择C ++,主要是因为一家大公司(Dropbox)尝试过并成功实际使用它。你可以试试React Native作为一个实验,它会成为一个很好的研究案例!
答案 1 :(得分:2)
我说要把#&#34;核心&#34;逻辑进入一个单独的库是一种明智的方法。
您不是第一个想要这样做的人,我强烈建议您查看Djinni。它是实现这一目标的工具。您可以定义公共接口和数据类型并填充本机部分。可以通过两种方式进行沟通。
它并不像一次性写出整个东西那么容易,但它支持干净的设计,无论如何都可以从中受益。