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

Вчера (3.10.14), когда была выпущена iOS 7.1, я также обновился до Xcode 5.1 и обнаружил, что мой проект PhoneGap / Cordova больше не компилируется на мой iPhone 5s. Я также обновил Cordova до последней версии: 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

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

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


person inorganik    schedule 11.03.2014    source источник
comment
У меня точно такая же проблема. iOS 7.1 и Xcode 5.1 были доступны разработчикам в течение некоторого времени, поэтому досадно, что команда Cordova хотя бы не выпустила предупреждение об этом до их выпуска.   -  person Ade    schedule 11.03.2014
comment
Да. Я создал новый проект Cordova «Hello World» с самой последней установленной версией Cordova, и он не компилировался успешно.   -  person inorganik    schedule 11.03.2014
comment
Можно ли получить и переустановить SDK iOS 7.0?   -  person Ade    schedule 11.03.2014
comment
Я получил его для компиляции с использованием этих настроек, но когда Я иду в раздел «Проверить архив» и получаю сообщение об ошибке: ** Этот пакет недействителен. Приложения, которые включают архитектуру armv7s, должны включать архитектуру armv7. Это странно, потому что похоже, что я включил оба.   -  person Ade    schedule 11.03.2014
comment
Да, вы можете сделать это в iTunes, подключив телефон к Mac. Но вы не сможете выпустить свое приложение, потому что оно не будет работать на iOS 7.1 ...   -  person inorganik    schedule 11.03.2014
comment
Мне удалось скомпилировать и проверить мое существующее приложение только с архитектурой armv7, выбранной как в Project, так и в Target. Я не уверен, что означает исключение armv7s и arm64. Он не будет работать на iPhone 5S?   -  person Ade    schedule 12.03.2014
comment
Нет, я не верю, что они компилируются до 5 без armv7s.   -  person inorganik    schedule 12.03.2014
comment
Действия по устранению проблемы с Apache Cordova JIRA: issues.apache.org/jira/browse/CB -6223.   -  person Shazron    schedule 12.03.2014


Ответы (8)


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

  1. Выберите значок вашего проекта
  2. Выберите "Параметры сборки".
  3. Для «Архитектур» выберите $ ARCHS_STANDARD - Стандартные архитектуры (armv7, armv7s, arm64)
  4. Для «Допустимые архитектуры» добавьте «arm64».
  5. Выберите значок CordovaLib.xcodeproj
  6. В настройках сборки проекта (не целевого объекта) удалите параметры условной архитектуры (наведите указатель мыши на значок «минус»).
  7. Для «Архитектур» выберите $ ARCHS_STANDARD - Стандартные архитектуры (armv7, armv7s, arm64)
  8. Для «Допустимые архитектуры» добавьте «arm64».
  9. Goto 6, но теперь сделайте это для "Target"

Вот ссылка на полное описание этой проблемы Шазроном: 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, которая включает все исправления, упомянутые в этом сообщении в блоге. Обновите свой интерфейс командной строки Cordova и, если у вас есть существующий проект, выполните «обновление платформы cordova ios».

person inorganik    schedule 11.03.2014
comment
Отлично. Правильно ли я считаю, что для шага 6 нужно удалить ВСЕ из них: СКРИНШОТ? - person Ade; 12.03.2014
comment
Сначала это кажется нормальным: приложение архивирует и проверяет. Но при экспорте в виде специального распределения он не будет работать на iPhone 5S. - person Ade; 12.03.2014
comment
Да, этот ответ заставляет приложение скомпилировать и установить на 5S, но когда оно начинает работать, выдает ошибку lldb и дает сбой (или приостанавливает работу, если вы используете свое устройство, привязанное к Mac, во время работы Xcode). - person Jough Dempsey; 12.03.2014
comment
Вот ссылка на сообщение @Shazron. Он охватывает 3 проблемы: shazronatadobe.wordpress. ru / 2014/03/12 / - person stefbach; 12.03.2014
comment
Я подтверждаю, что у меня это работает. Не забывайте пункт 9, который заключается в удалении любых настроек условной архитектуры для целевой «Cordova Lib». Вы должны иметь как для проекта «CordovaLib», так и для целей «CordovaLib». Параметры архитектуры должны выглядеть: - Отладка: Стандартная архитектура (...) - Выпуск: Стандартная архитектура (...) - person stefbach; 12.03.2014
comment
Удалив все условные архитектуры, я смог скомпилировать приложение, но сломал некоторые мои плагины. Я теперь получаю сообщение об ошибке "Не найдено" или это не ошибка CDVPlugin. Будьте осторожны и сделайте резервную копию своего проекта. - person njtman; 12.03.2014
comment
Я обнаружил, что это решение отлично работает, если вы не проверяете (оно отменяет ваши изменения) ... @njtman, какие плагины не работают? У меня есть масса плагинов, которые работают нормально. - person inorganik; 12.03.2014
comment
@inorganik - это специальные плагины Cordova, скомпилированные для предприятий, которые обычно не доступны для широкой публики. полагаю, им нужно будет перекомпилировать их для работы с arm64. Тем временем я понизил версию Xcode, и все в порядке. - person njtman; 12.03.2014
comment
Я использовал предыдущую версию Cordova (3.3.0), которая требовала некоторых дополнительных шагов, которые я разместил здесь вместе с некоторыми фотографиями, на которые указывает @stechbach: wp.me/pxvmV-6x. Спасибо за это! - person occasl; 14.03.2014
comment
Отлично. Меня смутило 15 странных ошибок, а теперь их нет :). Спасибо. - person Tien Do; 01.04.2014
comment
Это решение сработало для меня, когда я также изменил все экземпляры Build Active Architecture Only на No. - person flyingace; 25.04.2014
comment
Просто нужно было сделать это для iOS 8 и XCode 6. Это вызывает обновление до 5.1.1 для минимальной цели развертывания ОС, но для меня это нормально. - person Guy Lowe; 15.09.2014

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

  1. Щелкните свой проект в верхней части навигатора проекта (не подпроект Cordova.lib).
  2. На панели редактора выберите проект (не цель), выберите вкладку редактора параметров сборки и нажмите кнопки «Все» и «Уровни».
  3. При необходимости разверните группу «Архитектуры» и найдите под ней строку «Архитектуры».
  4. В первом (разрешенном) и третьем (по умолчанию iOS) столбцах в строке «Архитектура» будет указано «Стандарт»; второй столбец (проект) будет пустым.
  5. Щелкните пустой второй столбец, чтобы открыть окно с одной строкой «$ (ARCHS_STANDARD)».
  6. Дважды щелкните эту строку, чтобы сделать ее доступной для редактирования, затем измените ее на «$ (ARCHS_STANDARD_32_BIT)».
  7. Щелкните за пределами поля, чтобы подтвердить изменение. Теперь в первом и втором ящиках будет только $.
  8. Теперь у вас должна быть возможность строить.
person Neil Faiman    schedule 14.03.2014

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

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

person AlexLopezIT    schedule 12.03.2014
comment
Это работает - единственное предостережение в том, что вы не можете протестировать напрямую в XCode на iPhone, на котором установлена ​​iOS 7.1. Вот здесь и пригодится симулятор. Скомпилированное приложение может работать на iOS 7.1 (подтверждено как на iPhone 5, так и на 5S), поэтому переход на более раннюю версию до выхода Cordova 3.5 кажется лучшим вариантом. - person Ade; 12.03.2014
comment
Для меня это работает лучше всего прямо сейчас. Загрузил Xcode 5.02 и скопировал его (сначала назвав XCode_502) в Applications, что позволило мне запустить его рядом с Xcode 5.1. - person EeKay; 12.03.2014
comment
Я перешел на версию 5.0.2 и без проблем тестировал свое приложение на iPhone 5 и iPad 2 с iOS 7.1, я также отправил приложение в iTunes Connect без проблем. - person AlexLopezIT; 13.03.2014

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

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

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

строка 24 из:

version: '3.4.0'

to:

version: '3.4.1'

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

cordova platform add ios

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

person Fabrizio Giordano    schedule 05.04.2014
comment
@JPRichardson Спасибо, сейчас буду обновлять :) - person dk123; 15.04.2014
comment
npm update cordova -g, затем обновите платформу cordova ios - person sepulturkey; 15.04.2014


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

person Wayferer    schedule 26.03.2014
comment
Это сработало и для меня. Идеально, поскольку понижение версии Xcode (и невозможность тестирования на устройствах iOS7.1) для меня не вариант. Спасибо! - person Adam Tuttle; 28.03.2014

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

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

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

о Кордове:

  • Архитектура
  • отлаживать
  • выпуск
  • Любой SDK для ios

И САМОЕ ВАЖНОЕ

-Действительные архитектуры в настройках сборки Cordova

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

person Felipe Quirós    schedule 17.03.2014

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

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

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

У меня работало, хоть и раздражало!

person Kevin S    schedule 27.03.2014