【问题标题】:how to extract element value from arrays in plists using plutil如何使用 plutil 从 plist 中的数组中提取元素值
【发布时间】:2016-04-20 18:32:05
【问题描述】:

我想知道如何使用 plutil 从 iOS 中的 .plist 文件中找到的数组中提取元素值。通常使用 plist 我只能提取一个密钥,例如

plutil -key CFBundleName Info.plist

但是,如果有这样一个结构的数组:

<key>UIDeviceFamily 
  <array>
    <integer>1</integer>
    <integer>2</integer>
  </array>
</key>

我尝试使用plutil -key UIDeviceFamily -Array 甚至plutil -key UIDeviceFamily -Array[0] 来获取第一个元素,但运气不佳。我得到的只是整个数组,例如:

Array
(
  1,
  2
)

任何人都可以帮助我解决我面临的这个问题吗?我在 iPad 上使用plutil

【问题讨论】:

  • 你在shell脚本中使用它吗? (项目/构建阶段)
  • 是的@AlekseyPotapov,我在 shell 脚本中使用它,尤其是 Bash。
  • 你没有用 结束标签打错字吗?

标签: ios plist


【解决方案1】:

Apple official documentation 说:

不要将此密钥手动插入到您的 Info.plist 文件中。 Xcode 根据目标设备中的值自动插入它 家庭建设设置。您应该使用该构建设置来更改 键的值。

但这里有一个脚本供您使用defaults shell 命令读取 Info.plist 文件。 说,你有你的 Info.plist 在这样的路径中:/Desktop/YourProject/YourProject/Info.plist

PLIST_FILE="Info"
PLIST_KEY="UIDeviceFamily"
PLIST_PATH="${PROJECT_DIR}/YourProject"
DICT_B=$(defaults read ${PLIST_PATH}/${PLIST_FILE} ${PLIST_KEY})
for el in $DICT_B
do
printf 'element %s\n' "$el"
done

输出会是这样的:

element: (
element: 1,
element: 2
element: )

【讨论】:

  • 嗨@Aleksey Potapov,我之前用谷歌搜索过defaults。但遗憾的是,我需要在 iPad 上运行我的 Bash 脚本。这是出于研究目的,这就是为什么我需要从在 iPad 本身而不是在 MacBook 上运行脚本的.plist 文件中提取值。你试过吗?我的意思是,在 iDevices 中运行 defaults?我很确定 defaults 只是一个 Mac 命令。
  • 通常,当您在 xcode 构建阶段运行 shell 脚本时 - 这可以用任何语言编写,swift、shell、python。是的,它将在 iOS 设备上执行。
  • 注意${PLIST_PATH}必须是绝对路径。
  • 仅供参考,defaults 不再适用于任意 plist 文件(现在仅适用于首选项域)(macOS 10.15.3)。这是warned about 有一段时间了。
【解决方案2】:

在 macOS Monterey 上,只需 plutil 即可更轻松地完成此操作。

plutil -extract UIDeviceFamily.0 raw -expect integer Info.plist

请注意,-expect integer 在此处是可选的,但它会验证您希望在该键路径位置找到的类型。

您也可以稍微自动化一下。假设您想要数组中每个元素的值。 (以下假设zsh。)

#!/bin/zsh

typeset count=$(plutil -extract UIDeviceFamily raw -expect array Info.plist)
for i in {1..$count}; do
    # $(($i - 1)) is some shell math to offset the 1-index to 0-index
    plutil -extract UIDeviceFamily.$(($i - 1)) raw -expect integer Info.plist
done

这将打印数组中的每个值。

提取数组的“原始”值将打印数组中元素的计数。

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2021-10-06
    • 2020-07-20
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多