- PVSM.RU - https://www.pvsm.ru -
Это третья статья из цикла, посвященного обновлению Windows Phone 8.0 приложений до версии 8.1. На этот раз, мы поговорим про самый сложный сценарий – обновление приложения Windows Phone 8.0 (Silverlight) до Windows Phone 8.1 (XAML). Этот процесс не такой прозрачный и понятный как в случае с Silverlight [2] или Windows Store, где есть специальные действия в Visual Studio (Reterget), чтобы поменять сборки и ссылки на них. В нашем случае, придется пересобрать приложение в ручную для новой версии. Этим мы и займемся.
По результатам работы, мы не только обновим приложение до новой платформы 8.1, перейдем на использование WinRT [3] и сможем пользоваться её возможностями, но и получим проект универсального приложения для Phone и Windows с общим кодом.
План работы такой:
У меня есть простое приложение, разработанное под Windows Phone 8.0, которое мы будем обновлять до Windows Phone 8.1.
Приложение состоит из двух проектов: проект Windows Phone приложения и Portable Class Library со всякими нужными классами. Из сторонних библиотек это приложение использует только MVVMLight [4].
Чтобы приложение работало не только на 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 нажимаем Add – New 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.
Например:
В результате этого процесса, у меня получилось два практически одинаковых на вид приложения. Cлева Windows Phone 8.0, справа Windows Phone 8.1.
После того, как приложение 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 [18]
Автор: MissUFO
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/windows-phone/65197
Ссылки в тексте:
[1] Image: http://habrastorage.org/getpro/habr/post_images/179/990/d16/179990d16ee626c318c5ced2068de9d5.png
[2] в случае с Silverlight: http://habrahabr.ru/company/microsoft/blog/230015/
[3] WinRT: http://msdn.microsoft.com/ru-ru/library/windows/apps/dn632424.aspx
[4] MVVMLight: https://www.nuget.org/packages/MvvmLight/
[5] Image: http://habrastorage.org/getpro/habr/post_images/b54/5b6/caa/b545b6caa4a84ac687b15b13c1e8a190.png
[6] Image: http://habrastorage.org/getpro/habr/post_images/8fe/1ef/82a/8fe1ef82a18ada7576feaea46e814c6b.png
[7] Image: http://habrastorage.org/getpro/habr/post_images/a27/571/add/a27571add87d378caa414102716a7222.png
[8] Image: http://habrastorage.org/getpro/habr/post_images/c86/859/ae2/c86859ae2bde8756476d0fb229c18062.png
[9] Image: http://habrastorage.org/getpro/habr/post_images/23d/700/f07/23d700f07572514e4acd91af399da331.png
[10] Image: http://habrastorage.org/getpro/habr/post_images/763/9dd/6ce/7639dd6ce83e0216372ed5e365eef0b8.png
[11] Image: http://habrastorage.org/getpro/habr/post_images/265/3c1/475/2653c14755531a5fe962f8d96bf6542a.png
[12] Image: http://habrastorage.org/getpro/habr/post_images/687/977/7ec/6879777ec151a6894a27b3d2daf155d3.png
[13] Image: http://habrastorage.org/getpro/habr/post_images/ab3/38b/242/ab338b242c63b5a0476b2b5b228ba20b.png
[14] Image: http://habrastorage.org/getpro/habr/post_images/b23/f3c/54a/b23f3c54ae21e2d13ad7f65619033b44.png
[15] Image: http://habrastorage.org/getpro/habr/post_images/295/993/35d/29599335dc9b6772cbd0044918adec4f.png
[16] Image: http://habrastorage.org/getpro/habr/post_images/cd6/32d/379/cd632d379ff742126e5e8bad41546743.png
[17] Image: http://habrastorage.org/getpro/habr/post_images/43c/bb6/b41/43cbb6b414e3e43ab1656cdefc0896ea.png
[18] Universal.zip: https://onedrive.live.com/download?resid=DA8C144CFF7C40EE%21160881
[19] Источник: http://habrahabr.ru/post/229931/
Нажмите здесь для печати.