Podspec: импорт префикса не найден

Мой проект строится нормально. Когда я запускаю pod spec lint, я получаю следующую ошибку:

 - ERROR | [MyApp/Core] [xcodebuild]  Target Support Files/Pods-MyApp/Pods-MyApp-prefix.pch:6:9: fatal error: 'MyConstants.h' file not found

Стоит обратить внимание на расположение файла констант: Project/Classes/MyConstants.h. Вот мой podspec:

Pod::Spec.new do |spec|
  spec.name         = "AppName"
  spec.version      = "1.0"
  spec.summary      = "blah blah"
  spec.homepage     = "http://company.com/"
  spec.license      = 'Apache 2.0'
  spec.author       = { "me" => "[email protected]" }
  spec.source       = { :git => 'ssh://path', :tag => '1.0'}

  spec.requires_arc = true
  spec.ios.deployment_target = '7.0'
  spec.frameworks   = ['Foundation', 'UIKit', 'CoreGraphics', 'QuartzCore']

  spec.source_files = 'Classes/**.*', 'Classes/ViewControllers/**.*', 'Classes/Views/**.*'

  spec.prefix_header_contents = '#import "MyConstants.h"'

  spec.subspec 'Core' do |cs|
    cs.dependency 'libextobjc', '~> 0.4'
  end

end

Я также пытался обменять строку:

spec.prefix_header_contents = '#import "MyConstants.h"'

с:

spec.prefix_header_file = 'MyApp/MyApp-Prefix.pch'

Но результат тот же. Что мне сделать, чтобы префикс мог видеть исходный код?

--- РЕДАКТИРОВАТЬ ---

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


person Nat    schedule 03.03.2015    source источник
comment
Вы не должны полагаться на pch, так как в последней версии Xcode это больше не создается по умолчанию. Просто включите MyConstants.h в каждый .m, который в этом нуждается.   -  person rckoenes    schedule 03.03.2015
comment
Это не решение, а обходной путь. Я хочу иметь pch, и у меня нет времени на рефакторинг всего приложения, чтобы не использовать его.   -  person Nat    schedule 03.03.2015
comment
Углубляться в файл pch - плохой дизайн, но это ваш вариант. Ваша библиотека, в которую вы хотите добавить какао-бобы, должна работать в проекте без файла pch.   -  person rckoenes    schedule 03.03.2015
comment
@rckoenes У меня есть макрос глобального предупреждения, который я хочу использовать. Это мой выбор, как вы написали. Я полностью осознаю это. То, что есть возможность добавить pch файл, означает, что моя библиотека может его использовать. Это не помогает решить мою проблему и, пожалуйста, не будем углубляться в оффтоп.   -  person Nat    schedule 03.03.2015
comment
Вы должны добавить имя пода в импорт, например: #import <AppName/MyConstants.h>   -  person rckoenes    schedule 03.03.2015
comment
@rckoenes Спасибо за ответ, но я все еще получаю сообщение об ошибке: - ERROR | [AppName/Core] [xcodebuild] Target Support Files/Pods-AppName/Pods-AppName-prefix.pch:6:9: fatal error: 'AppName/MyConstants.h' file not found   -  person Nat    schedule 03.03.2015


Ответы (2)


У меня была такая же проблема. В конце концов я добавил ss.public_header_files в свой subspec. Это скорее работа, которая сработала для меня (я бы не назвал это решением). согласно документам:

public_header_files

 A list of file patterns that should be used as public headers.    
These are the headers that will be exposed to the user’s project
and from which documentation will be generated. If no public
headers are   specified then all the headers are considered public.


Возможно, это не совсем точно.

Изменить
Мое решение было не совсем правильным. Когда я запускаю проверку с pod lib lint, она была успешно построена, когда я проверяю ее с опцией spec, я снова получаю ту же ошибку. В итоге я написал вопрос команде cocaoPods. .pch не распознает включенные файлы

person Mike.R    schedule 26.03.2015
comment
Я закончил с импортом префикса в те места, где он нужен. Рефакторинг стоил мне некоторого времени, но хорошо ;). - person Nat; 26.03.2015
comment
Vive, не могли бы вы отредактировать свой вопрос и написать, как вы его решили? - person Mike.R; 27.03.2015
comment
Конечно, сделано. Как я уже сказал, я просто обошел проблему. Я проверил ваш ответ как настоящий, потому что он кажется наиболее близким к решению проблемы. Если вы когда-нибудь получите ответ от команды CocoaPods, пожалуйста, сообщите мне тоже - это было бы полезно в разных проектах. - person Nat; 27.03.2015

С помощью spec.prefix_header_contents = '#import "MyConstants.h"' вы указали строку кода для вставки в .pch файл, созданный pod в процессе установки. Если вы получили эту ошибку, это потому, что файл MyConstants.h отсутствует.

РЕДАКТИРОВАНИЕ Если ваш файл MyConstants.h является основным источником проекта, вы не можете получить к нему доступ из файла Pod.

person Luca D'Alberti    schedule 03.03.2015
comment
Проблема в том, что он не пропал! Я понимаю, что говорит ошибка. Я не знаю, как сделать так, чтобы какаоподы видели этот заголовок. Я даже написал местоположение файла в своем вопросе, и вы можете заметить, что он импортирован. В предыдущем коммите я вижу файл после установки из подфайла в другом проекте. - person Nat; 03.03.2015
comment
Вы должны включить файл .h в свой файл s.source_files. Вы не можете получить доступ к основным файлам проекта из pod - person Luca D'Alberti; 03.03.2015
comment
spec.source_files = 'Classes/**/*' импортирует файл .h. Это часть модульного проекта ofc. - person Nat; 03.03.2015
comment
Я сделал то же самое в своем файле podspec, и это работает. Пытаетесь сделать pod install, какие файлы были загруженыcocopods? Я думаю, что в podspec есть ошибка в свойстве source_file. Возможно иерархия папок. - person Luca D'Alberti; 03.03.2015
comment
Спасибо за попытку! Я терплю неудачу в pod spec lint. Я даже не устанавливаю pod, потому что спецификация не передается в мои личные кокоаподы. Да, вы правы со свойством source_file, я только что обнаружил вещь с Classes/**.* вместо Classes/**/*, однако обновление все равно не работает :/ - person Nat; 03.03.2015
comment
В вашем репозитории также есть папка Project? Если да, попробуйте изменить строку source_file, вставив префикс Project/Classes/**.* - person Luca D'Alberti; 03.03.2015
comment
Он включен в путь исходного_файла :/. И моя предыдущая версия (которая не включала префикс, но включала MyConstants.{h,m}) работала нормально. Я включил другой проект, набрал pod install с предыдущей версией, и я вижу MyConstants.{h,m} в моем Подпроект pods. Не могли бы вы вставить рабочий podspec с префиксом, пожалуйста? - person Nat; 03.03.2015
comment
Взглянув на документацию, я не знаю, может ли Classes/**.* быть правильной строкой, которую вы должны ввести. Я думаю, что он не примет * для расширений (это только мое мнение). Попробуйте ввести точное расширение файла, как вы это сделали ( {h,m}). На самом деле, я видел другие файлы podspec, и все они используют {h,m} вместо *. - person Luca D'Alberti; 03.03.2015
comment
Пробовал с {h,m}, тот же результат == все еще ошибка не найдена. - person Nat; 03.03.2015