Vatsal
Vatsal

Reputation: 18181

Can't access class from custom dynamic framework (Swift)

My test dynamic iOS framework XYZFramework consists of a single class XYZ.

However, even after declaring:

import XYZFramework

I am unable to access this class, with any attempts yielding the following error:

Use of unresolved identifier 'XYZ'

How do I resolve this issue?

Upvotes: 36

Views: 12684

Answers (2)

Vatsal
Vatsal

Reputation: 18181

Found the answer. I had to prefix my class declaration with the public modifier. So this:

class XYZ {

}

became:

public class XYZ {

}

And, as always, trashing the ~/Library/Developer/Xcode/DerivedData folder fixed any minor complications.

Upvotes: 55

rustyMagnet
rustyMagnet

Reputation: 4085

If your Framework's class also contained Static and Instance Member functions you also need some more public keywords adding.

// set the Framework class to Public
public class FrameworkHello{  

   // set the initializer to public, otherwise you cannot invoke class
   public init() {  

   }

   // set the function to public, as it defaults to internal
   public static func world() {  
       print("hello from a static method")
   }
}

Now you can access this via your Swift code or with lldb:

(lldb) po FrameworkHello.world()
hello from a static method

This ensures the Framework's Symbols are accessible in a Release build.

Upvotes: 2

Related Questions