KamiSempai
@KamiSempai
Android and iOS developer

Что я делаю не так при подключении фреймвоков через Cocoapods в iOS?

Здравствуйте. Пытаюсь подключить к своему iOS проекту сторонние библиотеки через Cocoapods.
Вот содержимое файла Podfile
platform :ios, "7.0"
target 'MyApp' do
  pod 'Fabric'
  pod 'Crashlytics'
  pod 'SDWebImage', '~> 3.7'
  pod 'SVProgressHUD', '~> 1.1'
  pod 'TPKeyboardAvoiding', '~> 1.2'
end
Делал все по инструкции. Сначала pod init, потом pod install. Судя по логам в командной строке установка прошла успешно.

Что получаю в самом проекте (файл проекта с расширением .xcworkspace):
Есть отдельный модуль/проект Pods. В нем в группе "Pods" находятся папки с подключаемыми фреймворками и библиотеками. В общем все как положено.
А вот дальше странности. В группе "Products" содержится 4 библиотеки:
  • libPods-MyApp.a
  • libSDWebImage.a
  • libSVProgressHUD.a
  • libTPKeyboardAvoiding.a

Для того, что-бы SDWebImage, SVProgressHUD и TPKeyboardAvoiding заработали нужно подключить к основному проекту 3 последние библиотеки из списка выше. Ни в одном туториале я не нашел явного подключения библиотек таким образом. На сколько я понимаю, они должны были быть упакованы в одну библиотеку "libPods-MyApp.a" которую и нужно использовать в основном проекте. В моем случае - это мертвый груз который не дает ни чего.

Ладно, пусть я подключил библиотеки описанным мной способом и успокоился. Но вот с Fabric и Crashlytics такой фокус не прокатывает. При попытке компиляции мне выдается такая вот ошибка:
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_Crashlytics", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_Fabric", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Логично. Ведь библиотеки не подключены. Нажимаю на файл проекта, выбираю соответствующий Target, на вкладке General перехожу к группе "Linked Frameworks and Libraries" и пытаюсь добавить нужные фреймвоки. В списке их нет, так что я жму кнопку "Add another.." и указываю к ним путь. Фреймворки лежат в папках .\Pods\Fabric и .\Pods\Crashlytics (Путь указан относительно папки проекта).
Но в итоге, при попытке компиляции я натыкаюсь на такую ошибку:
ld: framework not found Fabric
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Перехожу к Target моего проекта, на вкладку "Build Settings" сморю в группе "Search Paths" настройки для "Framework Search Paths". Как для Debug так и для Release есть следующие строки:
$(PROJECT_DIR)/Pods/Fabric
$(PROJECT_DIR)/Frameworks
$(PROJECT_DIR)/Pods/Crashlytics
Все non-recursive.

Собственно у меня несколько вопросов:
1) Что нужно сделать для подключения фреймворков Fabric и Crashlytics?
2) Правильно ли я все сделал?
3) Это вообще нормальное поведение для coocapods? Судя по туториалам такого быть не должно.

PS: Crashlytics подключал по инструкции и судя по прогрессу осталось только запустить приложение. Run script добавил и он работает.

PPS: Буду рад получить хоть какой ответ. Cocoapods начал пользоваться совсем недавно и пока для меня это в новинку. Собственно и с iOS у меня опыт не большой, основная платформа для меня это Android, но там подобное делается через Gradle и с меньшими заморочками.

UPD: Попробовал подключить библиотеки к чистому проекту. Все подключилось и работает. Возможно проблема в настройках моего проекта. Но вот что может вызывать такой эффект не представляю.
  • Вопрос задан
  • 1925 просмотров
Решения вопроса 1
@sojik
Видимо вы делаете неправильно все )) не пожалел времени, хотя у меня 0-50 уже и взял пустой проект на ObjC, Xcode 7.0.1, El Captain и добавил полностью ваш Podfile, только у меня он имеет вид

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, "7.0"

target 'testNewCoreData' do
pod 'Fabric'
pod 'Crashlytics'
pod 'SDWebImage', '~> 3.7'
pod 'SVProgressHUD', '~> 1.1'
pod 'TPKeyboardAvoiding', '~> 1.2'
end

затем пришлось сделать стандартные
sudo gem install cocoapods
pod install

собрался workspace
я добавил AppDelegate строчки

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>

и
[Fabric with:@[CrashlyticsKit]];

все прекрасно собирается. Рекомендую проделать все то же, что и я.
Если не получится - попробовать удалить cocoapods из проекта и снова попытаться их поставить.

вот тут выложу сейчас свой тестовый проект, чтобы вы посмотрели как они видятся у меня. Только придется pod install после скачки и распаковки )
https://www.dropbox.com/s/c7bnn8jhugx4q2r/testNewC...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы