Bagikan melalui


Memperbarui aplikasi Terpadu Xamarin.Mac ke 64-bit

Pada Januari 2018, Apple mengharuskan pengiriman Mac App Store baru menargetkan 64-bit. Aplikasi yang sudah tersedia di Mac App Store harus diperbarui ke target 64-bit pada Juni 2018.

Templat proyek File>New Xamarin.Mac membuat aplikasi 64-bit secara default, sehingga aplikasi yang baru dibuat sudah kompatibel dengan 64-bit dan tidak akan memerlukan perubahan apa pun.

Menargetkan 64-bit

  1. Buka jendela Opsi Proyek untuk aplikasi Xamarin.Mac Anda:

    The contextual menu for the project

  2. Pilih Mac Build dan atur Arsitektur yang didukung ke x86_64:

    Setting the supported architectures to x86_64

  3. Jika aplikasi Anda memiliki dependensi eksternal seperti referensi asli atau proyek pengikatan, perbarui ke target 64-bit.

Kesalahan

Pertama kali Anda membuat atau menjalankan aplikasi dengan dukungan 64-bit, Anda mungkin mengalami kesalahan tautan dari clang atau masalah runtime. Kesalahan ini dapat terjadi jika dependensi pihak ketiga — misalnya, referensi asli dalam proyek Xamarin.Mac atau pengikatan Anda, atau kerangka kerja di seluruh sistem yang dimuat secara manual — belum diperbarui ke 64-bit.

Tip

Mengonversi proyek Anda menjadi 64-bit adalah perubahan besar dan mungkin secara tidak langsung mengungkap berbagai kesalahan pemrograman. Secara khusus dapat mengubah ukuran dan penyelarasan struktur data, yang akan memengaruhi tanda tangan p/invoke dan kode asli yang ditautkan dalam proyek Anda. Pertimbangkan untuk meninjau peringatan build apa pun yang diberikan dan menguji aplikasi Anda secara menyeluruh setelahnya untuk menangkap potensi masalah.

Contoh kesalahan yang dihasilkan dari dependensi pihak ketiga yang ditautkan secara dinamis yang tidak menargetkan 64-bit:

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

Kesalahan ini dapat diikuti pada runtime dengan dlopen mengembalikan IntPtr.Zero alih-alih handel yang diharapkan.

Contoh kesalahan yang dihasilkan dari dependensi pihak ketiga yang ditautkan secara statis yang tidak menargetkan 64-bit:

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

Agar berhasil membangun dan menjalankan, perbarui dependensi ini ke 64-bit dan kompilasi ulang aplikasi Anda.