【问题标题】:xcode info.plist build variable ${PRODUCT_NAME:rfc1034identifier} seems completely undocumented?xcode info.plist 构建变量 ${PRODUCT_NAME:rfc1034identifier} 似乎完全没有记录?
【发布时间】:2011-03-02 21:05:30
【问题描述】:

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

我不是在寻找这个特定变量会发生什么的狭义定义,我想了解所有此类 修饰符,例如 rfc1034identifier

【问题讨论】:

  • 这可能对你有帮助:stackoverflow.com/questions/2468176/…
  • 我真的在寻找一个正式的定义。像魔术一样使用东西让我感到非常紧张。
  • 您确定“:”是修饰符,而不仅仅是宏名称中的另一个字符吗?合法字符列表在哪里?
  • 这就是我要问的。除其他外。
  • 向 Apple 提交了开发者问题。

标签: ios xcode plist rfc1034identifier


【解决方案1】:

通过使用strings,我还挖出了以下看起来与:rfc1034identifier相关的东西:

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

确切的命令:

strings /Developer/Library/PrivateFrameworks/DevToolsCore.framework/Versions/A/DevToolsCore|grep '^:'

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

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

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

【讨论】:

【解决方案2】:

看起来你也可以堆叠这些。有用的案例floating around out

com.yourcompany.${PRODUCT_NAME:rfc1034identifier:lower}

使得“Your App”的产品名称变为com.yourcompany.your-app

【讨论】:

  • 感谢您的提示!我正在寻找将变量大写的东西,并且 :upper 显然也可以工作(XCode 8.2.1)。
【解决方案3】:

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

文本宏格式参考

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

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

___<MacroName>___

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

<MACRO>:<modifier>[,<modifier>]…

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

FILENAME:deletingPathExtension

要将上面修改后的宏变成有效的 C 标识符,请添加标识符宏:

FILENAME:deletingPathExtension,identifier

修饰符

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

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

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

deletingTrailingDot:删除所有尾随点 (.)。

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

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

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

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

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

文本宏

文本宏参考

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

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

版权所有 © 2018 Apple。保留所有权利。

日期 当前日期。

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

文件库名称 当前文件的名称,不带任何扩展名。

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

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

文件名 当前文件的全名。

全用户名 当前 macOS 用户的全名。

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

'''
    <key>NSHumanReadableCopyright</key>

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


'''

注意该值包含换行符。

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

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

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

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

项目名称 当前项目的名称。

RUNNINGMACOSVERSION 运行 Xcode 的 macOS 版本。

目标名称 当前目标的名称。

时间 当前时间。

用户名 当前 macOS 用户的登录名。

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

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

年份 以四位数字表示的当前年份。

【讨论】:

    【解决方案4】:
    $ strings /Developer/Library/PrivateFrameworks/DevToolsCore.framework/Versions/A/DevToolsCore
    
    PRODUCTNAME
    PRODUCTNAMEASIDENTIFIER
    PRODUCTNAMEASRFC1034IDENTIFIER
    PRODUCTNAMEASXML
    

    似乎有 :identifier、:rfc1034identifier 和 :xml 修饰符。但除此之外我一无所知。

    【讨论】:

    • 我们不得不求助于取证来获取线索似乎很可悲。我想我必须向苹果提交一个错误。
    • 但是,你为什么想知道这些修饰符呢?除了 PRODUCT_NAME:rfc1034identifier 和 PRODUCT_NAME:identifier 之外,我从未见过任何修饰符。
    • 我想知道他们被定义为做什么。在我看来,无证的“功能”很脆弱。也许他们会得到支持,也许他们会稳定,也许不会。
    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2021-04-02
    相关资源
    最近更新 更多