Xcode не может видеть объекты, добавленные через Cocoapods

У меня есть podfile, определенный со следующими пакетами.

platform :ios, '8.0'
use_frameworks!

target 'LifeStream' do
pod 'SSKeychain'
pod 'LiveSDK'
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'swift-2.0'
end

Я установил контейнеры и открыл свое рабочее пространство. Я обнаружил, что любое использование Alamofire отлично работает, поскольку версия Swift 2 импортирует проект в качестве рамки.

Однако, когда я пытаюсь использовать классы SSKeychain, я получаю

Использование неразрешенного идентификатора "SSKeychain"

То же самое относится к любому классу, который я пытаюсь использовать в LiveSDK.

У меня есть заголовок моста в корневом каталоге проектов, и проект настроен на его использование.

#ifndef Header_h
#define Header_h

#import "SSKeychain/SSKeychain.h"
#import "LiveSDK/LiveConnectClient.h"

#endif /* Header_h */

если я изменяю #import из

#import "SSKeychain/SSKeychain.h"

к

#import "SSKeychain.h"

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

Заголовок заголовка

Objective-c Bridging header

Пути поиска в каркасе

Я также добавил корневой каталог проекта в путь поиска фреймов.

Framework search paths

Связанные структуры

Наконец, я связал все рамки с проектом.

Linked frameworks

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

Изменить

После некоторого дополнительного исследования я нашел сообщение в блоге, в котором показано, что вы должны включить каталог Pods в User Header Search

User Header Search

Комментарий также отметил, что если вы используете новую поддержку Cocoapods Framework для Swift, тогда она должна будет включать путь поиска Framework/**. Я включил как Pods/**, так и Frameworks/**, но по-прежнему имеет ту же проблему.

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

Ответы

Ответ 1

Как только вы используете use_frameworks! в вашем подпикселе, Objective-C Pods, такие как SSKeychain, также получат сборку в виде фреймворков.

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

Ответ 2

Чтобы уточнить, что вы должны сделать, чтобы заставить его работать:

  • Убедитесь, что имеет use_frameworks! в вашем подпикселе
  • Не имеет значения, есть ли заголовок Bridging или нет. Оставьте его нетронутым.
  • В вашем файле SWIFT просто используйте import Podname

Что ты, ты в порядке. Конечно, может случиться так, что вам нужно очистить проект или удалить папку с производными данными. Постройте, и вы можете использовать его.

Ответ 3

Если вы не используете быстрые стручки,

Попробуйте удалить use_frameworks! в вашем подфайле.

Запустить программу установки на терминал.

Очистить и построить!

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

Поэтому, в моем случае, заголовок заголовочного файла не был проблемой, его в Подфайл.

Надеюсь, это поможет!