23

标题说明了一切。我在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 是最新最好的。

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

4

4 回答 4

45

模块名称来自 Product Module Name 构建设置:

构建设置截图

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)",
    );
},
...
于 2016-04-14T00:35:45.180 回答
6

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

在此处输入图像描述

将 NEW_SETTING 替换为 SWIFT_MODULE_NAME 作为设置的名称,而 .h 文件的模块名称(请不要使用空格)在右侧。

于 2017-10-23T15:31:07.403 回答
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)

观察:

SWIFT_MODULE_NAME == PRODUCT_MODULE_NAME

c99ext标识符

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语句的外观。例如,当您创建 aLibraryFramework.

使用:

//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

[自定义.modulemap]

于 2019-08-15T23:38:53.517 回答
0

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

看截图:

在此处输入图像描述

于 2016-04-14T00:39:12.663 回答