Поделиться через


Обновление существующих приложений 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" в меню "Проект". Например:

Choose Migrate to Xamarin.Mac Unified API from the Project menu

Перед запуском автоматической миграции необходимо согласиться с этим предупреждением (очевидно, что у вас должны быть резервные копии и управление версиями перед началом этого приключения):

Agree to this warning before the automated migration will run

Существует два поддерживаемых типа 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-A7348ABAFB23A3F8F2AB-B479-4A4A-A458-A89E7DC349F1. Измените csproj-файл в текстовом редакторе, заменив первый элемент в элементе <ProjectTypeGuids> , как показано ниже.

Edit the csproj file in a text editor, replacing the first item in the ProjectTypeGuids element as shown

Измените элемент Import, содержащий Xamarin.Mac.CSharp.targetsXamarin.Mac.targets следующее:

Change the Import element that contains Xamarin.Mac.targets to Xamarin.Mac.CSharp.targets as shown

Добавьте следующие строки кода после <AssemblyName> элемента:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>

Пример:

Add these lines of code after the <AssemblyName> element

2. Обновление ссылок на проект

Разверните узел "Ссылки" проекта приложения Mac. Изначально будет отображаться ссылка *broken- XamMac , аналогичная этому снимку экрана (так как мы только что изменили тип проекта):

It will initially show a broken- XamMac reference similar to this screenshot

Щелкните значок шестеренки рядом с записью XamMac и выберите "Удалить", чтобы удалить сломанную ссылку.

Затем щелкните правой кнопкой мыши папку "Ссылки" в Обозреватель решений и выберите пункт "Изменить ссылки". Прокрутите страницу до нижней части списка ссылок и поместите проверка рядом с Xamarin.Mac.

Scroll to the bottom of the list of references and place a check besides Xamarin.Mac

Нажмите кнопку ОК , чтобы сохранить изменения ссылок на проект.

3. Удаление MonoMac из пространств имен

Удалите префикс MonoMac из пространств имен в using инструкциях или где бы имя класса не было полным (например, MonoMac.AppKit становится простоAppKit).

4. Типы повторного сопоставления

Были введены собственные типы, заменяющие некоторые ранее используемые типы , например экземпляры (например, экземпляры System.Drawing.RectangleFCoreGraphics.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 для известных проблем и обходных задач.