我们知道Xcode维护着${TARGET_NAME}
的环境变量,但是如何在objective-C代码中访问这个变量呢?
我都试了些什么?
我已经在构建设置的预处理器宏部分添加了"TARGET_NAME=${TARGET_NAME}"
。但是现在我不确定如何在objective-C代码中将这个变量"TARGET_NAME"
用作字符串。
在我的例子中,产品名称和目标名称是不同的,所以没有机会使用它。
我尝试使用以下命令访问
#ifdef TARGET_NAME
NSLog(@"TargetIdentifier %@",TARGET_NAME);
#endif
这段代码给出了类似于“使用未声明的标识符'myapptargetname'”的错误
发布于 2015-03-19 07:11:41
您可以在Info.plist文件中添加"TargetName“密钥:
然后你可以访问它(快速代码):
var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String
发布于 2019-04-09 18:55:21
我必须信任the original answer by vk.edward.li,因为这个答案只是对它的扩展。
所有的构建设置宏也可以很容易地在源代码中作为预处理器宏使用。问题是,它们不是预先设置的;您必须自己指定您有权访问哪些文件。
我已经添加了三个额外的预处理器宏。只需单击+
,并添加以下内容:TARGET_NAME=\""$TARGET_NAME"\"
,您就可以访问另一个构建设置宏。
Project settings ––> Build Settings ––> Apple Clang - Preprocessing[Preprocessor Macros]
。请注意,如果您尝试同时为两种编译模式插入它们,DEBUG=1
宏将被删除,但随后可以很容易地将其添加回来。
还值得注意的是,不同的语言应该设置不同的宏值:Objective-C
和C++
/Swift
等。这是由于Objective-C
中使用的NSString
前缀,因此对于该语言,它应该是MACRO=@\""$MACRO"\"
而不是MACRO=\""$MACRO"\"
。
发布于 2017-04-01 05:46:45
在Xcode 7.3.1中
if let targetName = NSBundle.mainBundle().infoDictionary?["CFBundleName"] as? String{
print(targetName)
}
https://stackoverflow.com/questions/18783055
复制相似问题