【问题标题】:Preprocess strings file during Xcode build在 Xcode 构建期间预处理字符串文件
【发布时间】:2010-07-06 15:46:31
【问题描述】:

我知道有一种方法可以预处理我的 info.plist 文件,但是有没有类似的方法来处理我的 Settings.bundle 中的字符串文件?

我的问题:我有一个 iPhone 应用程序,我希望用户知道当前安装的版本。我通过在应用程序设置中显示它来做到这一点。现在,每次我在 info.plist 中更改捆绑版本时,我还必须在 Settings.bundle 中更改 Root.strings 中的版本。我可以运行一个脚本操作来更新它,但是使用预处理器会很好,因为我可以用它做更多有趣的事情。

谢谢!

【问题讨论】:

    标签: iphone cocoa-touch xcode preprocessor


    【解决方案1】:

    在所有字符串文件上运行的预处理器 XCode 是复制字符串。它位于 /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources 中。这是一个简单的 ruby​​ 脚本,但它不支持任何预处理/宏扩展。

    您可能会扩展脚本,但您会更容易在运行脚本构建阶段运行不同的脚本,正如您已经建议的那样。

    【讨论】:

      【解决方案2】:

      使您的视图询问捆绑包,然后直接查询Info.plist 文件并提取CFBundleVersion(或您希望提取的相应密钥)版本永远不需要存储在.strings文件。接下来,您需要做的就是准备一个格式字符串来准备显示。如果您关心本地化,一件有用的事情是在您的 .strings 中添加一个本地化字符串,标记为 "%@<CFBundleVersion format string>" = "Version: %@"; 这样,如果您的本地化人员已使用所有语言完成工作,您将获得一个快速的视觉指示。

      MyInfoView *infoView = /*...*/;
      NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
      infoView.versionLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%@<CFBundleVersion format string>",nil), version];
      

      【讨论】:

      • 如果字符串将出现在 Settings.app 中,则版本需要在字符串文件中。请重新阅读我的问题。
      猜你喜欢
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2011-06-08
      相关资源
      最近更新 更多