Apa perbedaan antara Embedded Binaries dan Linked Frameworks

87

Saat menggunakan kerangka kerja eksternal, Xcode sekarang memiliki Binari Tertanam serta Kerangka Tertaut .

masukkan deskripsi gambar di sini

Saat Anda mengunduh kerangka eksternal dan Finder-> seret ke Xcode, itu akan menempatkan kerangka kerja ke Kerangka dan Perpustakaan Tertaut .

Saat Anda membangun perpustakaan dengan Kartago, disarankan untuk menyeret ke Binari Tersemat .

Keduanya tampaknya bekerja dalam hal keterkaitan, karena API tersedia dengan cara apa pun, lebih jauh lagi saat menambahkan kerangka kerja ke dalam Binari Tersemat apakah itu juga secara otomatis ditambahkan ke dalam Kerangka dan Perpustakaan Tertaut bagian .

Jadi siapa yang benar? Kartago atau bagian internet lainnya? dan mengapa ada 2 opsi untuk memasukkan sumber daya eksternal ke dalam proyek Xcode?

Maxim Veksler
sumber
Dan apakah itu berfungsi saat Anda mengujinya di perangkat?
trojanfoe
@trojanoe ya itu benar.
Maxim Veksler
Itu tidak masuk akal, kecuali jika 1) di bagian biner tersemat atau 2) memiliki langkah build untuk menyalin framework ke dalam app bundle selama proses build.
trojanfoe
2
Carthage merekomendasikan untuk menarik ke "Embedded Binaries" hanya untuk aplikasi OSX. Untuk iOS, mereka merekomendasikan hanya "Kerangka Kerja dan Perpustakaan Tertaut".
Sialan

Jawaban:

72
  1. Menghubungkan- Kita harus menautkan kerangka kerja jika kita menggunakan API apa pun yang ditentukan di dalamnya.

  2. Penyematan - Proses ini akan memastikan kerangka kerja tambahan akan disematkan dalam App bundle, dan berpotensi membantu berbagi kode antara aplikasi, dan bundel ekstensi apa pun. Kami hanya menyematkan kerangka kerja pihak ketiga dan bukan yang disediakan oleh iOS karena sudah tersedia di perangkat. Jika kita menyematkan, itu artinya, kita perlu menautkannya juga sehingga Xcode dapat mengkompilasi dan membuat build. Saat aplikasi berjalan di perangkat, framework yang disematkan akan dimuat ke memori saat diperlukan.

Shripada
sumber
1
Apa yang Anda maksud dengan bagian "saat dibutuhkan"? Apakah itu berarti framework yang disematkan dimuat saat diperlukan selama runtime? Juga, menurut Anda kapan penautan akan terjadi untuk kerangka kerja dinamis?
Bartosss
Apakah ada kasus yang kita perlukan embeddan bukan link? Dan sebaliknya? Dan mengapa?
allenlinli
Saya pikir Anda hanya perlu menautkan kerangka kerja yang API-nya Anda gunakan secara langsung dalam kode, ketergantungan transitif yang tidak dirujuk dalam kode aplikasi seharusnya hanya disematkan jika saya benar.
Werner Altewischer
15

Jika Anda menyematkan biner, itu akan dimasukkan ke dalam produk Anda. Jika Anda hanya menautkan pustaka atau kerangka kerja tanpa menyematkannya, itu tidak akan menjadi bagian dari produk Anda.

Namun, di iOS8 semua kerangka kerja pihak ketiga harus "disematkan". Bahkan kerangka kerja yang digunakan bersama di antara berbagai program perlu "disematkan" ke setiap program tersebut. Dalam kasus di mana ia diinstal pada perangkat di lokasi bersama, proses penginstalan lain yang menggunakan kode "tertanam" yang sama dari lokasi bersama dapat menggunakan kembali penginstalan yang ada. Ini khusus untuk iOS8, belum mungkin sebelum iOS8 dan di luar dunia iOS jawaban ini tidak akan akurat.

Basti
sumber
2
"Menyematkan biner akan mempermudah penginstalan produk Anda untuk pengguna seandainya mereka belum memiliki penginstalan yang berfungsi di mesin mereka" terdengar seperti OSX, bukan iOS ... jika mereka tidak memiliki perpustakaan diinstal (yaitu non-standar) maka aplikasi tidak mau memuat.
trojanfoe
itu tidak hanya tidak memuat, @trojanfoe, itu akan ditolak dan Anda tidak dapat menginstalnya di tempat pertama (kecuali Anda adalah pengembang atau menggunakan akun Perusahaan ...)
dogsgod
Kerangka yang terhubung secara dinamis dimungkinkan sejak iOS 8
Basti
Saat pengguna menginstal aplikasi Anda dan jika aplikasi tersebut menyertakan framework yang ditautkan secara dinamis, framework tersebut dapat dicari secara otomatis. Namun, ini adalah poin tambahan yang mungkin gagal selama proses penginstalan pengguna, meningkatkan kesalahan pengeditan tautan yang menghentikan aplikasi. Jadi saya tidak melihat alasan mengapa jawabannya hanya berlaku untuk OS X dan bukan untuk iOS. Harap lebih spesifik jika Anda melihat ruang untuk perbaikan terkait jawaban saya. Atau upvote jawaban itu untuk membuat sesama pengembang menjadi anggota SO penuh, jika menurut Anda jawabannya sudah akurat;)
Basti
Itu aspek opsional untuk jawaban Anda yang saya keberatan. Jika frameworknya adalah pihak ketiga, maka framework tersebut harus menjadi bagian dari app bundle. Titik. Ini juga sebagian besar berlaku untuk aplikasi OSX juga (tentu saja untuk aplikasi yang didistribusikan melalui Mac App Store).
trojanfoe
0

Linkinglebih lanjut tentang Linkeryang berfungsi pada waktu kompilasi atau waktu muat / jalankan. Linker salin a Libraryke biner target. Karena Frameworkbersifat otonom, Linkerdalam hal ini, bertanggung jawab untuk menemukan dan menautkan di Dynamic Frameworkdalam jalur pemuat sistem atau untuk menemukan dan menautkan di dalam bundel .

Embeddingadalah proses menyalin biner ke biner target. Hasilnya akan ditempatkan di dalam.

Baca lebih lanjut di sini

yoAlex5
sumber
-3

Untuk saya pahami, biner tertanam hanya menyertakan kerangka dinamis yang tersedia di iOS 8 ke atas, jika tidak, Anda hanya dapat menautkan kerangka kerja yang statis.

Lei Zhang
sumber