Вплив параметрів побудови Xcode "Увімкнути біткод" Так / Ні


239

Вчора я визнав тонни попереджень щодо бібліотеки parse.com:

НЕПІШНО: весь біткод буде скинутий, оскільки "[шлях] /Parse.framework/Parse (PFAnalytics.o)" був побудований без біт-коду. Ви повинні відновити його з увімкненим біт-кодом (налаштування Xcode ENABLE_BITCODE), отримати оновлену бібліотеку від постачальника або відключити біт-код для цієї мети. Примітка. Це буде помилка в майбутньому.

Мені відомо про те, що я можу зняти це попередження з цією відповіддю, але зараз мені цікаво, чи це матиме якийсь негативний вплив на подання AppStore та / або фактичну ефективність мого додатка.

Xcode повідомляє вас про біткод

Активізація цього параметра вказує на те, що мета або проект повинні генерувати бітовий код під час компіляції для платформ та архітектур, які його підтримують. Для архівів будується бітовий код у зв'язаному бінарному файлі для подання в магазин додатків. Для інших збірок компілятор і лінкер перевірять, чи відповідає код вимогам до генерування бітового коду, але не генерують фактичний біт-код. [ENABLE_BITCODE]

Але я не отримую жодної дійсно корисної інформації з цього тексту.

  • Чи можна використовувати пов’язану відповідь, щоб обійти проблему без будь-якого негативного впливу та без шкоди для подальших подань AppStore?
  • Що ENABLE_BITCODEнасправді робить, чи це буде необов'язковою вимогою в майбутньому?
  • Чи є якісь ефекти на ефективність, якщо я вмикаю / вимикаю її?

Відповіді:


399
  • Що насправді робить ENABLE_BITCODE, чи це буде необов'язковою вимогою в майбутньому?

Я не впевнений, на якому рівні ви шукаєте відповідь, тому давайте трохи поїдемо. Дещо з цього ви, можливо, вже знаєте.

Коли ви будуєте проект, Xcode викликає clangцілі Objective-C та swift/ swiftcдля цілей Swift. Обидва ці компілятори складають додаток до проміжного представлення (IR), один з цих ІК - це біт-код. З цього ІЧ програма під назвою LLVM бере на себе і створює двійкові файли, необхідні для 32-ти і 64-бітних режимів x86 (для імітатора) та arm6 / arm7 / arm7s / arm64 (для пристрою). Зазвичай всі ці різні двійкові файли об'єднуються в один файл, який називається жировим двійковим файлом .

Параметр ENABLE_BITCODE вирізає цей останній крок. Він створює версію програми з бінарним ІЧ-кодом. Це має ряд приємних особливостей, але один гігантський недолік: він не може працювати нікуди. Для того, щоб застосувати додаток з бінарним кодом біт-коду для запуску, біткод потрібно перекомпілювати ( можливо, зібрати або перекодувати… Я не впевнений у правильному дієслові ) у бінарний файл x86 або ARM.

Коли додаток з біткодом буде подано в App Store, Apple зробить цей останній крок і створить готові бінарні файли.

Зараз додатки для біткодів не є обов'язковими, але історія показує, що Apple перетворює необов'язкові речі (наприклад, 64-бітну підтримку) Зазвичай це займає кілька років, тому сторонні розробники (наприклад, Parse) встигають оновитись.

  • Чи можу я використовувати вищезазначений метод без негативного впливу та без шкоди для подальших подань додатка?

Так, ви можете вимкнути ENABLE_BITCODE, і все працюватиме так само, як і раніше. Поки Apple не зробить додатки для біткодів необхідними для App Store, у вас все буде добре.

  • Чи є якісь ефекти на ефективність, якщо я вмикаю / вимикаю її?

Ніколи не буде негативних наслідків для продуктивності для його включення, але внутрішній розподіл програми для тестування може ускладнитися.

Що стосується позитивних впливів… ну це складно.

Для розповсюдження в App Store, Apple створить окремі версії вашої програми для кожної архітектури машини (arm6 / arm7 / arm7s / arm64) замість одного додатка з жирним двійковим файлом. Це означає, що додаток, встановлений на пристроях iOS, буде менше.

Крім того, коли біткод перекомпільований ( можливо, зібраний чи перекодований… знову ж таки, я не впевнений у правильності дієслова ), він оптимізований. LLVM завжди працює над створенням нових кращих оптимізацій. Теоретично App Store може відтворити окрему версію додатка в App Store з кожним новим випуском LLVM, щоб ваш додаток можна було оптимізувати за допомогою найновішої технології LLVM.


19
"Apple створить окремі версії вашої програми для кожної архітектури машини (arm6 / arm7 / arm7s / arm64) замість одного додатка з жирним бінарним файлом. Це означає, що додаток, встановлений на пристроях iOS, буде меншим." Ось що робить Слізінг. Це не пов'язано з біткодом.
user102008

10
"Параметр ENABLE_BITCODE вирізає цей останній крок." Це не вирізає жодного кроку. Усі архітектурні бінарні файли все ще виробляються. Інформація про бітовий код PLUS додається для архітектури EACH. Див stackoverflow.com/a/31030741/102008
user102008

6
Див. Developer.apple.com/library/prerelease/watchos/documentation/… "Розрізання - це процес створення та доставки варіантів пакету програм для різних цільових пристроїв. Варіант містить лише виконувану архітектуру та ресурси, необхідні для цілі пристрій. "
користувач102008

7
Це неправдиве твердження, що включення Bitcode зробить додаток, встановлений на пристрої, меншим порівняно з тим, коли Bitcode вимкнено. Ніде це не говорить.
користувач102008

7
@ onmyway133 Не всі постачальники надають джерело. Якщо все, що постачає постачальник, - це статичні файли lib та заголовків (або Framework), то постачальник повинен мати свої дані, зібрані з біт-кодом.
Джеффі Томас

65

Переконайтесь, що виберіть "Усі", щоб знайти налаштування включення біт-коду:

Створіть налаштування


35

Біткод - нова функція iOS 9

Біткод - це проміжне представлення складеної програми. Програми, які ви завантажуєте в iTunes Connect, які містять бітовий код, будуть зібрані та зв’язані в App Store. У тому числі біт-код дозволить Apple в майбутньому повторно оптимізувати ваш бінарний додаток без необхідності подавати нову версію вашого додатка в магазин.

Примітка. Для програм iOS біткод є типовим, але необов’язковим. Якщо ви надаєте біт-код, всі програми та рамки в комплекті додатків повинні включати біт-код. Для додатків watchOS необхідний біткод

Тож вам слід відключити біткод, доки всі рамки вашої програми не ввімкнули біт-код.


"У майбутньому повторно оптимізуйте бінарний додаток" - можете пояснити трохи більше?
генакс

Тут йдеться про те, що: "Біткод - це нова функція iOS 9" і що "[...] Для додатків watchOS потрібен біткод [...]". Отже, що робити, якщо я хотів би створити додаток WatchOS під iOS 8?
superpuccio

33

Біткод ускладнює звітність про збої . Ось цитата від HockeyApp (що також стосується будь-яких інших рішень щодо звітування про аварії):

Завантажуючи додаток у App Store і залишаючи прапорець "Біткод" увімкненим, Apple буде використовувати цю збірку біткоду та повторно компілювати її в кінці перед розповсюдженням її на пристрої. Це призведе до того, що двійковий файл отримає новий UUID і є можливість завантажити відповідний dSYM через Xcode.

Примітка. Відповідь було відредаговано січня 2016 року, щоб відобразити останні зміни


2
У період з вересня по грудень це вдалося виправити через новий варіант експорту організатора Xcode Organizer (див. Оновлення в цитованому хау-хау) та знову зламано (див. Моє вирішене питання щодо HA )
Павел Зденек

13

@ vj9 thx. Я оновлюю до xcode 7. Це показує мені ту саму помилку. Побудувати добре після встановлення "НІ"

введіть тут опис зображення

встановити "НІ", він працює добре.

введіть тут опис зображення


1
@Septronic Якщо ви бажаєте вибрати YES. Вам потрібно перевірити всю свою третю підтримку.
zszen

Ваша цільова мінімально підтримувана версія iOS має бути iOS 6 або вище.
неглибокаДоля

9

Тут ви можете знайти все рішення щодо Bitcode

Відповідно до Apple Doc

Біткод - це проміжне представлення складеної програми. Програми, які ви завантажуєте в iTunes Connect, які містять біткод, будуть складені та зв’язані в магазині. У тому числі біт-код дозволить Apple в майбутньому повторно оптимізувати ваш бінарний додаток без необхідності подавати нову версію вашого додатка в магазин.

Xcode приховує символи, згенеровані за час збірки за замовчуванням, тому вони не читаються Apple. Тільки якщо ви вирішите включити символи під час завантаження програми в iTunes Connect, символи будуть надіслані Apple. Ви повинні містити символи, щоб отримувати звіти про аварії від Apple.

Примітка. Для програм iOS біткод є типовим, але необов’язковим. Для додатків watchOS та tvOS необхідний бітовий код. Якщо ви надаєте біт-код, всі додатки та рамки в комплекті додатків (усі цілі в проекті) повинні включати біт-код. Після розповсюдження програми за допомогою iTunes Connect ви можете завантажити файл dSYM для збірки, описаний у розділі Перегляд та імпорт збоїв у вікні пристроїв

Первісне розгортання служби Apple з розрідження бітового коду та додатків було припинено, оскільки проблеми з оновленням одного типу апаратних засобів до іншого типу апаратних засобів не відновили правильні версії бінарних файлів. Згодом цю проблему було вирішено за допомогою iOS 9.0.2 та функцію повторно увімкнено.

Біткод завжди був частиною фаз компіляції та оптимізації LLVM, але, переміщуючи логіку зворотнього зв'язку на сервери Apple, він переміщує фази оптимізації та збирання з часу компіляції розробника до розгортання App Store. Це розблоковує потенціал майбутньої повторної оптимізації або повторного перекладу для підтримки нових і швидших процесорів у майбутньому. Розгортання біткодів необхідні для розробки програм satOS та tvOS, і їх можна умовно включити для існуючих розгортань iOS за допомогою параметра "Увімкнути біткод" у налаштуваннях проекту. Це додасть прапор вбудованого біта-маркера прапор для налагодження збірок, а також вбудований бітовий код для архівів / пристроїв. Вони можуть бути передані компілятору Swift з -embed-бітовим кодом або за допомогою clang з -fembed-бітовим кодом.

Біткод також має деякі недоліки.Розробники можуть налагоджувати звіти про збої в програмах, зберігаючи копії символів налагодження, що відповідають двійковому файлу, який був відправлений Apple. Коли в даному стеку відбувається збій, розробник може відновити початковий слід стека, символізуючи звіт про збій, використовуючи ці символи налагодження. Однак символи є побічним продуктом перекладу проміжної форми у бінарний; але якщо цей крок зроблений на сервері, ця інформація втрачається. Apple надає послугу звітування про збої, яка може грати роль налагоджувача за умови, що розробник завантажив символи налагодження під час публікації програми. Той факт, що розробник ніколи не бачить точних бінарних засобів, означає, що вони можуть не мати змоги перевірити конкретні проблеми в міру розвитку нового обладнання.

Нарешті, біт-код на сервері можна перекласти для підтримки нових архітектур та наборів інструкцій у міру їх розвитку. За умови, що вони підтримують умову виклику та розмір вирівнювання та слів, додаток для бітового коду може бути переведений у різні типи архітектури та оптимізований спеціально для нового процесора. Якщо використовуються стандартні бібліотеки для математичної та векторної підпрограм, їх можна оптимізувати в конкретних векторних інструкціях процесора, щоб отримати найкращі показники для даної програми. Оптимізатори можуть навіть генерувати кілька різних кодувань і судити на основі розміру або швидкості виконання.

Для отримання додаткової інформації перегляньте тут і тут


6

Від док

  • Чи можу я використовувати вищезазначений метод без негативного впливу та без шкоди для подальших подань додатка?

Біткод дозволить яблуку оптимізувати додаток, не потребуючи подання іншої збірки. Але ви можете ввімкнути цю функцію лише у тому випадку, якщо для всіх фреймворків та програм у пакеті додатків включена ця функція. Надання допомоги допомагає, але не мати її не повинно мати негативного впливу.

  • Що насправді робить ENABLE_BITCODE, чи це буде необов'язковою вимогою в майбутньому?

Для додатків iOS біткод є типовим, але необов’язковим. Якщо ви надаєте біт-код, всі програми та рамки в комплекті додатків повинні включати біт-код. Для додатків watchOS необхідний біткод.

  • Чи є якісь ефекти на ефективність, якщо я вмикаю / вимикаю її?

App Store та операційна система оптимізують установку програм iOS та watchOS, адаптуючи доставку додатків до можливостей конкретного пристрою користувача, з мінімальними наслідками. Ця оптимізація, що називається розрідженням додатків, дозволяє створювати додатки, які використовують найбільш функціональні можливості пристрою, займають мінімальну кількість дискового простору та вміщують майбутні оновлення, які можуть застосовувати Apple. Швидше завантаження та більше місця для інших програм та вмісту забезпечує кращу роботу користувачів.

Не повинно бути ніяких впливів на ефективність роботи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.