А вы бы хотели всегда работать в одной среде? Так, чтобы не приходилось скакать туда-сюда по средам разработки и при использовании инструментов. До идеала, конечно, еще далеко, но IT-мир стремится к этому. Сегодня рассказываем о единой кросс-платформенной библиотеке API. Присоединяйтесь!



При разработке приложений для iOS и Android с помощью Xamarin разработчики могут обращаться к любым нативным API, используя C#. Эти привязки не только помогают использовать соответствующие API в C#, но и предоставляют мощные функции этого языка, такие как async/await, события, делегаты и т. д.

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

Xamarin.Essentials воплощает в реальность мечту о едином API для доступа к таким функциям, как геолокация, показания датчиков, безопасное хранилище и т. д., для любого приложения, созданного на Xamarin!


Интерфейсы API в Xamarin.Essentials


В ознакомительной версии, доступной уже сегодня, API-интерфейсы Xamarin.Essentials предоставляют доступ более чем к 25 нативным функциям из единой кросс-платформенной библиотеки API, к которой можно получить доступ из общего кода независимо от того, как создается пользовательский интерфейс. Это значит, что вы можете использовать API Xamarin.Essentials с помощью единственного приложения Xamarin.Android или приложения Xamarin.Forms, адаптированного для работы с iOS, Android и UWP. Несмотря на большое количество функций, эта библиотека полностью оптимизирована для максимально быстрой работы и минимального влияния на размер приложения, поскольку она защищена от компоновщика. Это говорит о том, что в ваше приложение будут включены только API и функции, которые вы используете, а все остальное будет удалено во время компиляции.

Ознакомительную версию библиотеки, в которой используется базовый набор кросс-платформенных API, можно установить в ваше приложение через NuGet:


Начальный набор API был определен на основе отзывов от разработчиков Xamarin о том, какие функции они хотели бы видеть в кросс-платформенной библиотеке API. Со временем мы будем расширять этот список.

Начало работы


Начать использовать API Xamarin.Essentials легко в любом существующем приложении, выполнив всего несколько простых шагов:

1. Откройте существующий проект или создайте новый, используя шаблон Blank App в Visual Studio C# (для Android, iPhone и iPad или кросс-платформенный).

2. Добавьте пакет Xamarin.Essentials NuGet к проекту:

  1. Visual Studio. В панели Solution Explorer щелкните правой кнопкой мыши на название решения и выберите Manage NuGet Packages. Найдите Xamarin.Essentials и установите пакет во ВСЕ проекты, включая iOS, Android, UWP и .NET Standard Libraries.
  2. Visual Studio для Mac. В панели Solution Explorer щелкните правой кнопкой мыши на название проекта и выберите Добавить > Добавить пакеты NuGet… Найдите Xamarin.Essentials и установите пакет во ВСЕ проекты, включая iOS, Android и .NET Standard Libraries.

3. Добавьте ссылку на Xamarin.Essentials в любом из классов C#, чтобы ссылаться на API.

using Xamarin.Essentials;

4. Xamarin.Essentials требует небольшой дополнительной настройки под проекты Android, чтобы получить доступ к специальным функциям:

Xamarin.Essentials необходимо инициализировать с помощью метода OnCreate в рамках MainLauncher или любого другого Activity в проекте Android:

Xamarin.Essentials.Platform.Init(this, bundle);

Чтобы обрабатывать разрешения среды выполнения на Android, Xamarin.Essentials должна получить любой OnRequestPermissionsResult. Добавьте следующий код ко всем классам Activity:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
 
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

Готово! Теперь вы можете начать использовать API Xamarin.Essentials в своем приложении. К каждому API прилагается полная документация, включая фрагменты кода, которые вы можете скопировать в свое приложение.

Обязательно прочитайте наше Руководство по началу работы для получения дополнительной информации.

Сборка компаса


Во время одного из моих выступлений на Microsoft Build 2018 я показал, как объединить возможности API Xamarin.Forms и Xamarin.Essentials, чтобы собрать кросс-платформенный компас менее чем за 10 минут. Это так же просто, как и добавить несколько изображений и небольшой пользовательский интерфейс для компаса в приложении:

	<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
 
    <Image HorizontalOptions="FillAndExpand"
           VerticalOptions="FillAndExpand"
           Source="compass.png"/>
 
    <Image HorizontalOptions="Center"
           VerticalOptions="Center"
           Source="arrow.png"
           x:Name="ImageArrow"/>
 
    <Label Grid.Row="1"
           x:Name="LabelInfo"
           VerticalOptions="Center" 
           HorizontalOptions="Center" />
</Grid>

Я смог использовать API компаса из Xamarin.Essentials в коде выше, чтобы регистрировать события, когда компас изменяет положение, обновлять текст метки и поворачивать изображение. Все это делается несколькими строками кода:

	using Xamarin.Forms;
using Xamarin.Essentials;
 
namespace MyCompass
{
    public partial class MainPage : ContentPage
	{
		public MainPage()
		{
			InitializeComponent();
 
            // Register for reading changes
            Compass.ReadingChanged += Compass_ReadingChanged;
        }
 
        void Compass_ReadingChanged(CompassChangedEventArgs e)
        {
            LabelInfo.Text = $"Heading: {e.Reading.HeadingMagneticNorth}";
            ImageArrow.Rotation = e.Reading.HeadingMagneticNorth;
        }
 
        protected override void OnAppearing()
        {
            base.OnAppearing();
            Compass.Start(SensorSpeed.Ui);
        }
 
        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            Compass.Stop();
        }
    }   
}


Вот таким простым образом создается приложение-компас! Вы можете найти полный исходный код и изображения на GitHub.

Планы на будущее


Xamarin.Essentials тщательно тестировался, но мы, тем не менее, просим вас оставлять отзывы и во время действия нашей ознакомительной версии. Опробуйте библиотеку в своих приложениях и сообщите о любых проблемах, с которыми столкнетесь в работе с репозиторием Xamarin.Essentials GitHub.

Мы рассматриваем эту библиотеку как главный элемент платформы Xamarin и знаем, что это важный стандартный блок для всех разработчиков и приложений. Поэтому мы будем интегрировать пакет Xamarin.Essentials NuGet в каждый шаблон iOS, Android и Xamarin.Forms в Visual Studio и Visual Studio для Mac, чтобы разработчики имели доступ к этим API с самых первых этапов своих проектов.

Увидеть своими глазами


Вы можете увидеть полный обзор Xamarin, Xamarin.Forms и Xamarin.Essentials в рамках выступления «Создание мобильных приложений с помощью Visual Studio и Xamarin» на Microsoft Build 2018.



Дополнительная информация


Вы можете просмотреть нашу документацию, содержащую полное руководство по началу работы и использованию каждой функции Xamarin.Essentials. Мы также предоставили полный список ссылок на API, который можно просмотреть в Интернете, чтобы узнать обо всех деталях интерфейсов API Xamarin.Essentials.

Комментарии (5)


  1. Sazonov
    28.06.2018 10:36

    Жаль, что для C++ пока безальтернативный вариант — это QtCreator (для действительно кросс-платформенной разработки).
    Из всех IDE мне больше всего нравится Visual Studio, но её так просто не портируешь, слишком много завязано на ком и винапи.


    1. domix32
      28.06.2018 14:14

      Глядишь Visual Studio Code подтянется однажды


      1. Sazonov
        28.06.2018 15:01

        Увы, это не то. Сильно допиленный Atom. К тому же не понятно, как он будет вести себя на больших проектах. В том числе сомневаюсь, что под него появятся достойные профилировщики. CLion сильно позже стартанул и по мне так уже куда удобнее. Жаль только, что платный.


  1. Marwin
    28.06.2018 16:43

    Я в восторге от Xamarin… У нас есть веб-проект: реакт + c# api на бэкэнде. Встал вопрос о написании мобильного приложения. Нарисовали экраны, запросили оценку стоимости ios разработки у десятка фирм — все давали около миллиона. СНГ фирмы давали 600-700. Я, бэкэндщик… решил сам поглядеть какой там прогресс в Xamarin, создал проект… ctrc+с / ctrl+v из своего апи 2/3 кода для модели данных… еще немного копипасты XAML экранов из админской WPF программы и ЗА НЕДЕЛЮ я сделал 100% функциональное полноценное приложение с выкладыванием в аппстор. Даже мак покупать не пришлось… Виртуалка с macos для компила в фоне норм работает… особо хлеба не просит. А ведь еще и андроид можно собрать в пару кликов плюс чуть поколдовать с картинками-ресурсами


  1. SellerOfSmiles
    29.06.2018 09:27

    Да конечно единые инструменты в IT это плохо! Чем же тогда будут «опускать» кандидатов на собеседованиях? :)