2013-10-04 2 views
5

Я занимаюсь рефакторингом некоторого кода и создал статическую библиотеку, которую я сейчас использую в рамках, которая используется в нескольких приложениях. Я использую cocoapods, и у меня проблемы с правильной интеграцией моей новой статической библиотеки в podspec.Cocoapods podspec issue

Я нахожу, что сборки не работают, потому что в сборке отсутствует статическая библиотека. Если я вручную добавлю статическую библиотеку к окончательному приложению, среда и приложение будут работать нормально. Команда сборки генерирует окончательные версии приложений, и из-за этого я отвечал только за обновление podspec только для фреймворка.

Могу ли я изменить спецификацию pod, чтобы установить статическую библиотеку в качестве связанной библиотеки, которая отображается в фазах сборки финального приложения?

UPDATE:

При добавлении статического LIB к framework.library атрибут моей югу спецификации я получаю library not found for -lMyStaticLib

SUBSPEC ДЛЯ СПРАВКИ:

s.subspec 'MyStaticLibrary' do |msl| 
    mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}' 
    msl.library = 'MyStaticLib' 
    msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' } 
    #msl.frameworks = 'MyStaticLib' 
    end 

UPDATE 2: I изменил атрибут на msl.vendored_libraries = 'MyStaticLib' Также проверены пути в podspec. Все «кажется», чтобы проверить. Я все еще получаю ошибки сборки. Когда я построил для устройства (я получаю ту же ошибку, но и для i386, когда я строю для симулятора):

Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_MyStaticLibrary", referenced from: 
     objc-class-ref in MyFramework(FileInFramework.o) 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Я также проверил еще раз, что, если я просто иду, чтобы построить фазы в приложение и траверс папки стручки и вручную добавьте файл MyStaticLibrary.a в проект, который он создает без проблем.

+0

По-прежнему не исправить это? Я сталкиваюсь с подобной проблемой и буду благодарен за вашу мудрость, если вам удастся ее исправить. – brainray

ответ

3

Вы можете определенно добавить фреймворк в свой podspec. Проверьте wiki entry on the Podspec format.


Edit: Ах, что вы ищете, vendored_frameworks или vendored_libraries, который был добавлен в 0.23.0. Похоже, что они еще не добавлены в wiki. Обновите это сейчас!

+0

Я думаю, что вы имели в виду ссылку https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format Ваши ссылки на Steelcase ;-) Я обновил свой пост с дополнительной информацией. – propstm

+0

Упс! Исправил это и обновил свой ответ. – MishieMoo

+0

Я обновил сообщение с дополнительной информацией. Теперь я получаю неопределенные ошибки архитектуры. Это похоже на то, что проект видит библиотеку, но не имеет к ней доступа. – propstm

2

Попробуйте переименовать файл MyStaticLib.a в libMyStaticLib.a. Я также получал ошибку library not found for -lMyStaticLib и исправил ее, добавив префикс lib к имени файла.

+0

Это была моя проблема, спасибо –

1

Для ошибки Library not found for -lxxxxxxx, если статическое имя библиотеки MyStaticLib.a, попробуйте переименовать в libMyStaticLib.a и поместить его в perserve_paths собственности, так что ваша статическая библиотека не будет удалена после загрузки:

msl.libraries = 'MyStaticLib' 
msl.perserve_paths = 'libMyStaticLib.a' 

Тогда, перейдите к настройке сборки вашего проекта: убедитесь, что у вас есть параметр -lMyStaticLib в разделе «Другие флаги компоновщика».

Для архитектуры ARM и архитектуры i386 ARM означает устройство iOS, а i386 означает симулятор, лучше сделать свою статическую библиотеку универсальной, тогда она будет работать на обеих архитектурах.

+0

Зачем мне нужны '' Другие флаги Linker''? Достаточно ли его помещать в '' LIBRARY_SEARCH_PATHS''? – confile

0

изменить:

msl.vendored_libraries = '' MyStaticLib

к:

msl.vendored_libraries = 'FrameworkSource/My-Static-Library/libMyStaticLib.a'

и cocoapods добавит путь поиска.

Смежные вопросы