Wpływ opcji budowania Xcode "Włącz bitcode" tak/nie

Wczoraj rozpoznałem mnóstwo ostrzeżeń dotyczących parse.com biblioteka:

URGENT: cały bitcode zostanie usunięty, ponieważ ' [path]/Parse.framework/Parse (PFAnalytics.o) " został zbudowany bez kodu bitowego. Należy go przebudować z włączonym kodem bitowym( ustawienie Xcode ENABLE_BITCODE), uzyskać zaktualizowaną bibliotekę od dostawcy lub wyłączyć kod bitowy dla tego celu. Uwaga: w przyszłości będzie to błąd.

Zdaję sobie sprawę z tego, że mogę usunąć te ostrzeżenia za pomocą ta odpowiedź ale teraz zastanawiam się, czy będzie to miało jakikolwiek negatywny wpływ na składanie aplikacji w AppStore i / lub rzeczywistą wydajność mojej aplikacji.

Xcode informuje o bitcode

Aktywacja tego ustawienia wskazuje, że obiekt docelowy lub projekt powinien wygenerować kod bitowy podczas kompilacji dla platform i architektur, które go obsługują. W przypadku kompilacji archiwów bitcode zostanie wygenerowany w powiązanym pliku binarnym w celu przesłania go do app store. Dla innych budów, kompilator i linker sprawdzą, czy kod jest zgodny z wymaganiami dotyczącymi generowania kodu bitowego, ale nie wygeneruje rzeczywistego kodu bitowego. [ENABLE_BITCODE]

Ale nie wyciągam z tego tekstu żadnych naprawdę przydatnych informacji.

  • Czy mogę użyć linked answer, aby obejść problem bez negatywnego wpływu i bez narażania przyszłego zgłoszenia AppStore?
  • co właściwie robi ENABLE_BITCODE, czy będzie to nieobowiązkowe Wymaganie w przyszłość?
  • Czy Jest jakiś wpływ na wydajność, jeśli włączę / wyłączę?
Author: Community, 2015-06-27

7 answers

  • co właściwie robi ENABLE_BITCODE, czy będzie to nieobowiązkowe Wymaganie w przyszłości?
Nie jestem pewien, na jakim poziomie szukasz odpowiedzi, więc zróbmy małą wycieczkę. Część z tego może już wiesz.

Kiedy budujesz swój projekt, Xcode wywołuje clang dla celów Objective-C i swift/swiftc na szybkie cele. Oba te Kompilatory kompilują aplikację do pośredniej reprezentacji (IR), jeden z tych IRs jest bitcode. Z tego IR, program o nazwie LLVM przejmuje i tworzy pliki binarne potrzebne dla trybów x86 32 i 64 bit (dla symulatora) i arm6/arm7/arm7s / arm64 (dla urządzenia). Zwykle wszystkie te różne pliki binarne są zestawiane w jednym pliku o nazwie fat binary .

Opcja ENABLE_BITCODE usuwa ten ostatni krok. Tworzy wersję aplikacji z binarnym kodem bitowym IR. Ma to wiele fajnych funkcji, ale jedną gigantyczną wadę: nie może działać nigdzie. Aby uruchomić aplikację z binarnym kodem bitowym, kod bitowy musi zostać przekompilowany (może zmontowany lub transkodowany... nie jestem pewien poprawnego czasownika) do binarnego x86 lub ARM.

Gdy aplikacja bitcode zostanie przesłana do App Store, Apple zrobi ten ostatni krok i utworzy gotowe pliki binarne.

W tej chwili aplikacje bitcode są opcjonalne, ale historia pokazała, że Apple zamienia opcjonalne rzeczy w wymagania(takie jak obsługa 64 bitów). Zwykle trwa to kilka lat, więc programiści stron trzecich (jak Parse) mają czas na aktualizację.

  • Czy mogę użyć powyższej metody bez negatywnego wpływu i bez narażania przyszłego zgłoszenia appstore?

Tak, możesz wyłączyć ENABLE_BITCODE i wszystko będzie działać tak jak wcześniej. Dopóki Apple nie uczyni aplikacji bitcode wymaganiem dla App Store, wszystko będzie dobrze.

  • Czy Jest jakiś wpływ na wydajność, jeśli włączę / wyłączę?

Tam nigdy nie będzie to miało negatywnego wpływu na wydajność, ale wewnętrzna dystrybucja aplikacji do testowania może być bardziej skomplikowana.

Jeśli chodzi o pozytywne skutki ... cóż, to skomplikowane. W celu dystrybucji w App Store, Apple utworzy osobne wersje aplikacji dla każdej architektury komputera (arm6/arm7/arm7s/arm64) zamiast jednej aplikacji z binarnym plikiem fat. Oznacza to, że aplikacja zainstalowana na urządzeniach z systemem iOS będzie mniejsza.

Dodatkowo, gdy bitcode jest rekompilowany (może zmontowane lub transkodowane... ponownie, nie jestem pewien poprawnego czasownika ), jest zoptymalizowany. LLVM zawsze pracuje nad tworzeniem nowych i lepszych optymalizacji. Teoretycznie, App Store może odtworzyć oddzielną wersję aplikacji w App Store z każdym nowym wydaniem LLVM, dzięki czemu aplikacja może zostać ponownie zoptymalizowana przy użyciu najnowszej technologii LLVM.

 326
Author: Jeffery Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-05 18:52:09

Upewnij się, że wybierzesz "wszystkie", aby znaleźć ustawienia włączanie bitcode build:

Ustawienia budowania

 56
Author: Gamma-Point,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 17:37:54

Bitcode to nowa funkcja iOS 9

Bitcode jest pośrednią reprezentacją skompilowanego programu. Aplikacje przesłane do iTunes Connect zawierające kod bitowy zostaną skompilowane i połączone w sklepie App Store. W tym bitcode pozwoli Apple ponownie zoptymalizować aplikację binarną w przyszłości bez konieczności przesyłania nowej wersji aplikacji do sklepu.

Uwaga: w przypadku aplikacji na iOS bitcode jest domyślny, ale opcjonalny. Jeśli podasz bitcode, wszystkie aplikacje i frameworki w pakiecie aplikacji muszą zawierać kod bitowy. W przypadku aplikacji watchOS wymagany jest bitcode

Więc należy wyłączyć bitcode, dopóki wszystkie struktury aplikacji mają włączone bitcode.

 31
Author: agy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-28 05:17:18

Bitcode utrudnia zgłaszanie awarii . Oto cytat z HockeyApp (który dotyczy również innych rozwiązań raportowania awarii):

Po przesłaniu aplikacji do App Store i pozostawieniu włączonego pola wyboru "Bitcode", Apple użyje tego bitcode build i ponownie skompiluje go na końcu przed dystrybucją na urządzenia. Spowoduje to, że plik binarny otrzyma nowy UUID i istnieje opcja pobrania odpowiedniego dSYM poprzez Xcode.

Uwaga: odpowiedź została edytowana w styczniu 2016 r., aby odzwierciedlić najnowsze zmiany

 29
Author: Alexander Vasenin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-13 17:28:11

@vj9 thx. Aktualizuję do xcode 7 . Pokazuje mi ten sam błąd. Dobrze budować po zestawie " nie "

Tutaj wpisz opis obrazka

Ustaw " nie " to działa dobrze.

Tutaj wpisz opis obrazka

 8
Author: zszen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 04:10:03

Tutaj znajdziesz wszystkie rozwiązania dotyczące Bitcode

Wg Apple Doc

Bitcode jest pośrednią reprezentacją skompilowanego programu. Aplikacje przesłane do iTunes Connect zawierające kod bitowy zostaną skompilowane i połączone w sklepie. W tym bitcode pozwoli Apple ponownie zoptymalizować aplikację binarną w przyszłości bez konieczności przesyłania nowej wersji aplikacji do sklepu.

Xcode ukrywa symbole wygenerowane podczas budowania domyślnie, więc nie są one czytelne przez Apple. Tylko jeśli podczas przesyłania aplikacji do iTunes Connect zdecydujesz się na dołączenie symboli, symbole zostaną wysłane do Apple. Aby otrzymywać raporty o awariach od Apple, musisz dołączyć symbole.

Uwaga: w przypadku aplikacji na iOS bitcode jest domyślny, ale opcjonalny. W przypadku aplikacji watchOS i tvOS wymagany jest bitcode. Jeśli podasz kod bitowy, wszystkie aplikacje i struktury w pakiecie aplikacji (wszystkie cele w projekcie) muszą zawierać kod bitowy. Po dystrybucji aplikacja za pomocą iTunes Connect, można pobrać plik dSYMs dla kompilacji, opisane w przeglądanie i importowanie awarii w oknie urządzenia

[[0]} początkowe wprowadzenie usługi rozrzedzania bitów i aplikacji Apple zostało wstrzymane, ponieważ problemy z aktualizacją z jednego typu sprzętu do innego typu sprzętu nie przywracały odpowiednich wersji binariów. Ten problem został następnie rozwiązany w systemie iOS 9.0.2 i ponownie włączona funkcja.

Bitcode zawsze był częścią fazy kompilacji i optymalizacji LLVM, ale przenosząc logikę zaplecza na serwery Apple, przenosi fazę optymalizacji i montażu z czasu kompilacji dewelopera do wdrożenia App Store. Odblokowuje to potencjał przyszłej ponownej optymalizacji lub tłumaczenia w celu obsługi nowszych i szybszych procesorów w przyszłości. Wdrożenia Bitcode są wymagane dla Systemów watchOS i tvOS i mogą być warunkowo włączone dla istniejących wdrożeń iOS za pomocą opcji "Włącz Bitcode" w ustawienia projektu. Spowoduje to dodanie znacznika embed-bitcode-marker dla kompilacji debugowania i embed-bitcode dla kompilacji archiwów/urządzeń. Można je przekazać do kompilatora Swift z-embed-bitcode lub za pomocą clang z-fembed-bitcode.

Bitcode ma również pewne wady. programiści mogą debugować raporty o awariach z aplikacji, przechowując kopie symboli debugowania odpowiadających binarnym przesyłanym do Apple. Gdy w danym stosie wystąpi awaria, programista może przywrócić oryginalny ślad stosu poprzez Symbol raportu o awarii, używając tych symboli debugowania. Jednak symbole są produktem ubocznym tłumaczenia formy pośredniej na binarną; ale jeśli ten krok zostanie wykonany na serwerze, informacja ta zostanie utracona. Firma Apple zapewnia usługę zgłaszania awarii, która może odgrywać rolę debugera, pod warunkiem, że programista przesłał symbole debugowania w momencie publikacji aplikacji. Fakt, że deweloper nigdy nie widzi dokładnych binarnych oznacza, że mogą nie być w stanie przetestować pod kątem specyficznych problemów w miarę rozwoju nowego sprzętu. Istnieją również pewne obawy dotyczące przekazania Apple władzy do wykonania kompilacji-w tym możliwość wstrzykiwania dodatkowych procedur lub fragmentów kodu - ale ponieważ Apple ma pełną kontrolę nad procesem publikacji, są one obecnie możliwe, niezależnie od tego, czy deweloper używa bitcode czy skompilowanych binariów.

Wreszcie, bitcode na serwerze można przetłumaczyć, aby obsługiwać nowe architektury i instrukcje zestawy w miarę rozwoju. Pod warunkiem, że zachowają konwencję wywołania i rozmiar wyrównania i słów, aplikacja kodu bitowego może zostać przetłumaczona na różne typy architektury i zoptymalizowana specjalnie dla nowego procesora. Jeśli używane są standardowe biblioteki dla funkcji matematycznych i wektorowych, można je zoptymalizować do instrukcji wektorowych specyficznych dla procesora, aby uzyskać najlepszą wydajność dla danej aplikacji. Optymalizatory mogą nawet generować wiele różnych kodowań i oceniać na podstawie rozmiar lub szybkość wykonania.

Aby uzyskać więcej informacji, sprawdź Tutaj i tutaj

 5
Author: Rex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-01 22:39:45

Z docs

  • Czy mogę użyć powyższej metody bez negatywnego wpływu i bez narażania przyszłego zgłoszenia appstore?

Bitcode pozwoli Apple zoptymalizować aplikację bez konieczności przesyłania kolejnej kompilacji. Tę funkcję można jednak włączyć tylko wtedy, gdy wszystkie struktury i aplikacje w pakiecie aplikacji mają tę funkcję włączoną. Posiadanie go pomaga, ale nie powinno mieć żadnego negatywnego wpływu.

  • co oznacza ENABLE_BITCODE rzeczywiście zrobić, będzie to nieobowiązkowy wymóg w przyszłości?

Dla aplikacji iOS bitcode jest domyślny, ale opcjonalny. Jeśli podasz bitcode, wszystkie aplikacje i struktury w pakiecie aplikacji muszą zawierać bitcode. W przypadku aplikacji watchOS wymagany jest bitcode.

  • Czy Jest jakiś wpływ na wydajność, jeśli włączę / wyłączę?

App Store i system operacyjny optymalizują instalację iOS i aplikacji watchOS poprzez dostosowanie dostarczania aplikacji do możliwości konkretne urządzenie użytkownika, o minimalnej powierzchni. Ta optymalizacja, o nazwie App thinning, pozwala tworzyć aplikacje, które korzystają z większości urządzeń funkcje, zajmują minimalną ilość miejsca na dysku i umożliwiają przyszłe aktualizacje które mogą być stosowane przez Apple. Szybsze pobieranie i więcej miejsca na inne aplikacje i treści zapewniają lepsze wrażenia użytkownika.

Nie powinno być żadnego wpływu na wydajność.

 3
Author: vj9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-03 11:45:57