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

179990d16ee626c318c5ced2068de9d5.pngЭто третья статья из цикла, посвященного обновлению 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.

b545b6caa4a84ac687b15b13c1e8a190.png

Создание нового проекта 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 и лишитесь обратной совместимости.

8fe1ef82a18ada7576feaea46e814c6b.png

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

a27571add87d378caa414102716a7222.png

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

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

23d700f07572514e4acd91af399da331.png

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

7639dd6ce83e0216372ed5e365eef0b8.png

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

2653c14755531a5fe962f8d96bf6542a.png

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

Например:

Открывающий тэг для страницы не , a просто . Вместо надо использовать . Многие стандартные стили будут не найдены и вам необходимо будет воссоздавать их руками. Некоторые свойства у элементов управления изменились или вообще больше не существуют. В результате этого процесса, у меня получилось два практически одинаковых на вид приложения. Cлева Windows Phone 8.0, справа Windows Phone 8.1.ab338b242c63b5a0476b2b5b228ba20b.png

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

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

29599335dc9b6772cbd0044918adec4f.png

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

cd632d379ff742126e5e8bad41546743.png

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

43cbb6b414e3e43ab1656cdefc0896ea.png

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

3d0f736077445c8785313c6893d41466.png

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

© Habrahabr.ru