生成跨平台应用程序概述

本指南首先介绍 Xamarin 平台。 其中会讨论如何生成跨平台应用程序以最大化代码重用。 最后,介绍如何在 iOS 和 Android 移动平台上提供高质量的本机体验。

本文档中使用的方法可用于生产力应用和游戏应用,但重点是生产力和实用工具(非游戏应用程序)。 有关跨平台游戏开发指南,请参阅 Visual Studio Tools for Unity

“一次编写,随处运行”这句话经常被用来赞美无需修改即可在多个平台上运行的单个代码库的优点。 虽然具有代码重用的优点,但该方法也存在缺点。 两个常见的缺点是应用程序具有最低公分母功能集,以及普通外观的用户界面,而不能很好地适应任何目标平台。

Xamarin 不仅仅是一个“一次编写、随处运行”的平台,因为它的优势之一是能够专门为每个平台实现本机用户界面。 但是,经过深思熟虑的设计,用户仍可以共享大部分非用户界面代码并获得两全其美的效果。 编写一次数据存储和业务逻辑代码,并在每个平台上呈现本机 UI。 本文档讨论了实现此目标的通用体系结构方法。

下面是创建 Xamarin 跨平台应用程序的要点摘要:

  • 使用 C # - 使用 C# 编写应用。 用 C# 编写的现有代码可以通过 Xamarin 轻松移植到 iOS 和 Android,并在 Windows 应用中使用。
  • 利用 MVC 或 MVVM 设计模式 - 使用模型/视图/控制器模式开发应用程序的用户界面。 使用模型/视图/控制器方法或模型/视图/视图模型方法架构应用程序,其中“模型”与其余部分之间有明显的分离。 确定应用程序的哪些部分将使用每个平台(iOS、Android、Windows、Mac)的本机用户界面元素,并以此为准则将应用程序分为两个组件:“核心”和“用户界面”。
  • 生成本机 UI - 每个操作系统特定的应用程序提供不同的用户界面层(在本机 UI 设计工具的帮助下用 C# 实现)
  1. 在 iOS 上,使用在 Xcode 中创建的情节提要作为表示层,通过 UIKit API 创建具有本机外观的应用程序。
  2. 在 Android 上,利用 Xamarin 的 UI 设计器,通过 Android.Views 创建具有本机外观的应用程序。
  3. 在 Windows 上,使用在 Visual Studio 或 Blend 的 UI 设计器中创建的 XAML 作为表示层。
  4. 在 Mac 上,使用在 Xcode 中创建的情节提要作为表示层。

Xamarin.Forms 项目在所有平台上均受支持,并允许使用 Xamarin.Forms XAML 创建可跨平台共享的用户界面。

代码重用量在很大程度上取决于共享核心中保留的代码数量以及用户界面特定的代码数量。 核心代码是不直接与用户交互的任何代码,而是为应用程序中收集和显示此信息的部分提供服务。

为了增加代码重用量,可以采用跨平台组件来跨所有这些系统提供通用服务,例如:

  1. SQLite-net,用于本地 SQL 存储;
  2. Xamarin 插件,用于访问设备特定的功能,包括相机、联系人和地理位置;
  3. NuGet 包,与 Json.NET 等 Xamarin 项目兼容;
  4. 将 .NET Framework 功能用于网络、Web 服务、IO 等。

其中一些组件在 Tasky 案例研究中实现

将可重用代码隔离到核心库中

通过遵循责任分离原则,对应用程序体系结构进行分层,然后将与平台无关的核心功能移动到可重用的核心库中,可以最大程度地跨平台共享代码,如下图所示:

By following the principle of separation of responsibility by layering your application architecture and then moving core functionality that is platform agnostic into a reusable core library, you can maximize code sharing across platforms

案例研究

本文档附带一个案例研究 – Tasky Pro。 每个案例研究讨论了本文档中所述概念在真实示例中的实现。 代码是开源的,可在 github 上获取。