PRODUCT_BUNDLE_IDENTIFIER如何用作应用程序错误的NSErrorDomain?

时间:2019-05-21 17:40:18

标签: objective-c error-handling compile-time-constant

如何将OS X应用程序的产品捆绑包标识符用于错误域?这样使用有什么陷阱吗?

它似乎没有定义为宏;我尝试过:

NSErrorDomain BSDomain = PRODUCT_BUNDLE_IDENTIFIER;

这会导致错误:

  

使用未声明的标识符“ PRODUCT_BUNDLE_IDENTIFIER”

1 个答案:

答案 0 :(得分:0)

似乎构建设置变量在命令行上可用,尽管不在源文件中。对于任何此类变量,都可以手动preprocessor macro定义"Add preprocessor macro to a target in xcode 6"(另请参见based on the variable)。可以为宏和设置指定不同的名称,但为它们指定相同的名称可能会更有意义。

在这种情况下,值应以“ @”开头,并用转义的双引号引起来,因此它们是宏的一部分,并且在替换宏时将被包括在内。如果任一个都不设置,则宏值将不是有效的NSString常数(用作NSErrorDomain值时必需)。该宏应添加到所有配置(调试,发布和任何用户定义的)中。

PRODUCT_BUNDLE_IDENTIFIER=@\"$(PRODUCT_BUNDLE_IDENTIFIER)\"

如果产品捆绑包ID也将以其他方式使用,则可以使用原始值(PRODUCT_BUNDLE_IDENTIFIER=$(PRODUCT_BUNDLE_IDENTIFIER))定义宏,并在使用地点引入适当的语法:

NSErrorDomain BSDomain = @"PRODUCT_BUNDLE_IDENTIFIER";