Обновление существующих приложений iOS

Выполните следующие действия, чтобы обновить существующее приложение Xamarin.iOS для использования единого API.

Для обновления существующего приложения для использования единого API требуются изменения в самом файле проекта, а также пространства имен и API, используемые в коде приложения.

Дорога к 64 битам

Новые унифицированные API необходимы для поддержки 64-разрядных архитектур устройств из мобильного приложения Xamarin.iOS. По состоянию на 1 февраля 2015 г. Apple требует, чтобы все новые отправки приложений в iTunes App Store поддерживали 64-разрядные архитектуры.

Xamarin предоставляет средства для Visual Studio для Mac и Visual Studio для автоматизации процесса миграции из классического API в единый API или можно вручную преобразовать файлы проекта. Хотя использование автоматического инструментария настоятельно рекомендуется, в этой статье рассматриваются оба метода.

Прежде чем начать...

Прежде чем обновить существующий код до единого API, настоятельно рекомендуется исключить все предупреждения компиляции. Многие предупреждения в классическом API становятся ошибками после миграции в Единый. Исправление их перед началом проще, так как сообщения компилятора из классического API часто предоставляют указания о том, что нужно обновить.

Автоматическое обновление

После исправления предупреждений выберите существующий проект iOS в Visual Studio для Mac или Visual Studio и выберите "Миграция в единый API Xamarin.iOS" в меню "Проект". Например:

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

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

Agree to this warning before the automated migration will run

Средство в основном автоматизирует все шаги, описанные в разделе "Обновление вручную ", представленном ниже, и является предлагаемым способом преобразования существующего проекта Xamarin.iOS в единый API.

Действия по обновлению вручную

Опять же, после исправления предупреждений выполните следующие действия, чтобы вручную обновить приложения Xamarin.iOS для использования нового единого API:

1. Обновление типа проекта и целевого объекта сборки

Измените вкус проекта в файлах csproj на 6BC8ED88-2882-458C-8E55-DFD12B67127BFEACFBD2-3405-455C-9665-78FE426C6842. Измените csproj-файл в текстовом редакторе, заменив первый элемент в элементе <ProjectTypeGuids> , как показано ниже.

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

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

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

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

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

It will initially show a broken- monotouch reference similar to this screenshot because the project type changed

Щелкните правой кнопкой мыши проект приложения iOS для редактирования ссылок, а затем щелкните ссылку monotouch и удалите ее с помощью красной кнопки "X".

Right-click on the iOS application project to Edit References, then click on the monotouch reference and delete it using the red X button

Теперь прокрутите страницу до конца списка ссылок и установите флажок сборки Xamarin.iOS .

Now scroll to the end of the references list and tick the Xamarin.iOS assembly

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

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

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

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

Были введены собственные типы, заменяющие некоторые ранее используемые типы , например экземпляры (например, экземпляры System.Drawing.RectangleFCoreGraphics.CGRect ). Полный список типов можно найти на странице собственных типов .

5. Исправление переопределения методов

Некоторые UIKit методы изменили свою подпись, чтобы использовать новые собственные типы (например nint, ). Если пользовательские подклассы переопределяют эти методы, подписи больше не будут совпадать и будут приводить к ошибкам. Исправление этих переопределений методов путем изменения подкласса в соответствии с новой сигнатурой с помощью собственных типов.

Примеры включают изменение public override int NumberOfSections (UITableView tableView) возвращаемого и изменяющего nint тип возвращаемого типа и типов параметров в public override int RowsInSection (UITableView tableView, int section)nint.

Рекомендации

При преобразовании существующего проекта Xamarin.iOS из классического API в новый унифицированный API следует учитывать при преобразовании существующего проекта Xamarin.iOS в новый унифицированный API, если это приложение использует один или несколько компонентов или пакета NuGet.

Компоненты

При попытке компиляции необходимо также обновить любой компонент, включенный в приложение, до единого API. Для любого включенного компонента замените текущую версию новой версией из хранилища компонентов Xamarin, которая поддерживает единый API и выполните чистую сборку. Любой компонент, который еще не преобразован автором, будет отображать 32-разрядное предупреждение только в хранилище компонентов.

Поддержка NuGet

Хотя мы внесли изменения в NuGet для работы с поддержкой единого API, не было нового выпуска NuGet, поэтому мы оцениваем, как получить NuGet для распознавания новых API.

До этого момента, как и компоненты, необходимо переключить любой пакет NuGet, включенный в проект, на версию, которая поддерживает унифицированные API и выполнить чистую сборку после этого.

Внимание

Если в форме "Ошибка 3 не удается включить как monotouch.dll", так и "Xamarin.iOS.dll" в один и тот же проект Xamarin.iOS, ссылка на "Xamarin.iOS.dll" указана явным образом. хотя на "monotouch.dll" ссылается xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null" после преобразования приложения в объединенные API, обычно это связано с компонентом или пакетом NuGet в проекте, который не был обновлен до единого API. Необходимо удалить существующий компонент или NuGet, обновить до версии, поддерживающей объединенные API и выполнить чистую сборку.

Включение 64-разрядных сборок приложений Xamarin.iOS

Для мобильного приложения Xamarin.iOS, преобразованного в единый API, разработчик по-прежнему должен включить сборку приложения для 64-разрядных компьютеров из параметров приложения. Дополнительные инструкции по включению 64-разрядных сборок приложений Xamarin.iOS см. в документе "Рекомендации по 32/64-разрядной платформе".

Завершение

Независимо от того, следует ли использовать автоматический или ручной метод для преобразования приложения Xamarin.iOS из классического интерфейса в объединенные API, существует несколько экземпляров, требующих дальнейшего вмешательства вручную. Ознакомьтесь с нашими Советы для обновления кода в документе Единого API для известных проблем и обходных задач.