iosobjective-cxcodeswiftobjective-c-swift-bridge

How to modify SWIFT_MODULE_NAME?


The title says it all. I've searched in the build settings for SWIFT_MODULE_NAME, and nothing came up. I've also searched online, and there are references to this name, but there is no information on how it is defined. Furthermore, I couldn't find any mention of SWIFT_MODULE_NAME in the Apple Docs.

I do know this: it is used in the "Objective-C Generated Interface Header Name" build setting, and can be viewed by double-clicking on the settings value:

$(SWIFT_MODULE_NAME)-Swift.h

It is used to bridge the gap between Objective-C and Swift, and appears only for projects that include Swift files, (along with Objective-C files I presume). As of this posting, Xcode 7.3 is the latest and greatest.

But, where is this value defined, and how do I modify it?


Solution

  • The module name comes from the Product Module Name build setting:

    build settings screenshot

    The SWIFT_MODULE_NAME setting is apparently hidden, but you can see its derivation by looking at Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/XCLanguageSupport.xcplugin/Contents/Resources/Swift.xcspec:

    ...
    {
        Name = "SWIFT_MODULE_NAME";
        Type = String;
        DefaultValue = "$(PRODUCT_MODULE_NAME)";
        CommandLineArgs = (
            "-module-name",
            "$(value)",
        );
    },
    ...