Bagikan melalui


Kompatibilitas iOS 9

Bahkan jika Anda tidak berencana untuk langsung menambahkan fitur iOS 9 ke aplikasi, Anda harus membangun kembali aplikasi Anda dengan versi terbaru Xamarin.

Penting

Informasi di halaman ini adalah untuk pelanggan dengan aplikasi yang sudah ada di App Store yang menargetkan iOS 8 atau yang lebih lama, yang belum mengirimkan pembaruan untuk kompatibilitas iOS 9. Jika Anda sudah menggunakan versi terbaru - Xcode 7 dan Xamarin.iOS 9 - untuk pengembangan aplikasi Anda, kunjungi pengantar iOS 9.

Ketika beta iOS 9 pertama muncul, kami mengidentifikasi dua masalah dengan versi Xamarin lama yang dimanifestasikan sebagai aplikasi lama yang tidak dapat dimulai di iOS 9:

  • Build aplikasi untuk iOS 8 atau versi lebih lama tidak dapat dimulai pada perangkat 32-bit (termasuk aplikasi yang dibangun dengan API Terpadu).
  • P/Invoke gagal dengan jalur lengkap tidak ditentukan.

Memperbarui penginstalan Xamarin Anda ke rilis Saluran Stabil terbaru, lalu membangun kembali dan menyebarkan ulang aplikasi Anda, memperbaiki kedua masalah ini.

Bahkan jika Anda tidak berencana untuk segera memperbarui aplikasi dengan fitur iOS 9, kami sarankan Anda membuat ulang dengan versi terbaru Xamarin dan mengirimkan ulang ke App Store.

Ini akan memastikan bahwa aplikasi Anda akan berjalan di iOS 9 setelah pelanggan Anda meningkatkan. Anda dapat terus mendukung iOS 8 - membangun kembali dengan rilis terbaru tidak memengaruhi versi target aplikasi.

Jika Anda memiliki masalah lebih lanjut saat menguji aplikasi yang ada di iOS 9, baca bagian Meningkatkan Kompatibilitas di bawah ini.

Memperbarui dengan Visual Studio

Disarankan agar Anda secara eksplisit memeriksa apakah Visual Studio diperbarui ke versi Stabil terbaru.

Bagaimana dengan Komponen, Nuget, dan pustaka lainnya?

Anda tidak perlu menunggu versi baru dari Komponen atau Nuget apa pun yang Anda gunakan untuk mengatasi dua masalah yang disebutkan di atas. Masalah ini diperbaiki hanya dengan membangun ulang aplikasi Anda dengan rilis Stabil terbaru Xamarin.iOS.

Demikian pula, Vendor komponen dan penulis NuGet tidak diharuskan untuk mengirimkan build baru hanya untuk memperbaiki dua masalah yang disebutkan di atas. Namun, jika ada Komponen atau NuGet yang menggunakan UICollectionView atau memuat tampilan dari file Xib , pembaruan mungkin diperlukan untuk mengatasi masalah kompatibilitas iOS 9 yang disebutkan di bawah ini.

Meningkatkan Kompatibilitas dalam Kode Anda

Ada beberapa kasus pola kode yang digunakan untuk bekerja di versi pemecahan iOS yang lebih lama di iOS 9. Berikut adalah beberapa kemungkinan masalah (dan solusinya) yang mungkin muncul saat pengujian di iOS 9:

UICollectionViewCell.ContentView null dalam konstruktor

Alasan: Di iOS 9 initWithFrame: konstruktor sekarang diperlukan, karena perubahan perilaku di iOS 9 sebagai status dokumentasi UICollectionView. Jika Anda mendaftarkan kelas untuk pengidentifikasi yang ditentukan dan sel baru harus dibuat, sel sekarang diinisialisasi dengan memanggil metodenya initWithFrame: .

Perbaikan: Tambahkan initWithFrame: konstruktor seperti ini:

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

Sampel terkait: MotionGraph, TextKitDemo

UIView gagal memulai dengan coder saat memuat tampilan dari Xib/Nib

Alasan:initWithCoder: Konstruktor adalah yang dipanggil saat memuat tampilan dari file Xib Penyusun Antarmuka. Jika konstruktor ini tidak diekspor kode tidak terkelola tidak dapat memanggil versi terkelola kami. Sebelumnya (misalnya di iOS 8) IntPtr konstruktor dipanggil untuk menginisialisasi tampilan.

Perbaikan: Buat dan ekspor initWithCoder: konstruktor seperti ini:

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

Sampel terkait: Obrolan

Pesan Dyld: tidak ada gambar cache dengan nama...

Anda mungkin mengalami crash dengan informasi berikut di log:

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

Alasan: Ini adalah bug di linker asli Apple, yang terjadi ketika mereka membuat kerangka kerja privat publik (JavaScriptCore dibuat publik di iOS 7, sebelum itu adalah kerangka kerja privat), dan target penyebaran aplikasi adalah untuk versi iOS ketika kerangka kerja bersifat privat. Dalam hal ini, linker Apple akan menautkan dengan versi privat kerangka kerja, bukan versi publik.

Perbaikan: Ini akan ditangani untuk iOS 9, tetapi ada solusi mudah yang dapat Anda terapkan sendiri sementara itu: cukup targetkan versi iOS selanjutnya dalam proyek Anda (Anda dapat mencoba iOS 7 dalam hal ini). Kerangka kerja lain mungkin menunjukkan masalah serupa, misalnya kerangka kerja WebKit dipublikasikan di iOS 8 (sehingga menargetkan iOS 7 akan mengakibatkan kesalahan ini; Anda harus menargetkan iOS 8 untuk menggunakan WebKit di aplikasi Anda).