如何获取当前在Xcode中运行的目标的名称?

时间:2016-04-21 02:41:13

标签: ios xcode build

我有一个包含多个目标的Xcode项目。假设目标名称为AppFreeVersionAppPaidVersion。它们共享相同的代码库,但我想实现一些仅适用于其中一个目标的逻辑。

如果不修改我的方案或构建设置,有没有办法获取我当前目标名称的字符串?给出in this question的解决方案要求我在构建设置中传递一个环境变量,我不想这样做。

6 个答案:

答案 0 :(得分:7)

如何在info.plist中添加${TARGET_NAME}

我想你已经知道怎么做了

的OBJ-C

[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];

夫特

let targetName = NSBundle.mainBundle().infoDictionary?[key_name] as String

答案 1 :(得分:7)

Swift 3.0解决方案。

func getTargetName() -> String {
    return Bundle.main.infoDictionary?["CFBundleName"] as! String
}

答案 2 :(得分:0)

只需在您的方案中设置目标名称 - >环境变量 - >添加名称和值。 例如:targetName =“mytesttarget”

<强>的OBJ-C

NSDictionary * envir = [[NSProcessInfo processInfo] environment];

NSString * targetName = envir [@“targetName”];

<强>夫特

让envir = NSProcessInfo.processInfo()。environment

让targetName = envir [“targetName”]

答案 3 :(得分:0)

在Swift 4.0上

let targetName = Bundle.main.infoDictionary?["TargetName"] as! String

答案 4 :(得分:0)

Niko接受的答案仍适用于Xcode 12.2和iOS 14.2

下面是一个屏幕截图,可以更好地阐明Info.plist中需要执行的操作:

Info.plist screenshot

您需要对每个目标对应的Info.plist

执行此操作

您甚至不需要使用$(TARGET_NAME)作为值,您可以提供自己的自定义唯一值并检查这些值。

答案 5 :(得分:0)

首先,您必须在相应目标的 .plist 文件中添加目标名称属性。然后你就可以在代码的任何地方得到它。

print("Target Name = " + (Bundle.main.infoDictionary?["TARGET_NAME"] as! String))

enter image description here