Xcode 7 + Dropbox Core API: просто отключите биткод?

Я использую Dropbox Core API в своем приложении iOS уже довольно давно. После обновления до Xcode 7 я получил следующую ошибку при попытке скомпилировать мой проект:

ld: '.../Frameworks/Dropbox/iOS/DropboxSDK.framework/DropboxSDK' does not contain bitcode. 
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated 
library from the vendor, or disable bitcode for this target. 

Я знаю, что такое биткод и для чего он хорош. Ошибка можно решить, просто установив опцию Enable Bitcode в No в целевых настройках сборки. После этого все компилируется без каких-либо ошибок, и приложение работает без проблем.

До сих пор так хорошо, но это "правильное" решение? Я проверил страницу Dropbox для обновленной версии SDK, но я уже использую последнюю версию.

В проекте содержится другая цель для виджета приложений, просмотра расширений и т.д., которые не используют Dropbox SDK. Какой вариант для Enable Bitcode следует использовать здесь? Is (по какой-то причине) лучше использовать одно и то же значение (No в моем случае) для всех целей? Имеет ли смысл включить Bitcode для Watch и Widget, если цель основного приложения не использует биткод?

Какая здесь самая лучшая практика?

Ответ 1

Поскольку я задал этот вопрос, я просто установил параметр Enable Bitcode в No в целях Build Settings при использовании Yes в целевых сетях Widget и Apple Watch. Это работало отлично, и я не заметил никаких проблем или ограничений.

Теперь я попытался выпустить новую версию своего приложения в App Store, и я заметил флажок Include Bitcode при загрузке файла приложения в Apple. Когда этот флажок включен, я получаю следующую ошибку:

Недействительный формат сопоставления-O. Набор Match-O "MyApp.app/PlugIns/MyApp WatchKit Extension.appex" не согласуется с Match-O в главном комплекте.

Основной набор Match-O содержит armv7 (машинный код) и arm64 (машинный код), а вложенный пакет Match-O содержит armv7 (биткод и машинный код) и arm64 (биткод и машинный код).

Разделите, чтобы все цели для платформы имели согласованное значение для настройки сборки ENABLE_BITCODE.

Я понятия не имею, почему это проблема сейчас, а вся остальная версия, которую я загрузил за последний год, прошла без каких-либо проблем. Однако проблему можно легко решить, сняв флажок Include Bitcode. После этого загрузка будет принята без каких-либо проблем.

Но есть лучшее решение: как отметил Грег, Dropbox наконец выпустил версию SDK с поддержкой битового кода!

Загрузите новый SDK 1.3.14, включите его в свой проект и установите ENABLE_BITCODE на Yes для всех целей, и все готово. По крайней мере, пока Apple не найдет новый способ нарушить рабочий процесс выпуска: -)

Ответ 2

Похоже, что они не выпустили API, поддерживающий биткод. Вот ссылка на поток на официальных форумах Dropbox, в который входит лицо поддержки из Dropbox, отвечающее на другие вопросы разработчиков в этом контексте.

Вот соответствующий ответ от лица поддержки Dropbox:

О, отлично! Мы не выпустили обновление для IOS Core SDK с bitcode, но если вам нужна поддержка bitcode для Core SDK, вы можете добавить источник напрямую, так как он с открытым исходным кодом. Там есть нить о это для Core SDK здесь: https://www.dropboxforum.com/hc/en-us/community/posts/204352929-Need-Bitcode-Framework