Разработка приложений под Windows 8: почему и как

в 9:25, , рубрики: c++, html5, javascript, metro, windows, Windows 8, windows runtime, windows store, WinRT, Блог компании Microsoft, разработка, метки: , , , , , , , , ,

imageПоследние 5-7 лет мы все наблюдаем явление, которое аналитики называют консьюмеризацией ИТ. Не вдаваясь в историю и подробности этого явления, характерного не только ИТ-отрасли, стоит отметить главное – именно «консьюмеры» сегодня создают львиную долю пресловутой добавленной стоимости – иногда своим большим числом, иногда – способностью и желанием переплачивать за новинки и вообще интересные идеи.
Операционная система Windows, получившая тотальное распространение на волне консьюмеризации середины девяностых годов, планомерно развивалась до середины «нулевых», когда персонализация вычислений получила новый мощный толчок – настоящую мобильность и доступность.

Одновременно с этим, с подачи Apple и просто в силу удешевления производства соответствующих экранов, огромную популярность стал завоевывать touch-интерфейс, когда пользователь работает с приложениями с помощью прикосновений и жестов, непосредственно касаясь пальцами экрана.
clip_image003[6]
Другим существенным сдвигом, в огромной степени повлиявшим на умы разработчиков приложений, стало следствие тотальной мобилизации вычислений – упрощение приложений. Нет, люди не стали меньше работать со «сложными» приложениями и их производительность не упала. Они стали работать и играть с компьютером (в форме телефона, планшета или лэптопа) на порядок чаще, фактически постоянно, на ходу. Людям стало необходимо сильно большее количество приложений.
clip_image005[4]Но, как следствие среды и размера устройств, все эти приложения становились очень простыми, чаще всего направленными на потребление контента или игру. Другими словами, без уменьшения спроса на приложения для созидания, появилась огромная, существенно большая потребность в приложениях для потребления.
Еще одним характерным явлением стала популярность магазинов приложений. Эта простая идея решила две важнейшие задачи: для пользователя – где взять приложение, для разработчика – где его продавать. При всей простоте идеи, много лет так называемый «канал продаж» был головной болью разработчиков консьюмерских приложений. Это как раз тот случай, когда прямые указания, где покупать и где продавать, делают путь от разработчика к покупателю самым коротким. И, конечно же, немаловажным фактором успеха современных магазинов приложений стала простота, с которой индивидуальные разработчики или небольшие команды могут размещать свои творения для продажи. Это, кстати, одно из немногих отличий магазинов приложений от классического ритейла.
Каждый из нас сегодня, работая с Visual Studio, AutoCAD, Photoshop, Excel или 1C, выполняет для мира производителей ПО и компьютеров ту же задачу, что и 15-20 лет назад – покупает «дом и хлеб». Беря в руки смартфон или планшет, вы становитесь покупателем «сникерсов и орбитов», то есть товаров или с ощутимо более высокой оборачиваемостью или, а чаще «и», с большей добавленной стоимостью.
clip_image007[4]Разработчики Windows, еще задолго до появления iPad, начали проект по разработке нового поколения флагманской операционной системы, где решались 3 задачи:
1. Увеличение времени автономной работы тремя путями – общей оптимизацией, переносом на другие архитектуры (ARM) и, наконец, выработкой правил для разработчиков, когда приложение минимизирует потребляемые ресурсы.
2. Оптимизация под touch-интерфейс.
3. Создание экосистемы по продаже и продвижению приложений.
В результате начала выкристаллизовываться новая Windows, обещающая стать самым существенным сдвигом в парадигме операционных систем от Microsoft и, одновременно, самым рискованным. Со времен Windows 95 мы не предлагали столь кардинальных изменений для разработчиков и пользователей. А учитывая огромную распространенность Windows, сегодняшние изменения – самые большие в истории.
Одновременно с этим, Windows 8 – самая большая в истории возможность для разработчиков. Ведь, у каждого пользователя Windows появляется Windows Store – магазин приложений, который является основным (а в некоторых случаях – единственным) источников приложений для его компьютера, будь то десктоп, лэптоп или планшет. Экономика Windows 8 – хорошая тема для отдельной статьи. А сейчас самое время перейти к разработке приложений.
Если вы еще не загрузили Windows 8 Release Preview и Visual Studio 2012 RC, сейчас самое время поставить их на закачку. Windows 8 можно загрузить отсюда, а Visual Studio 2012 RC доступен здесь. Для разработки под Windows 8 вам необходима сама Windows 8.

Что такое Metro

Основные изменения для пользователя и разработчика в Windows 8 можно описать одним словом – METRO. Этот термин включает в себя две новых концепции: Windows Runtime (WinRT) и Metro UI.
Говоря “metro-приложения”, мы подразумеваем не только новый интерфейс, но и новую платформу разработки. Это важно.
Что же представляет собой приложение в стиле metro. Если кратко, то это сплав новой парадигмы интерфейса, нового эффективного API и соответствующей платформы разработки, плюс интеграция с системой и другими приложениями.

У приложений имеется одно окно с поддержкой нескольких представлений

В отличие от классических приложений приложения в стиле Metro содержат одно окно без хрома, по умолчанию занимающее весь экран, чтобы пользователя не отвлекали лишние детали.
clip_image008[4]
Приложение в стиле Metro может поддерживать различные компоновки и представления, чтобы обеспечить динамичное и удобное обслуживание пользователя при различных параметрах конструкции и размерах экрана устройств.
clip_image009[4]

Приложения позволяют использовать сенсорный ввод? ввод с помощью пера, клавиатуры и мыши

Приложения в стиле Metro без проблем работают с различными источниками входных данных, включая перо, мышь, клавиатуру и сенсорный ввод. Для всех этих источников входных данных вы можете использовать единый набор событий. В приложения в стиле Metro включается набор стилей по умолчанию, гарантирующий нормальную работу элементов пользовательского интерфейса с сенсорным вводом.
clip_image003[7]

Приложения могут взаимодействовать друг с другом

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

В приложениях доступны новые элементы управления и области интерфейса

Приложения в стиле Metro содержат несколько новых элементов управления, упрощающих организацию эффективного взаимодействия с пользователями. Среди этих элементов можно выделить строку команд (App Bar) приложения и чудо-кнопки (Charms).

Строка команд приложения(App Bar)

Строка команд приложения размещается вне окна приложения и является его основным командным интерфейсом. Используйте строку команд для размещения элементов навигации, команд и инструментов для пользователей. По умолчанию строка команд приложения скрыта и появляется, когда пользователь проводит пальцем в направлении от верхнего или нижнего края экрана. Она является обложкой для содержимого приложения и может быть скрыта пользователем, если он проведет пальцем по краю экрана или будет взаимодействовать с приложением.
clip_image010[4]

Чудо-кнопки (Charms)

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

  • Искать содержимое, размещенное в вашем или другом приложении. Кроме того, поиск содержимого в вашем приложении возможен из другого приложения.
  • Делиться содержимым из вашего приложения с контактами или службами.
  • Перейти прямо на Начальный экран.
  • Подключаться к устройствам и отправлять содержимое, выполнять потоковую передачу мультимедиа, а также печатать документы.
  • Использовать параметры для настройки приложения по своему усмотрению.

clip_image011[4]

Приложения используют плитки вместо значков (Tiles vs. Icons)

Когда пользователь устанавливает ваше приложение, оно появляется на начальном экране как плитка. Если коснуться или щелкнуть плитку, приложение будет запущено.
clip_image012[4]
Приложение может предоставлять содержимое с помощью плитки, даже когда не работает. Используя динамические плитки (Live Tiles), приложение способно выводить на экран полезные данные в краткой форме при минимальном расходе заряда батареи устройства.
Приложение может настроить систему для периодического запроса обновлений в веб-службе вне зависимости от того, работает ли оно. Кроме того, в приложениях доступна настройка служб push-уведомлений Windows (WNS), чтобы отправлять сообщения напрямую из веб-службы в динамическую плитку.
clip_image013[4]

Написание приложений на знакомом разработчику языке

Вы можете создавать приложения в стиле Metro на языках, которые лучше всего знаете, например на JavaScript, C#, Visual Basic или C++. Более того, можно создавать компоненты на одном языке и использовать их в приложении, написанном на другом языке программирования.

Продажа приложений через Магазин Windows

Главный источник приложений в стиле Metro – Windows Store. Вы создаете приложение, указываете цену, а Магазин Windows предложит ваше приложение на мировом рынке более чем на 100 языках.
clip_image014[4]

WinRT

До недавнего времени разработчики под Windows использовали две основных группы API: native через Win32 API и managed через .NET Framework. При этом, вторая группа постепенно развивалась, получая различные модели создания пользовательского интерфейса, работы с данными и сервисами, построения исходного кода и архитектуры приложений и так далее.
Между тем, сама Windows – то есть Win32 API получала не так много настоящих толчков к развитию базовой модели разработки. Пожалуй, последним существенным явлением был COM. Все эти годы сами компьютеры не стояли на месте. Появлялись всевозможные сенсоры, сетевые устройства (включая 3G/LTE и т.п.), камеры, чувствительные к прикосновениям экраны. Наконец, энергопотребление становилось все более важным.
Таким образом, создавая новую Windows, мы понимали, что необходимо разработать и новый API, который будучи родным (native) для операционной системы, станет отвечать неким минимальным требованиям и веяниям времени. В результате родился Windows Runtime (WinRT).
Что несет с собой WinRT:
1. Это native API, работающий вместе с оптимизированным COM API. При этом возможна работа manage-сред поверх WinRT (и .NET Framework в Windows 8 – тому пример).
2. Это объектно-ориентированный API, включающий универсальный формат метаданных типов.
3. WinRT включает поддержку многих современных свойств персональных компьютеров (сенсоры, камеры и т.п.). а энергосбережение является тут чрезвычайно важным.
4. Это языконезависимый API, изначально поддерживающий различные модели:
a. С++
b. .NET Framework с C# и Visual Basic
c. HTML5 и JavaScript
5. Современная декларативная модель разработки интерфейсов на XAML или HTML5 стала частью Windows API, а не надстройкой над ним.
В результате приложения под Windows разделились на 2 группы:
1. Классические desktop-приложения.
2. Новые metro-приложения.
clip_image016[4]
Сам WinRT, помимо, собственно функционала, отвечающего за выполнение тех или иных функций, получил ряд важных компонентов.
clip_image018[4]
Этими компонентами стали:
1. Подсистема метаданных и языковых проекций.
Благодаря ей, компоненты, написанные на разных языках программирования, могут вызывать друг друга.
2. Брокеры. Эти компоненты несут две важные функции:
a. Поддержка обмена данными между приложениями. Например, в тех случаях, когда вы хотите отправить данные из какого-то приложения через почтовый клиент.
b. Защита некоторых важных вызовов через механизм capabilities и явных разрешений. Например, если приложение захочет использовать камеру, система сперва спросит у пользователя, допускает ли он это. Аналогично и, например, с GPS – приложение должно обозначить такую потребность еще на этапе разработки, плюс пользователь может явно разрешить или запретить ему использование информации о местоположении.
Есть также еще две важные части Windows API, доступные и используемые metro-приложениями:
1. Application Model и Windows Store API.
Эта группа управляет важными составляющими приложения:
a. Составом компонентов.
b. Возможностями (capabilities), затрагивающим безопасность и функционирование системы, такими как, доступ к местоположению, файловой системе, сети, идентификации пользователя, всевозможным точкам интеграции с системой и так далее.
c. Взаимодействием с Windows Store и информацией о приложении, которое, как мы уже знаем, в подавляющем большинстве случаев, будет установлено именно оттуда.
2. DirectX и подмножество Win32 и COM API, доступные для компонентов и приложений, разрабатываемых на C++.
Они необходимы с одной стороны разработчикам игр и мультимедиа-приложений (DirectX), с другой стороны – для портирования существующего кода (подмножество Win32).

Модель выполнения приложений в WinRT

Отдельно необходимо остановиться на модели выполнения или, как еще можно сказать, жизни приложения в Windows 8 и WinRT.
Цикл жизни metro-приложения существенно отличается от такового для приложений классических. Его можно разделить на три группы:
1. Установка.
2. Выполнение.
3. Удаление.
С первым и третьим все более-менее понятно, хотя Windows Store и тут дает дополнительные возможности. Но вот цикл выполнения сам по себе требует отдельного внимания.
Стадии выполнения приложения точно описываются перечислением ApplicationExecutionState.
clip_image019[4]
Говоря проще, если пользователь не работает прямо сейчас с вашим приложением, не работает и само приложение. Оно либо спит (suspended) либо и вовсе выгружается. Подробнее об этом написано в статье Application lifecycle.
Однако, не стоит думать, что в WinRT невозможно выполнение фоновых процессов. Два замечательных документа очень хорошо описывают подходы и правила разработки фоновых процессов.

Introduction to Background Tasks This paper describes the programming model to create background tasks, resource management policies for background tasks, and built-in user controls that allow the user to control per-app background task activity by using lock screen personalization.
Background Networking This paper provides information about an app lifecycle management model for apps that require real-time connectivity between the client and server. To address the lifecycle limitations for real-time connected apps, Windows 8 introduces a new set of APIs that enable users to build always-reachable apps.

Файловая система и данные приложений в WinRT

Еще одна особенность WinRT – порядок работы с файлами и данными. Для начала следует сказать, что в общем случае данные metro-приложений изолированы друг от друга. Это обеспечивает стабильность и безопасность как самих приложений, так и системы в целом.
Подробнее об данных приложений можно прочитать здесь, но суть состоит в том, что у всякого metro-приложения есть три типа файлового хранилища:
1. Локальное.
2. Временно.
3. Переносимое (roaming).
Первый тип, как следует из названия, содержит файлы и папки, которые приложение создает на локальном компьютере в специальной области, выделенной этому приложению.
Второй тип очень похож на первый с тем исключением, что как только приложение выгружается, система может в любой момент удалить такие временные данные.
Третий тип хранилища – roaming, представляет собой файлы и папки синхронизируемые между всеми устройствами с Windows 8, где зарегистрировался тот же пользователь, который в вашем приложении изначально создал данные. Пользователь определяется по Microsoft ID, который также все знают под именем LiveID.

Файловая система и разрешения

Все это не означает, что приложение не может получить доступ к файлам, находящимся на всем остальном пространстве дисков устройства. Для этого предназначено два механизма: File Pickers и Libraries.
Первый механизм позволяет получить доступ к файлам через запрос пользователя на выбор таких файлов. Он их явно выбирает, давая таким образом доступ к этим файлам вашему приложению.
Второй механизм дает прямой доступ к файлам библиотек документов Windows: Documents, Pictures, Videos и т.д. Этот подход требует соблюдения двух условий:
1. Декларации того факта, что вы хотите получить доступ к библиотекам. Декларация производится еще на этапе разработки приложения. Устанавливая его из Windows Store, пользователь видит, к каким библиотекам приложение будет иметь доступ.
2. Для некоторых типов библиотек (Documents и файлов на внешних устройствах) необходимо определить ассоциацию приложения с типами файлов. И именно к файлам этих типов оно получит доступ.
Подробнее обо все этом можно почитать здесь.

Манифест приложения и capabilities

Выше в тексте уже неоднократно упоминались capabilities (характеристик) в контексте декларации приложением некоторых действий, которые оно планирует совершать в системе.
Действительно, схема пакета приложения важна сама по себе, а файл манифеста как ее часть, говорит очень много о функционале программы.
Подробнее об это можно почитать тут. Также посмотреть и послушать эту сессию конференции BUILD.

Дальнейшие шаги

В этой статье дан обзор основных идей Windows 8:
· Зачем она создавалась именно такой
· Что такое Metro и Windows Runtime (WinRT)
· Каковы особенности функционирования приложений в WinRT
Теперь самое время запустить Visual Studio 2012 в уже установленной Windows 8 и попробовать написать свое первое приложение.
Для этого есть отличное пошаговое руководство «Разработка приложений в стиле Metro с помощью Visual Studio 2012 RC».
clip_image020[4]
Очень важно правильно спланировать приложение – его интерфейс, схему организации, возможности по интеграции с системой и т.д. В этом вам поможет «Руководство по планированию приложений в стиле Metro»

Полезные ссылки

Автор: VoldemarRinger


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js