Cocoapods импортирует фреймворк в исходный код

В моем cocoapod для iOS есть, по сути, следующие элементы:

  1. Классы с открытым исходным кодом (файлы .m и .h)
  2. MyFramework.framework (каталог .framework, файлы заголовков и .bundle для ресурсов)

Один из классов с открытым исходным кодом вызывает import <MyFramework.MyFramework.h>, чтобы он мог использовать компоненты MyFramework в своей реализации. Но из-за этого у меня возникают проблемы с тем, чтобы podspec прошел тест spec lint (pod spec lint MyCocoapod.podspec). Когда я запускаю проверку spec lint, он говорит:

ERROR | [iOS] [xcodebuild] .../MyFile.h:54:9: fatal error: 'MyFramework/MyFramework.h' file not found

Во время расследования я заметил, что podspec действительно проходит проверку spec lint, если я удалю этот класс с открытым исходным кодом в разделе source_files podspec, s.source_files = 'MyFiles.{h,m}'. Есть идеи, почему мой класс не может импортировать мою пользовательскую структуру во время проверки спецификации?

Соответствующий код в podspec выглядит так:

s.preserve_paths      = 'myframework/MyFramework.framework'
s.frameworks          = 'Foundation', 'MyFramework'
s.xcconfig            = { 'FRAMEWORK_SEARCH_PATHS' => '$(SRCROOT)/myframework/' }
s.public_header_files = 'MyFramework.framework/Headers/*.h', 'SourceCode/*.h'
s.source_files        = 'SourceCode/*.{h,m}'  # Crashes here - Source_file imports MyFramework.h. If I take this out, it passes spec lint validation

person johngraham    schedule 16.04.2013    source источник


Ответы (2)


ИЗМЕНИТЬ Этот процесс теперь полностью обрабатывается vendored_frameworks вариант. Это обрабатывает сохранение путей, путей поиска фреймворка и ссылки на проект.

person Keith Smiley    schedule 16.04.2013
comment
Спасибо за ваш ответ. Так что, если бы мой кокон был просто каркасом, это работало. Но у модуля также есть некоторые файлы source_code (файлы .m и .h), которые будут распространяться. В исходном_коде (.m) моего модуля происходит #import <MyFramework.framework>, и именно здесь спецификация lint не проходит проверку. - person johngraham; 16.04.2013
comment
Добавление source_files в podspec также не должно повлиять на импорт вашего фреймворка. Какую ошибку показывает CocoaPods в ворсинке? (Также убедитесь, что вы используете новейшую версию gem update) - person Keith Smiley; 16.04.2013
comment
Хм, ошибка выше в поле вопроса ... ERROR |.... (Я только что добавил соответствующий код из своего podspec) Возможно, я изначально неправильно импортирую фреймворк, поэтому файлы source_files также не могут правильно импортировать фреймворк. Я исследую это и свяжусь с вами. - person johngraham; 16.04.2013
comment
Также посмотрите exlucde_files здесь, если считаете, что он импортируется дважды. - person Keith Smiley; 16.04.2013
comment
Да, я забыл Foo в моем FRAMEWORK_SEARCH_PATHS, согласно вашему обновлению. Спасибо за отзыв. - person johngraham; 17.04.2013
comment
vendored_frameworks предназначен только для доставки предварительно скомпилированных фреймворков. Если вы отправляете исходные файлы с помощью этого модуля, этот атрибут вам не понадобится. - person Keith Smiley; 04.02.2016
comment
Я специально пытаюсь понять, как отправить библиотеку без исходного кода, сохраняя при этом удобство разработки этой библиотеки с помощью Cocoapods. Описанный здесь podspec - единственное, что мне кажется полезным. Но я думаю, что мне нужно будет использовать Cocoapods-Rome или cocoapods-packager, чтобы в первую очередь создать фреймворк, поскольку он начинает жизнь как podspec. - person shmim; 04.02.2016
comment
Вы должны создать цель фреймворка в своем проекте. Затем вы можете заархивировать и распространить это. - person Keith Smiley; 04.02.2016
comment
Я использую vendored_frameworks, но имею ту же проблему, что и OP. Какие-либо предложения? - person Ethan Holshouser; 06.07.2016

Чтобы включить фреймворк, вы можете использовать:

s.vendored_frameworks = 'path/to/SomeFramework.framework'

Чтобы включить файлы пакета, выполните следующие действия:

s.resources ='path/to/SomeBundle.bundle'

person BigCheesy    schedule 19.01.2016