【发布时间】:2016-08-14 00:11:07
【问题描述】:
我有一个包含多个目标的 Xcode 项目。假设目标名称是AppFreeVersion 和AppPaidVersion。它们共享相同的代码库,但我想实现一些仅针对其中一个目标的逻辑。
在不修改我的方案或构建设置的情况下,有没有办法获取我当前目标名称的字符串? in this question 给出的解决方案要求我在构建设置中传递一个环境变量,我不想这样做。
【问题讨论】:
我有一个包含多个目标的 Xcode 项目。假设目标名称是AppFreeVersion 和AppPaidVersion。它们共享相同的代码库,但我想实现一些仅针对其中一个目标的逻辑。
在不修改我的方案或构建设置的情况下,有没有办法获取我当前目标名称的字符串? in this question 给出的解决方案要求我在构建设置中传递一个环境变量,我不想这样做。
【问题讨论】:
首先,您必须在相应目标的 .plist 文件中添加目标名称属性。那么你可以在代码中的任何地方获取它。
print("Target Name = " + (Bundle.main.infoDictionary?["TARGET_NAME"] as! String))
【讨论】:
在 Swift 4.0 上
let targetName = Bundle.main.infoDictionary?["TargetName"] as! String
【讨论】:
Swift 3.0 解决方案。
func getTargetName() -> String {
return Bundle.main.infoDictionary?["CFBundleName"] as! String
}
【讨论】:
只需在您的方案中设置目标名称 -> 环境变量 -> 添加名称和值。 例如:targetName = "mytesttarget"
Obj-c
NSDictionary* envir = [[NSProcessInfo processInfo] environment];
NSString* targetName = envir[@"targetName"];
斯威夫特
让 envir = NSProcessInfo.processInfo().environment
让 targetName = envir["targetName"]
【讨论】:
在 info.plist 中添加${TARGET_NAME} 怎么样?
我猜你已经知道如何获得它了
Obj-C
[[NSBundle mainBundle] objectForInfoDictionaryKey:key_name];
斯威夫特
let targetName = NSBundle.mainBundle().infoDictionary?[key_name] as String
【讨论】: