ios 设置包中的简单标题输出

2023-12-31

我只想在设置文件中输出我的 ios 应用程序的版本号。

我知道我必须将设置文件添加到应用程序文件夹中。

当我构建并运行时,我可以看到标准设置包附带的 4 个设置。

为了获得一个简单的只读字符串,我将第二个值更改为以下

在代码 (didFinishLaunchingWithOptions:) 中,我调用以下内容:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
[[NSUserDefaults standardUserDefaults] setValue:version forKey:@"version_number"];
[[NSUserDefaults standardUserDefaults] synchronize];

令我惊讶的是,什么也没发生。我只看到组元素、切换开关和滑块,但没有标题行。有人知道我缺少什么吗?

非常感谢!


好吧,我也有这个问题。解决方案(某种程度上)是提供一个默认值字段并为其赋予一个值。这实际上在文档中明确说明 - 默认值是标题属性的必填字段,因此如果您不指定它,标题将不会显示在设置窗格中。不幸的是,一旦设置了该值,我似乎就无法更改该值,可能也是按照设计的——文档还指出它是只读属性。我要尝试的解决方案是每次进行新构建时都将版本号明确地放入我的 Root.plist 文件中。超级不理想,但我认为会起作用。

编辑:查看这篇关于更新设置包中版本号的文章 https://stackoverflow.com/a/1061864/1166029

编辑:好的,我得到了这个工作(感谢上面的那篇文章,以及对 bash 脚本的一些修改,我对此几乎没有经验。)这是脚本(我刚刚在“运行脚本”构建中内联编写)阶段):

#!/bin/bash

builtInfoPlistPath=${TARGET_BUILD_DIR}/${INFOPLIST_PATH}

#increment the build number
buildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$builtInfoPlistPath")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$builtInfoPlistPath"

#compose the version number string
versionString=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$builtInfoPlistPath")
versionString+=" ("
versionString+=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$builtInfoPlistPath")
versionString+=")"

#write the version number string to the settings bundle
#IMPORTANT: this assumes the version number is the first property in the settings bundle!
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:0:DefaultValue $versionString" "Settings.bundle/Root.plist"

...就是这样!奇迹般有效!希望这对您的问题有所帮助,因为它解决了我的问题。现在唯一的问题是与内部版本号略有差异......

编辑:...我用它修复了vakio 对这篇文章的第二条评论 https://stackoverflow.com/a/4203459/1166029,它将 info.plist 的路径设置为已处理的路径(在运行脚本阶段之前!)

编辑:这是我的最新版本,它位于外部文件中,并在增加内部版本号之前验证某些源文件是否已更改:

 #!/bin/bash

 #note: for simplicity, it's assumed that there's already a bundle version (which is an integer) and a version string. set them in the Summary pane!

 #get path to the BUILT .plist, NOT the packaged one! this fixes the off-by-one bug
 builtInfoPlistPath=${TARGET_BUILD_DIR}/${INFOPLIST_PATH}
 echo "using plist at $builtInfoPlistPath"

 modifiedFilesExist=false
 #this is the modification date to compare to -- there's a possible bug here, if you edit the built plist directly, for some reason. probably you shouldn't do that anyways.
 compModDate=$(stat -f "%m" "$builtInfoPlistPath")

 for filename in *
 do
     modDate=$(stat -f "%m" "$filename")
     if [ "$modDate" -gt "$compModDate" ]
     then
         modifiedFilesExist=true;
         echo "found newly modified file: $filename"
         break
     fi
 done

 if $modifiedFilesExist
 then
     echo "A file is new, bumping version"

     #increment the build number
     buildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$builtInfoPlistPath")
     echo "retrieved current build number: $buildNumber"
     buildNumber=$(($buildNumber + 1))
     /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$builtInfoPlistPath"
     /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

     #compose the version number string
     versionString=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$builtInfoPlistPath")
     versionString+=" ("
     versionString+=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$builtInfoPlistPath")
     versionString+=")"

     #write the version number string to the settings bundle
     #IMPORTANT: this assumes the version number is the second property in the settings bundle!
     /usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue $versionString" "Settings.bundle/Root.plist"
 else
     echo "Version not incremented -- no newly modified files"
 fi 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios 设置包中的简单标题输出 的相关文章

随机推荐

  • Bitbucket git 凭证(如果已通过 Google 注册)

    我在 bitbucket org 上有一个帐户 是通过使用我的 Google 帐户注册创建的 现在 每次登录时 我只需单击 使用 Google 登录 即可 如何从 git 命令行访问我的存储库 它要求我输入用户名和密码 我有用户名 但没有密
  • python multiprocessing - 将子进程日志发送到在父进程中运行的GUI

    我正在编写的一些分析代码之上构建一个接口 用于执行一些 SQL 并处理查询结果 我想向用户公开此分析代码中围绕许多事件的日志记录 因为分析代码运行时间相当长 并且因为我不希望 UI 阻塞 所以到目前为止我已经通过将分析函数放入其自己的线程中
  • 类型“boolean”不可分配给类型“ObservableInput<{}>”

    我正在开发 Angular 6 项目 我正在为我的routeGuards 使用 canDeactivate 并使用弹出窗口来显示路线留下消息 但问题出在我的价格表守卫服务上悬停 flatMap isAllow gt Error 类型 isA
  • 让文本穿过 div

    好的 这是一项调查 其中 div 是图表 就像您在 Facebook 上看到的那样 基本上 div style border 1px solid black width 300px div style width 100px This te
  • 通过 google play 更新应用程序时下载内容?

    所以这是我第一次发送我的应用程序的更新 我不知道通过 google play 更新应用程序时实际会发生什么 以下是一些我无法得到答案的问题 实际更新了什么以及这个过程如何工作 即更新完成时的方法或回调 共享首选项文件会发生什么情况 名称值对
  • 属性或枚举或静态最终

    当涉及到在名称 值对中声明预定义常量时 我 一直在 java util Properties enums 或具有 public static final 值的单独类之间随机选择 为了供将来参考 我需要一些关于采取哪种方法的指南 Thanks
  • MSDN 上的 101 LINQ 示例中的这段代码是否存在错误? (更新:已修复)

    NOTE 查理 卡尔弗特 https stackoverflow com users 253576 ccalvert下面回复说 101 个 LINQ 示例现已更新为正确的代码 MSDN Visual C 开发人员中心有一个名为101 个 L
  • 任务中的基本容器已退出

    我正在尝试使用 aws ecs 配置我的 docker hub 映像 我在运行任务时创建了存储库 集群和任务 但在任务退出 1 中收到错误作为基本容器 在尝试获取确切的错误详细信息时 我发现我的一些变量显示为未配置 找到错误所附的屏幕截图
  • 如何删除旧的订阅

    我有 3 年的订阅 我只想删除 2 年未使用的旧订阅和孤儿订阅 下面的脚本显示了所有订阅 计划 创建时间 上次执行时间 对于缺乏归属表示歉意 您可以使用它来查找要转储的订阅位置 并使用 Kavins 指示手动删除它们 SSRS SUbscr
  • 如何使用 sympy 定义条件函数?

    我希望能够定义一个表达式 该表达式获取定义变量的所有值并将表达式计算为0当它没有定义时 与此类似 import numpy as np import sympy as sp def expr k1 k2 x y sp symbols x y
  • VB.NET - 计算两个日期之间的天数(排除)

    我正在尝试计算两个日期之间的天数 不包括星期六 and Sundays 到目前为止我已经写了这段代码 Dim startDay As Integer Dim endDay As Integer Dim days As Integer Dim
  • Elastic Search 匹配短语查询 -> 输出不可预测

    示例文档 id 5 title Quick Brown fox jumps over the lazy dog genre fiction Mapping movies mappings properties genre type text
  • Jupyter Notebook 和之前的输出

    有什么方法可以在不重新运行程序的情况下查看以前的输出吗 例如 我让机器学习算法过夜 早上我就得到了结果 但是 由于某种原因 当我在原始代码上按 Enter 时 它再次开始运行 原始输出消失了 输出存在于特定的上下文中 即单元 并且只要内核仍
  • 什么事件捕获 DataGridViewCell 中组合框中的值更改?

    我想在 a 中的值发生更改时处理该事件ComboBox in a DataGridView cell 有的是CellValueChanged事件 但直到我单击事件内的其他位置后 该事件才会触发DataGridView 一个简单的ComboB
  • ggplot:同时通过“geom_rect”排列因子顺序并突出显示区域

    首先 指定分类变量顺序的方法ggplot是重新排序它的级别data frame 其次 要在我们可以使用的任何绘图上突出显示一个区域geom rect 这里需要注意的是 不要将数据传递给geom rect 否则它不允许我们设置alpha 因此
  • 在 Haskell 中操作元组

    我是 Haskell 的新手 我有一个关于元组的问题 难道就没有遍历元组的方法吗 我知道使用列表进行遍历非常容易 但是如果输入作为元组给出 是否没有办法像使用列表一样检查整个元组 如果不是这种情况 是否可以将元组中的值提取到列表中并以这种方
  • 全屏纹理 iPhone OpenGL ES

    我知道 iPhone 上的 OpenGL 纹理需要是 2 的幂 OpenGL 2 0 也是如此吗 如果我有一个尺寸为 320 x 480 的图像并且想要将其全屏绘制 是否有任何可能的方法可以使用 OpenGL 来完成此操作 Thanks N
  • 如何使用 async/await 在 Node.js 中异步创建ReadStream

    我在使用时遇到困难fs creadReadStream异步处理我的 csv 文件 async function processData row perform some asynchronous function await someAsy
  • 二分查找条件中何时使用“=”?

    我对何时使用的场景感到很困惑 在二分查找中 例如 这是我从 wiki 中找到的 其中使用 while imin lt imax int binary search int A int key int imin int imax contin
  • ios 设置包中的简单标题输出

    我只想在设置文件中输出我的 ios 应用程序的版本号 我知道我必须将设置文件添加到应用程序文件夹中 当我构建并运行时 我可以看到标准设置包附带的 4 个设置 为了获得一个简单的只读字符串 我将第二个值更改为以下 在代码 didFinishL