How to mix Swift and Objective-C in a pod lib?
I confirmed a working solution, here is how it works:
- It has to be iOS 8+ only (of course...)
- Use Xcode to create a Cocoa Touch Framework
- Develop the framework, mix swift code and objc code as you like. Make sure you mark all swift classes you need to expose as
public
. You may need to consult the documentation - Create a podspec file, provide necessary information (see here for how the pod will look like). One thing in particular is you need to include the Umbrella Header (used in your framework to expose objc code to swift) in the
source_files
in your podspec file. Xcode automatically creates an umbrella header for your framework when you create a framework project. If your framework name isNVMDummy
, the header isNVMDummy.h
. - Push the pod and integrate the pod as a framework into your project.
Test your pod lib. I created a demo app, added my pod lib and in my
ViewController.m
, I did the following:@import MyPodLibMixingOjbcAndSwift;// in viewDidLoad// use objc code in MyLib -> OK...// use swift code in MyLib -> OK...
The demo app works, so I conclude it works.
Here's the demo:https://github.com/axl411/TestNVMDummy
This is actually pretty straight forward in cocoapod. you just need to define these lines in the .podspec file.
s.source_files = '{YOUR_POD}/Classes/**/*.{swift,h,m}'s.public_header_files = '{YOUR_POD}/Classes/**/*.h'
"s.public_header_files" automatically create an umbrella header that serves the purpose of the bridging header as well. That's it you should be able to use ObjC classes inside swift classes.
You can also use swift classes in ObjC. you just need to import -swift header in your ObjC file.
#import <YOUR_POD/YOUR_POD-Swift.h>
As long as the dependency is one way, you would not face any issues.
In your .podspec
you should have something like:
s.source_files = 'MixSwiftObjectiveC/Classes/*'
- Go to the
MixSwiftObjectiveC/Classes/
directory folder in the finder to be sure and put your files (objc and swift) - Clean Build Folder
- navigate to your
Example..
folder and do apod install
(as you should have aPodfile
under yourExample..
folder that has yourMixSwiftObjectiveC
pod) - build and you shouldn't have anymore the issue