Format file Mach-O (Objek Mach - .o
)
Di dunia iOS setiap file sumber dikonversi menjadi file objek - ABI [Tentang] File Mach-O [Tentang] yang akan dikemas ke dalam bundel yang dapat dieksekusi akhir (mis. Aplikasi, kerangka kerja ...), file (mis. Perpustakaan ...) dan perilakunya ditentukan oleh Mach-O type
[Tentang]
Package
adalah direktori yang dengan sendirinya menjadi file - opaque file
. Ini dibuat untuk pengalaman pengguna untuk mempersulit membuat beberapa perubahan ke dalam struktur internal yang dapat menyebabkan perilaku program yang tidak dapat diprediksi. Paket digunakan di Document Package
atau dengan a Bundle
. Anda dapat menggunakan Show Package Contents
Finder
Bundle
adalah direktori dengan struktur spesifik untuk mengatur biner (kode yang dapat dieksekusi) dan sumber daya untuk kode itu (misalnya gambar, nibs ...). Bundel berisi file Info.plist
[Tentang] . Bundle dibuat untuk pengalaman pengembang . Juga bisa dikemas. Ada beberapa jenis bundel:
application bundle
- Application target
framework bundle
dan versioned bundle
sebagai subtipe -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Bundel Pengujian UI, Bundel Pengujian Unit)
- lainnya ( bundel
dSYM
[Tentang] )
Application
- .ipa
, .app
[Tentang] - packaged
application bundle
- program yang dapat diluncurkan.
Tests
- packaged
loadable bundle
yang digunakan untuk menguji biner. Arsitektur plug-in memungkinkan kita menambahkan fungsionalitas baru (test case) sebagai modul terpisah ke dalam biner yang ada
Perpustakaan dan Kerangka Kerja
Martin Fowler di InversionOfControl
Pustaka pada dasarnya adalah serangkaian fungsi yang dapat Anda panggil, hari ini biasanya diatur ke dalam kelas. Setiap panggilan berfungsi dan mengembalikan kontrol ke klien.
Kerangka kerja mewujudkan beberapa desain abstrak, dengan lebih banyak perilaku bawaan. Untuk menggunakannya Anda perlu memasukkan perilaku Anda ke berbagai tempat dalam kerangka kerja baik dengan subklasifikasi atau dengan menghubungkannya ke kelas Anda sendiri. Kode kerangka kerja kemudian memanggil kode Anda pada titik-titik ini. Kontrol utama program terbalik, dipindahkan dari Anda ke kerangka kerja. (Pembalikan Kontrol)
Perpustakaan dan Kerangka Kerja di iOS
Library
adalah kumpulan file objek Mach-O [periksa statis atau dinamis] yang dikompilasi untuk satu atau lebih arsitektur.
Static library
- .a
(alias pustaka arsip statis, pustaka bersama statis tertaut [doc] ) - Ketika Anda menambahkannya ke dalam aplikasi Anda, penghubung statis selama waktu kompilasi akan menggabungkan file objek dari pustaka dan mengemasnya bersama dengan file objek aplikasi menjadi satu file yang dapat dieksekusi mengajukan. Kerugiannya adalah file keluaran besar
Dari Xcode 9.0, perpustakaan statis Swift didukung.
Dynamic library
- .dylib
(alias pustaka bersama dinamis, objek bersama, pustaka yang terhubung secara dinamis [doc] ) secara dinamis ditautkan dengan aplikasi yang dapat dieksekusi pada saat memuat atau runtime , tetapi tidak disalin ke dalamnya. Pada praktiknya paket aplikasi akan berisi folder Kerangka dengan .dylib
file. Semua perpustakaan sistem iOS dan macOS adalah dynamic
. Kerugiannya adalah waktu peluncuran yang lambat karena semua perpustakaan dinamis harus disalin dan ditautkan.
[Static vs dynamic linking]
Text-based stub library
- .tbd
[Tentang] , ini adalah tulisan rintisan teks dynamic library
yang terletak di perangkat target. Akibatnya, Anda tidak harus mengemas perpustakaan dinamis ke dalam bundel Anda. Ini memiliki efek ukuran.
Framework
alias binary framework
- .framework
adalah not packaged framework bundle
(agar pengembang dapat dengan mudah melihat header dan sumber daya) yang berisi static or dynamic
pustaka yang dikompilasi , file header, dan sumber daya.
Static framework
berisi static library
paket dengan sumber dayanya.
Dynamic framework
berisi dynamic library
dan sumber daya. Selain itu, kerangka kerja dinamis dapat menyertakan versi berbeda dari perpustakaan dinamis yang sama dalam satu bundel ( versioned bundle
)
[Kerangka kerja statis vs dinamis]
Embedded framework
adalah dynamic framework
yang hidup di kotak pasir aplikasi. Jenis ini dibuat pertama-tama untuk ekstensi untuk membagikan kode dan sumber daya yang sama. Ini tersedia ketika target Penerapan adalah iOS 8+.
Umbrella framework
[Target agregat] adalah kerangka kerja yang berisi kerangka kerja lain. Ini tidak didukung secara resmi di iOS dan itulah sebabnya tidak disarankan bagi pengembang untuk membuatnya [Dok resmi] . Pada kenyataannya itu adalah satu set sub-kerangka kerja (atau Nested Frameworks). Saat Anda membuat kerangka kerja yang memiliki ketergantungan, seorang konsumen (seperti aplikasi) bertanggung jawab untuk menambahkan ketergantungan ini bersama dengan kerangka kerja Anda ke dalam proyek. Sebagai pengembang, wajar untuk mencoba menemukan cara untuk mentransfer tugas ini dari konsumen ke Anda. Akibatnya Anda berpikir bahwa ituUmbrella framework
adalah penyelamatan tetapi biasanya mengarah ke masalah serius dengan mengelola versi dan kompleksitas menciptakan dan mendukungnya.
Fake Framework
- adalah hasil dari operasi tertentu di bawah a static library
untuk membuat bundel dengan .framework
ekstensi yang akan berperilaku sebagai dynamic framework
. Teknik ini digunakan ketika Xcode tidak mendukung pembuatan framework karena tidak memiliki template framework. Salah satu realisasi kerangka palsu . Dengan Xcode 6, Apple telah menambahkan dukungan kerangka kerja iOS.
Modular Framework
[Tentang] -@import
ini adalah kerangka kerja yang berisi.modulemap
file di dalamnya. Modul dapat berisi submodula. Keuntungan utama adalah Anda menghemat waktu membangunModular Framework
.
Universal Library or Framework
(alias Fat) [lipo] [Target agregat] mengandung banyak arsitektur. Misalnya build rilis Anda harus mendukung beberapa lengkungan yang dapat Anda atur melalui Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[Tentang] Anda dapat menggunakan kode pihak ketiga sebagai bagian dari target Anda. Ini memungkinkan Anda untuk menggunakan kembali kode dari banyak sumber seperti - proyek lain, proyek di ruang kerja yang sama, target lain, perpustakaan, kerangka kerja dll.
Cara membangun dan menggunakan Perpustakaan Statis:
Cara membangun dan menggunakan Kerangka Kerja Dinamis [ubah ke statis]
[Sistem Pembuatan Xcode]
[Komponen Xcode]
[Dynamic linker]