如果您有很多目标,则此方法比@Sergey Demchenko 建议的方法更方便,因为您只需执行一次,如果添加新目标,则无需在 Info.plist 中进行任何更改。
- 转到项目构建设置(不是目标的构建设置),并添加以下预处理器宏:
TARGET_NAME="$(TARGET_NAME)"
- 现在,我们需要在代码中获取这个宏的值。Swift 不支持字符串宏,所以我们需要回到旧的 Objective-C。
添加以下文件:
AppTargetName.h
:
#import <Foundation/Foundation.h>
NSString * _Nullable AppTargetName(void);
AppTargetName.m
,带有一些 C 预处理器的魔法(感谢):
#import "AppTargetName.h"
#ifndef TARGET_NAME
#define TARGET_NAME ""
#endif
#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define TARGET_NAME_STRING @ STRINGIZE2(TARGET_NAME)
NSString * _Nullable AppTargetName() {
if (TARGET_NAME_STRING.length == 0) {
return nil;
} else {
return TARGET_NAME_STRING;
}
}
添加#import "AppTargetName.h"
到 Obj-c 桥接头标头(如果没有,请添加/配置它)。
现在在 Swift 中,您可以调用AppTargetName()
并获取您的目标名称,如果您添加新目标,则无需修改 Info.plist!
if let targetName = AppTargetName() {
print("Target Name = \(targetName)")
}