Обновление существующих приложений Mac
Для обновления существующего приложения для использования единого API требуются изменения в самом файле проекта, а также пространства имен и API, используемые в коде приложения.
Дорога к 64 битам
Новые унифицированные API необходимы для поддержки 64-разрядных архитектур устройств из приложения Xamarin.Mac. По состоянию на 1 февраля 2015 г. Apple требует, чтобы все новые отправки приложений в Mac App Store поддерживали 64-разрядные архитектуры.
Xamarin предоставляет средства для Visual Studio для Mac и Visual Studio для автоматизации процесса миграции из классического API в единый API или можно вручную преобразовать файлы проекта. Хотя использование автоматического инструментария настоятельно рекомендуется, в этой статье рассматриваются оба метода.
Прежде чем начать...
Прежде чем обновить существующий код до единого API, настоятельно рекомендуется исключить все предупреждения компиляции. Многие предупреждения в классическом API становятся ошибками после миграции в Единый. Исправление их перед началом проще, так как сообщения компилятора из классического API часто предоставляют указания о том, что нужно обновить.
Автоматическое обновление
После исправления предупреждений выберите существующий проект Mac в Visual Studio для Mac или Visual Studio и выберите "Миграция в Xamarin.Mac Unified API" в меню "Проект". Например:
Перед запуском автоматической миграции необходимо согласиться с этим предупреждением (очевидно, что у вас должны быть резервные копии и управление версиями перед началом этого приключения):
Существует два поддерживаемых типа Target Framework, которые можно выбрать при использовании единого API в приложении Xamarin.Mac:
- Xamarin.Mac Mobile Framework — это та же настроенная платформа .NET, используемая Xamarin.iOS и Xamarin.Android, поддерживающая подмножество полной платформы Desktop . Это рекомендуемая платформа, так как она предоставляет меньшие средние двоичные файлы из-за более высокого поведения связывания.
- Xamarin.Mac .NET 4.5 Framework — эта платформа снова является подмножеством платформы Desktop . Однако он обрезает гораздо меньше полной платформы desktop , чем платформа Mobile и должна "просто работать" с большинством пакетов NuGet или сторонними библиотеками. Это позволяет разработчику использовать стандартные сборки классических приложений , но этот параметр создает более крупные пакеты приложений. Это рекомендуемая платформа, в которой используются сторонние сборки .NET, несовместимые с Xamarin.Mac Mobile Framework. Список поддерживаемых сборок см. в документации по сборкам .
Подробные сведения о целевых платформах и последствиях выбора конкретного целевого объекта для приложения Xamarin.Mac см. в нашей документации по целевым платформам .
Средство в основном автоматизирует все шаги, описанные в разделе "Обновление вручную ", представленном ниже, и является предлагаемым методом преобразования существующего проекта Xamarin.Mac в единый API.
Действия по обновлению вручную
Опять же, после исправления предупреждений выполните следующие действия, чтобы вручную обновить приложения Xamarin.Mac для использования нового единого API:
1. Обновление типа проекта и целевого объекта сборки
Измените вкус проекта в файлах csproj на 42C0BBD9-55CE-4FC1-8D90-A7348ABAFB23
A3F8F2AB-B479-4A4A-A458-A89E7DC349F1
. Измените csproj-файл в текстовом редакторе, заменив первый элемент в элементе <ProjectTypeGuids>
, как показано ниже.
Измените элемент Import, содержащий Xamarin.Mac.CSharp.targets
Xamarin.Mac.targets
следующее:
Добавьте следующие строки кода после <AssemblyName>
элемента:
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
Пример:
2. Обновление ссылок на проект
Разверните узел "Ссылки" проекта приложения Mac. Изначально будет отображаться ссылка *broken- XamMac , аналогичная этому снимку экрана (так как мы только что изменили тип проекта):
Щелкните значок шестеренки рядом с записью XamMac и выберите "Удалить", чтобы удалить сломанную ссылку.
Затем щелкните правой кнопкой мыши папку "Ссылки" в Обозреватель решений и выберите пункт "Изменить ссылки". Прокрутите страницу до нижней части списка ссылок и поместите проверка рядом с Xamarin.Mac.
Нажмите кнопку ОК , чтобы сохранить изменения ссылок на проект.
3. Удаление MonoMac из пространств имен
Удалите префикс MonoMac из пространств имен в using
инструкциях или где бы имя класса не было полным (например, MonoMac.AppKit
становится простоAppKit
).
4. Типы повторного сопоставления
Были введены собственные типы, заменяющие некоторые ранее используемые типы , например экземпляры (например, экземпляры System.Drawing.RectangleF
CoreGraphics.CGRect
). Полный список типов можно найти на странице собственных типов .
5. Исправление переопределения методов
Некоторые AppKit
методы изменили свою подпись, чтобы использовать новые собственные типы (например nint
, ). Если пользовательские подклассы переопределяют эти методы, подписи больше не будут совпадать и будут приводить к ошибкам. Исправление этих переопределений методов путем изменения подкласса в соответствии с новой сигнатурой с помощью собственных типов.
Рекомендации
При преобразовании существующего проекта Xamarin.Mac из классического API в новый унифицированный API следует учитывать при преобразовании существующего проекта Xamarin.Mac в новый унифицированный API, если это приложение использует один или несколько компонентов или пакета NuGet.
Компоненты
При попытке компиляции необходимо также обновить любой компонент, включенный в приложение, до единого API. Для любого включенного компонента замените текущую версию новой версией из хранилища компонентов Xamarin, которая поддерживает единый API и выполните чистую сборку. Любой компонент, который еще не преобразован автором, будет отображать 32-разрядное предупреждение только в хранилище компонентов.
Поддержка NuGet
Хотя мы внесли изменения в NuGet для работы с поддержкой единого API, не было нового выпуска NuGet, поэтому мы оцениваем, как получить NuGet для распознавания новых API.
До этого момента, как и компоненты, необходимо переключить любой пакет NuGet, включенный в проект, на версию, которая поддерживает унифицированные API и выполнить чистую сборку после этого.
Внимание
Если в форме "Ошибка 3 не удается включить как monomac.dll", так и "Xamarin.Mac.dll" в один и тот же проект Xamarin.Mac, ссылка на "Xamarin.Mac.dll" указана явно, хотя на "monomac.dll" ссылается xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null" после преобразования приложения в объединенные API, обычно это связано с компонентом или пакетом NuGet в проекте, который не был обновлен до единого API. Необходимо удалить существующий компонент или NuGet, обновить до версии, поддерживающей объединенные API и выполнить чистую сборку.
Включение 64-разрядных сборок приложений Xamarin.Mac
Для мобильного приложения Xamarin.Mac, преобразованного в единый API, разработчику по-прежнему необходимо включить сборку приложения для 64-разрядных компьютеров из параметров приложения. Дополнительные инструкции по включению 64-разрядных сборок приложений Xamarin.Mac см. в документе "Рекомендации по 32/64-разрядной платформе".
Завершение
Независимо от того, следует ли использовать автоматический или ручной метод для преобразования приложения Xamarin.Mac из классического интерфейса в объединенные API, существует несколько экземпляров, требующих дальнейшего вмешательства вручную. Ознакомьтесь с нашими Советы для обновления кода в документе Единого API для известных проблем и обходных задач.