Gömülü İkili Dosyalar ve Bağlantılı Çerçeveler arasındaki fark nedir


87

Harici çerçeve kullanırken Xcode artık bir Gömülü İkili Dosyaya ve Bağlantılı Çerçeveler bölümüne sahiptir.

görüntü açıklamasını buraya girin

Harici bir çerçeve indirdiğinizde ve Finder-> Xcode'a sürüklediğinizde, çerçeveyi Linked Frameworks and Libraries bölümüne yerleştirecektir.

Carthage ile bir kitaplık oluşturduğunuzda, Gömülü İkili Dosyalar bölümüne sürüklemenizi önerir .

API her iki şekilde de kullanılabilir hale geldikçe, her ikisi de bağlantı açısından çalışıyor gibi görünüyor, Gömülü İkililer bölümüne bir çerçeve eklerken daha da fazlası , Bağlantılı Çerçeveler ve Kitaplıklar bölümüne de otomatik olarak ekleniyor .

Peki kim haklı? Kartaca mı yoksa internetin geri kalanı mı? ve neden harici kaynakları Xcode projelerine dahil etmek için 2 seçenek var?


Cihazda test ettiğinizde çalışıyor mu?
trojanfoe

@trojanfoe evet öyle.
Maxim Veksler

Bu, 1) gömülü ikili dosyalar bölümünde veya 2) derleme sırasında çerçeveyi uygulama paketine kopyalamak için bir derleme adımı olmadığı sürece mantıklı değil.
trojanfoe

2
Carthage, yalnızca OSX uygulamaları için "Gömülü İkili Dosyalara" sürüklemeyi önerir. İOS için yalnızca "Bağlantılı Çerçeveler ve Kitaplıklar" önerilir.
Damnum

Yanıtlar:


72
  1. Bağlama - İçinde tanımlanan herhangi bir API kullanırsak bir çerçeveyi bağlamalıyız.

  2. Yerleştirme - Bu süreç, eklenen çerçevenin Uygulama paketine yerleştirilmesini sağlar ve uygulama ile herhangi bir uzantı paketi arasında kod paylaşımına potansiyel olarak yardımcı olur. Cihazda kolayca bulunabildikleri için iOS tarafından sağlananları değil, yalnızca üçüncü taraf çerçevelerini yerleştiriyoruz. Gömüyorsak, bu, Xcode'un derlemeyi derleyip oluşturabilmesi için onlara da bağlanmamız gerektiği anlamına gelir. Uygulama cihazda çalıştığında, gömülü çerçeve gerektiğinde belleğe yüklenecektir.


1
"Gerektiğinde" kısmıyla ne demek istiyorsun? Bu, gömülü çerçevenin çalışma zamanı sırasında ihtiyaç duyulduğunda yüklendiği anlamına mı geliyor? Ayrıca, dinamik bir çerçeve için bağlantının ne zaman olacağını düşünüyorsunuz?
bartosss

embedOna ihtiyacımız olan bir durum var mı link? Ve tam tersi? Ve neden?
allenlinli

Bence sadece API'yi doğrudan kodda kullandığınız çerçeveleri bağlamanız gerekiyor, uygulama kodunda referans verilmeyen geçişli bağımlılıklar, eğer haklıysam gömülmelidir.
Werner Altewischer

15

İkili dosyayı katıştırırsanız, ürününüze dahil edilecektir. Gömmeden sadece bir kitaplık veya çerçeveyi bağlarsanız, ürününüzün bir parçası olmayacaktır.

Ancak, iOS8'de tüm 3. taraf çerçevelerin "gömülü" olması gerekir. Çeşitli programlar arasında paylaşılan bir çerçevenin bile bu programların her birine "yerleştirilmesi" gerekir. Paylaşılan bir konuma aygıta yüklenmesi durumunda, paylaşılan konumdan aynı "katıştırılmış" kodu kullanan diğer tüm kurulum işlemleri, mevcut kurulumu yeniden kullanabilir. Bu, iOS8'e özeldir, iOS8'den önce mümkün değildi ve iOS dünyası dışında bu cevap doğru olmazdı.


2
"İkili dosyayı gömmek, kullanıcı makinelerinde çalışan bir yüklemeye sahip olmadıklarında ürününüzü yüklemeyi kolaylaştıracaktır" OSX gibi geliyor, iOS değil ... eğer kitaplığa sahip değillerse yüklendikten sonra (yani standart değil), uygulama yüklenmez.
trojanfoe

sadece yüklenmez, @trojanfoe, reddedilir ve ilk etapta yükleyemezsiniz (geliştirici değilseniz veya bir Enterprise hesabı kullanmıyorsanız ...)
dogsgod

Dinamik olarak bağlantılı çerçeve, iOS 8
Basti

Kullanıcı uygulamanızı yüklediğinde ve bu uygulama dinamik olarak bağlantılı bir çerçeve içeriyorsa, bu çerçeve otomatik olarak aranabilir. Ancak, bu, kullanıcının yükleme işlemi sırasında başarısız olabilen ve uygulamayı sonlandıran bir bağlantı düzenleme hatasını artıran ek bir noktadır. Bu yüzden cevabın iOS için değil, yalnızca OS X için geçerli olması için hiçbir neden göremiyorum. Cevabımla ilgili iyileştirme alanı görürseniz lütfen daha spesifik olun. Veya cevabın zaten doğru olduğunu düşünüyorsanız, bir geliştiriciyi tam bir SO üyesi yapmak için bu yanıta yükseltin;)
Basti

Cevabınızın, itiraz ettiğim isteğe bağlı yönü bu. Çerçeve 3. taraf ise, uygulama paketinin bir parçası olmalıdır. Dönem. Bu aynı zamanda büyük ölçüde OSX uygulamaları için de geçerlidir (kesinlikle Mac App Store aracılığıyla dağıtılan uygulamalar için).
trojanfoe

0

Linkingdaha fazlası Linkerderleme zamanında veya yükleme / çalıştırma zamanında çalışır. Linker kopyalamak bir Libraryhedef ikili içine. Beri Frameworközerk olan, Linkerbu durumda, find sorumludur ve bağlantı Dynamic Frameworkiçindeki sistem yükleme yoluna bir iç veya bulmak ve bağlantı paket .

Embeddingikiliyi hedef ikiliye kopyalama işlemidir. Sonuç olarak içeride yer alacaktır.

Daha fazlasını buradan okuyun


-3

Anladığım kadarıyla, gömülü ikili yalnızca iOS 8 ve üzeri sürümlerde bulunan dinamik çerçeveyi içerir, aksi takdirde yalnızca statik olan çerçeveyi bağlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.