xcode info.plist构建变量$ {PRODUCT_NAME:rfc1034identifier}似乎完全没有记录?

Hac*_*Saw 29 iphone xcode

我正在尝试找到描述构造所提出的语法和可能性的文档${PRODUCT_NAME:rfc1034identifier}.显然,这会变成产品名称的某个版本,但描述如何的文档在哪里?我只是grep了整个/ Developer目录,没有任何用处.

我不是在找什么情况该特定变量的定义过于狭窄,我想知道所有这些修饰语喜欢rfc1034identifier.

Iva*_*ica 31

通过使用strings我也挖出了以下与它们相关的东西:rfc1034identifier:

  • :quote - 在空格之前添加反斜杠(以及更多),以便在shell脚本中使用
  • :identifier - 用下划线替换空格,斜杠(和更多)
  • :rfc1034identifier - 用破折号替换空格,斜线(和更多)
  • :dir- 不知道,./在某些情况下观察到替换
  • :abs - 不知道

确切的命令:

strings /Developer/Library/PrivateFrameworks/DevToolsCore.framework/Versions/A/DevToolsCore|grep '^:'
Run Code Online (Sandbox Code Playgroud)

有更多的东西看起来像有趣的修饰符(例如:char-range=%@),但我无法让它们起作用.:char-range网上只有一个例子,它来自Xcode的崩溃日志.

有人问我们怎么知道它是修饰符规范.嗯,我们知道,因为它适用于构建设置中的多个变量.Plist预处理器可能使用相同的机制来解析构建变量,就像构建系统一样.

Hack Saw,如果您通过该错误报告得到回复,请不要忘记告知我们:-)

  • 当使用独立的`Xcode.app`时,路径是`/ Applications/Xcode.app/Contents/OtherFrameworks/DevToolsCore.framework/Versions/A/DevToolsCore` (3认同)

Ben*_*man 11

看起来你也可以堆叠这些.漂浮在那里的有用案例是

com.yourcompany.${PRODUCT_NAME:rfc1034identifier:lower}
Run Code Online (Sandbox Code Playgroud)

这样"你的应用程序"的产品名称就变成了com.yourcompany.your-app.

  • 谢谢你的暗示!我正在寻找一些大写变量的东西:上面显然也有效(XCode 8.2.1). (2认同)

Hac*_*Saw 8

最终,Apple 制作了一些关于此的文档。截至目前,这是在 Xcode 手册的“文本宏”部分。

文本宏格式参考

文本宏可以包含任何有效的 unicode 文本。它还可以包含其他文本宏。

包含其他文本宏 要包含另一个文本宏,请在宏名称前后添加三个下划线 (_) 字符:

___<MacroName>___
Run Code Online (Sandbox Code Playgroud)

修改文本宏扩展 您可以通过添加一个或多个修饰符来修改文本宏的最终扩展。通过在宏的末尾放置一个冒号 (:) 后跟修饰符来向文本宏添加修饰符。通过用逗号 (,) 分隔每个修饰符来添加多个修饰符。

<MACRO>:<modifier>[,<modifier>]…
Run Code Online (Sandbox Code Playgroud)

例如,以下宏将从 FILENAME 宏中删除路径扩展名:

FILENAME:deletingPathExtension
Run Code Online (Sandbox Code Playgroud)

要将上述修改后的宏转换为有效的 C 标识符,请添加标识符宏:

FILENAME:deletingPathExtension,identifier
Run Code Online (Sandbox Code Playgroud)

修饰符

bundleIdentifier:用连字符 (-) 替换任何非捆绑标识符字符。

deleteLastPathComponent:从扩展字符串中删除最后一个路径组件。

deletePathExtension:从扩展字符串中删除任何路径扩展。

DeleteTrailingDot:删除任何尾随点 (.)。

identifier:用下划线 (_) 替换任何非 C 标识符字符。

lastPathComponent:仅返回扩展字符串的最后一个路径组件。

pathExtension:返回扩展字符串的路径扩展。

rfc1034Identifier:用连字符 (-) 替换任何非 rfc1034 标识符字符。

xml:用相应的转义字符串替换特殊的 xml 字符。例如,小于 (<) 被替换为&lt;

文本宏

文本宏参考

COPYRIGHT 使用项目团队的公司名称的版权字符串。如果没有公司名称,则字符串为空。

该示例显示了当公司设置为“Apple”时的版权字符串。

版权所有 © 2018 苹果。版权所有。

日期 当前日期。

DEFAULTTOOLCHAINSWIFTVERSION 用于默认工具链的 Swift 版本。

FILEBASENAME 当前文件的名称,没有任何扩展名。

FILEBASENAMEASIDENTIFIER 编码为 C 标识符的当前文件的名称。

FILEHEADER 放置在每个新文本文件顶部的文本。

FILENAME 当前文件的全名。

FULLUSERNAME 当前 macOS 用户的全名。

NSHUMANREADABLECOPYRIGHTPLIST macOS 应用程序目标的 Info.plist 文件中人类可读版权字符串的条目。宏的值必须包含 plist 的 XML 分隔符。例如,有效值为:

'''
    <key>NSHumanReadableCopyright</key>

    <string>Copyright © 2018 Apple, Inc. All rights reserved.</string>


'''
Run Code Online (Sandbox Code Playgroud)

请注意,该值包含换行符。

ORGANIZATIONNAME 出现在整个项目文件夹中的样板文本中的组织名称。您项目中的组织名称与您在 App Store Connect 中输入的组织名称不同。

PACKAGENAME 当前方案构建的包的名称。

PACKAGENAMEASIDENTIFIER 当前方案构建的包名称的 C 标识符编码版本。

PRODUCTNAME 当前方案构建的产品的应用名称。

PROJECTNAME 当前项目的名称。

RUNNINGMACOSVERSION 运行 Xcode 的 macOS 版本。

TARGETNAME 当前目标的名称。

TIME 当前时间。

USERNAME 当前 macOS 用户的登录名。

UUID 返回唯一 ID。第一次使用此宏时,它会在返回 ID 之前生成 ID。您可以使用此宏通过使用修饰符来创建多个唯一 ID。每个修饰符返回一个对该修饰符唯一的 ID。例如,第一次使用 UUID:firstPurpose 修饰符时,宏生成并返回该宏和修饰符组合的唯一 ID。UUID:firstPurpose 修饰符的后续使用返回相同的 ID。添加 UUID:secondPurpose 修饰符会生成并返回一个不同的 ID,该 ID 对于 UUID:secondPurpose 是唯一的,并且不同于 UUID:firstPurpose 的 ID。

WORKSPACENAME 当前工作空间的名称。如果只有一个项目打开,则为当前项目的名称。

YEAR 当前年份为四位数。