【问题标题】:Can xamarin apps be built for Windows, MacOS with same source code?可以为具有相同源代码的 Windows、MacOS 构建 xamarin 应用程序吗?
【发布时间】:2019-10-14 20:45:41
【问题描述】:

给定一个用 C# 为 Xamarin 编写的应用程序,是否可以将其构建为在所有受支持的平台(包括 Android、iOS、MacOS、Windows)上运行且只需极少的更改?

我意识到 Xamarin 声称 90% 的代码可以跨平台共享(并且 10% 需要自定义),我指的是“90%”。

我不明白这 90% 是否可以在不同的 Xamarin 工具之间共享,例如Xamarin.Forms 和 Xamarin.Mac 或者如果它们是具有不同 API 的完全不同的工具,等等。

例如,我看到使用 Xamarin.Forms 可以为 iOS、Android 和 Windows 构建。但不是 MacOS。那么,在 Mac 上,我可以安装 Xamarin.Mac,然后为 MacOS 构建相同的应用程序吗?

【问题讨论】:

  • 这个问题或多或少是基于意见的。所以在某种程度上你可以为 macOS 构建,但它是 beta 版,有很多错误(这可能会在将来修复)并且看起来很糟糕(不太可能很快被修复)。因此,对于某些事情,它可能是可以的,对于某些事情来说,没有一个普遍的答案,它是基于意见的......
  • 并不是主观的。请参阅我在第 3 段中的问题,现在以斜体显示。

标签: xamarin platform


【解决方案1】:

您可以为基于 Xamarin.Forms 的 UI 添加 MacOS 目标,当然,这是通过 Visual Studio for Mac 完成的:

Forms 中的某些项目在 MacOS 上的功能不完整,因此它仍处于“预览”版本中,这些项目已在“平台支持 macOS 状态”wiki 中列出:

【讨论】:

    【解决方案2】:

    Xamarin.Forms 是允许您在 Android、iOS 和 UWP 之间创建跨平台应用程序的框架。根据我的经验,Xamarin.Forms 的许多功能不会转移到 Xamarin.Android。事实上,为 UI Xamarin.Forms 完成的大部分事情不会转移到 Xamarin.iOS 和 Xamarin.Android。大多数时候,当我找到适用于 Xamarin.Forms 的解决方案并尝试在 Xamarin.Android 中做同样的事情时,我最终只是自己从头开始在 Xamarin.Android 中找出问题。

    当他们说 90% 是共享的时,他们的意思是在 Xamarin.Forms... 90% 的模型工作和背后的代码可以在项目之间共享(在 Xamarin.Forms 解决方案中)和 10%必须针对每个平台(UWP、Android、iOS)进行定制

    编辑:为了以后的澄清,你需要一个 iOS 设备或一个 iOS 虚拟机来编译 iOS 上的代码

    若要在 Windows 上使用 Visual Studio 2019 构建 Xamarin.iOS 应用,您将 需要:

    A Windows machine with Visual Studio 2019 installed. 
    

    这可以是物理机或虚拟机。 Windows 系统要求

    A network-accessible Mac set up with Apple's build tools and Xamarin.iOS.
    

    Visual Studio 2019 通过网络访问这台机器 连接以使用 Apple 的构建工具,这些工具是 编译原生 iOS 应用程序。 Mac 系统要求

    来源:https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/windows/?pivots=windows

    【讨论】:

    • 所以,使用不同的 Xamarin 工具,例如.Forms、.Mac 允许您构建相同的源代码以在不同平台上生成应用程序。或者它们是完全独立的环境,具有不同的 API?
    • @PeriHartman 一些代码可以跨平台重用。你的大部分模型和任何纯 .NET 的东西都可以在所有 Xamarin 平台上完全转移。当您开始构建 UI 时,最大的差异就出现了。带有 Android 项目的 Xamarin.Forms 与纯 Xamarin.Android 项目不同,与 Xamarin.iOS 相同,例如,Xamarin.Forms 支持数据绑定到 UI 没有任何第三方库,而我不相信你可以使用 Xamarin.Android 做到这一点,因此这是无法转换的差异的主要示例。
    • 谢谢,这有帮助。我想我要完全理解,我需要构建一些东西。但这给了我尝试这一步的动力。
    • 嘿,作为一个快速澄清,我认为您实际上可以在 Xamarin.Android 中进行数据绑定,而无需第三方库。虽然有很大的不同。 Xamarin.Forms 数据绑定更容易执行,并且更适合该类型的项目;它几乎与 WPF 中的数据绑定相同,而且更流畅。
    • 对在事后阅读这篇文章的人来说是的。我在这里闻到了一些先入为主的观念。澄清。是的,截至今天,您可以构建一个开箱即用的应用程序,该应用程序将在 Windows、Web、OSX、Linux、WPF、Android 和 OSX 上运行。您只有一个“主”项目,其中包含在所有平台上为您编译的所有逻辑。您可以使用 XAML 来设计您的布局,就像 WPF 一样,并且此布局适用于所有设备。需要进行一些调整,但您可以使用特定于平台的 XAML 标记来解决这些问题。您可能需要在各自的库中弄乱手机的其他高级功能
    【解决方案3】:

    只要您使用 .Net 代码和 Xamarin.Forms,它就可以在每个项目中 100% 移植/共享。 Xamarin.Forms 目前处于 macOS 和 Windows WPF 测试版(但对于 UWP 不是测试版),特别是对于 macOS,它们没有真正的原生外观。

    Xamarin 确实支持使用本机接口和本机 API,无论何时这样做,它都是不可移植的。

    所以没有什么比 90% 更可共享的了,这可能是某些情况下的一些估计。它可以是 100% 可共享的,也可以是仅 10% 可共享的,具体取决于您的项目以及您对可共享 API 的坚持程度。

    【讨论】:

    • 好的,所以如果我为 Xamarin.Forms 编写应用程序,我可以使用其他 Xamarin 工具之一来构建它,例如Xamarin.Android? (我理解“90%”——当然,如果我使用本机 API,代码将无法移植。)
    猜你喜欢
    • 2022-07-11
    • 2021-12-04
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多