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


Совместимость с iOS 9

Даже если вы не планируете сразу добавлять функции iOS 9 в приложение, необходимо перестроить приложения с последней версией Xamarin.

Внимание

Сведения на этой странице предназначены для клиентов с приложениями, уже работающими в App Store, предназначенными для iOS 8 или более ранних версий, которые еще не отправили обновления для совместимости iOS 9. Если вы уже используете последние версии — Xcode 7 и Xamarin.iOS 9 — для разработки приложений ознакомьтесь с введением в iOS 9.

Когда появились первые бета-версии iOS 9, мы определили две проблемы со старыми версиями Xamarin, которые манифестировались как старые приложения, которые не могут запускаться на iOS 9:

  • Приложения, созданные для iOS 8 или более ранних версий, не могут запускаться на 32-разрядных устройствах (включая приложения, созданные с помощью единого API).
  • Сбой P/Invoke с полным путем не указан.

Обновите установку Xamarin до последней версии стабильного канала, а затем перестроите и повторно разверните приложения, исправляет эти две проблемы.

Даже если вы не планируете обновлять приложение с помощью функций iOS 9 сразу, мы рекомендуем повторно создать последнюю версию Xamarin и повторно отправить в App Store.

Это гарантирует, что ваше приложение будет работать в iOS 9 после обновления клиентов. Вы можете продолжать поддерживать iOS 8. Перестроение с помощью последнего выпуска не влияет на целевую версию приложения.

Если при тестировании существующих приложений на iOS 9 возникли дополнительные проблемы, ознакомьтесь с разделом "Улучшение совместимости " ниже.

Обновление с помощью Visual Studio

Рекомендуется явно проверка, что Visual Studio обновляется до последней стабильной версии.

Что касается компонентов, Nugets и других библиотек?

Вам не нужно ожидать новых версий компонентов или Nuget, которые вы используете для решения двух проблем, упоминание выше. Эти проблемы исправлены просто путем повторного создания приложения с помощью последнего стабильного выпуска Xamarin.iOS.

Аналогичным образом, поставщикам компонентов и авторам NuGet не требуется отправлять новые сборки только для устранения двух проблем, упоминание выше. Однако если любой компонент или NuGet использует UICollectionView или загружает представления из Xib-файлов, обновление может потребоваться для устранения проблем совместимости iOS 9, упоминание приведенных ниже.

Улучшение совместимости в коде

Существует несколько случаев шаблонов кода, которые использовались для работы в более ранних версиях iOS критического состояния в iOS 9. Ниже приведены некоторые возможные проблемы (и их решения), которые могут возникнуть при тестировании на iOS 9:

UICollectionViewCell.ContentView Имеет значение NULL в конструкторах

Причина. В iOS 9 конструктор теперь требуется из-за изменений поведения в iOS 9 initWithFrame: в качестве состояния документации UICollectionView. Если вы зарегистрировали класс для указанного идентификатора и необходимо создать новую ячейку, она теперь инициализирована путем вызова его initWithFrame: метода.

ИсправлениеinitWithFrame:: добавьте конструктор следующим образом:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

Связанные примеры: MotionGraph, TextKitDemo

UIView не удается ввести кодировщик при загрузке представления из Xib/Nib

Причина. Конструктор initWithCoder: вызывается при загрузке представления из Xib-файла построителя интерфейсов. Если этот конструктор не экспортируется неуправляемый код, не может вызвать ее управляемую версию. Ранее (например, в iOS 8) IntPtr конструктор был вызван для инициализации представления.

Исправление: создайте и экспортируйте initWithCoder: конструктор следующим образом:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

Связанный пример: чат

Dyld Message: без образа кэша с именем...

В журнале может возникнуть сбой со следующими сведениями:

Dyld Error Message:
Dyld Message: no cache image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

Причина. Это ошибка в собственном компоновщике Apple, которая происходит, когда они делают частную платформу общедоступной (JavaScriptCore был открыт в iOS 7, прежде чем она была частной платформой), а цель развертывания приложения — для версии iOS, когда платформа была закрытой. В этом случае компоновщик Apple будет связываться с частной версией платформы вместо общедоступной версии.

Исправление. Это будет решено для iOS 9, но в этом случае можно применить простое решение: просто нацелиться на более позднюю версию iOS в проекте (в этом случае можно попробовать iOS 7). Другие платформы могут столкнуться с аналогичными проблемами, например, платформа WebKit была открыта в iOS 8 (и поэтому назначение iOS 7 приведет к этой ошибке. Для использования WebKit в приложении следует использовать WebKit 8).