Нові застереження в iOS 9: "весь біткод буде скинутий"


387

У мене в цьому додатку є таке нове попередження про Google Framework:

(null): НЕПРАВНО: весь біткод буде видалено, оскільки '/ Users / myname / Library / Mobile Documents / com ~ apple ~ CloudDocs / ім'я папки / ім'я програми / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' був побудований без біт-коду . Ви повинні відновити його за допомогою ввімкненого бітового коду (налаштування Xcode ENABLE_BITCODE), отримати оновлену бібліотеку від постачальника або відключити біт-код для цієї мети. Примітка. Це буде помилка в майбутньому.

Xcode 7 дає мені близько 204 попереджень про цю ж концепцію, і я не міг обійтись із цим. Також у мене є проблема з доступом до мережі з мого додатка. Це помилка в області налагодження:

-canOpenURL: не вдалося отримати URL: "kindle: // home" - помилка: "Цей додаток не має права запитувати схему kindle"

Усі ці проблеми в iOS 8 не були.


Отже, ви ввімкнули біткод у своїй цілі Xcode?
Droppy

Вибачте, я новачок у цьому, ви можете мені сказати, як будь ласка?
C.Farrugia

Я ніколи цього не робив, але, схоже, це потрібно щось навмисне встановити. Ви, здається, це зробили.
Droppy

4
@Droppy AFAIK налаштування увімкнено за замовчуванням, але ви можете його деактивувати будь-коли у налаштуваннях вашого проекту.
ВІД

Я їх вимкнув і всі попередження пропали. Я трохи дослідив, і Google повинен оновити їхні рамки, щоб ця помилка була вимкнена, до цих пір просто вимкнення її спрацює. Хто-небудь знає про -canOpenURL: не вдалося отримати URL: "kindle: // home" - помилка: "У цьому додатку заборонено запитувати схему kindle"? Це я поняття не маю, про що говорить Xcode
C.Farrugia

Відповіді:


1023

Ваша бібліотека була складена без біт-коду, але параметр біт-коду включений у налаштуваннях вашого проекту. Скажімо , NOщоб Enable Bitcodeв ваших цільових параметрах збірки і бібліотека параметрів збірки , щоб видалити попередження.

Для тих, хто цікавиться, чи потрібно активувати біткод:

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

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f


@Centurion попередня версія Google Analytics для аналітики застаріла і не компілюється з xcode 7 / ios9, або
zonabi

1
@goelv так, ви маєте змогу надсилати програми з відключеним біт-кодом. зараз це необов’язково. це може стати необхідним у майбутньому.
zonabi

2
НЕ працював у мене для архівування. Проект до XCODE 7 працював нормально, тепер не можна зДАРИТИ навіть при включеному біткоді, встановленому на НІ. Це для бібліотеки AWS.
ort11

1
Помилка отримання помилок після відключення Bitcode для всіх цілей.
datWooWoo

110

Після Xcode 7 опція бітового коду буде включена за замовчуванням. Якщо ваша бібліотека була зібрана без біт-коду, але параметр біт-коду включений у налаштуваннях вашого проекту, ви можете:

  1. Оновіть свою бібліотеку за допомогою бітового коду,
  2. Скажіть "НІ", щоб увімкнути біткод у налаштуваннях цільової збірки

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

І налаштування збірки бібліотеки, щоб видалити попередження.

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

І WWDC 2015 Сесія 102: "Держава платформ Союзу"

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


42

У моєму випадку для уникнення цієї проблеми:

  1. Будьте впевнені, що ви маєте справу з Xcode 7 , а не нижчими версіями. У нижчій версії цього прапора не існує.

  2. Налаштування: Проект> Налаштування збірки> Усі> Параметри збірки> Увімкнути біткод = НІ

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


2
Отже, вам доведеться перекомпілювати бібліотеки, включені до вашого проекту, з XCode7 та з EnableBitcode, встановленим YES. Досить складно, якщо ви працюєте з сторонніми бібліотеками .a.
Хав'єр Калатрава Льєверія

15

Метод canOpenUrlв iOS 9 (через конфіденційність) змінено і більше не вільний для використання. Ваш постачальник банерів перевіряє встановлені додатки, щоб вони не показували банери для програми, яка вже встановлена.

Це дає всі заяви журналу, як

-canOpenURL: не вдалося отримати URL: "kindle: // home" - помилка: "Цей додаток не має права запитувати схему kindle"

Для цього провайдери повинні оновити свою логіку.

Якщо вам потрібно здійснити запит на встановлені програми / доступні схеми, вам потрібно додати їх у свій info.plistфайл.

Додайте ключ "LSApplicationQueriesSchemes" до вашого списку як масив. Потім додайте рядки в цей масив, як 'kindle'.

Звичайно, це насправді не варіант для банерних оголошень (оскільки вони динамічні), але ви все одно можете запитувати таким чином для своїх власних додатків або конкретних інших додатків, таких як Twitter і Facebook.

Документація методу canOpenUrl: метод canOpenUrl:

Документація про ключ LSApplicationQueriesSchemes


Припустимо, що статична бібліотека перевірятиме посилання батьківського додатка, як використовувати виняток "LSApplicationQueriesSchemes" у статичній бібліотеці? Зазвичай у вас немає Info.plist для цього.
loretoparisi

Я не дуже впевнений у цьому, якщо бібліотеці потрібно перевірити наявність додатків поза її батьком, батько повинен визначити URL-адресу в своєму info.plist (так задокументуйте це для фреймворку). Якщо canOpenUrl також не повертається, батьківська програма не зможе це впоратися, тоді, як слід (я припускаю), також включіть їх у info.plist
Сарен Іден

13

Якщо ви використовуєте CocoaPods і хочете відключити біткод для всіх бібліотек, використовуйте наступну команду в Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end

8

Відмова: Це призначено для тих, хто підтримує робочий процес безперервної інтеграції, який потребує автоматизованого процесу. Якщо цього немає, будь ласка, використовуйте Xcode, як описано у відповіді Хав'єра .

Мені це вдалося встановити ENABLE_BITCODE = NOза допомогою командного рядка:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

Зауважте, що це, ймовірно, нестабільно для версій Xcode. Він був протестований з Xcode 7.0.1 і був частиною проекту Cordova 4.0.



-2

Це питання було нещодавно фіксованими (листопад 2010 року) з допомогою Google см https://code.google.com/p/analytics-issues/issues/detail?id=671 . Але майте на увазі, що як хороший виправлення це приносить більше помилок :)

Вам також доведеться дотримуватися переліченого тут методу ініціалізації: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Останні вказівки дадуть вам головний біль, оскільки в ньому посилаються на утиліти, які не входять до складу. Внизу провалиться з какаодом

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.