Xcode 5.1: проблемы с архитектурой libCordova.a

Вчера (3/10/14), когда был выпущен iOS 7.1, я также обновился до Xcode 5.1 и обнаружил, что мой проект PhoneGap/Cordova больше не будет компилироваться для моего iPhone 5. Я также обновил Кордову до последней версии: v 3.4.0-0.1.3.

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

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Итак, я попробовал следующее. Я выбрал подпроект CordovaLib в моем проекте, и как в проекте, так и в целевом я перешел в Настройки сборки в Архитектурах и удостоверился, что arm64 не был включен в любой из архитектур Debug или Release. На данный момент Только встроенная активная архитектура установлена ​​на "Да". Это привело к следующей ошибке:

file was built for archive which is not the architecture being linked (armv7): 
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7

Настройка Только встроенная активная архитектура на "Нет", ошибка снова станет:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Я не уверен, что еще попробовать. Параметры архитектуры проекта включают только ключ "Base SDK", который установлен в iOS 7.1. Цель проекта не имеет настроек архитектуры. Во всяком случае, я уверен, что проблема связана с встроенным подпроектом CordovaLib. Что я могу сделать, чтобы эта вещь успешно скомпилировалась на моем устройстве?

Обновление: та же проблема на Apache Jira: https://issues.apache.org/jira/browse/CB-6223

Ответ 1

@Shazron отправил исправление в Apache JIRA - он отмечает, что исправление будет выпущено как часть Cordova 3.5:

  • Выберите значок проекта
  • Выберите "Настройки сборки".
  • Для "Архитектур" выберите $ARCHS_STANDARD - Стандартные архитектуры (armv7, armv7s, arm64).
  • Для "Действительных архитектур" добавьте "arm64"
  • Выберите значок CordovaLib.xcodeproj
  • В настройках сборки для проекта (не цели) удалите настройки условной архитектуры (наведите указатель на минус)
  • Для "Архитектур" выберите $ARCHS_STANDARD - Стандартные архитектуры (armv7, armv7s, arm64).
  • Для "Действительных архитектур" добавьте "arm64"
  • Перейти к 6, но теперь сделайте это для "Target"

Здесь ссылка на Shazron для полной записи этой проблемы: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

Теперь он выпущен и короткая версия, что нужно сделать:

Отладка Cordova CLI 3.4.1-0.1.0 отсутствует, в том числе Cordova iOS 3.4.1, которая включает в себя все исправления, упомянутые в этом сообщении в блоге. Обновите свой CLI-интерфейс Cordova, и если у вас есть существующий проект, сделайте "обновление платформы платформы cordova".

Ответ 2

Другой подход, который работает:

  • Нажмите на свой проект в верхней части навигатора проекта (не подпроект Cordova.lib).
  • В области редактора выберите проект (а не цель), выберите вкладку "Редактор настроек сборки" и нажмите кнопки "Все и уровни".
  • При необходимости разверните группу "Архитектуры" и найдите под ней строку "Архитектуры".
  • Первые (разрешенные) и третьи столбцы (по умолчанию iOS) в строке Архитектура скажут "Стандарт"; второй (проект) столбец будет пустым.
  • Нажмите на пустой второй столбец, чтобы открыть окно, в котором будет одна строка, "$ (ARCHS_STANDARD)".
  • Дважды щелкните эту строку, чтобы сделать ее редактируемой, затем измените ее на "$ (ARCHS_STANDARD_32_BIT)".
  • Щелкните вне поля, чтобы подтвердить изменения. Теперь у первого и второго ящиков будет только $.
  • Теперь вы сможете построить.

Ответ 3

Переход на Xcode с 5.1 до 5.0.2 работал у меня, я не мог дождаться официального релиза Cordova 3.5 с исправлением.

Вы можете получить копию предыдущей версии здесь: https://developer.apple.com/downloads/index.action

Ответ 4

Они только что выпустили новую версию 3.4.1, в которой рассматриваются эти проблемы.

Поэтому я обновляю один файл, чтобы указать на TAG 3.4.1:

/usr/local/lib/node_modules/cordova/platforms.js

строка 24 из:

version: '3.4.0'

в

version: '3.4.1'

Затем вы удаляете папку iOS в своем проекте и выполняете:

cordova platform add ios

Это будет загружать новый шаблон на основе 3.4.1 со всеми исправлениями.

Ответ 5

Следуйте инструкциям на этом видео: https://www.youtube.com/watch?v=EIkJAKcz8DE

Просто добавьте arm64 в свои проекты, допустимые архитектуры и удалите всю условную архитектуру проекта Cordova.

Ответ 6

Я смог получить мое приложение для сборки в XCode 5.1, сначала создав проект CordovaLib отдельно от XCode, а затем создав свой проект.

Ответ 7

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

В вашем проекте:

  • Архитектуры
  • Допустимые архитектуры

на Кордове:

  • Архитектуры
  • отладки
  • релиз
  • Любой SDK ios

И САМЫЙ ВАЖНЫЙ

-Высокие архитектуры при настройке кордовы

Эта конфигурация генерирует много предупреждений, но просто меняет "% d" на "% ld" на всех строках, о которых говорится в предупреждении.

Ответ 8

Возьмите значок xcode и перетащите его в корзину!

Перейдите сюда https://developer.apple.com/downloads/index.action?name=Xcode и загрузите 5.0.2 и установите.

После установки запустите xcode, затем попробуйте эмулятор с терминала.

Работала для меня, раздражающая, хотя!