Совместимость с 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).