Xcode derleme seçeneklerinin etkisi “Bitcode'u etkinleştir” Evet / Hayır


239

Dün parse.com kütüphanesiyle ilgili bir ton uyarıyı fark ettim:

ACİL: '[yol] /Parse.framework/Parse (PFAnalytics.o)' bit kodu olmadan oluşturulduğu için tüm bit kodları kaldırılacak. Bit kodu etkinken yeniden oluşturmalısınız (Xcode ayarı ENABLE_BITCODE), satıcıdan güncellenmiş bir kitaplık almalı veya bu hedef için bit kodunu devre dışı bırakmalısınız. Not: Bu gelecekte bir hata olacaktır.

Ben olanlar uyarıyı kaldırmak gerçeğinin farkındayım bu cevap ama AppStore sunulması ve / veya benim app gerçek performansıyla açısından herhangi bir olumsuz etkisi olacak eğer şimdi merak ediyorum.

Xcode, bit kodu hakkında sizi bilgilendirir

Bu ayarın etkinleştirilmesi, hedefin veya projenin, onu destekleyen platformlar ve mimariler için derleme sırasında bit kodu oluşturması gerektiğini gösterir. Arşiv derlemeleri için, uygulama mağazasına gönderilmek üzere bağlı ikili dosyada bit kodu oluşturulur. Diğer derlemeler için, derleyici ve bağlayıcı kodun bit kodu oluşturma gereksinimlerine uygun olup olmadığını kontrol eder, ancak gerçek bit kodu oluşturmaz. [ENABLE_BITCODE]

Ancak bu metinden gerçekten yararlı bir bilgi almıyorum.

  • Bağlantılı yanıtı, olumsuz bir etki yaratmadan ve gelecekteki bir AppStore sunumundan ödün vermeden sorunu çözmek için kullanabilir miyim?
  • ENABLE_BITCODEAslında ne yapıyor , gelecekte isteğe bağlı olmayan bir gereklilik olacak mı?
  • Etkinleştirir / devre dışı bırakırsam performans etkileri var mı?

Yanıtlar:


399
  • ENABLE_BITCODE aslında ne yapıyor, gelecekte isteğe bağlı olmayan bir gereklilik olacak mı?

Hangi seviyede cevap aradığınızdan emin değilim, bu yüzden biraz gezelim. Bunlardan bazıları zaten biliyor olabilirsiniz.

Projenizi oluşturduğunuzda, Xcode clangObjective-C hedeflerini ve swift/ swiftcSwift hedeflerini çağırır . Bu derleyicilerin her ikisi de uygulamayı bir ara gösterimde (IR) derler, bu IR'lerden biri bit kodudur. Bu IR'den, LLVM adlı bir program devralır ve x86 32 ve 64 bit modları (simülatör için) ve arm6 / arm7 / arm7s / arm64 (cihaz için) için gerekli ikili dosyaları oluşturur. Normalde, tüm bu farklı ikili dosyalar, yağ ikili denilen tek bir dosyada toplanır .

ENABLE_BITCODE seçeneği bu son adımı keser. Bir IR bit kodu ikili ile uygulamanın bir sürümünü oluşturur. Bunun bir dizi güzel özelliği var, ancak dev bir dezavantajı var: hiçbir yerde çalışamaz. Bitcode ikili çalıştırılan bir uygulamayı çalıştırmak için, bit kodunun yeniden derlenmesi gerekir ( belki birleştirilmiş veya dönüştürülmüş… Doğru fiilden emin değilim ) bir x86 veya ARM ikili dosyasına.

App Store'a bir bitcode uygulaması gönderildiğinde, Apple bu son adımı uygular ve bitmiş ikili dosyaları oluşturur.

Şu anda, bitcode uygulamaları isteğe bağlıdır, ancak tarih Apple'ın isteğe bağlı şeyleri gereksinimlere dönüştürdüğünü göstermiştir (64 bit desteği gibi). Bu genellikle birkaç yıl sürer, bu nedenle üçüncü taraf geliştiricilerin (Parse gibi) güncelleme zamanı vardır.

  • yukarıdaki yöntemi olumsuz bir etkisi olmadan ve gelecekteki bir uygulama mağazası sunumundan ödün vermeden kullanabilir miyim?

Evet, ENABLE_BITCODE ürününü kapatabilirsiniz ve her şey eskisi gibi çalışacaktır. Apple bitcode uygulamalarını App Store için bir gereklilik haline getirene kadar iyi olacaksınız.

  • Etkinleştirir / devre dışı bırakırsam performans etkileri var mı?

Bunu etkinleştirmek için hiçbir zaman olumsuz performans etkileri olmayacaktır, ancak test için bir uygulamanın dahili dağıtımı daha karmaşık hale gelebilir.

Olumlu etkilere gelince… bu çok karmaşık.

App Store'da dağıtım için Apple, her bir makine mimarisi için (arm6 / arm7 / arm7s / arm64) yağ ikili özellikli bir uygulama yerine uygulamanızın ayrı sürümlerini oluşturur. Bu, iOS cihazlara yüklenen uygulamanın daha küçük olacağı anlamına gelir.

Buna ek olarak, bit kodu yeniden derlendiğinde ( belki bir araya getirilmiş veya kod dönüştürülmüşse… yine doğru fiilden emin değilim ), optimize edilmiştir. LLVM her zaman yeni ve daha iyi optimizasyonlar yaratmaya çalışıyor. Teorik olarak, App Store, LLVM'nin her yeni sürümüyle App Store'daki uygulamanın ayrı sürümünü yeniden oluşturabilir, böylece uygulamanız en son LLVM teknolojisi ile yeniden optimize edilebilir.


19
"Apple, yağ ikili özellikli bir uygulama yerine her makine mimarisi için (arm6 / arm7 / arm7s / arm64) uygulamanızın ayrı sürümlerini oluşturacak. Bu, iOS cihazlarda yüklü uygulamanın daha küçük olacağı anlamına geliyor." Dilimleme bunu yapar. Bu, Bitcode ile ilgisi yoktur.
user102008

10
"ENABLE_BITCODE seçeneği bu son adımı kesiyor." Hiçbir adım atmaz. Tüm mimari ikili dosyalar hala üretilmektedir. Daha sonra EACH mimarisi için PLUS bitcode bilgisi eklenir. Bkz. Stackoverflow.com/a/31030741/102008
user102008

6
Bkz developer.apple.com/library/prerelease/watchos/documentation/... Dilimleme oluşturma ve farklı hedef cihazlar için uygulama paket varyantlarını teslim işlemidir." Bir varyant ancak içeren yürütülebilir mimari hedefi için gerekli olan ve kaynak cihaz."
user102008

7
Bitcode'u etkinleştirmenin, cihaza yüklenen uygulamayı Bitcode devre dışı bırakıldığından daha küçük hale getireceği doğru bir ifade değildir. Bunu hiçbir yerde söylemiyor.
user102008

7
@ onmyway133 Tüm satıcılar kaynak sağlamaz. Sağlayıcının sağladığı tüm statik bir lib ve başlık dosyaları (veya bir Çerçeve) ise, satıcının eşyalarını bit kod etkin olarak derlemiş olması gerekir.
Jeffery Thomas

65

Bit kodu oluşturma ayarlarını etkinleştirmek için "Tümü" nü seçtiğinizden emin olun:

Derleme ayarları


35

Bitcode, iOS 9'un yeni bir özelliğidir

Bitcode, derlenmiş bir programın ara gösterimidir. İTunes Connect'e yüklediğiniz ve bit kodu içeren uygulamalar derlenir ve App Store'da bağlanır. Bitcode eklenmesi, Apple'ın uygulamanızın yeni bir sürümünü mağazaya göndermeye gerek kalmadan gelecekte uygulama ikili dosyalarınızı yeniden optimize etmesine olanak tanır.

Not: iOS uygulamaları için, bitcode varsayılan, ancak isteğe bağlıdır. Bit kodu sağlarsanız, uygulama paketindeki tüm uygulamaların ve çerçevelerin bit kodunu içermesi gerekir. WatchOS uygulamaları için bit kodu gereklidir

Bu nedenle, uygulamanızın tüm çerçevelerinde bit kodu etkinleştirilene kadar bit kodunu devre dışı bırakmalısınız.


'Gelecekte uygulama ikili dosyalarınızı yeniden optimize edin' - biraz daha açıklayabilir misiniz?
genaks

Burada şöyle yazıyor: "Bitcode, iOS 9'un yeni bir özelliğidir" ve "[...] WatchOS uygulamaları için bit kodu gereklidir [...]". Peki, iOS 8 altında bir WatchOS uygulaması oluşturmak istersem ne olur?
superpuccio

33

Bitcode kilitlenme raporlamasını zorlaştırır . İşte HockeyApp'tan bir alıntı ( diğer kilitlenme raporlama çözümleri için de geçerlidir ):

App Store'a bir uygulama yüklerken ve "Bitcode" onay kutusunu etkinleştirirken, Apple bu Bitcode derlemesini kullanacak ve cihazlara dağıtmadan önce uçlarında yeniden derleyecektir. Bu, ikili programın yeni bir UUID almasına neden olur ve Xcode aracılığıyla karşılık gelen bir dSYM'yi indirme seçeneği vardır.

Not: Cevap, Ocak 2016'da en son değişiklikleri yansıtacak şekilde düzenlendi


2
Eylül ve Aralık arasında, bu yeni Xcode Organizer dışa aktarma seçeneği ile düzeltildi (alıntı HA howto'daki güncellemeye bakın) ve tekrar kırıldı (çözülmüş HA soruma bakın )
Pavel Zdenek

13

@ vj9 thx. Xcode 7'ye güncelleme yapıyorum. Bana aynı hatayı gösteriyor. "HAYIR" ayarlandıktan sonra iyi oluşturun

resim açıklamasını buraya girin

"HAYIR" ayarla iyi çalışıyor.

resim açıklamasını buraya girin


1
@Septronic YES'i seçmek istiyorsanız. Tüm üçüncü çerçeve desteğinizi kontrol etmeniz gerekir.
zszen

Hedeflerinizin minimum desteklenen iOS sürümünün iOS 6 veya üstü olması gerekir.
shallowThought

9

Bitcode ile ilgili tüm çözümleri burada bulabilirsiniz

Apple Doc'a göre

Bitcode, derlenmiş bir programın ara gösterimidir. İTunes Connect'e yüklediğiniz ve bit kodu içeren uygulamalar derlenecek ve mağazaya bağlanacaktır. Bitcode eklenmesi, Apple'ın uygulamanızın yeni bir sürümünü mağazaya göndermeye gerek kalmadan gelecekte uygulama ikili dosyalarınızı yeniden optimize etmesine olanak tanır.

Xcode, oluşturma süresi boyunca oluşturulan sembolleri varsayılan olarak gizler, böylece Apple tarafından okunamazlar. Yalnızca uygulamanızı iTunes Connect'e yüklerken simgeler eklemeyi seçerseniz, semboller Apple'a gönderilir. Apple'dan kilitlenme raporları almak için simgeler eklemeniz gerekir.

Not: iOS uygulamaları için, bitcode varsayılan, ancak isteğe bağlıdır. WatchOS ve tvOS uygulamaları için bit kodu gereklidir. Bit kodu sağlarsanız, uygulama paketindeki (projedeki tüm hedefler) tüm uygulamaların ve çerçevelerin bit kodunu içermesi gerekir. Uygulamanızı iTunes Connect'i kullanarak dağıttıktan sonra, derleme için Aygıtlar Penceresinde Çökmeleri Görüntüleme ve İçe Aktarma bölümünde açıklanan dSYMs dosyasını indirebilirsiniz.

Apple'ın bit kodunu ve uygulama inceltme hizmetini ilk kez kullanıma sunması askıya alındı, çünkü bir donanım türünden farklı bir donanım türüne yükseltme sorunları ikili dosyaların doğru sürümlerini geri yüklemedi. Bu sorun daha sonra iOS 9.0.2 ile düzeltildi ve özellik yeniden etkinleştirildi.

Bitcode her zaman LLVM derleme ve optimizasyon aşamalarının bir parçası olmuştur, ancak arka uç mantığını Apple sunucularına taşıyarak, optimize etme ve birleştirme aşamalarını geliştirici derleme süresinden App Store dağıtımına taşır. Bu, gelecekte daha yeni ve daha hızlı işlemcileri desteklemek için gelecekteki yeniden optimizasyon veya yeniden çeviri potansiyelinin kilidini açar. WatchOS ve tvOS dağıtımları için bit kodu dağıtımları gereklidir ve proje ayarlarındaki "Bitcode'u Etkinleştir" seçeneğiyle mevcut iOS dağıtımları için koşullu olarak etkinleştirilebilir. Bu hata ayıklama sürümleri için bir bayrak embed-bitcode-marker ve arşiv / cihaz yapıları için embed-bitcode ekleyecektir. Bunlar Swift derleyicisine -embed-bitcode ile veya -fembed-bitcode ile clang kullanılarak aktarılabilir.

Bitcode'un bazı dezavantajları da vardır.Geliştiriciler, Apple'a gönderilen ikili dosyaya karşılık gelen hata ayıklama simgelerinin kopyalarını saklayarak uygulamalardan kilitlenme raporlarında hata ayıklayabilir. Belirli bir yığında bir kilitlenme meydana geldiğinde, geliştirici bu hata ayıklama sembollerini kullanarak kilitlenme raporunu sembolize ederek orijinal yığın izlemesini geri yükleyebilir. Bununla birlikte, semboller ara formun ikiliye çevrilmesinin bir yan ürünüdür; ancak bu adım sunucuda yapılırsa, bu bilgiler kaybolur. Apple, geliştiricinin uygulama yayınlama sırasında hata ayıklama simgelerini yüklemesi koşuluyla hata ayıklayıcının bir bölümünü çalabilen bir çökme raporlama hizmeti sunar. Geliştiricinin hiçbir zaman tam ikili görmemesi, yeni donanım geliştikçe belirli sorunları test edemeyecekleri anlamına gelir.

Son olarak, sunucudaki bit kodu geliştikçe yeni mimarileri ve komut setlerini desteklemek için çevrilebilir. Hizalama ve kelimelerin arama kurallarını ve boyutlarını koruyabilmeleri koşuluyla, bir bitcode uygulaması farklı mimari türlerine çevrilebilir ve özellikle yeni bir işlemci için optimize edilebilir. Matematik ve vektör rutinleri için standart kütüphaneler kullanılıyorsa, bunlar belirli bir uygulama için en iyi performansı elde etmek üzere işlemciye özgü vektör talimatlarına göre optimize edilebilir. Optimize ediciler, birden fazla farklı kodlama üretebilir ve boyut veya yürütme hızına göre karar verebilir.

Daha fazla bilgi için Lütfen Buraya ve Buraya bakın


6

Gönderen docs

  • yukarıdaki yöntemi olumsuz bir etkisi olmadan ve gelecekteki bir uygulama mağazası sunumundan ödün vermeden kullanabilir miyim?

Bitcode, apple'ın uygulamayı başka bir derleme göndermenize gerek kalmadan optimize etmesine izin verecektir. Ancak, bu özelliği yalnızca uygulama paketindeki tüm çerçevelerde ve uygulamalarda bu özellik etkinleştirilmişse etkinleştirebilirsiniz. Olması yardımcı olur, ancak olmamasının olumsuz bir etkisi olmamalıdır.

  • ENABLE_BITCODE aslında ne yapıyor, gelecekte isteğe bağlı olmayan bir gereklilik olacak mı?

İOS uygulamaları için bit kodu varsayılan, ancak isteğe bağlıdır. Bit kodu sağlarsanız, uygulama paketindeki tüm uygulamaların ve çerçevelerin bit kodunu içermesi gerekir. WatchOS uygulamaları için bit kodu gereklidir.

  • Etkinleştirir / devre dışı bırakırsam performans etkileri var mı?

App Store ve işletim sistemi, uygulama sunumunu kullanıcının özel cihazının özelliklerine en az yer kaplayarak uyarlayarak iOS ve watchOS uygulamalarının kurulumunu optimize eder. Uygulama inceltme adı verilen bu optimizasyon, en fazla cihaz özelliğini kullanan, minimum disk alanı kaplayan ve Apple tarafından uygulanabilecek gelecekteki güncellemeleri barındıran uygulamalar oluşturmanıza olanak tanır. Diğer uygulamalar ve içerikler için daha hızlı indirmeler ve daha fazla alan, daha iyi bir kullanıcı deneyimi sağlar.

Performans üzerinde herhangi bir etki olmamalıdır.

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.