Because CocoaPods 0.36 are availbable to anyone and they are now coming with Swift and Frameworks support I have one question that is bothering me today...
I create Podfile
in my project directory, fill it with:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'AFNetworking'
pod 'SwiftyJSON'
And run pod install
as usual... You know this story. But when I open my .xcworkspace
and go to any ViewController and import SwiftyJSON
it just works but when I try to do the same thing with AFNetworking I get No such module 'AFNetworking'
. Of course, I can create a Bridging-Header and import it with the Objective-C way but when I read this blog post I can see:
To use this subspec in Swift, without a generated umbrella header, you would need to create a bridging header and use an import like
#import <AFNetworking/AFNetworking+UIKit.h
. With the generated umbrella header, you just need toimport AFNetworking
, if you have the subspec included in your Podfile.
Correct me if I'm wrong but I suppose that manual Bridging-Header is no longer needed if we add libraries with CocoaPods, right? So, why this isn't working?
As I thought... This example which I provided in OP is incorrect... Well, basically it's correct because it's working like it should. Let me show you a counter example.
I have a Swift project but I want to use only Objective-C pods (AFNetworking, SSPullToRefresh etc.). Now we have some troubles because when you provide those Objective-C pods in Podfile
they'll be added to Pods target as a static libraries. You probably now that CocoaPods are now switching to Frameworks (If you want to know the difference please read this question). Back to topic... There are two possible solutions to this conflict sitation:
YourProject-Bridging-Header.h
and #import
those libraries... This is the old way used even before Swift integration.use_frameworks!
method call inside your Podfile
. By doing this you force CocoaPods to create frameworks instead of static libraries.Now, let me explain why you'd prefer the second solution... As OP states, CocoaPods now automatically create Umbrella Headers (learn about them). It's the convenient way for you to skip manual creation of bridging header.
I've found a solution here so without this post I would probably still be struggling with this problem. Cheers to the author!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With