Create and import swift framework Create and import swift framework swift swift

Create and import swift framework


I've done with the following steps.

  1. Create a framework project, for example named "FooKit". (Cocoa Touch Framework to be selected)
  2. Create a ".swift" file and add a public symbol, for example public func foo(), to it.
  3. Create an use-side (app) project. (I've chosen Single View Application)
  4. Open the root directory of "FooKit" by Finder, drag "FooKit.xcodeproj" there and drop it into the app project via Project Navigator.
  5. Add "FooKit" to Target Dependencies in the app's Build Phases setting.
  6. Add "FooKit.framework" to Embedded Binaries in the app's General setting.

Now you can build like this code in the use-side app.

import FooKitfunc bar() {    foo()}


In Xcode 7.2 using Swift 2.1 I managed to get past the mentioned error by making sure that the build settings of your pure Swift framework called Foo are as follows:

1) Build Settings->Packaging->Defines Module = Yes

2) Build Settings->Swift Compiler - Code Generation->Install Objective-C Compatibility Header = Yes (if you do not need to import your Swift framework into Objective C set this setting to No)

3) Erase the string value of Build Settings->Swift Compiler - Code Generation->Objective-C Bridging Header

4)Build Settings->Swift Compiler - Code Generation->Objective-C Generated Interface Header Name = Foo-Swift.h (if you do not need to import your Swift framework into Objective C erase this setting as you did in step 3))

5) Make sure that Build Settings->Packaging->Product Name = Foo

6) Add to the public umbrella header of your framework (Foo.h), which you can use to import your Swift code to Objective C, the following line:

#import "Foo-Swift.h"

(but if you do not need to import your Swift code into objective C skip this step)

6) Add the following line to the Swift file where you want to use the module Foo:

import Foo

Important notes:

1) Ensure that your umbrella header Foo.h is set to public in the File Inspector, otherwise this won't work.

2) If you are using your pure Swift framework in Objective C files, ensure that:

  • the Foo-Swift.h header has generated the correct interface by going to Foo.h and then clicking on the top left corner menu of the Xcode code editor and then choosing Includes->Foo-Swift.h (I had to rebuild the Foo framework a few times until Xcode caught-up with the change and then generated the correct interface in Objective C, so you may need to do that as well)

  • your swift classes inherit from NSObject or they won't be available to Objective C code


Additionally for @jvarela's answer, in Xcode 9 and swift 4,

To import Swift framework in an Objective C project, you must add

@objc

mark to all of your classes, methods and variables which you want to export into Objective C project .

For example,

@objc public class Foo: NSObject {    @objc public var fooDescription: String    @objc public func foo(){    }}