Jeef
Jeef

Reputation: 27275

Clarification on adding Objective C code to a swift dynamic framework

I have a dynamic framework in swift that currently is linking in another framework that is written in Objective C. This works but its annoying because the Objective C framework really only 2 files and I was wondering if there is a way to bring this into my swift framework.

If this was an application I'd user Bridging-Header but that is not supported inside a swift framework.

My framework is called GDL90 and consists of only swift files.

My Objective-C framework consists of:

Real simple - right? So I wanted to see if there was a way to just add this code into my swift project.

Attempt #1 - add my code into the "umbrella header?" GDL90.h

I added my file an get the warning Include of non-modular header inside framework module 'GDL90'

Ok so thats no dice.

Attempt 2

I figured I needed to make a module map file.

So I made a directory called ${SRCROOT}/GDL90/EGM96 and inside I created EGM96.module.modulemap

module EGM96 {
    header "GeoidCalculator.h"
    export *
}

And then in one of my swift files i have import EGM96 which doesn't seem to be found.

In my build settings i have:

Define Modules turned on and I'm pointing to the modulemap file from my Module Map File item

Am I missing something??

Upvotes: 3

Views: 1044

Answers (1)

SoVa_
SoVa_

Reputation: 479

You do not need the modulemap files if create internal framework correctly:

  1. Create new framework target “EGM96” under EGM96 project:
    • go to GDL90 Project -> Add New Target -> Cocoa Touch Framework
    • input the Name and select Objective-C as language enter image description here
  2. Add objective-с files and other sources of EGM96 to new target. enter image description here

  3. Add GeoidCalculator.h as public header:

    • Change target membership of GeoidCalculator.h header from “Project” to “Public” enter image description here
    • Import headers to the umbrella file called EGM96.h
    • Make sure umbrella header EGM96.h is public for EGM96 target. enter image description here
  4. Add new framework to target dependence of GDL90 and add new library to linked binaries of GDL90. enter image description here
  5. Now you can import EGM96 in any swift file of EGM96:

import EGM96

Upvotes: 2

Related Questions