Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

в 7:46, , рубрики: silverlight, Visual Studio, windows phone, windows store, WinRT, XAML, Блог компании Microsoft, разработка под windows phone

Обновляем 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.0 приложение до Windows Phone 8.1(XAML)

Создание нового проекта 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.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

Перенос кода

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

Например:

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

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

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

Обновляем Windows Phone 8.0 приложение до Windows Phone 8.1(XAML)

Заключение

Мы получили три приложения: 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

Автор: MissUFO

Источник


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


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