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

How can PRODUCT_BUNDLE_IDENTIFIER be used as NSErrorDomain for app errors?

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

好像没有定义成宏;我试过了:

NSErrorDomain BSDomain = PRODUCT_BUNDLE_IDENTIFIER;

这会导致错误:

Use of undeclared identifier 'PRODUCT_BUNDLE_IDENTIFIER'

构建设置变量似乎在命令行中可用,但在源文件中不可用。对于任何此类变量,preprocessor macro (see also "Add preprocessor macro to a target in xcode 6") can be defined manually based on the variable。可以为宏和设置指定不同的名称,但可能为它们指定相同的名称会更有意义。

在这种情况下,该值应以“@”开头并被转义的 double-quotes 包围,因此它们是宏的一部分,并且会在宏被替换时包含在内。如果其中任何一个被关闭,宏值将不是有效的 NSString 常量(需要用作 NSErrorDomain 值)。应将宏添加到所有配置(调试、发布和任何 user-defined)。

PRODUCT_BUNDLE_IDENTIFIER=@\"$(PRODUCT_BUNDLE_IDENTIFIER)\"

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

NSErrorDomain BSDomain = @"PRODUCT_BUNDLE_IDENTIFIER";