Objective C to Swift header file with multiple targets

前端 未结 6 1668
無奈伤痛
無奈伤痛 2020-12-01 03:32

I\'m successfully calling my Swift classes from Objective C (for target \'MyApp\') via the import statement:

#import \"MyApp-Swift.h\"

I\'v

相关标签:
6条回答
  • 2020-12-01 03:52

    The best way I've found to address this issue is in your Xcode shared project settings. You can search for the following setting:

    Objective-C Generated Interface Header Name*

    If you set that value to a common header name, such as "MyProject-Swift.h", it will be applied to each of your targets and you can safely use the import declaration in any of your Objective-C files. This allows you to continue using unique product module names for each target, if needed.

    I've tested this in Xcode Version 6.4 (6E35b).

    *Note: This will appear under your Swift compiler settings, which are only visible if you have Swift source files added to your project. Additionally, if a target doesn't have any Swift source associated with it, the Swift compiler options will not be visible for that target's build settings.

    Good luck!

    0 讨论(0)
  • 2020-12-01 03:54

    Well, the only way I can fix is to...

    #ifdef IS_LITE
    #import "MyApp_Lite-Swift.h"
    #else
    #import "MyApp-Swift.h"
    #endif
    

    Note that if there's any 'illegal' chars in my Product Module Name, they need to be replaced with underscores.

    Hope that helps!

    0 讨论(0)
  • 2020-12-01 03:56

    Previous answers have some problems if you decide to rename your targets or project, or use SWIFT_MODULE_NAME as intended.

    The most universal solution is to change SWIFT_OBJC_INTERFACE_HEADER_NAME (“Objective-C Generated Interface Header Name”) under Project's, not Targets, Build Settings, to:

    • $(PROJECT_NAME)-Swift.h — one per project;
    • $(SWIFT_MODULE_NAME)-Swift.h — one per module (default value).

    0 讨论(0)
  • 2020-12-01 04:03

    I put the appropriate #import <project>-Swift.h statement in a prefix header file (<project>-Prefix.pch) defined/added for each build (target/scheme).

    0 讨论(0)
  • 2020-12-01 04:08

    It is also possible to set the Product Module Name setting in Build Settings to be the same across your modules (I set it to $(PROJECT_NAME)), so that the <project>-Swift.h file that is generated has the same name across all modules. This eliminates the need for adding/checking preprocessor macros.

    0 讨论(0)
  • 2020-12-01 04:12

    The only working way is the following :

    1- from first target (which has a working bridging) Build Setting select Objective C Bridging Header
    2- Copy Objective C Bridging Header
    3- open the other target Build Setting
    4- Paste it 5- change the header file to your new header file (i.e target B.h)

    (now you have this option for two target)

    0 讨论(0)
提交回复
热议问题