如何使共享逻辑可用于跨平台原生应用程序?

How to make shared logic usable for cross-platform native apps?

所以我目前正在将 Xamarin 用于多平台移动应用程序。我真的很喜欢它的工作方式,我想改善我的流程。我的开发人员说他们在本地编程时会快得多(即 Swift for iOS in XCode)。

我一直在寻找一种解决方案,我可以在其中创建共享项目并在本机应用程序中使用它,但我只找到了针对所有平台使用一种语言进行编程的方法。

有没有办法创建一个共享项目,它可以导入到本机应用程序中(或者更好,可以 运行 在一起,就像 Xamarin 中的共享项目一样)?

共享代码的语言并不重要,只要它不慢即可。

您可以通过 Binding Libraries 在 Xamarin 应用程序中使用本机代码。您不能在本机应用程序中使用 Xamarin 库。

My developers have said that they would be much faster when programming natively (i.e. Swift for iOS in XCode)

Swift 可原生用于 iOS 个应用。 RemObjects' Silver 应该让 Swift 为 Android 和 .NET 做好准备。我从来没有测试过它。试试吧,它是免费的。

RoboVM 可用于在 Java 中编写 iOS 个应用程序。我也没试过。

与 Xamarin 的语言混合

如果您想使用 Xamarin 将 Swift 代码与 C# 代码混合,那么您可以 bind Objective-C compatible Swift code 并仅在 iOS 项目中使用它.您无法在 Android 或 Windows Phone 上执行 Swift 代码!不可能在 Swift 中编写平台独立的业务逻辑并在共享库或 PCL 中使用 Xamarin。

对于 Android 上的 Java 代码,您面临相同的限制:您可以绑定 JAR 并在 Xamarin.Android 项目中使用它们,但不能在 iOS 上使用它们或 Windows Phone.

您也无法在 iOS 基于 Swift 的应用程序或 Android.

基于 Java 的应用程序中执行 C# 代码

如果目标是使用真正的本地工具,使用他们的标准语言(不是 Xamarin)并且仍然在 iOS 和 Android 之间共享代码,这可以通过编写非UI C++ 代码。

Here's a very interesting article 关于 Dropbox 是如何做到这一点的。

C++ is natively supported on iOS and it is very easy to interface between Objective-C and C++ using Objective-C++.

On Android, calling into C++ can be done through the NDK, which reportedly is not a pleasure to use. Dropbox found Google’s meta-build system gyp to work reasonably well. In addition, the Java Native Interface is a pain you have to accept. But none of these issues is a roadblock, and Steven expressed hope that Google or the community will build better tooling support over time.

And here's a simple example 如何从另一个 Whosebug 做到这一点 post