Johnathon Sullinger Johnathon Sullinger - 18 days ago 5
iOS Question

Xcode can't see objects added via Cocoapods

I have a

podfile
defined with the following pods.

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


I installed the pods and opened up my workspace. I have found that any usage of Alamofire works fine, due to the Swift 2 version of it importing the project as a framework.

When I try to use SSKeychain classes however, I receive a


Use of unresolved identifier 'SSKeychain`


Same applies with any class I try to use in the LiveSDK.

I have a bridge header in my projects root directory, and the project is configured to use it.

#ifndef Header_h
#define Header_h

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

#endif /* Header_h */


if I change the
#import
from

#import "SSKeychain/SSKeychain.h"


to

#import "SSKeychain.h"


Xcode fails to compile because it can't find the file. So I assume that the bridge header is working, as the way my bridge header is built now does not generate any compiler errors caused by not finding the headers.

Bridge Header

Objective-c Bridging header

Framework Search Paths

I have also added my project root directory to the framework search path.

Framework search paths

Linked Frameworks

Lastly I have linked all of the frameworks to the project as well.

Linked frameworks

Am I missing something with my setup? I have not been able to get Cocoapods to work on my project for nearly a week now. I even created a brand new project thinking that mine was just messed up; which didn't change a thing. I don't know what to do from here in order to resolve this.

Edit



After doing some additional research, I found a blog post showing that you have to include your Pods directory in the User Header Search

User Header Search

A commenter also mentioned that if you are using the newer Cocoapods Frameworks support for Swift, then it will need to include the Frameworks/** search path. I've included both Pods/** and Frameworks/** but still have the same issue.

After some further reading, it's beginning to sound like this is a limitation of Cocoapods. From what I understand, you can't use libraries and frameworks together at the same time in a project.

Answer

Once you use use_frameworks! in your Podfile, Objective-C Pods like SSKeychain also get build as frameworks.

The actual problem is that only module imports work in the bridging header when using frameworks. Also, you might want to get rid of the bridging header entirely, as it is unnecessary when using frameworks, they can be imported directly in Swift.