如何获得目标名称?

Idu*_*ool 31 iphone xcode build-process objective-c

我们知道Xcode维护环境变量${TARGET_NAME}但是如何在Objective-C代码中访问这个变量?

我试过了什么?
"TARGET_NAME=${TARGET_NAME}"在Build Settings的Preprocessor宏部分添加了这个.但是现在我不确定如何"TARGET_NAME"在Objective-C代码中将此变量用作字符串.

在我的情况下,产品名称和目标名称是不同的,所以没有机会使用它.

我试图访问使用

#ifdef TARGET_NAME
 NSLog(@"TargetIdentifier %@",TARGET_NAME);
#endif
Run Code Online (Sandbox Code Playgroud)

此代码给出错误,例如"使用未声明的标识符'myapptargetname'"

Ser*_*nko 60

您可以将"TargetName"键添加到Info.plist文件中:

在此输入图像描述

然后你可以访问它(快速代码):

var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String
Run Code Online (Sandbox Code Playgroud)

  • @VasilValchev它也适用于xcode 7.请注意,默认情况下,此密钥不会显示在Info.plist中,您必须自己手动添加. (2认同)

Vũ *_*Anh 28

NSLog(@"Target name: %@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]);
Run Code Online (Sandbox Code Playgroud)

希望能帮到你!

编辑:"CFBundleName" 感谢Max和Daniel Bo的推荐

  • 最好使用"CFBundleName" (3认同)

Law*_*iet 16

Swift 4,Xcode 9+

捆绑名称:

Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""
Run Code Online (Sandbox Code Playgroud)

捆绑显示名称:

Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? ""
Run Code Online (Sandbox Code Playgroud)

Swift 3,Xcode 8+

let targetName = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
Run Code Online (Sandbox Code Playgroud)

  • 不打印目标名称,它打印显示名称:) (6认同)