如何修改SWIFT_MODULE_NAME?

How to modify SWIFT_MODULE_NAME?

标题说明了一切。我在构建设置中搜索了 SWIFT_MODULE_NAME,但没有找到任何结果。我也在网上搜索过,也有提到这个名字,但是没有关于它是如何定义的信息。 此外,我在 Apple 文档中找不到任何提及 SWIFT_MODULE_NAME 的地方。

我知道这个:它在 "Objective-C Generated Interface Header Name" 构建设置中使用,可以通过 double-clicking 在设置值上查看:

$(SWIFT_MODULE_NAME)-Swift.h

它用于弥合 Objective-C 和 Swift 之间的差距,并且只出现在包含 Swift 文件的项目中,(以及我认为的 Objective-C 文件).在这篇文章中,Xcode 7.3 是最新和最好的。

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

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

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)",
    );
},
...

您是否查看过此文档:developer.apple.com/library/ios/documentation/Swift/Conceptual/...?通常是您的产品名称。您可以在构建设置中设置更改 "Product Bundle Identifier" 中的值。请注意,您不能覆盖框架中的产品名称

见截图:

转到构建设置并单击 'Levels' 旁边的 +。 参见:

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

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)

观察:

SWIFT_MODULE_NAME == PRODUCT_MODULE_NAME

c99extidentifier

Xcode 可以替换变量的值 c99extidentifier 标识符,支持来自 C99

的扩展字符
//for example
PRODUCT_NAME = My Framework
PRODUCT_MODULE_NAME = $(PRODUCT_NAME:c99extidentifier) = My_Framework

EXECUTABLE_NAME二进制名称

Product Module Name(PRODUCT_MODULE_NAME) 确定 import 语句的外观。例如,当您创建 LibraryFramework.

使用:

//Objective-C
@import module_name; 

//Swift
import module_name 

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

[TARGET_NAME]

规则是:

SWIFT_MODULE_NAME should equal to PRODUCT_MODULE_NAME