Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 719
Sheamus Avatar asked Apr 14 '16 00:04

Sheamus


3 Answers

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)",     ); }, ... 
like image 152
jtbandes Avatar answered Sep 30 '22 15:09

jtbandes


SWIFT_MODULE_NAME, PRODUCT_MODULE_NAME, PRODUCT_NAME, EXECUTABLE_NAME

Default values:

EXECUTABLE_NAME = $EXECUTABLE_PREFIX$PRODUCT_NAME$EXECUTABLE_SUFFIX
SWIFT_OBJC_INTERFACE_HEADER_NAME = $(SWIFT_MODULE_NAME) 

SWIFT_MODULE_NAME = $(PRODUCT_MODULE_NAME)
PRODUCT_MODULE_NAME = $(PRODUCT_NAME:c99extidentifier)
PRODUCT_NAME = $(TARGET_NAME:c99extidentifier)

Observation:

SWIFT_MODULE_NAME == PRODUCT_MODULE_NAME

c99extidentifier

Xcode is able to substitute a value of variable c99extidentifier identifier which supports extended characters from C99

//for example
PRODUCT_NAME = My Framework
PRODUCT_MODULE_NAME = $(PRODUCT_NAME:c99extidentifier) = My_Framework

EXECUTABLE_NAME name of binary

Product Module Name(PRODUCT_MODULE_NAME) determines how the import statement will look like. For example when you are creating a Library or a Framework.

Using:

//Objective-C
@import module_name; 

//Swift
import module_name 

Product Name(PRODUCT_NAME) determines the name of binary. E.g. MyFramework.framework

[TARGET_NAME]

Rule is:

SWIFT_MODULE_NAME should equal to PRODUCT_MODULE_NAME

[Custom .modulemap]

like image 33
yoAlex5 Avatar answered Sep 30 '22 16:09

yoAlex5


Go to build Settings and click + next to 'Levels'. See :

enter image description here

replace NEW_SETTING as SWIFT_MODULE_NAME for the name of the setting, and whatever is the module name for .h file (No spaces, please) goes on the right.

like image 20
Anton Tropashko Avatar answered Sep 30 '22 15:09

Anton Tropashko