Часть 1. Понимание платформы Xamarin Mobile

Платформа Xamarin состоит из множества элементов, позволяющих разрабатывать приложения для iOS и Android:

  • Язык C# — позволяет использовать знакомый синтаксис и сложные функции, такие как generics, LINQ и библиотека параллельных задач.
  • Mono .NET Framework — предоставляет кроссплатформенную реализацию обширных функций в платформе .NET Майкрософт.
  • Компилятор— в зависимости от платформы создает собственное приложение (например, iOS) или интегрированное приложение и среду выполнения .NET (например, Android). Компилятор также выполняет множество оптимизаций для мобильного развертывания, например связывание неиспользуемого кода.
  • Средства интегрированной среды разработки — Visual Studio в Mac и Windows позволяют создавать, создавать и развертывать проекты Xamarin.

Кроме того, поскольку базовый язык — C# с платформой .NET, проекты можно структурировать для совместного использования кода, который также можно развернуть в Windows Телефон.

Внутренняя структура

Хотя Xamarin позволяет создавать приложения в C#и совместно использовать один и тот же код на нескольких платформах, фактическая реализация в каждой системе отличается.

табличных переменных

Источник C# делает свой путь в собственное приложение различными способами на каждой платформе:

  • iOS — C# заранее компилируется (AOT) на языке сборок ARM. Платформа .NET включена, при этом неиспользуемые классы будут удалены во время связывания, чтобы уменьшить размер приложения. Apple не разрешает создание кода среды выполнения в iOS, поэтому некоторые языковые функции недоступны (см . ограничения Xamarin.iOS).
  • Android — C# компилируется в IL и упаковается с помощью MonoVM + JIT'ing. Неиспользуемые классы в платформе удаляются во время связывания. Приложение выполняется параллельно с Java/ART (среда выполнения Android) и взаимодействует с собственными типами через JNI (см . ограничения Xamarin.Android).
  • Windows — C# компилируется в IL и выполняется встроенной средой выполнения и не требует средств Xamarin. Проектирование приложений Windows после руководства Xamarin упрощает повторное использование кода в iOS и Android. Универсальная платформа Windows также имеет параметр .NET Native, который ведет себя аналогично компиляции AOT Xamarin.iOS.

Документация по компоновщику для Xamarin.iOS и Xamarin.Android содержит дополнительные сведения об этой части процесса компиляции.

Следует избежать динамического создания кода System.Reflection.Emit во время выполнения компиляции.

Ядро Apple предотвращает динамическое создание кода на устройствах iOS, поэтому создание кода на лету не будет работать в Xamarin.iOS. Аналогичным образом функции динамической языковой среды выполнения нельзя использовать с инструментами Xamarin.

Некоторые функции отражения работают (например, MonoTouch.Dialog использует его для API Рефлексия ion), но не для создания кода.

Доступ к пакету SDK для платформы

Xamarin делает функции, предоставляемые пакетом SDK для конкретной платформы, легко доступны с помощью знакомого синтаксиса C#:

  • iOS — Xamarin.iOS предоставляет платформы пакета SDK Для Apple CocoaTouch в качестве пространств имен, на которые можно ссылаться на C#. Например, платформа UIKit, содержащая все элементы управления пользовательским интерфейсом, можно включить в простую using UIKit; инструкцию.
  • Android — Xamarin.Android предоставляет пакет SDK Для Android Google в качестве пространств имен, поэтому вы можете ссылаться на любую часть поддерживаемого пакета SDK с помощью инструкции using, например using Android.Views; для доступа к элементам управления пользовательским интерфейсом.
  • Приложения Windows — Windows создаются с помощью Visual Studio в Windows. Типы проектов включают Windows Forms, WPF, WinRT и универсальная платформа Windows (UWP).

Простая интеграция для разработчиков

Красота Xamarin заключается в том, что, несмотря на различия под капотом, Xamarin.iOS и Xamarin.Android (в сочетании с пакетами SDK для Windows Майкрософт) предлагают простой интерфейс для написания кода C#, который можно повторно использовать на всех трех платформах.

Бизнес-логика, использование баз данных, сетевой доступ и другие распространенные функции можно записывать один раз и повторно использовать на каждой платформе, обеспечивая основу для пользовательских интерфейсов, которые выглядят и выполняются как собственные приложения.

Доступность интегрированной среды разработки (IDE)

Разработка Xamarin может выполняться в Visual Studio в Mac или Windows. Выбранная интегрированная среда разработки определяется платформами, на которые вы хотите нацелиться.

Так как приложения Для Windows можно разрабатывать только в Windows, для сборки для iOS, Android и Windows требуется Visual Studio для Windows. Однако можно совместно использовать проекты и файлы между компьютерами Windows и Mac, поэтому приложения iOS и Android можно создавать на компьютере Mac, а общий код можно добавить в проект Windows.

Требования к разработке для каждой платформы подробно рассматриваются в руководстве по требованию .

iOS

Для разработки приложений iOS требуется компьютер Mac под управлением macOS. Вы также можете использовать Visual Studio для записи и развертывания приложений iOS с помощью Xamarin в Visual Studio. Однако mac по-прежнему необходим для целей сборки и лицензирования.

Интегрированная среда разработки Xcode Apple должна быть установлена для предоставления компилятора и симулятора для тестирования. Вы можете протестировать на своих устройствах бесплатно, но для создания приложений для распространения (например, в App Store) необходимо присоединиться к программе разработчиков Apple ($99 USD в год). Каждый раз, когда вы отправляете или обновляете приложение, оно должно быть проверено и утверждено Apple, прежде чем оно будет доступно для пользователей для скачивания.

Код написан с помощью интегрированной среды разработки Visual Studio и макетов экрана можно создавать программным способом или изменять с помощью Xcode на Компьютере Mac.

Дополнительные инструкции по настройке см. в руководстве по установке Xamarin.iOS.

Android

Разработка приложений Android требует установки пакетов SDK для Java и Android. Пакеты SDK предоставляют компилятор, эмулятор и другие средства, необходимые для создания, развертывания и тестирования. Java, пакет SDK Для Android Google и средства Xamarin можно установить и запустить в Windows и macOS. Рекомендуется использовать следующие конфигурации:

  • Windows 10 с Visual Studio 2019
  • macOS Mojave (10.11+) с Visual Studio 2019 для Mac

Xamarin предоставляет единый установщик, который настроит систему с необходимыми инструментами Java, Android и Xamarin (включая визуальный конструктор для макетов экрана). Подробные инструкции см. в руководстве по установке Xamarin.Android.

Вы можете создавать и тестировать приложения на реальном устройстве без каких-либо лицензий от Google, однако распространять свое приложение через магазин (например, Google Play, Amazon или Barnes & Noble) плата за регистрацию может быть выплачена оператору. Google Play мгновенно опубликует свое приложение, а другие магазины имеют процесс утверждения, аналогичный Apple.

Windows

Приложения Windows (WinForms, WPF или UWP) создаются с помощью Visual Studio. Они не используют Xamarin напрямую. Однако код C# можно совместно использовать в Windows, iOS и Android. Посетите Центр разработки Корпорации Майкрософт, чтобы узнать о средствах, необходимых для разработки Windows.

Создание пользовательского интерфейса

Ключевым преимуществом использования Xamarin является то, что пользовательский интерфейс приложения использует собственные элементы управления на каждой платформе, создавая приложения, неотличимые от приложения, написанного в Objective-C или Java (для iOS и Android соответственно).

При создании экранов в приложении можно разместить элементы управления в коде или создать полные экраны с помощью средств разработки, доступных для каждой платформы.

Создание элементов управления программным способом

Каждая платформа позволяет добавлять элементы управления пользовательского интерфейса на экран с помощью кода. Это может занять много времени, так как может быть трудно визуализировать завершенный дизайн при жестком кодировании координат пикселей для позиций и размеров элементов управления.

Программное создание элементов управления имеет преимущества, особенно в iOS для создания представлений, которые изменяют размер или отображаются по-разному в i Телефон и размерах экрана iPad.

Визуальный конструктор

Каждая платформа имеет другой метод визуального размещения экранов:

  • iOS — раскадровки содержат несколько представлений и элементов управления, к ним можно получить доступ . Раскадровка файла, включенного в проект.
  • Android — Xamarin предоставляет конструктор пользовательского интерфейса перетаскивания Android для Visual Studio.
  • Windows — Корпорация Майкрософт предоставляет конструктор пользовательского интерфейса перетаскивания в Visual Studio и Blend. Макеты экрана хранятся как . XAML-файлы.

На этих снимках экрана показаны визуальные конструкторы экранов, доступные на каждой платформе:

These screenshots show the visual screen designers available on each platform

Во всех случаях элементы, создаваемые визуально, можно ссылаться на код.

Рекомендации по пользовательскому интерфейсу

Ключевым преимуществом использования Xamarin для создания кроссплатформенных приложений является то, что они могут использовать собственные наборы средств пользовательского интерфейса для представления знакомого интерфейса пользователю. Пользовательский интерфейс также будет выполняться так же быстро, как и любое другое собственное приложение.

Некоторые метафоры пользовательского интерфейса работают на нескольких платформах (например, все три платформы используют аналогичный элемент управления прокруткой списка), но для того, чтобы приложение "чувствовало" правильно, пользовательский интерфейс должен использовать преимущества элементов пользовательского интерфейса для конкретной платформы при необходимости. Примеры метафор пользовательского интерфейса для конкретной платформы:

  • iOS — иерархическая навигация с мягкой кнопкой назад, вкладки в нижней части экрана.
  • Android — кнопка "Назад" или "Программное обеспечение системы", меню действий, вкладки в верхней части экрана.
  • Приложения Windows — Windows могут работать на настольных компьютерах, планшетах (таких как Microsoft Surface) и телефонах. Устройства с Windows 10 могут иметь аппаратные кнопки "Назад" и динамические плитки, например.

Рекомендуется ознакомиться с рекомендациями по проектированию, относящимися к целевым платформам:

Повторное использование библиотеки и кода

Платформа Xamarin позволяет повторно использовать существующий код C# на всех платформах и интеграцию библиотек, написанных в собственном коде для каждой платформы.

Исходные и библиотеки C#

Так как продукты Xamarin используют C# и платформу .NET, в проектах Xamarin.iOS или Xamarin.Android можно повторно использовать множество существующих исходных кодов (как открытый код, так и внутренних проектов). Часто источник можно просто добавить в решение Xamarin, и он будет работать немедленно. Если была использована неподдерживаемая функция платформы .NET, могут потребоваться некоторые настройки.

Примеры источника C#, который можно использовать в Xamarin.iOS или Xamarin.Android, включают: SQLite-NET, NewtonSoft.JSON и SharpZipLib.

Objective-C Привязки и проекты привязки

Xamarin предоставляет средство с именем btouch , которое помогает создавать привязки, позволяющие Objective-C использовать библиотеки в проектах Xamarin.iOS. Дополнительные сведения о том, как это сделать, см. в документации по типам привязкиObjective-C.

Примеры Objective-C библиотек, которые можно использовать в Xamarin.iOS, включают: сканирование штрихкодов RedLaser, Google Analytics и интеграция PayPal. Привязки Xamarin.iOS с открытым кодом доступны на сайте GitHub.

.jar привязки и проекты привязки

Xamarin поддерживает использование существующих библиотек Java в Xamarin.Android. Дополнительные сведения об использовании библиотеки Java см. в документации по привязке библиотеки Java. JAR-файл из Xamarin.Android.

Привязки Xamarin.Android с открытым исходным кодом доступны на сайте GitHub.

C через PInvoke

Технология "Вызов платформы" (P/Invoke) позволяет управляемому коду (C#) вызывать методы в собственных библиотеках, а также поддерживать собственные библиотеки для обратного вызова в управляемый код.

Например, библиотека SQLite-NET использует такие инструкции:

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

Это привязывается к собственной реализации SQLite на языке C в iOS и Android. Разработчики, знакомые с существующим API C, могут создать набор классов C# для сопоставления с собственным API и использовать существующий код платформы. Существует документация по связыванию собственных библиотек в Xamarin.iOS, аналогичные принципы применяются к Xamarin.Android.

C++ через CppSharp

Мигель объясняет CXXI (в настоящее время называется CppSharp) в своем блоге. Альтернативой привязке к библиотеке C++ является создание оболочки C и привязка к ней через P/Invoke.