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


81

Вчера (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


2
У меня точно такая же проблема. iOS 7.1 и Xcode 5.1 были доступны разработчикам в течение некоторого времени, поэтому досадно, что команда Cordova, по крайней мере, не выпустила предупреждение об этом до их выпуска.
Ade

Да. Я создал новый проект Cordova «Hello World» с установленной последней версией Cordova, и он не компилировался успешно.
inorganik

Можно ли получить и переустановить SDK iOS 7.0?
Ade

Я получил его для компиляции с использованием этих настроек, но когда я перехожу к проверке архива, я получаю сообщение об ошибке: ** Этот пакет недействителен. Приложения, которые включают архитектуру armv7s, должны включать архитектуру armv7. Что странно , потому что это выглядит , как я уже включены оба.
Ade

3
Исправьте шаги в проблеме Apache Cordova JIRA: issues.apache.org/jira/browse/CB-6223 .
Shazron

Ответы:


86

@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 CLI, и если у вас есть существующий проект, выполните «обновление платформы cordova ios».


10
Превосходно. Что касается шага №6, правильно ли я считаю, что нужно удалить ВСЕ: СКРИНШОТ ?
Ade

1
Сначала это кажется нормальным : приложение архивирует и проверяет. Но при экспорте в виде специального распределения он не будет работать на iPhone 5S.
Ade

7
Да, этот ответ заставляет приложение скомпилировать и установить на 5S, но когда оно начинает работать, выдает ошибку lldb и дает сбой (или приостанавливает работу, если вы используете свое устройство, привязанное к вашему Mac, во время работы Xcode).
Джоу Демпси,

5
Вот ссылка на сообщение @Shazron. Он охватывает 3 проблемы: shazronatadobe.wordpress.com/2014/03/12/…
stefbach

Я подтверждаю, что у меня это работает. Не забывайте пункт 9, который заключается в удалении любых настроек условной архитектуры для целевой Cordova Lib. У вас должно быть как для проекта «CordovaLib», так и для целей «CordovaLib». Параметры архитектуры должны выглядеть: - Отладка: Стандартная архитектура (...) - Релиз: Стандартная архитектура (...)
stefbach

11

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

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

10

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

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


3
Это работает - единственное предостережение в том, что вы не можете протестировать напрямую в XCode на iPhone, на котором установлена ​​iOS 7.1. Вот здесь и пригодится симулятор. Скомпилированное приложение может работать на iOS 7.1 (подтверждено как на iPhone 5, так и на 5S), поэтому переход на более раннюю версию до выхода Cordova 3.5 кажется лучшим вариантом.
Ade

Для меня это работает лучше всего прямо сейчас. Загрузил Xcode 5.02 и скопировал его (сначала назвав XCode_502) в Applications, что позволило мне запустить его рядом с Xcode 5.1.
EeKay

Я перешел на версию 5.0.2 и без проблем тестировал свое приложение на iPhone 5 и iPad 2 с iOS 7.1. Я также отправил приложение в iTunes Connect без проблем.
AlexLopezIT

8

Они только что выпустили новую версию 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 со всеми исправлениями.


@JPRichardson Спасибо, сейчас буду обновляться :)
dk123

1
npm update cordova -g, затем обновление платформы cordova ios
sepulturkey

5

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

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


Ты только что избавил меня от такой головной боли. В этом видео была устранена проблема, с которой я боролся несколько часов.
Bullyen

Это сработало для меня. Спасибо за видео - он очень ясно дал понять.
John Q

3

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


Это сработало и для меня. Идеально, поскольку понижение версии Xcode (и невозможность тестирования на устройствах iOS7.1) для меня не вариант. Благодаря!
Адам Таттл

2

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

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

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

о Кордове:

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

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

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.