如何修改SWIFT_MODULE_NAME?

She*_*mus 16 xcode objective-c ios swift objective-c-swift-bridge

标题说明了一切.我在SWIFT_MODULE_NAME的构建设置中搜索过,但没有任何内容.我也在线搜索,并且有对此名称的引用,但没有关于如何定义的信息.此外,我在Apple Docs中找不到任何提及SWIFT_MODULE_NAME的信息.

我知道这一点:它用于"Objective-C Generated Interface Header Name"构建设置,可以通过双击设置值来查看:

$(SWIFT_MODULE_NAME)-Swift.h

它用于弥合Objective-C和Swift之间的差距,并且只出现在包含Swift文件的项目中(以及我假设的Objective-C文件).截至发布时,Xcode 7.3是最新最好的.

但是,这个值定义在哪里,我该如何修改它?

jtb*_*des 28

模块名称来自产品模块名称构建设置:

构建设置截图

SWIFT_MODULE_NAME设置显然是隐藏的,但您可以通过查看以下内容来查看其派生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)",
    );
},
...
Run Code Online (Sandbox Code Playgroud)


Ant*_*hko 6

转到构建设置并单击“级别”旁边的 +。看 :

在此处输入图片说明

将 NEW_SETTING 替换为 SWIFT_MODULE_NAME 作为设置的名称,无论 .h 文件的模块名称是什么(请不要空格)在右边。


yoA*_*ex5 5

SWIFT_MODULE_NAME、PRODUCT_MODULE_NAME、PRODUCT_NAME、EXECUTABLE_NAME

默认值:

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)
Run Code Online (Sandbox Code Playgroud)

观察:

SWIFT_MODULE_NAME == PRODUCT_MODULE_NAME
Run Code Online (Sandbox Code Playgroud)

c99ext标识符

Xcode 能够替换c99extidentifier支持来自C99 的扩展字符的变量标识符的值

//for example
PRODUCT_NAME = My Framework
PRODUCT_MODULE_NAME = $(PRODUCT_NAME:c99extidentifier) = My_Framework
Run Code Online (Sandbox Code Playgroud)

EXECUTABLE_NAME 二进制名称

Product Module Name(PRODUCT_MODULE_NAME)确定import语句的外观。例如,当您创建一个Library或一个Framework.

使用:

//Objective-C
@import module_name; 

//Swift
import module_name 
Run Code Online (Sandbox Code Playgroud)

Product Name(PRODUCT_NAME)确定二进制文件的名称。例如 MyFramework.framework

[TARGET_NAME]

规则是:

SWIFT_MODULE_NAME should equal to PRODUCT_MODULE_NAME
Run Code Online (Sandbox Code Playgroud)

[自定义 .modulemap]