Архитектура 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

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

6 62

6 ответов:

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

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

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

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

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

удачи

начиная с 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-разрядную.

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

-

как это для 64-бит с arm64 armv7s и armv7:

enter image description here

-

или как это для 32-бит с armv7s и armv7 только (без arm64):

enter image description here

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

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

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

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

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

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

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

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

Скачать старую версию Xcode 5.0.2здесь (вы должны войти в систему с вашим идентификатором Apple ID):