Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building reusable libraries with Swift that use bridging headers

Tags:

swift

I'm trying to get the hang of Swift, and am beginning by just doing a dumb port of a few applications I've written.

These applications have some core logic in common, for which I've used a Framework target in Xcode to share this with those projects. I'm having trouble coming up with an equivalent in Swift.

I know Swift compiles down to modules, which seems like what I want. I want a Swift module that I can share with my other projects. the major problem I seem to be having though, is that you cannot have a Framework with Swift if it also uses a bridging header starting in Beta 4, which I need to call some APIs (like Security.framework) that don't have Swift bindings. The compiler (Beta 5) fails with this error message:

<unknown>:0: error: using bridging headers with framework targets is unsupported

What can I do to create a reusable Swift module that also needs to use bridging headers? Alternatively, how can I use things in Security.framework without a bridging header? (Alternatively Aternatively, is there something other than a Framework I should be using to create a module that doesn't have any of these problems?)

like image 375
vcsjones Avatar asked Aug 06 '14 01:08

vcsjones


1 Answers

To import Objective-C code to swift within the same framework target, just import each Objective-C header file in the umbrella header file. Apple's official document has mentioned that already: https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_81 see the Importing Code from Within the Same Framework Target part.

The cocoa built in frameworks have been migrated as modules in swift. To use the Objective-C's Security.framework, you just need to add a line:

import Security

at the header of the swift file.

like image 52
Louis Zhu Avatar answered Oct 21 '22 03:10

Louis Zhu