Разработка приложений под Windows 8: почему и как
Операционная система Windows, получившая тотальное распространение на волне консьюмеризации середины девяностых годов, планомерно развивалась до середины «нулевых», когда персонализация вычислений получила новый мощный толчок – настоящую мобильность и доступность.
Одновременно с этим, с подачи Apple и просто в силу удешевления производства соответствующих экранов, огромную популярность стал завоевывать touch-интерфейс, когда пользователь работает с приложениями с помощью прикосновений и жестов, непосредственно касаясь пальцами экрана.
Другим существенным сдвигом, в огромной степени повлиявшим на умы разработчиков приложений, стало следствие тотальной мобилизации вычислений – упрощение приложений. Нет, люди не стали меньше работать со «сложными» приложениями и их производительность не упала. Они стали работать и играть с компьютером (в форме телефона, планшета или лэптопа) на порядок чаще, фактически постоянно, на ходу. Людям стало необходимо сильно большее количество приложений.
Еще одним характерным явлением стала популярность магазинов приложений. Эта простая идея решила две важнейшие задачи: для пользователя – где взять приложение, для разработчика – где его продавать. При всей простоте идеи, много лет так называемый «канал продаж» был головной болью разработчиков консьюмерских приложений. Это как раз тот случай, когда прямые указания, где покупать и где продавать, делают путь от разработчика к покупателю самым коротким. И, конечно же, немаловажным фактором успеха современных магазинов приложений стала простота, с которой индивидуальные разработчики или небольшие команды могут размещать свои творения для продажи. Это, кстати, одно из немногих отличий магазинов приложений от классического ритейла.
Каждый из нас сегодня, работая с Visual Studio, AutoCAD, Photoshop, Excel или 1C, выполняет для мира производителей ПО и компьютеров ту же задачу, что и 15-20 лет назад – покупает «дом и хлеб». Беря в руки смартфон или планшет, вы становитесь покупателем «сникерсов и орбитов», то есть товаров или с ощутимо более высокой оборачиваемостью или, а чаще «и», с большей добавленной стоимостью.
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 содержат одно окно без хрома, по умолчанию занимающее весь экран, чтобы пользователя не отвлекали лишние детали.
Приложение в стиле Metro может поддерживать различные компоновки и представления, чтобы обеспечить динамичное и удобное обслуживание пользователя при различных параметрах конструкции и размерах экрана устройств.
Приложения позволяют использовать сенсорный ввод? ввод с помощью пера, клавиатуры и мыши
Приложения в стиле Metro без проблем работают с различными источниками входных данных, включая перо, мышь, клавиатуру и сенсорный ввод. Для всех этих источников входных данных вы можете использовать единый набор событий. В приложения в стиле Metro включается набор стилей по умолчанию, гарантирующий нормальную работу элементов пользовательского интерфейса с сенсорным вводом.
Приложения могут взаимодействовать друг с другом
Контракты приложений — это возможность для пользователей с легкостью выполнять поиск по нескольким приложениям и обмениваться содержимым между ними. Они расширяют практическую полезность вашего приложения, устраняя необходимость взаимодействия с различными стандартами API для конкретных приложений, когда нужно получить доступ к данным, хранящимся в другом приложении или созданным им. При этом пользователь остается в вашей фирменной среде. Вам не нужно знать что-либо о целевом приложении, кроме объявленной им поддержки целевого контракта, — оно просто работает.
В приложениях доступны новые элементы управления и области интерфейса
Приложения в стиле Metro содержат несколько новых элементов управления, упрощающих организацию эффективного взаимодействия с пользователями. Среди этих элементов можно выделить строку команд (App Bar) приложения и чудо-кнопки (Charms).
Строка команд приложения(App Bar)
Строка команд приложения размещается вне окна приложения и является его основным командным интерфейсом. Используйте строку команд для размещения элементов навигации, команд и инструментов для пользователей. По умолчанию строка команд приложения скрыта и появляется, когда пользователь проводит пальцем в направлении от верхнего или нижнего края экрана. Она является обложкой для содержимого приложения и может быть скрыта пользователем, если он проведет пальцем по краю экрана или будет взаимодействовать с приложением.
Чудо-кнопки (Charms)
Чудо-кнопки — это определенный и согласованный набор кнопок, используемый во всех приложениях для поиска, отправки, подключения, настройки и запуска. Мы считаем, что это основные рабочие сценарии, которые все пользователи хотят выполнять практически в каждом используемом ими приложении. Пользователи могут:
- Искать содержимое, размещенное в вашем или другом приложении. Кроме того, поиск содержимого в вашем приложении возможен из другого приложения.
- Делиться содержимым из вашего приложения с контактами или службами.
- Перейти прямо на Начальный экран.
- Подключаться к устройствам и отправлять содержимое, выполнять потоковую передачу мультимедиа, а также печатать документы.
- Использовать параметры для настройки приложения по своему усмотрению.
Приложения используют плитки вместо значков (Tiles vs. Icons)
Когда пользователь устанавливает ваше приложение, оно появляется на начальном экране как плитка. Если коснуться или щелкнуть плитку, приложение будет запущено.
Приложение может предоставлять содержимое с помощью плитки, даже когда не работает. Используя динамические плитки (Live Tiles), приложение способно выводить на экран полезные данные в краткой форме при минимальном расходе заряда батареи устройства.
Приложение может настроить систему для периодического запроса обновлений в веб-службе вне зависимости от того, работает ли оно. Кроме того, в приложениях доступна настройка служб push-уведомлений Windows (WNS), чтобы отправлять сообщения напрямую из веб-службы в динамическую плитку.
Написание приложений на знакомом разработчику языке
Вы можете создавать приложения в стиле Metro на языках, которые лучше всего знаете, например на JavaScript, C#, Visual Basic или C++. Более того, можно создавать компоненты на одном языке и использовать их в приложении, написанном на другом языке программирования.
Продажа приложений через Магазин Windows
Главный источник приложений в стиле Metro – Windows Store. Вы создаете приложение, указываете цену, а Магазин Windows предложит ваше приложение на мировом рынке более чем на 100 языках.
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-приложения.
Сам WinRT, помимо, собственно функционала, отвечающего за выполнение тех или иных функций, получил ряд важных компонентов.
Этими компонентами стали:
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.
Говоря проще, если пользователь не работает прямо сейчас с вашим приложением, не работает и само приложение. Оно либо спит (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».
Очень важно правильно спланировать приложение – его интерфейс, схему организации, возможности по интеграции с системой и т.д. В этом вам поможет «Руководство по планированию приложений в стиле Metro»