我有一个包含多个目标的Xcode项目。假设目标名称为AppFreeVersion
和AppPaidVersion
。它们共享相同的代码库,但我想实现一些仅适用于其中一个目标的逻辑。
如果不修改我的方案或构建设置,有没有办法获取我当前目标名称的字符串?给出in this question的解决方案要求我在构建设置中传递一个环境变量,我不想这样做。
答案 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
您甚至不需要使用$(TARGET_NAME)
作为值,您可以提供自己的自定义唯一值并检查这些值。
答案 5 :(得分:0)
首先,您必须在相应目标的 .plist 文件中添加目标名称属性。然后你就可以在代码的任何地方得到它。
print("Target Name = " + (Bundle.main.infoDictionary?["TARGET_NAME"] as! String))