22

I’m trying to integrate Swift into an existing objective-c framework that has public, private and project files. In order for swift to access the project files, I added a modulemap that defines a new module (e.g MyFramework_Internal) by including all the project headers as explained here: http://nsomar.com/project-and-private-headers-in-a-swift-and-objective-c-framework/

That setup is sort of working but one thing I was surprised to see is that now a client can access the internal classes by importing MyFramework_Internal (@import MyFramework_Internal). Is there a way to hide the module since it's only needed by the framework itself? The modulemap looks like this now:

module MyFramework_Internal {  
   header "Folder1/Baz.h"  
   header "Folder1/Folder2/Bar.h"  
   export *
} 
Glauco
  • 495
  • 1
  • 7
  • 17
  • For public framework assembly you can create different target, post-process assembled framework by copying different module map into your module, which will not expose modules that are private. – Eugene Dudnyk Jan 16 '19 at 05:47
  • Also, you can try to add a private module map `module.private.modulemap` as described here: https://stackoverflow.com/questions/34265339/private-module-map-for-a-framework – Eugene Dudnyk Jan 16 '19 at 05:52

1 Answers1

1

The module file is intended for Objective-C, and Objective-C doesn't have the concept of internal. It only knows public (what's declared in the header files), and private (what's declared only in the implementation files).

Thus, anything that end's up in a module file will be publicly available.

Cristik
  • 30,989
  • 25
  • 91
  • 127