Контакты

Введение в UWP. Windows Core OS — модульная платформа будущего

  • Ненормальное программирование ,
  • Разработка веб-сайтов ,
  • Разработка под Windows
  • Так что вполне можно начать знакомиться с новой платформой. Давайте я сделаю небольшой экскурс, описав некоторые отличия.

    Начну с того, что приложения UWP обладают кое-чем, чего нет у классических приложений Windows – у них есть App Model. Что такое App Model? Это своеобразный регламент. Описание всех возможностей приложения - его прав доступа, способа установки, обновления, хранения информации и т.п.

    У приложений Windows Store, точно так же как и у приложений UWP есть файл манифеста, в котором описаны все возможности и права приложения. Это файл Package.appxmanifest. Его можно редактировать как в графическом редакторе, так и в виде кода XML. Скриншот графического редактора смотрите ниже.

    Элементы управления

    Если вы помните, то совсем недавно у Windows 8 и 8.1 была Charm panel – волшебная панелька:

    Сейчас же вместо нее используются более привычные для WPF разработчиков контролы:

    Здесь новым контролом является ContentDialog, который блокирует приложение, примерно так же, как блокирует его MessageBox.
    Кроме того в UWP более привычная для разработчиков WP навигация:

    Что может показаться интересным, так это то, что некоторые элементы управления могут иметь различный внешний вид при отображении на различных устройствах. Простыми словами, контрол может выглядеть немного иначе, например, при отображении на десктопе и на мобильном устройстве.

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

    Разработка под различные устройства

    Постараюсь разобрать то, что для WPF разработчика будет необычным. Например, это то, что при разработке приложений Windows 8.1 можно было в одном решении разрабатывать одновременно и под телефон и под десктоп.

    В таком случае создавалось 3 проекта. В приложениях WP и WinRT хранился xaml код «вьюшек» и какой-то особый код под устройства, а в общем проекте хранился общий код xaml и общий для двух проектов код C#.

    Сейчас же, так как платформа UWP универсальная, то для каждого типа устройств можно создать папку, в которую можно поместить «вьюшку» - т.е. xaml файл с дизайном под параметры устройства.

    Жизненный цикл

    Есть старая шутку про формулу-1: «У Ральфа Шумахера два положения педали – включено и выключено. Остальными положениями можно пренебречь».

    Этой шуткой я могу немного подколоть классические приложения.Net. Они либо работают, либо не работают. В приложениях Store все немного иначе. У них кроме состояний «Включено/выключено» есть еще и промежуточное состояние «Приостановлено». Жизненный цикл приложений 8.x и UWP отображен на следующей картинке:

    Триггеры и фоновые задания

    Приложения.Net могут быть либо исполняемыми файлами либо могут быть службами/сервисами. Это совершенно разные виды приложений. То есть не может быть такого, что приложение exe, но при этом оно работает в фоне. Нет, конечно же, приложение может работать в трее. Но фактически получается, что оно запущено и просто свернуто.

    Что касается приложений 8.x и UWP, то они могут содержать в себе фоновые задания. Фоновые задания это некоторое подобие сервиса. То есть приложение может не работать, но в системе будет выполняться какая-то задача. Кроме того фоновая задача может «отлавливать» какие-то события в работе системы триггером.

    Один из самых популярных триггеров это SystemTrigger . С помощью него приложение может выполнить какой-либо код при наступлении таких событий как: появление или пропажа интернета, изменение состояния сети, подключение или отключение пользователя, получение смс, изменение часовой зоны и т.п.

    Также довольно популярны TimeTrigger и MaintenanceTrigger . Оба триггера выполняют какой-либо код с периодичностью в определенный промежуток времени. Промежуток времени должен быть не менее 15 минут. Отличие в то, что TimeTrigger требует регистрации приложения на экране блокировки, а MaintenanceTrigger-у требуется чтобы устройство работало не от батареи, а от сети.

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

    Использование библиотек

    Если в классических приложениях вы использовали библиотеки DLL, то в приложениях 8.x и UWP вы сможете использовать как PCL, так и компонент среды выполнения WinMD. В чем отличие?

    PCL (portable class library) может быть добавлена приложениям под различные платформы. И под.Net Framework различных версий, и под Windows 8.x и под WP, под UWP и даже под iOS/Android приложения Xamarin. То есть в эту библиотеку можно запихнуть какой-то общий платформонезависимый код.

    WinMD может быть использован только под 8.x или UWP. Вне зависимости от языка, на котором написаны приложения, они могут работать с WinMD. Но сам WinMD в случае если он содержит в себе сложные вычисления лучше писать на C++ для достижения наилучшей производительности.

    Впрочем, при разработке под UWP вы можете создать и библиотеку классов (DLL).

    Работа с данными

    В чем еще заключается отличие приложений UWP, так это в том, что они не работают с базами данных напрямую. То есть такие базы данных, как, скажем SQL Server или Oracle, расположенные на сервере организации, будут вам недоступны. Впрочем, это было бы странно, если бы пользователь скачивал из Store приложение, и приложение начинало бы работать с базой SQL Server-а, расположенной на сервере в локальной сети. Но вы сможете работать с данными, используя веб-сервисы. Есть возможность использовать для баз MySQL оракловский Connector/Net, но он на данный момент не поддерживает SSL и потому не особо интересен. Так что лучше не отклоняться от концепта использования сервисов для доступа к данным.

    Для хранения информации внутри приложения вы можете использовать SQLite.

    Хранения параметров приложения и работа с файлами

    Хранение параметров приложения возможно не только на устройстве, но и в облаке. Таким образом, если запускать приложение на различных устройствах, то настройки везде будут одинаковыми.

    Следующий небольшой сниппет сохраняет количество вызова кода в облаке:

    Int timescount = 0; Object roamS = Windows.Storage.ApplicationData.Current.RoamingSettings.Values["times"]; if (roamS != null) timescount = (int)roamS; timescount++; Windows.Storage.ApplicationData.Current.RoamingSettings.Values["times"] = timescount;
    Если заменить Windows.Storage.ApplicationData.Current.RoamingSettings на Windows.Storage.ApplicationData.Current.LocalSettings, то параметр будет сохранен локально на устройстве.

    Настройки могут быть скомпонованы как в составные параметры, так и в контейнеры. Файлы точно так же как и настройки можно хранить как на устройстве в локальной папке, так и в облаке. Но кроме этого есть возможность хранить файлы во временной папке, которая при необходимости может быть очищена системой - ApplicationData.TemporaryFolder .

    Кроме того можно получить доступ к папке, которая содержится в приложении с помощью
    Windows.ApplicationModel.Package.Current.InstalledLocation

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

    Var folderPicker = new Windows.Storage.Pickers.FolderPicker(); folderPicker.FileTypeFilter.Add(".jpg"); folderPicker.FileTypeFilter.Add(".jpeg"); folderPicker.FileTypeFilter.Add(".png"); folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; folderPicker.SettingsIdentifier = "picker2"; Windows.Storage.StorageFolder lastFolder = await folderPicker.PickSingleFolderAsync(); if (lastFolder == null) return; String mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(lastFolder);
    Получить после этого последнюю сохраненную папку можно так:

    String mruFirstToken = StorageApplicationPermissions.MostRecentlyUsedList.Entries.FirstOrDefault().Token; lastFolder = await StorageApplicationPermissions.MostRecentlyUsedList.GetFolderAsync(mruFirstToken);

    Привязки данных

    Как в приложениях WPF, так и в приложениях UWP, а также при разработке под 8.x можно использовать привязки данных – {binding}. Но в UWP появились еще и компилируемые привязки – {x:bind} В чем отличие? Компилируемые работаю гораздо быстрее, а формируются/проверяются они во время компиляции а не во время запуска приложения. Также они строго типизированные.

    Подробнее здесь.

    О руководстве

    С помощью этого учебного пособия вы научитесь программированию с использованием инструментария wxWidgets. В конце каждой главы вы найдёте ссылки на остальные материалы руководства.

    wxWidgets

    wxWidgets это набор инструментов для создания графического пользовательского интерфейса (GUI) в C++ приложениях. Это кросс-платформенный инструментарий с открытым исходным кодом. wxWidgets приложения работают на всех основных платформах: Windows, Unix and Mac. Проект был основан Юлианом Смартом (Julian Smart) в 1992 году. Это больше чем просто набор инструментов. Он предоставляет большое разнообразие классов для работы с потоками, базами данных, командными последовательностями, интерактивной помощью и настройками приложения. wxWidgets содержит большую группу виджетов. Познакомиться с сообществом wxWidgets можно на сайте http://www.wxwidgets.org/ .

    Язык программирования C++

    C++ один из наиболее широко используемых языков программирования на этой планете. На нем написано большинство известных программных пакетов таких как MS Office, Macromedia Flash, Firefox, Photoshop и 3D Max. C++ доминирует в мире игр для PC. Это один из самых сложных языков программирования. С другой стороны, программирование на C++ в 2007 году отличается от программирования в 1997. Многое стало проще в наши дни.

    Индекс сообщества программистов TIOBE отображает примерную долю использования языков программирования (информация ниже по состоянию на 2010 год - прим. Sl-Alex). Java рулит. C++ свергнут с престола. Но C++ служит их основой и в ближайшие десятилетия для него нет серьёзных угроз. Мы можем ясно видеть специализацию среди языков программирования. Java в основном используется в корпоративных проектах и портируемых программах, C - король в системном программировании (ОС, драйверы устройств, небольшие программы), PHP прочно закрепился на небольших и средних веб-сайтах, Javascript используется для реализации клиентской части веб-приложения.

    C/C++ наиболее часто используемые языки для создания классических ГУИ (Графический Пользовательский Интерфейс (GUI)) приложений для настольных систем. Вот прекрасная , поясняющая почему Java не уничтожит C++ в ближайшие годы.

    Мультиплатформенное программирование

    Сегодня, мультиплатформенное программирование - это модное слово. Многие языки и библиотеки хотят стать мультиплатформенными. wxWidgets изначально создавался как мультиплатфоменный инструмент. Большинство разработчиков выбирают такие возможности. Если это возможно, используют web. Или же выбирают между Qt, wxWidgets, Swing или SWT. Так же существует такая вещь как FLTK, но он не так популярен и это не лучший выбор. В моей стране есть большая железнодорожная компания. Эта компания использует ПО написанное на Java и Swing. Этот выбор обусловлен тем, что дешевле купить новое оборудование и написать ПО на Java. Используя Java, скорость разработки возрастает и количество багов уменьшается. Конечно, такой выбор правильный. Но когда мы пишем текстовый редактор на Java мы не можем сказать нашим заказчикам, эй ребята, вам нужно будет докупить ещё 1 Гб памяти. В такой ситуации Java нам мало чем может помочь. Что касается Qt, то эта библиотека главный конкурент wxWidgets. Поэтому для каждой задачи нужно использовать правильный инструмент - это самое важное решение любого программиста и менеджера.

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

    Ниже представлен сравнительный обзор идеологических основ мобильной индустрии - конкурирующих мобильных операционных систем Android и Windows Phone. Итак, какие же преимущества и недостатки можно отметить у этих двух популярнейших мобильных платформ? Android или Windows Phone - какая из платформ лучше?

    1. Интерфейс

    Первое, что бросается в глаза любому пользователю, взявшему в руки смартфон на базе Windows Phone - это стилизованные плитки. В чем суть этих плиток? Это замаскированные так называемые живые тайлы (Live Tiles), которые являют собой эдакий эксклюзив от Microsoft, яркую отличительную особенность платформы Windows Phone. Почему же эти тайлы «живые»? Тайлы - это не что иное, как несколько видоизмененные виджеты и ярлыки приложений и игр с той особенностью, что их актуальная информация (прогноз погоды, курсы валют, новые сообщения, игровые уведомления и т.п.) отображается прямо на плитке.

    Платформу Android в плане интерфейса можно на сегодняшний день смело называть чистой классикой. Взяв в руки новый Android-смартфон, пользователь увидит привычные ярлыки приложений и игр, строго выстроившиеся в ряд. Но такое положение дел может быстро измениться. С помощью различных приложений-лаунчеров, в разнообразии которых нельзя упрекнуть магазин приложений для Android - Google Play Market, интерфейс платформы можно в считанные секунды изменить на любой пользовательский вкус, на любую тематику обоев для рабочего стола, в том числе и подобрать интересный дизайн с виджетами, отображающими актуальную информацию приложений и игр.

    Итак, какая из платформ лучше в плане интерфейса? Безусловно, многим понравятся живые тайлы Windows Phone, поскольку эта идея компании Microsoft действительно заслуживает отдельных похвал. Однако на Android можно установить любой дизайнерский шедевр от разработчика приложения-лаунчера и изменять интерфейс платформы хоть по нескольку раз в день. Windows Phone же такой возможности не имеет, интерфейс этой платформы изменить нельзя. Живые тайлы пользователь будет наблюдать все время пользования смартфоном на базе Windows Phone.

    Потому в плане интерфейса победа за платформой Android - именно за ее доступность и открытость для постоянных изменений внешнего вида.

    2. Настройка платформы под предпочтения пользователя

    В плане возможности настройки мобильной платформы под пользовательские нужды участники обзора - Android и Windows Phone - имеют принципиально отличающиеся позиции.

    Android - это операционная система с открытым исходным кодом (ядро Линукс), потому ее вариантов с вмешательством сторонних разработчиков, к примеру, со стороны производителей мобильной техники может быть очень много. Платформа Android открыта, это позволяет вносить свои коррективы в ее настройки не только производителям смартфонов и планшетов, но и самим пользователям - менять интерфейс, устанавливать любые приложения и игры, в том числе и в обход Google Play Market, скачивая приложения и игры со сторонних ресурсов - торрент-трекеров, сайтов, посвященных тематике Android и т.п.

    Получение root-прав на Android открывает пользователям невероятные перспективы - например, любую продвинутую экшн-игру, стоящую на Google Play Market приличных денег, пользователь сможет установить совершенно бесплатно, обратившись к упомянутым выше сторонним ресурсам.

    Открытость кода платформы Android позволяет ей быть гибкой, выполнять широчайший спектр задач в интересах пользователя, используя при этом разнообразные программные инструменты.

    Windows Phone - это закрытая операционная система, которая не предусматривает вмешательства в ее код. В этом плане компания Microsoft решила пойти по пути компании Apple, ограничив свое детище от любого стороннего вмешательства. Windows Phone не подается настройке под предпочтения пользователя. Удел пользователей - довольствоваться лишь тем, что предусмотрел софтверный гигант.

    Потому вторая победа присуждается снова Android.

    3. Безопасность и стабильность работы

    Из предыдущего преимущества платформы Android вытекает ее такой недостаток, как незащищенность от вирусов и вредоносных программ. Очень часто Hi-Tech ресурсы в Интернете пестрят информацией о том, что на Google Play Market обнаружено очередное приложение, зараженное вирусом или преследующее цели опустошить мобильный счет пользователя фоновой отправкой СМС на различные платные номера. Да, так иногда бывает, и сотрудникам Google Play Market есть еще над чем работать и что усовершенствовать. Так что пока пользователь может лишь надеяться на бдительность антивирусного приложения.

    Торможения и нестабильность работы Android - еще один недостаток, также являющийся следствием открытости кода этой платформы.

    Ситуация с Windows Phone в плане безопасности и стабильности работы - это полная противоположность ситуации с Android. Закрытость кода Windows Phone, возможно, и лишает эту платформу гибкости, однако она работает плавно, стабильно, без глюков.

    Так что в вопросе безопасности и стабильности работы победа может быть только за Windows Phone. Это первая победа детища софтверного гиганта.

    4. Многозадачность

    Android поддерживает многозадачность - это, безусловно, огромнейшее преимущество этой платформы. В этом вопросе Android смог превзойти даже iOS - мобильную платформу iPhone и iPad, поскольку многозадачность в iOS была реализована только к четвертой версии платформы, а в Android многозадачность существовала с самого начала - с первой версии.

    Так, на Android пользователь может запускать одновременно несколько приложений и переключаться между ними через специальное меню «Недавние приложения», которое отображает 6 последних приложений. Если в приложении или игре не предусмотрено опции выхода, естественно, все запущенные приложения и игры будут висеть в фоновом режиме. Естественно, это будет быстро истощать аккумулятор смартфона. Но здесь вряд ли можно предъявить претензии именно к Android - за производительность всегда нужно платить. По-другому никак.

    Windows Phone не поддерживает многозадачность.

    Итак, очередная, уже третья победа Android.

    5. Приложения для мобильной платформы

    Если смотреть с позиции новичка - полного чайника, купившего первый в своей жизни смартфон, то в более выигрышной ситуации окажется платформа Windows Phone, поскольку здесь изначально предустановлено больше приложений. К примеру, вместе с новым смартфоном пользователь получает встроенные в платформу приложения-клиенты социальных сетей Facebook, Твиттер и Linkedin. Но такой мелкой наживкой не искусить бывалых пользователей, заядлых любителей мобильных коммуникаций. Потому что для платформы Android все необходимое - клиенты социальных сетей и различных интернет-сервисов, органайзеры, виджеты погоды и курсов валют, мультимедиа-приложения, образовательные программы, игры и многое другое - можно с легкостью бесплатно скачать с Google Play Market.

    Чтобы определить, лучше Android или Windows Phone в плане разнообразия разработанного под них контента, сравним число приложений и игр, которые доступны для обеих платформ в фирменных магазинах приложений. Так, Windows Phone Store насчитывает свыше 120 тыс. различных приложений и игр. А на Google Play Market содержится более 700 тыс. приложений и игр для Android. Как видим, результат на лицо - 120 тыс. против 700 тыс. Но это только констатация конкретных цифр. На самом деле часть приложений и игр для Android, представленных сегодня на Google Play Market, низкого качества. Пользователь, устанавливая то или иное приложение или игру для Android, никак не может быть уверен в том, что оно запустится или будет корректно работать. Для Android несовместимость приложения или игры с версией платформы или с аппаратными составляющими мобильного устройства - вполне привычное дело.

    Несмотря на это, победу снова присудим Android, ведь компания Google никогда не позиционировала свое детище как элитную бренд-фишку. Для этой платформы предусмотрено действительно огромнейшее число разнообразнейшего контента. Нужно попросту на некоторые мелочи закрывать глаза и, повторимся, иметь хорошее антивирусное приложение.

    6. Картографический сервис

    Карты Google Maps в 3D для Android - это действительно шедевр от поискового гиганта. Функция просмотра улиц Google Street View, реализованная в программах Google Maps и Google Earth позволяет просматривать панорамные виды улиц и городов всего мира. Google Maps - уже довольно зрелый проект, в который поисковой гигант вложил немало усилий. Конкурирующим картографическим проектам сегодня чтобы стать лучше, чем Google Maps, придется всерьез потрудиться. Возвращаясь к сравнительному обзору двух мобильных платформ, отметим, что с Google Maps в 3D для Android намного удобней работать, нежели с Nokia Maps, предустановленными в смартфонах на базе Windows Phone 8.

    Картографический сервис - это очередная победа Android.

    7. Хранение электронных денег

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

    Для хранения денежных средств компания Google разработала электронную платежную систему Google Wallet. Посредством системы NFS, установленной на смартфоне, и специального Android-приложения от системы Google Wallet пользователи могут расплачиваться за товары и услуги в торговых точках, где предусмотрены бесконтактные платежи. Однако особой популярностью этот проект от компании Google не обзавелся.

    Электронный кошелек для Windows Phone - также не особо популярная фишка, однако это не умаляет его удобства. Он может объединить все банковские карты пользователя. Потому в вопросе хранения электронных денег победа присуждается Windows Phone.

    Подводя итоги…

    Многие фишки, которыми могут похвастаться и Android, и Windows Phone чрезвычайно схожи. Это и голосовое управление Google now для Android против Tell me для Windows Phone, и, соответственно, музыкальные сервисы Google Music против Xbox Music, и сервисы обмена сообщениями и видеосвязи Google Talk против Skype.

    Подытоживая победы мобильных платформ по рассмотренным вопросам, отметим твердую и устойчивую победу Android - 5 против 2.

    Так, платформа Windows Phone победила лишь дважды - в вопросах безопасности, стабильности работы и удобного кошелька для хранения электронных денег. Интерфейс, возможность настройки платформы под предпочтения пользователя, многозадачность, более 700 тыс. разработанных приложений и игр, лучший картографический сервис - как видим, это довольно немалый перевес Android.

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

    Windows Phone - это своеобразный аналог iOS. У этой платформы также именитый создатель, в основу ее принципов заложены имидж, стабильность, грациозность и плавность в работе, опека пользователя и максимальное обеспечение его безопасности. Пусть даже и в ущерб его всестороннему развитию.

    Последнее обновление: 12.04.2017

    UWP (Universal Windows Platform) представляет собой унифицированную платформу для создания и запуска приложений в Windows 10 и Windows 10 Mobile.

    UWP стала результатом фолюции более ранних технологий. Так, с выходом Windows 8 была внедрена новая архитектурная платформа для приложений - Windows Runtime (WinRT), которая позволяла запускать приложения в так называемом режиме Modern (Metro) на десктопах, планшетах. Затем с выходом Windows 8.1 и Windows Phone 8.1 эта технология получила развитие - появились "универсальные приложения", которые можно было запускать сразу Windows 8.1 и WP8.1. И в июле 2015 года официально вышла новая ОС Windows 10. Она использует платформу UWP, которая представляет собой развитие Windows Runtime.

    Как подсказывает название платформы, она является универсальной - универсальной для всех устройств экосистемы Windows 10. А это обычные дестопы, планшеты, мобильные устройства, устройства IoT (интернет вещей), Xbox, устройства Surface Hub. И приложение UWP может одинаково работать на всех этих платформах, если на них установлена Windows 10.

    Почему UWP?

    Программирование под UWP несет ряд преимуществ:

      Широта распространения . На текущий момент (апрель 2017) Windows 10 установлена уже более чем на 400 миллионах устройств. На десктопах Windows 10 уже опередила Windows 8/8.1.

      Поддержка широкого круга устройств . Десктопы, планшеты, смартфоны, большие планшеты Surface Hub, различные IoT-устройства, в перспективе устройства виртуальной реальности HoloLens - круг устрйоств, на которых может работать Windows 10 действительно широк.

      Поддержка разных языков и технологий программирования . UWP-приложения можно создавать с помощью таких языков, как Visual C++, C#, Visual Basic, JavaScript. В качестве технологии для создания графического интерфейса Visual C++, C# и Visual Basic используют XAML, JavaScript применяет HTML. Кроме того, С++ может вместо XAML использовать DirectX. То есть достаточно распространенные и и знакомые многим технологии.

      Магазин приложений и удобство распространения . Windows Store представляет собой прекрасное место для распространения UWP-приложений, как платных, так и бесплатных. Сами возможности платформы и магазина Windows Store позволяют использовать разные способы монетизации. Например, можно интегрировать в приложения блоки для показа рекламы через различные SDK. Можно распространять за определенную плату, причем оплату можно гибко настраивать. При необходимости можно встроить предоставление ознакомительной версии, после использования которой пользователь может решить, покупать приложение или нет. И также можно монетизировать по модели freemium, при которой приложение условно бесплатное, а отдельные услуги внутри приложения предоставляются за определенную плату. Причем все эти возможности монетизации обесечиваются встроенными инструментами SDK.

      Богатые возможности платформы . UWP многое наследует от Windows Runtime из Windows 8.1 и в то же время предоставляет много новых функцональностей, как, более богатые возможности по интеграции с облаком, использование Cortana, системы уведомлений в Win10 и многое другое.

    Что необходимо для разработки под UWP

    Для программирования под UWP необходима ОС Windows 10. Все другие операционные системы, как Windows 8.1/8/7, не говоря уже о Windows XP, не подходят !

    Также потребуется среда разработки Visual Studio 2017 Community. Это полнофункциональная бесплатная среда разработки, которую можно загрузить с официального сайта по адресу https://www.visualstudio.com/downloads/download-visual-studio-vs .

    Также можно использовать версию VS 2015, а все остальные предыдущие версии Visual Studio - 2013, 2012, 2010 и т.д. с UWP не работают.

    При установке Visual Studio 2017 в программе установщика необходимо отметить соответствующий пункт:

    Перед чем как начать создание приложений, убедитесь, что в центре обновления в Windows 10 установлена соответствующая опция для разработчиков:

    И имея Windows 10 и установленную Visual Studio 2017, можно приступать к разработке приложений.

    Дорогие хабравчане!

    Хотел бы попродробнее рассказать вам про одно из самых интересных на мой взгляд нововведений . Речь пойдет про одновременную разработку приложений для Windows 8 и Windows Phone, т.е. про универсальные приложения для платформы Windows .

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

    На данный момент Майкрософт вплотную подошел к тому, чтобы унифицировать все платформы (Windows Phone, Windows 8, Xbox One) с точки зрения API, и позволить программисту максимально использовать общий код при создании приложений, при этом сохранив возможность использования различного дизайна для различных форм-факторов. Подробнее про то, как это реализовано на текущий момент - читайте ниже.

    Как раньше создавались приложения Windows + Phone
    До сегодняшнего дня для создания приложений с общим кодом для Windows и Windows Phone приходилось использовать разделяемую переносимую библиотеку (portable library) для выделения общего кода, отвечающего за доступ к данным и бизнес-логику, и различные проекты для UI. Подробнее такой подход описан в специальном курсе на Microsoft Virtual Academy , или . Также из-за разницы в API Windows 8 и Windows Phone приходилось часть кода делать платформенно-зависимым.
    Универсальные приложения Windows
    На конференции build были объявлены следующие нововведения:
    • В новой версии Windows Phone 8.1 будут использоваться Windows RT API Это означает, что около 90% системных вызовов между Windows 8.1 и Windows Phone 8.1 будут общими. Кроме того, язык разметки XAML также был унифицирован между платформами. Иными словами, новые приложения Windows Phone 8.1 будут использовать Windows XAML, а не Silverlight. Если вам нужна совместимость, для Windows Phone по-прежнему можно будет разрабатывать с использованием Silverlight, в т.ч. используя новые возможности, но это тема для отдельной статьи.
    • В Visual Studio 2013 Update 2 появится новый шаблон проекта для унифицированных приложений Windows. Этот шаблон создает различные проекты для Windows и Phone, и третий «разделяемый» проект, в котором размещается весь общий код. При этом разделяемый проект
      может содержать не только код, но и XAML-разметку, общие ресурсы, изображения и т.д. Этот проект не компилируется в отдельную библиотеку, а разделяется между двумя платформенными проектами на уровне текстового включения на этапе компиляции. Такой шаблон можно использовать для разработки на C#/XAML, C++/XAML или HTML/JS.
    • Если вы хотите выделить часть платформенно-независимого кода в отдельную библиотеку, разделяемую между несколькими приложениями, то по-прежнему можно использовать переносимую библиотеку, в которую теперь можно включать также и XAML-разметку . Переносимые библиотеки можно использовать для разработки на C# или Visual Basic.
    • Бинарной совместимости между платформами пока нет , т.е. приложения Windows 8 и Windows Phone по-прежнему будут распространяться через соответствующие магазины, и разработчику будет необходимо создать и загрузить в каждый из магазинов пакеты приложения (хотя теперь Windows Phone 8.1 будет использовать такой же формат.appx, что и Windows 8. Однако в магазинах Windows и Windows Phone будут использоваться единые идентификаторы приложений , что позволит реализовать сценарии единой покупки приложения для использования на всех платформах .
    • Приложения для Xbox One в текущей версии Visual Studio Update 2 не так хорошо вписываются в общую историю, хотя на пленарном докладе было показано универсальное приложение Khan Academy с использованием Kinect, работающее на Xbox и Windows (да, Kinect v2 будет поддерживаться в приложениях магазина Windows, но это опять же тема для отдельной статьи). Разработка для Xbox One на текущий момент предполагается на HTML/JS/CSS и C++
    Таким образом, теперь появилась удобная возможность для разработчиков создавать приложения под платформы Windows и Windows Phone, которые содержат значительное количество общего кода, с возможностью кастомизировать дизайн под разные платформы для максимизации удовлетворенности пользоваталя!
    Universal Hello World
    Рассмотрим небольшой пример создания универсального приложения. Структура проектов в Visual Studio 2013 Update 2 была изменена, и теперь в разделе Магазин Window доступны как приложения для Windows и Windows Phone, так и универсальные приложения и библиотеки.

    Вновь создаваемое универсальное приложение будет расчитано на платформу Windows Phone 8.1 и Windows 8.1 Update. При этом в разделе приложений Windows Phone доступны шаблоны проектов Windows Phone, основанные на Silverlight, которые позволят создавать приложения для ранних версий платформы - но возможности универсальных приложений при этом использовать нельзя.

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

    Обратите внимание:

    • По умолчанию дизайн страничек (XAML) для платформ разнесен по разным проектам. Однако в простых случаях вы можете использовать общие XAML-файлы для всех платформ, если вы уверены, что ваш дизайн будет достаточно хорошо адаптироваться к разным разрешениям, от смартфона до десктопа. При этом многие встроенные элементы управления (например, GridView) умеют адаптироваться и изменять свой внешний вид в зависимости от платформы.
    • Если у вас есть уже готовый проект Windows или Windows Phone, вы можете создать на его основе универсальное приложение, выбрав в контекстном меню проекта соответствующий пункт. При этом проект будет преобразован в такую же трех-проектную структуру, и вы сможете переносить файлы приложения в общий проект для их совместного использования.
    • В разреляемый проект можно включать ссылки на библиотеки (References), при этом эти ссылки будут добавлены в оба проекта (мы видим, что в ссылках каждого из платформенных проектов присутствует Shared-ссылка). Если какие-то библиотеки доступны только для одной из платформ, то мы все равно можем использовать соответствующую функциональность в общем коде, окружая её директивами условной компиляции #ifdef. Visual Studio настолько удобна, что при этом будет работать Intellisense, предупреждая нас о том, что ссылка доступна только в одной из платформ.
    • Если мы выносим XAML-код в общий проект, то в редакторе XAML доступен drop-down для переключения платформы, и мы можем визуально редактировать дизайн страницы как в режиме телефона, так и в режиме планшета/десктопа.

    В большинстве случаев вы захотите разделять как можно больше кода между платформами, перенеся все, что возможно, в проект shared. В нашем случае мы можем перенести MainPage.xaml из одного из проектов в разделяемый проект, и удалить его в платформенных проектах, поскольку в нашем случае дизайн странички не будет отличаться от платформы к платформе:

    Hello, world!
    Таким образом, мы получили универсальное приложение, код и дизайн которого полностью находятся в разделяемом проекте.

    На пути к реальному приложению - Photo Viewer
    Попробуем превратить наше приложение Hello World во что-то полезное - например, в просмотрщик лучших фотографий flickr. Flickr предоставляет RSS-поток фотографий, поэтому определить соответствующий источник данных сравнительно просто (для пущей простоты загрузка RSS сделана не-асинхронной, в реальных проектах так делать не надо):

    Код для получения картинок из Flickr

    public class Flickr { List list = new List(); public Flickr() { var xdoc = XDocument.Load("http://api.flickr.com/services/feeds/photos_public.gne"); XNamespace xn = "http://www.w3.org/2005/Atom"; var res = from z in xdoc.Descendants(xn + "entry") let l = (from x in z.Descendants(xn + "link") where x.Attribute("rel").Value == "enclosure" select x.Attribute("href").Value).FirstOrDefault() where (l!=null) && (l!="") select l; foreach (var x in res) { list.Add(new BitmapImage(new Uri(x))); } } public List Images { get { return list; } }


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

    XAML-дизайн основной страницы приложения



    Чтобы задать разные параметры в ресурсном файле, создадим в каждом из платформенных проектов свой ресурсный файл Resource.xaml следующего содержания:
    150

    И в завершение нам надо подключить этот ресурсный файл в App.xaml (который находится в разделяемом проекте):

    App.xaml



    В результате мы получаем пару приложений для Windows 8 и Windows Phone, которые корректно отображают галерею изображений с учетом специфики платформы.

    Полный исходный код приложения можно получить на github .

    Мораль
    Для создания новых приложений на платформе Windows 8 сейчас лучшим решением будет использовать универсальные приложения. Если у вас есть существующее приложение Windows 8, то его имеет смысл потихоньку конвертировать в универсальное приложение и портировать на Windows Phone 8.1. Существующее приложения Windows Phone 8 преобразовать в универсальное приложение сложнее (т.к. для ряда операций используются другие наборы API), об этом мы еще с вами поговорим. Наконец, универсальные приложения для Windows Phone требуют версии Windows Phone 8.1, поэтому на текущий момент, чтобы иметь достаточно широкую install base, имеет смысл использовать приложения Silvelight 8.0

    Понравилась статья? Поделитесь ей