Архитектура Arm64 в xcode 5.1

В новом XCode 5.1 arm64 стал одной из стандартных архитектур для построения.

Однако в моих текущих проектах я включил библиотеки (например, Google AdMob), которые еще не поддерживают эту новую архитектуру, - теперь они вызывают ошибки компоновщика:

ld: symbol(s) not found for architecture arm64

Google AdMob 6.8.0, например, сказал, что поддерживает arm64, но я не могу это подтвердить, если cputype (16777228) cpusubtype (0) не является arm64? (найденный через инструмент командной строки файла)

libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures
libGoogleAdMobAds.a (for architecture armv7):   current ar archive random library
libGoogleAdMobAds.a (for architecture armv7s):  current ar archive random library
libGoogleAdMobAds.a (for architecture i386):    current ar archive random library
libGoogleAdMobAds.a (for architecture x86_64):  current ar archive random library
libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)):   current ar archive random library

Есть ли способ сделать это?

Ответ 1

Не так сложно избавиться от arm64. все, что вам нужно сделать, это:

  • Отредактируйте цель Настройки сборки. Измените значение Architectures, откройте раскрывающийся список, нажмите Другое... и выберите его, удалите строку со значением $(ARCHS_STANDARD) и добавьте две строки со значениями: armv7 и armv7s (или $(ARCHS_STANDARD_32_BIT), как указано nschum), закройте всплывающее окно.

  • Измените значение Valid Architectures и просто удалите его arm64.

  • Сделайте это для каждого вложенного проекта, который у вас может быть внутри вашей рабочей области или проекта.

Примечание.. Это не решение, это всего лишь несколько шагов для смягчения вашей текущей проблемы, пожалуйста, следите за своими проектами зависимостей, чтобы узнать, когда они приходят с совместимостью arm64 и возвращают изменения этих настроек как можно скорее.

Удачи.

Ответ 2

Начиная с Xcode 5.1 $(ARCHS_STANDARD) теперь включает arm64 (а также armv7 и armv7s), тогда как с Xcode 5.02, $(ARCHS_STANDARD) включаются только armv7 и armv7s.

Для Xcode 5.1

$(ARCHS_STANDARD) = armv7 armv7s arm64

$(ARCHS_STANDARD_32_BIT) = armv7 armv7s

Итак, если вы ДОЛЖНЫ компилироваться в 64-битном, вам нужно убедиться, что все включенные библиотеки имеют 64-разрядный срез. Если они еще не поддерживают 64-битные, тогда вам придется скомпилировать их в 32-разрядной версии.

Но в любом случае в настройках вашей цели вы должны убедиться, что как Архитектуры, так и Действительные Архитектуры установлены одинаково и соответствуют им (см. изображения ниже). Поэтому вы можете попробовать их как с $(ARCHS_STANDARD), так и если они не будут компилироваться, вы можете попробовать их как с $(ARCHS_STANDARD_32_BIT), которые теоретически будут удалять ошибки и компилировать рабочий проект.

-

Подобно этому для 64-бит с arm64 armv7s и armv7:

enter image description here

-

Или, например, для 32-бит только с armv7s и armv7 (без arm64):

enter image description here

Ответ 3

В настройках сборки для вашей цели измените "Действительные архитектуры" только на те, которые вы поддерживаете; вероятно, armv7 и armv7s в этом случае.

Если вы используете Cocoapods, обязательно измените это для всех целей в проекте Pods и установите для всех этих целей только "Build Active Architecture Only" значение "No" для всех схем.

Небольшое изменение в вашем подкоде для автоматического удаления 64-битной архитектуры сборки из ваших целей cocoapods подробно описано здесь: http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets

Ответ 4

Настройка архитектуры на $(ARCHS_STANDARD_32_BIT) на XCode 5.1. Не нужно удалять arm64 из допустимых архитектур.

Архитектура определяет фактические архитектуры для построения и игнорирует запись arm64 в допустимых архитектурах (которая определяет надмножество). Надеюсь, Apple скоро это исправит.

Ответ 5

У меня была такая же ошибка. Загрузка новой версии Google AdMob SDK 6.8.0 решила проблему. Ссылка здесь: https://developers.google.com/mobile-ads-sdk/download#downloadios

Таким образом, отключение архитектуры arm64 не требуется.

Ответ 6

Нет ответов, которые мне помогли.
Я, наконец, отправил приложение, установив старый Xcode 5.0.2, а также Xcode 5.1
Использовал эту версию Xcode для архивирования приложения без ошибок.

Загрузите старую версию Xcode 5.0.2 здесь (вы должны войти в систему со своим Apple ID):