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_dataByInflatingBytes: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
опитайте Product 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 и помагат за значително намаляване на размера на изтеглянето.

Надяваме се, че скоро ще има повече документация.

редактиране

За да го изясня, ще цитирам отговора на Guitz с актуализираното съдържание

  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

Имам този проблем в object-c project.ios9.1,xcode7.1

1.Отидете на Target> Build Phases>Link Binary with Librairies> +

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