Microsoft — мировой лидер в области ПО и ИТ-услуг
763,08
рейтинг
17 июля 2014 в 11:46

Разработка → Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)



Это третья статья из цикла, посвященного обновлению Windows Phone 8.0 приложений до версии 8.1. На этот раз, мы поговорим про самый сложный сценарий – обновление приложения Windows Phone 8.0 (Silverlight) до Windows Phone 8.1 (XAML). Этот процесс не такой прозрачный и понятный как в случае с Silverlight или Windows Store, где есть специальные действия в Visual Studio (Reterget), чтобы поменять сборки и ссылки на них. В нашем случае, придется пересобрать приложение в ручную для новой версии. Этим мы и займемся.

По результатам работы, мы не только обновим приложение до новой платформы 8.1, перейдем на использование WinRT и сможем пользоваться её возможностями, но и получим проект универсального приложения для Phone и Windows с общим кодом.
План работы такой:
  • Создание нового проекта Windows Phone 8.1
  • Перенос кода
  • Перенос интерфейса
  • Создание проекта Windows Store

У меня есть простое приложение, разработанное под Windows Phone 8.0, которое мы будем обновлять до Windows Phone 8.1.

Приложение состоит из двух проектов: проект Windows Phone приложения и Portable Class Library со всякими нужными классами. Из сторонних библиотек это приложение использует только MVVMLight.



Создание нового проекта Windows Phone 8.1


Чтобы приложение работало не только на Windows Phone 8.1, но и на предыдущих версиях Windows Phone, придется продолжить поддерживать проект Windows Phone 8.0 на ряду с новым проектом.

Самым оптимальным решением будет создать проект Windows Phone 8.1 рядом в этом же Solution и максимально переиспользовать код на оба проекта.

Второй вариант – в существующем проекте поправить ссылки на библиотеки автоматически, используя действие Retarget to Windows Phone 8.1. Но тогда вы получите Silverlight 8.1 приложение, а не XAML и лишитесь обратной совместимости.



По этому пути мы не пойдем и будем создавать рядом еще одно приложение для Windows Phone 8.1.
В Visual Studio нажимаем AddNew Project. В качестве шаблона проекта выбираем Blank App.



Перенос кода


Нам очень повезло, что проект использует MVVM, код надежно отделен от интерфейса и у нас есть Portable Class Library где уже лежат вспомогательные классы и объекты. Если у вас этого нет, то вынесете модели, контроллеры и логику в PCL. Получится что-то близкое к структуре на картинке ниже.



Подключаем готовый PCL к проекту для Windows Phone 8.1 и добавляем остальные используемые библиотеки.



Теперь надо аккуратно копировать файлы из проекта Windows Phone 8.0 и устранять все что будет ломаться. Это не так быстро, как кажется, но достаточно рутинно.
В скопированных файлах лучше поменять пространство имен, чтобы избежать конфликтов в Solution. Быстро это сделать можно используя возможность Find and Replace.



Если ваше приложение Windows Phone 8.0 поддерживало несколько языков, и вы использовали файлы ресурсов для локализации, то важно знать, что в 8.1 просто в папке Resources их оставлять уже нельзя. Необходимо будет создать новые файлы ресурсов и перенести туда данные.



Перенос интерфейса


Если попробовать скомпилировать и запустить приложение – нас постигнет неудача. Весь интерфейс в XAML файлах будет ругаться. В моём двухстраничном приложении 44 ошибки.
К счастью, они все типовые и касаются пространств имен, элементов управления или их свойств. Новый Windows Phone 8.1 использует WinRT и там может не оказаться элементов управления и свойств, которые вы использовали в Silverlight Toolkit.



Например:
  • Открывающий тэг для страницы не <phone:PhoneApplicationPage …>, a просто <Page …>.
  • Вместо <phone:PhoneApplicationPage.Resources> надо использовать <Page.Resources>.
  • Многие стандартные стили будут не найдены и вам необходимо будет воссоздавать их руками.
  • Некоторые свойства у элементов управления изменились или вообще больше не существуют.

В результате этого процесса, у меня получилось два практически одинаковых на вид приложения. Cлева Windows Phone 8.0, справа Windows Phone 8.1.



Создание проекта Windows Store


После того, как приложение Windows Phone 8.1 заработает, можно пойти дальше и расширить его до Windows Store приложения, чтобы опубликовать в магазин Windows.
Этот процесс не такой трудоемкий как предыдущий. Необходимо в контекстном меню проекта выбрать Add Windows 8.1



Создастся два новых проекта: проект для Windows Store приложения и проект Shared для общего кода между Windows 8.1 и Phone 8.1 приложениями.



В Shared проект можно перенести большую часть кода, a часть xaml превратить в элементы управления (user controls) и повторно использовать.



Если запустить Windows приложение, то оно будет так же очень похоже на Phone приложение и над более удобным дизайном придется еще поработать отдельно.



Заключение


Мы получили три приложения: Windows Phone 8.0, Windows Phone 8.1 и Windows Store 8.1.

Весь код и другие переиспользуемые файлы были вынесены из Windows Phone 8.1 и Windows Store проектов в Shared проект для общего кода или Portable Class Library.

В проекте для Windows Phone 8.0 часть кода тоже была вынесена в PCL, но интерфейс и все возможности, требующие старого API остались в этом проекте.

Скачать готовый пример можно тут: Universal.zip



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


Новая Windows Phone 8.1. Что делать разработчику приложений?
Обновляем Windows Phone Silverlight 8.0 приложение до Windows Phone Silverlight 8.1
Превращаем Windows Store приложение в универсальное
Бесплатные онлайн-курсы по технологиям
Загрузить бесплатную или пробную Visual Studio 2013
Стать разработчиком приложений Windows Phone
Примеры кода с основными возможностями Windows Phone 8.1 (c#, c++, javascript)
Автор: @MissUFO
Microsoft
рейтинг 763,08
Microsoft — мировой лидер в области ПО и ИТ-услуг

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

  • 0
    Что-то с терминологией и документацией пока какая-то беда. Раньше приложения под WP8.1 назывались Windows Phone Silverlight 8.1 App и Windows Phone Store App. Сейчас ещё нашёл упоминание Windows Runtime XAML app.

    Документация тоже хромает:
    The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
    Переключить не удаётся.
    • 0
      Да, документации пока не много, особенно на русском.
  • +1
    Такое ощущение, что легче заново переписать все страницы под WP8.1. а всю логику впихнуть в PCL.
    • 0
      Так оно и есть. Или править существующие страницы или просто переписать их, если ошибок очень много.
  • 0
    Тут еще такая петрушка, что помимо продвигаемых плюх в новой WP8.1 XAML, в частности отсутствует возможность использовать WCF (невозможно даже сборки в проект добавить). При чем, если мне не изменяет память и я читал достоверные источники, отказались от WCF в WP8.1 XAML по причине дедлайна — они не успевали, а откладывать релиз из-за этого не решились.

    Интересно узнать, какие еще ограничения накладывает WP8.1 XAML?
    • 0
      У меня есть простое приложение, разработанное под Windows Phone 8.0, которое мы будем обновлять до Windows Phone 8.1.


      Как обычно проблема в деталях, а именно в размере приложения :)

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

Самое читаемое Разработка