company_banner

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

    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»

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


    Microsoft 340,57
    Microsoft — мировой лидер в области ПО и ИТ-услуг
    Поделиться публикацией
    Комментарии 28
    • +1
      Контракты как я понял это аналог интентов в андроиде или что-то мощнее? Если так то не дурно. С точки зрения разработчика интенты всегда упрощали жизнь программиста.
    • +4
      Спасибо за обзорную статью!

      Особенно улыбнул перевод Charms как «Чудо-кнопки» :-) Это официальный перевод? Если так, надо взять себе на вооружение.
      • 0
        Похоже, да, с недавних пор. Раньше называлось вроде «экспресс-кнопки».

        (Переводил справку к сабжу:))
      • 0
        WinAPI похоже в прошлом.
        • +1
          WinAPI остаётся для Desktop-приложений и серверов.
          • –3
            Графический интерфейс на сервере? Зачем.
            1. Большой поток трафика при удаленном управлении
            2. Узконаправленность (тысячи комбинаций параметров командной строки против меню из десятка кнопок)
            Да и потребление памяти. Сервер должен работать сам, а управление либо через консоль, либо через браузер, это будет быстрее чем двигать окошки, изображение которых передается каждый раз по сети.
            • +2
              winAPI это не только графическая подсистема
              • –2
                К сведению: за окном 21 век, 10-мегабитный канал считается медленным, объём памяти в худшем случае измеряется гигабайтами. Ну и удачи с чтением китайской документации в текстовом VGA-режиме (интересно, хоть в одной ОС это реально без графики?)
                • 0
                  У меня Linux на FullHD framebuffer развертывает и да, насчет оболочки не прав был, но как я понимаю WinAPI все равно в метро будет использоваться, конечно не в роли оболочки уже. Я имел в виду именно GUI.

                  И да, обращаясь к вам, по-вашему если у нас есть сервер с 4 гигами оперативы и он тянет 100к пользователей забивая 3.5 гига, надо забить остальные 500 мбайт всякой ерундой включая интерфейс? Надо забить загруженный канал передачей FullHD рабочего стола в реальном времени еще добавив там красивую визуализацию того как сервер тормозит? И да, больше всего неожиданностей происходит, когда ты вовсе не дома, и не на работе, а с сервером надо что то делать. Я в легкую могу подключиться к FreeBSD через SSH и парой команд перезапустить mysqld, установить модуль для Apache или подправить что нить в верстке. И это при условии, что я выжрал 30 мбайт своего безлимитного интернета и сижу на резервных 64 кбит в сек. Ну либо я вне города и ловить только EDGE, и то плохо.

                  Скорости растут — согласен. Но вместе с ними растет мобильность, растут нагрузки на сети, и находиться ты можешь где угодно, что скорость может быть как на DialUP. И необходимо иметь универсальный метод доступа к серверу и уметь этим доступов быстро и надежно орудовать.
                  • 0
                    Как будто наличие GUI на сервере запрещает SSH.
          • 0
            «Последние 5-7 лет мы все наблюдаем явление, которое аналитики называют консьюмеризацией ИТ» – слова-то какие мудреные напридумывали! IMHO дерьмо надо прямо называть дерьмом.
            • 0
              Пару недель назад пробовал под Win8+VS2012 сделать Metro App на VB.NET(4.5)+WPF.
              В общем по сравнению с просто VB.NET(4.0)+WPF (VS2010) — не много нового. Чувствуется прямое логично продолжение именного WPF подхода, только доведённого до определённой формации — плиточки и нормальная поддержка сенсорного ввода.
              Однако, некоторые (или многие) неймспейсы и классы .NET уже не получается использовать как раньше, они выпилены в неизвестном направление.
              А приложение простое — плитки, контент и элементы интерфейса подгружаются из XML и файлов с диска… выходит что-то интерактивного каталога или книги.
              Был бы ещё просто способ размещать в магазине (хоть как бесплатное приложение), так до ума довёл бы.
            • –1
              Спасибо за статью!
              • +3
                Слишком кастрированный API, особенно работа с файлами и кодген…
                • 0
                  А каких возможностей работы с файлами вам не хватает в Метро окружении?
                  • 0
                    Элементарно — доступа к файлам за пределами Known Folders и папки программы.
                    Т.е. метрошный файловый менеджер под тач захотите написать, например — фик.
                • 0
                  Есть мнение, что указанная диаграмма компонент не совсем правильно отражает реальную действительность. Подробнее можно посмотреть здесь: тыц. Вкратце: WinRT может базироваться на WinAPI как и все остальные обертки.
                  • 0
                    Ага, особенно на ARM, где WinAPI не будет.
                    • 0
                      А можно поподробнее? Где Microsoft заявляла, что WinAPI на ARM не будет? Другое дело, что его нельзя будет использовать на ARM-устройствах, в отличие от x86-64.

                      Вот здесь я вижу обратную картину: тыц.
                      • 0
                        Это где-нибудь документировано? Полагаться на недокументированные функции, присутствовавшие в бете и пре-релизе одной версии ОС не слишком надёжно, они могут исчезнуть в любой момент.
                  • 0
                    вот так армию C# разработчиков превращают в армию программ для планшета
                    • 0
                      C# разработчики ваще лютая армия. Сейчас допишу коммент и пойду писать на C# для iOs
                      • 0
                        Вот только поставил Виндоус 8 на лишний ноутбук, первые впечатления: теперь ОС стало две, с плиткой и обычная, без меню пуск, как 3.11, косвенно эти догадки подтверждает наличие целых двух интерент эксплореров.
                        поэтому возник ряд непониманий:
                        1) почему некоторые приложения в метро стиле, а некоторые нет (например, скайп доступен из плитки только и в полноэкранном режиме, а вижуал студия открывается как оконное приложение)?
                        2) такая двойственность будет всегда или просто ещё не успели допилить? если всегда, то по какому принципу выбирать разработчику, какой интерфейс для приложения выбрать?
                        3) почему все абсолютно плиточные приложения (даже календарь!) просят залогинитсья в мс аккаунт и так дико медленно стартуют, что приходится их не закрывать, а держать свёрнутыми, чтобы они запускались быстро?
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            3) Все, это все что принадлежат МС? Календарь существует в облаке, что бы синхронизировать события. Медленно стартуют обычно те, кто к интернетам при старте лезет. Глупый баг, должны поправить

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

                          Самое читаемое