Swift 2/iOS 9 — libz.dylib не найден

Я использую некоторые внешние коды из Google в своем новом проекте Swift 2.0, для которого в более ранних версиях требовался «libz.dylib». После обновления до нового Xcode/нового SDK.

Xcode теперь не может импортировать libz.dylib и выдает некоторые ошибки

Неопределенные символы для архитектуры i386: "_deflate", ссылка из: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_deflateEnd", ссылка из: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel: mode:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) "deflateInit2", на который ссылается: +[GAICompressionUtil gai_dataByCompressingBytes:length:compressionLevel:mode:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_inflate" , ссылка из: +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) "_inflateEnd", ссылка из: +[GAICompressionUtil gai_dataByInflatingBytes:length:isRawData:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) " inflateInit2", на который ссылается: +[GAICompressionUtil gai_dataByInflatingByte s:length:isRawData:] в libGoogleAnalyticsServices.a(GAICompressionUtil.o) ld: не найдены символы для архитектуры i386 clang: ошибка: команда компоновщика не удалась с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

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

предупреждение: пропуск файла «/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/lib/libz.tbd» (неожиданный тип файла «текст» в Этап сборки фреймворков и библиотек)

Что делать?


person Daniel K.    schedule 13.06.2015    source источник
comment
попробуйте Продукт Clear. Если не поможет. удалить кеши Xcode и производные данные   -  person Leo Dabus    schedule 13.06.2015
comment
Я согласен с @LeoDabus использовать Product Clear. В качестве нового проекта добавление этого tbd (что это означает?) будет скомпилировано нормально.   -  person Laurent    schedule 13.06.2015
comment
Я уже очистил и перестроил проект отверстия - та же проблема!   -  person Daniel K.    schedule 13.06.2015


Ответы (8)


У меня такая же проблема. Я нашел какой-то обходной путь.

  1. Перейдите в раздел «Фазы сборки» > «Связать двоичный файл с библиотеками» > «+» > «Добавить другое».
  2. В окне выбора файла выполните «CMD»+Shift+G (перейти в папку) и введите /usr/lib/
  3. Из /usr/lib вы можете добавить: libz.dylib и многое другое...
  4. Скомпилируйте и получайте удовольствие
person Guitz    schedule 13.06.2015
comment
Это устарело. Теперь это должен быть libz.tbd. - person bkSwifty; 20.09.2015
comment
@BK Может быть, так и должно быть, но у меня все еще не работает Yosemite с Xcode 7.1.1 с .tbd - использование вышеуказанного решения работает в симуляторе и на устройстве - person dogsgod; 25.11.2015
comment
Также кажется, что теперь вам даже не нужно иметь их в списке Link Binary with Libraries — по крайней мере, в моем случае Xcode находит их автоматически. Как в ответе AZ0 ниже. - person Alex; 14.11.2016

libz.dylib теперь находится в разделе libz.tbd цитата с форумов разработчиков Apple:

Для тех, кому интересно, файлы .tbd — это новые «текстовые библиотеки-заглушки», которые предоставляют гораздо более компактную версию библиотек-заглушек для использования в SDK и помогают значительно уменьшить размер загружаемого файла.

Надеюсь, скоро появится больше документации.

изменить

Чтобы прояснить это, я приведу ответ Гитца с обновленным содержанием.

  1. Перейдите в раздел «Фазы сборки» > «Связать двоичный файл с библиотеками» > «+» > «Добавить другое».
  2. В окне выбора файла выполните «CMD»+Shift+G (перейти в папку) и введите /usr/lib/
  3. Из /user/lib вы можете добавить: libz.tbd и многое другое...
  4. Скомпилируйте и получайте удовольствие
person helgetan    schedule 09.09.2015
comment
Это должен быть первый ответ! - person Benjamin Jimenez; 11.09.2015
comment
Безопасно ли использовать это на старых версиях iOS? по ссылке, которую вы предоставляете, они говорят: «Удалить все ссылки на .tbd», так следует ли нам использовать .tbd или нет? - person jcesarmobile; 28.09.2015

Удалите все динамические библиотеки (dylib) из фазы связывания с двоичными файлами. Он сам найдет эти библиотеки.

person AZ0    schedule 06.07.2015
comment
Спасибо! Это действительно так работает. Проблема для меня с Xcode 7.2 в том, что симулятор использует .tbd, а устройство/архив iphone использует .dylib. Поэтому он жаловался, что не может найти отсутствующие библиотеки. - person Dalibor Filus; 20.01.2016
comment
Простое удаление библиотек было правильным ответом в моем случае. Кажется, они должны были быть в старой версии Xcode, но в текущей версии, которую я использую (8.1), он работает без них. - person Alex; 14.11.2016

У меня есть эта проблема в target-c project.ios9.1,xcode7.1

1. Перейдите в раздел «Цель»> «Фазы сборки»> «Связать двоичный файл с библиотеками»> «+».

2.выберите libz.tbd и добавьте его

Это сработало для меня

person iengchen    schedule 09.11.2015

libz.dylib — это динамическая библиотека для Zlib. Вы можете установить Zlib отсюда http://zlib.net/

person Prabhu.Somasundaram    schedule 17.08.2015

Вы также можете добавить lybz.dylib из "Другие флаги компоновщика" в Настройки сборки, добавив аргумент -lz.

Мне пришлось сделать это, потому что, используя метод, в котором вы ссылаетесь на библиотеку из /usr/lib, когда я развернул свое приложение для наших тестеров, библиотека .dylib не смогла разрешить и вызвала сбой приложения при запуске.

person tentmaking    schedule 26.05.2016

Вы можете добавить libz.1.dylib из местоположения:/usr/lib/

  1. Перейдите в раздел «Фазы сборки» > «Связать двоичный файл с библиотеками» > «+» > «Добавить другое».
  2. В окне выбора файла нажмите CMD+Shift+G (Перейти к папке) и введите /usr/lib/
  3. Из /user/lib вы можете добавить: libz.1.dylib

Это сработало для меня.

person Vin    schedule 28.10.2015

Между тем вы можете использовать предыдущий SDK. Это мой ответ для libsqlite3:

https://stackoverflow.com/a/30981161/627794

Изменить: (содержимое ссылки добавлено)

Откройте терминал, введите (измените на нужную библиотеку, например, libz)

locate libsqlite3.dylib

Вы найдете несколько таких файлов:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libsqlite3.dylib
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libsqlite3.dylib

Перейдите в настройки вашего проекта -> Фазы сборки -> Связать с двоичными файлами. Добавьте ОБА файла, нажав +, затем Add Other. Нажмите Cmd-Shift-G и скопируйте и вставьте путь к файлу. Нажмите Open.

Если вы устанавливаете sqlite3 с помощью macports, удалите /opt/local/lib из пути поиска библиотеки в настройках сборки.

person roel    schedule 03.07.2015