ENABLE_BITCODE xcode 7'de ne yapar?


262

Katıştırılmış bit kod terimiyle ilgili bir sorunum var.
Katıştırılmış bit kodu nedir? Yeni Xcode'da ne
zaman etkinleştirilir ENABLE_BITCODE? Xcode 7'de
etkinleştirildiğinde ikili ENABLE_BITCODEdosyaya ne olur ?

Yanıtlar:


312

Bitcode , kodun türünü ifade eder: iTunes Connect'e gönderilen "LLVM Bitcode". Bu, Apple'ın uygulamaları daha da optimize etmek için belirli hesaplamaları kullanmasına olanak tanır (örn: yürütülebilir boyutların küçültülmesi). Apple, yürütülebilir dosyalarınızı değiştirmeniz gerekiyorsa, yeni bir yapı yüklenmeden bunu yapabilirler.

Bu, şunlardan farklıdır: Apple'ın, uygulamanın çözünürlüğüne ve mimarisine dayalı olarak bir kullanıcının cihazı için uygulamanızı optimize etmesini sağlayan dilimleme işlemi. Dilimleme için Bitcode gerekmez. (Örn: yalnızca 5 saniyede @ 2x görüntüler dahil)

Uygulama İnceltme , dilimleme, bit kodu ve isteğe bağlı kaynakların birleşimidir

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.

Uygulama İnceltme Hakkında Apple Belgeleri


Alıntıladığınız hiçbir şey, bit kodunu etkinleştirmenin kullanıcının cihazındaki uygulamanın boyutunu azalttığını söylemez. Bitcode'un 3x veya 2x gibi kaynaklarla hiçbir ilgisi yoktur.
user102008

1
Yine, kaynakların kodla ilgili Bitcode ile ilgisi yoktur. Sadece belirli kod mimarilerinin ve kaynakların belirli sürümlerinin kullanıcıları tarafından indirme işlemi, Bitcode ile ilgisi olmayan Slicing'dir.
user102008

7
Apple'ın uygulama boyutunuzu azaltmasına izin verdiğini kabul etmiyorum. Bunu hiçbir yerde söylemiyor. "Apple'ın uygulamanızın yeni bir sürümünü mağazaya göndermenize gerek kalmadan gelecekte uygulama ikili kodunuzu gelecekte en iyi duruma getirmesine izin vereceğim" yazıyor, yani Apple'ın uygulamanızı yeni bir mimari için yeniden derlemesine izin veriyor bu mimariyi içeren yeni bir sürüm göndermenize gerek kalmadan yeni bir mimariye sahip yeni bir cihaz çıkıyor.
user102008

2
Hayır, dilimleme uygulama kaynaklarınızı belirli cihazlar için gruplara ayırıyor. Bitcode, Apple'ın belirli bir mimari için yürütülebilir dosya oluşturmasına izin veren şeydir.
Jon Shier

2
@JonShier Apple, "Dilimleme, farklı hedef cihazlar için uygulama paketinin varyantlarını oluşturma ve sunma işlemidir. Bir varyant, yalnızca hedef cihaz için gereken yürütülebilir mimariyi ve kaynakları içerir" Bu nedenle dilimleme yalnızca yürütülebilir kod VE kaynaklara sahip belirli bir cihaz için.
keji

80

Katıştırılmış bit kodu nedir?

Dokümanlara göre :

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.

Güncelleme: "Xcode 7'deki Yeni Özellikler" deki bu ifade, uygulama boyutunu küçültmek için Dilimleme için Bitcode'un uzun süre gerekli olduğunu düşünmemi sağladı :

App Store'a gönderilmek üzere arşivlediğinizde, Xcode uygulamanızı bir ara gösterimde derler. App Store daha sonra bit kodunu 64 veya 32 bit yürütülebilir dosyalara derler.

Ancak bu doğru değildir, Bitcode ve Dilimleme bağımsız olarak çalışır: Dilimleme , uygulama boyutunu küçültmek ve uygulama paketi varyantları oluşturmakla ilgilidir ve Bitcode belirli ikili optimizasyonlarla ilgilidir. Bunu, bitcode olmayan uygulamaların yürütülebilir dosyalarındaki mimarileri kontrol ederek ve yalnızca gerekli olanları içerdiklerini tespit ederek doğruladım.

Bitcode diğer verir App İnceltme denilen bileşen Dilimleme uygulama grubunun oluşturmak için belirli mimarileri için belirli yürütülebilir ile varyantları, örneğin iPhone 5S varyantı, sadece yürütülebilir arm64 vb iPad Mini ARMv7 ve içerecektir.

Yeni Xcode'da ENABLE_BITCODE ne zaman etkinleştirilir?

İ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 ve tvOS uygulamaları için bit kodu gereklidir.

Yeni Xcode'da ENABLE_BITCODE etkinleştirildiğinde ikili dosyaya ne olur?

Xcode 7 referansından:

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 deposuna 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.

İşte Bitcode'un daha iyi anlaşılmasına yardımcı olacak birkaç bağlantı :


ENABLE_BITCODE varsa ancak App Store'a göndermeden önce "Bitcode dahil" seçeneğinin işaretini kaldırırsam bit kodu eklenir mi?
allaire

"İOS uygulamaları için, bitcode varsayılan, ancak isteğe bağlıdır." Ha ..? Tekrar gel..? VEYA Opsiyonel Değil ..?
NpC0mpl3t3

@ NpC0mpl3t3 yanıtta belirtildiği gibi iOS uygulamaları için isteğe bağlıdır, ancak watchOS ve tvOS uygulamaları için gereklidir.
Maxim Pavlov

Mükemmel yardım! Buradaki cevap, bit kodunun nasıl devre dışı bırakılacağını gösterir: stackoverflow.com/a/41418824/9190
Guerry

20

Kesin soru "bit kodunu ne etkinleştirir" olduğundan, şimdiye kadar anladığım birkaç ince teknik ayrıntı vermek istiyorum. Apple'ın bu derleyici için kaynak kodunu serbest bırakana kadar bunların çoğunu% 100 kesin olarak anlamak neredeyse imkansız

İlk olarak, Apple'ın bit kodu LLVM bayt kodu ile aynı görünmüyor . En azından aralarında herhangi bir benzerlik bulamadım. Özel bir üstbilgiye (her zaman "xar!" İle başlar) ve muhtemelen veri kopyalarını önleyen bazı bağlantı zamanı referans sihrine sahip gibi görünüyor. Sabit kodlanmış bir dize yazarsanız, bu dize normal LLVM bayt kodu olsaydı beklenenden iki kez yerine verilere yalnızca bir kez konur.

İkinci olarak, bitcode gerçekten ikili arşivde beklendiği gibi ayrı bir mimari olarak gönderilmez. X86 ve ARM'nin bir ikili dosyaya (FAT arşivi) konulduğu gibi gönderilmez. Bunun yerine, mimariye özgü MachO ikili dosyasında "__LLVM" adlı, desteklenen her mimariyle (yani çoğaltılan) gönderilen özel bir bölüm kullanırlar. Bunun derleyici sistemiyle kısa bir süre geldiğini ve çoğaltılmasını önlemek için gelecekte düzeltilebileceğini varsayıyorum.

C kodu (ile derlendi clang -fembed-bitcode hi.c -S -emit-llvm):

#include <stdio.h>

int main() {
    printf("hi there!");
    return 0;
}

LLVM IR çıkışı:

; ModuleID = '/var/folders/rd/sv6v2_f50nzbrn4f64gnd4gh0000gq/T/hi-a8c16c.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"

@.str = private unnamed_addr constant [10 x i8] c"hi there!\00", align 1
@llvm.embedded.module = appending constant [1600 x i8] c"\DE\C0\17\0B\00\00\00\00\14\00\00\00$\06\00\00\07\00\00\01BC\C0\DE!\0C\00\00\86\01\00\00\0B\82 \00\02\00\00\00\12\00\00\00\07\81#\91A\C8\04I\06\1029\92\01\84\0C%\05\08\19\1E\04\8Bb\80\10E\02B\92\0BB\84\102\148\08\18I\0A2D$H\0A\90!#\C4R\80\0C\19!r$\07\C8\08\11b\A8\A0\A8@\C6\F0\01\00\00\00Q\18\00\00\C7\00\00\00\1Bp$\F8\FF\FF\FF\FF\01\90\00\0D\08\03\82\1D\CAa\1E\E6\A1\0D\E0A\1E\CAa\1C\D2a\1E\CA\A1\0D\CC\01\1E\DA!\1C\C8\010\87p`\87y(\07\80p\87wh\03s\90\87ph\87rh\03xx\87tp\07z(\07yh\83r`\87th\07\80\1E\E4\A1\1E\CA\01\18\DC\E1\1D\DA\C0\1C\E4!\1C\DA\A1\1C\DA\00\1E\DE!\1D\DC\81\1E\CAA\1E\DA\A0\1C\D8!\1D\DA\A1\0D\DC\E1\1D\DC\A1\0D\D8\A1\1C\C2\C1\1C\00\C2\1D\DE\A1\0D\D2\C1\1D\CCa\1E\DA\C0\1C\E0\A1\0D\DA!\1C\E8\01\1D\00s\08\07v\98\87r\00\08wx\876p\87pp\87yh\03s\80\876h\87p\A0\07t\00\CC!\1C\D8a\1E\CA\01 \E6\81\1E\C2a\1C\D6\A1\0D\E0A\1E\DE\81\1E\CAa\1C\E8\E1\1D\E4\A1\0D\C4\A1\1E\CC\C1\1C\CAA\1E\DA`\1E\D2A\1F\CA\01\C0\03\80\A0\87p\90\87s(\07zh\83q\80\87z\00\C6\E1\1D\E4\A1\1C\E4\00 \E8!\1C\E4\E1\1C\CA\81\1E\DA\C0\1C\CA!\1C\E8\A1\1E\E4\A1\1C\E6\01X\83y\98\87y(\879`\835\18\07|\88\03;`\835\98\87y(\076X\83y\98\87r\90\036X\83y\98\87r\98\03\80\A8\07w\98\87p0\87rh\03s\80\876h\87p\A0\07t\00\CC!\1C\D8a\1E\CA\01 \EAa\1E\CA\A1\0D\E6\E1\1D\CC\81\1E\DA\C0\1C\D8\E1\1D\C2\81\1E\00s\08\07v\98\87r\006\C8\88\F0\FF\FF\FF\FF\03\C1\0E\E50\0F\F3\D0\06\F0 \0F\E50\0E\E90\0F\E5\D0\06\E6\00\0F\ED\10\0E\E4\00\98C8\B0\C3<\94\03@\B8\C3;\B4\819\C8C8\B4C9\B4\01<\BCC:\B8\03=\94\83<\B4A9\B0C:\B4\03@\0F\F2P\0F\E5\00\0C\EE\F0\0Em`\0E\F2\10\0E\EDP\0Em\00\0F\EF\90\0E\EE@\0F\E5 \0FmP\0E\EC\90\0E\ED\D0\06\EE\F0\0E\EE\D0\06\ECP\0E\E1`\0E\00\E1\0E\EF\D0\06\E9\E0\0E\E60\0Fm`\0E\F0\D0\06\ED\10\0E\F4\80\0E\809\84\03;\CCC9\00\84;\BCC\1B\B8C8\B8\C3<\B4\819\C0C\1B\B4C8\D0\03:\00\E6\10\0E\EC0\0F\E5\00\10\F3@\0F\E10\0E\EB\D0\06\F0 \0F\EF@\0F\E50\0E\F4\F0\0E\F2\D0\06\E2P\0F\E6`\0E\E5 \0Fm0\0F\E9\A0\0F\E5\00\E0\01@\D0C8\C8\C39\94\03=\B4\C18\C0C=\00\E3\F0\0E\F2P\0Er\00\10\F4\10\0E\F2p\0E\E5@\0Fm`\0E\E5\10\0E\F4P\0F\F2P\0E\F3\00\AC\C1<\CC\C3<\94\C3\1C\B0\C1\1A\8C\03>\C4\81\1D\B0\C1\1A\CC\C3<\94\03\1B\AC\C1<\CCC9\C8\01\1B\AC\C1<\CCC9\CC\01@\D4\83;\CCC8\98C9\B4\819\C0C\1B\B4C8\D0\03:\00\E6\10\0E\EC0\0F\E5\00\10\F50\0F\E5\D0\06\F3\F0\0E\E6@\0Fm`\0E\EC\F0\0E\E1@\0F\809\84\03;\CCC9\00\00I\18\00\00\02\00\00\00\13\82`B \00\00\00\89 \00\00\0D\00\00\002\22\08\09 d\85\04\13\22\A4\84\04\13\22\E3\84\A1\90\14\12L\88\8C\0B\84\84L\100s\04H*\00\C5\1C\01\18\94`\88\08\AA0F7\10@3\02\00\134|\C0\03;\F8\05;\A0\836\08\07x\80\07v(\876h\87p\18\87w\98\07|\88\038p\838\80\037\80\83\0DeP\0Em\D0\0Ez\F0\0Em\90\0Ev@\07z`\07t\D0\06\E6\80\07p\A0\07q \07x\D0\06\EE\80\07z\10\07v\A0\07s \07z`\07t\D0\06\B3\10\07r\80\07:\0FDH #EB\80\1D\8C\10\18I\00\00@\00\00\C0\10\A7\00\00 \00\00\00\00\00\00\00\868\08\10\00\02\00\00\00\00\00\00\90\05\02\00\00\08\00\00\002\1E\98\0C\19\11L\90\8C\09&G\C6\04C\9A\22(\01\0AM\D0i\10\1D]\96\97C\00\00\00y\18\00\00\1C\00\00\00\1A\03L\90F\02\134A\18\08&PIC Level\13\84a\D80\04\C2\C05\08\82\83c+\03ab\B2j\02\B1+\93\9BK{s\03\B9q\81q\81\01A\19c\0Bs;k\B9\81\81q\81q\A9\99q\99I\D9\10\14\8D\D8\D8\EC\DA\5C\DA\DE\C8\EA\D8\CA\5C\CC\D8\C2\CE\E6\A6\04C\1566\BB6\974\B227\BA)A\01\00y\18\00\002\00\00\003\08\80\1C\C4\E1\1Cf\14\01=\88C8\84\C3\8CB\80\07yx\07s\98q\0C\E6\00\0F\ED\10\0E\F4\80\0E3\0CB\1E\C2\C1\1D\CE\A1\1Cf0\05=\88C8\84\83\1B\CC\03=\C8C=\8C\03=\CCx\8Ctp\07{\08\07yH\87pp\07zp\03vx\87p \87\19\CC\11\0E\EC\90\0E\E10\0Fn0\0F\E3\F0\0E\F0P\0E3\10\C4\1D\DE!\1C\D8!\1D\C2a\1Ef0\89;\BC\83;\D0C9\B4\03<\BC\83<\84\03;\CC\F0\14v`\07{h\077h\87rh\077\80\87p\90\87p`\07v(\07v\F8\05vx\87w\80\87_\08\87q\18\87r\98\87y\98\81,\EE\F0\0E\EE\E0\0E\F5\C0\0E\EC\00q \00\00\05\00\00\00&`<\11\D2L\85\05\10\0C\804\06@\F8\D2\14\01\00\00a \00\00\0B\00\00\00\13\04A,\10\00\00\00\03\00\00\004#\00dC\19\020\18\83\01\003\11\CA@\0C\83\11\C1\00\00#\06\04\00\1CB\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", section "__LLVM,__bitcode"
@llvm.cmdline = appending constant [67 x i8] c"-triple\00x86_64-apple-macosx10.10.0\00-emit-llvm\00-disable-llvm-optzns\00", section "__LLVM,__cmdline"

; Function Attrs: nounwind ssp uwtable
define i32 @main() #0 {
  %1 = alloca i32, align 4
  store i32 0, i32* %1
  %2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8]* @.str, i32 0, i32 0))
  ret i32 0
}

declare i32 @printf(i8*, ...) #1

attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"PIC Level", i32 2}
!1 = !{!"Apple LLVM version 7.0.0 (clang-700.0.53.3)"}

IR'deki veri dizisi aynı zamanda clang optimizasyonu ve diğer kod oluşturma ayarlarına bağlı olarak değişir. Bunun hangi formatta veya herhangi bir şeyde olduğu bilinmiyor.

DÜZENLE:

Twitter'daki ipucunu takiben, tekrar ziyaret etmeye ve onaylamaya karar verdim. Bu blog gönderisini takip ettim ve Apple Archive ikili dosyasını MachO yürütülebilir dosyasından çıkarmak için bitcode çıkarıcı aracını kullandım. Ve Apple Archive'ı xar yardımcı programıyla çıkardıktan sonra, bunu aldım (elbette llvm-dis ile metne dönüştürüldü)

; ModuleID = '1'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"

@.str = private unnamed_addr constant [10 x i8] c"hi there!\00", align 1

; Function Attrs: nounwind ssp uwtable
define i32 @main() #0 {
  %1 = alloca i32, align 4
  store i32 0, i32* %1
  %2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0))
  ret i32 0
}

declare i32 @printf(i8*, ...) #1

attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+ssse3,+cx16,+sse,+sse2,+sse3" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"PIC Level", i32 2}
!1 = !{!"Apple LLVM version 7.0.0 (clang-700.1.76)"}

Gerçekten bitcode olmayan IR ve bitcode IR arasındaki tek önemli fark, dosya adlarının her mimari için sadece 1, 2, vb.

Ayrıca bir ikili dosyaya gömülü bit kodunun optimizasyonlardan sonra oluşturulduğunu doğruladım. -O3 ile derlerseniz ve bit kodunu çıkarırsanız, -O0 ile derlemenizden farklı olur.

Ve sadece ekstra kredi almak için, bir iOS 9 uygulaması indirdiğinizde Apple'ın cihazlara bit kod göndermediğini de doğruladım. __LINKEDIT gibi tanımadığım diğer garip bölümleri de içeriyorlar, ancak __LLVM .__ paketini içermiyorlar ve bu nedenle bir cihazda çalışan son ikili dosyaya bit kodu dahil gibi görünmüyorlar. Garip bir şekilde, Apple hala iOS 32 cihazlarına ayrı 32 / 64bit kodlu şişman ikili dosyalar gönderiyor.


Apple'ın bit kodu çözülebilir mi? Apple şimdi kaynak kodumuzu görebilir mi?
malhal

@malcolmhall, LLVM koduna benziyorsa, sadece tür. LLVM bayt kodu, ayrıştırmayı daha kolay ve daha kullanışlı hale getirebilecek tür bilgilerine ve diğer ipuçlarına sahiptir. Ancak Apple'ın bit kodunda ne olduğunu bilmiyorum. Muhtemelen en azından biraz daha yararlıdır, ancak bu noktada ne kadar yararlı olacağı bilinmemektedir. Her iki şekilde de son derece .NET IL C # kodu neredeyse mükemmel
ayrışmaya

LLVM'nin Bitcode Dosya Formatını gördünüz mü ? Sihirli sayı farklıdır, ancak Apple bunun bit kod formatı olduğunu güçlü bir şekilde ima ediyor.
Jeffery Thomas

"desteklenen her mimariyle (yani çoğaltılmış) gönderilir") çoğaltılmaz, çünkü bit kodu her mach-o dilimi için farklıdır
AlexDenisov

2
Göre twitter.com/mistydemeo/status/644555663373307904 , xar!Apple'ın arşiv dosya biçimidir.
Riking

14

Bit kodu (iOS, watchOS)

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.


Temel olarak bu kavram, bayt kodunun farklı JVM'lerde çalıştırıldığı java'ya biraz benziyor ve bu durumda bit kodu iTune deposuna yerleştiriliyor ve ara kodu farklı platformlara (cihazlara) vermek yerine, ihtiyaç duymayan derlenmiş kodu sağlıyor çalıştırmak için herhangi bir sanal makine.

Bu yüzden bit kodunu bir kez yaratmamız gerekiyor ve mevcut veya gelecek cihazlar için mevcut olacak. Sahip oldukları her platformla uyumlu hale getirmek için Apple'ın baş ağrısı.

Geliştiricilerin yeni platformları desteklemek için değişiklik yapması ve uygulamayı tekrar göndermesi gerekmez.

Apple x64çip tanıttığında iPhone 5s örneğini ele alalım . x86Uygulamalar x64mimariyle tamamen uyumlu olsa da , x64platformu tamamen kullanmak için geliştiricinin mimariyi veya bazı kodu değiştirmesi gerekir. İşlem tamamlandıktan sonra uygulama inceleme için uygulama mağazasına gönderilir.

Bu bit kodu kavramı daha önce başlatılmışsa, geliştiricilerin x64bit mimarisini desteklemek için herhangi bir değişiklik yapması gerekmez .


@ user102008 Dilimleme, Bitcode
keji

@kdogisthebest: Hayır, değil. Bunu hiçbir yerde söylemiyor. WWDC videoyu dilimleme üzerine izledim ve her bit Bitcode'u etkinleştirmekten bahsetmiyor.
user102008

Kurumsal App Store söz konusu olduğunda İnder Kumar Rathore Nasıl ele alınır? kurumsal uygulama mağazası bu özelliği destekliyor mu?
damithH

@damithH Kurumsal uygulama mağazası yok, uygulamaları sunucularımızda tutmamız gerekiyor. Uygulama inceltmenin kurumsal uygulamalarda çalışıp çalışmayacağından emin değilim. Ama bildiğim kadarıyla kurumsal uygulamalar için orada olmamalı
Inder Kumar Rathore

Lütfen cevabınızdaki resmi güncelleyin, Bitcode ile ilgili değil.
hsafarya

5

Güncelleme

Apple, dilimlemenin bit kodunu etkinleştirmekten bağımsız olarak gerçekleştiğini açıkladı. Bunu uygulamada da, bit kodu olmayan bir uygulamanın yalnızca hedef cihaza uygun mimari olarak indirileceği yerlerde gözlemledim.

orijinal

Daha spesifik olarak :

Bitcode. Uygulamanızı, teslim edildiğinde hedef cihazlar için 64 veya 32 bit yürütülebilir dosyalarda derlenen bir ara gösterimde App Store'a gönderilmek üzere arşivleyin.

Dilimleme. Varlık Kataloğu'na dahil edilen ve bir platform için etiketlenen resimler, App Store'un yalnızca kurulum için gerekenleri sunmasına olanak tanır.

Bunu okuduğum şekilde, bit kodunu destekliyorsanız, uygulamanızın indiricileri sadece kendi cihazları için gerekli derlenmiş mimariyi alacaktır.


Uygulama İnceltme kılavuzunda ( developer.apple.com/library/prerelease/ios/documentation/IDEs/… ) "Dilimleme, farklı hedef cihazlar için uygulama paketinin varyantlarını oluşturma ve sunma işlemidir. Bir varyant yalnızca yürütülebilir mimariyi içerir ve hedef cihaz için gereken kaynakları " Uygulamanızın indiricileri yalnızca mimarilerini edinerek Dilimleme'nin bir parçasıdır.
user102008
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.