Ошибка связывания после переноса проекта IOS на Xcode 7.3.1 (симулятор и iPad)

  • У меня есть проект SWIFT для IOS-приложения на Xcode 7.2 на моей старой машине Yosemite, которая отлично работает и строится.
  • У меня есть новый MAC, на котором работает «El Capitan» с Xcode 7.3.1.
  • Я перенес свой проект на новую машину, просто скопировав: папку проекта, все внешние библиотеки и фреймворки, импортированные профили подготовки и ключи.
  • В моем проекте больше нет синтаксических ошибок после ссылки всех библиотек на новую структуру папок.

Теперь я создаю проект и получаю следующую ошибку:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_SSZipArchive", referenced from:
      type metadata accessor for __ObjC.SSZipArchive in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я не знаю, как анализировать эту проблему, поэтому и спрашиваю здесь. Любая помощь ?

Я добавил небольшой проект для воспроизведения ошибки с помощью Xcode 7.3.1: https://drive.google.com/open?id=0BzTzuiIaUzqkeTNrQTZkdGxrUnM Это ZIP-файл, содержимое которого можно распаковать на рабочий стол. (SSArchiveTest — это корневая папка)

ОБНОВЛЕНИЕ

При попытке запустить на IPAD я получаю ту же ошибку, но со ссылкой на архитектуру arm64:

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_SSZipArchive", referenced from:
      type metadata accessor for __ObjC.SSZipArchive in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ОБНОВЛЕНИЕ 2. Что я уже сделал

Что я сделал до сих пор: - удалил производные данные из xcode -> окно -> проект -> удалить ... - Обновлен SSZipArchive из GIT, загрузив новейший источник и заменив все, что у меня уже было в моем работающем проекте.

ОБНОВЛЕНИЕ 3: добавлен небольшой проект

Я добавил небольшой проект для воспроизведения ошибки с помощью Xcode 7.3.1: https://drive.google.com/open?id=0BzTzuiIaUzqkeTNrQTZkdGxrUnM Это ZIP-файл, содержимое которого можно распаковать на рабочий стол. (SSArchiveTest — это корневая папка)


person mcfly soft    schedule 17.06.2016    source источник
comment
Ошибки связывания обычно связаны с одной из следующих проблем: 1) компоновщик не находит библиотеку/фреймворк (см. Пути поиска библиотеки в Настройки сборки). 2) Библиотека/фреймворк не поддерживает требуемую архитектуру процессора. Чтобы убедиться, что это проблема, вам нужно найти библиотеку/фреймворк и использовать для него команду file, чтобы узнать, какие архитектуры он поддерживает, и, возможно, получить более новую/лучшую версию библиотеки.   -  person Droppy    schedule 18.06.2016
comment
Я не знаю об использовании библиотеки. Я просто использую файлы *.h и *.m, какой из них я связываю с быстрым проектом. Наверное я что-то не так понимаю?   -  person mcfly soft    schedule 19.06.2016
comment
Я предполагал, что вы используете код SSZipArchive из библиотеки. Если вы напрямую добавляете файлы .m, то, вероятно, это просто проблема с целевым членством в исходных файлах.   -  person Droppy    schedule 19.06.2016


Ответы (3)


Я решил проблему. Простое добавление zlib.tbd в связывающие библиотеки решило проблему.

person mcfly soft    schedule 20.06.2016

У меня такая же проблема. Решение заключалось в том, чтобы добавить все файлы *.c (из папок minizip и aes) в Targets --> Build Phases --> Compile Sources.

person waltcrit    schedule 22.09.2017

Вы используете SSZipArchive в своем проекте. Если вы использовали для установки Cocopods, обновите podfile.

Откройте окно терминала, перейдите в папку проекта и запустите

pod update
person john elemans    schedule 17.06.2016
comment
Я не пользуюсь кокаопадами, но обновил самые свежие исходники из GIT. Я скачал последний SSZipArchive из GIT и заменил SSZipArchive.h и .m и все файлы minizip. Тем не менее у меня такая же проблема. Любая помощь ? - person mcfly soft; 18.06.2016
comment
проверьте настройки сборки. Архитектура сборки должна соответствовать архитектуре библиотеки, с которой вы связываетесь. - person john elemans; 19.06.2016