我如何添加一个阵列使用PlistBuddy一个的plist?(How can I add an Ar

2019-07-22 17:21发布

这个问题是一个子问题/替代办法的办法,我试图通过这个问题做的事: 我如何使用PListBuddy复制从一个文件到另一个入口?

我想复制从plist文件A到plist文件b。使用PlistBuddy通过Xcode的构建脚本条目,使用bash /壳牌。 通过这样做,我不能使用PlistBuddy的“复制”功能。 我必须在每个单个条目复制过来了所有它的元素,因为你不能添加/套字典,但必须通过“条目”与PlistBuddy互动。

我所试图做的是采取plist文件A和存储它的标题/值数组的“PSMultiValueSpecifier”元素。 我能够抢在数组中的元素,并将其打印到屏幕上,但是当我去给他们添加到目的地plist文件B,该阵列还空着。

代码:(代码获取用于添加条目)

# Configure the Entry
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX dict" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Type string 'PSMultiValueSpecifier'" ${DEST_PLIST}

# Retrieve the Additional Field Value
preferenceTitle=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Title" $SOURCE_PLIST 2>&1`
preferenceKey=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Key" $SOURCE_PLIST 2>&1`
preferenceDefaultValue=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:DefaultValue" $SOURCE_PLIST 2>&1`
preferenceValues=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Values" $SOURCE_PLIST 2>&1`
preferenceTitles=`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Titles" $SOURCE_PLIST 2>&1`

代码中添加新条目:

# Set the Additional Field Values
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Title string $preferenceTitle" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Key string $preferenceKey" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:DefaultValue integer $preferenceDefaultValue" ${DEST_PLIST}
####BORKEN####
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Values array $preferenceValues" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles array $preferenceTitles" ${DEST_PLIST}
####BORKEN####

这里是产生下面的数据代码的一个片段:

echo "#########"
echo "[$THIS] adding $preference: $preferenceDict"
echo "#########"
echo "Source: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Values" $SOURCE_PLIST`
echo "Source: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$SOURCE_INDEX:Titles" $SOURCE_PLIST`
echo "#########"
echo "Destination: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$DEST_INDEX:Values" $DEST_PLIST`
echo "Destination: "`$PLISTBUDDY -c "Print PreferenceSpecifiers:$DEST_INDEX:Titles" $DEST_PLIST`
echo "#########"

这里是证明正确的田地,在运输中提供的数据

#########
[addDebugSettingsMenu.bash] adding : Dict {
    Titles = Array {
        Meters
        Feet
    }
    DefaultValue = 1
    Values = Array {
        1
        2
    }
    Key = UserPreferences_UnitsKey
    Type = PSMultiValueSpecifier
    Title = Units
}
#########
Source: Array {     1     2 }
Source: Array {     Meters     Feet }
#########
Destination: Array { }
Destination: Array { }
#########

如果您有关于PlistBuddy无证特征的知识,请帮助。 手册页是超薄和实例都远远之间。

我要感谢你读这篇文章,借给你的大脑,帮助我解决我的脖子,这个重大的痛苦。

Answer 1:

有可能是一个更好的办法来做到这一点,但我已经通过源数组中的计数的元素,然后分别将它们复制在解决了这个问题。

${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles array" ${DEST_PLIST}    
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles:0 string 'TITLE_1'" 
${DEST_PLIST} ${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles:1 string 'TITLE_2'" ${DEST_PLIST} 
etc... 


Answer 2:

它可能会解决你的问题,但它不是在较大的合并脚本来实现的正确途径。 检查下面我答。

/usr/libexec/PlistBuddy -x -c "Print PreferenceSpecifiers" ${FROM_PLIST} > ${TO_PLIST}


Answer 3:

对于一些简单的像一个字符串数组,这里是代码,将结合阵列任意数量。 此示例使用在IOS信息的Plist共同UIAppFonts阵列。

TMP_NAME=`basename $0`
TMP_DIR=`mktemp -d ${PROJECT_TEMP_DIR}/${TMP_NAME}.XXXXXX` || exit 1
FONTS_PLIST="${TMP_DIR}/Fonts.plist"

/usr/libexec/PlistBuddy -c "Add UIAppFonts array" "${FONTS_PLIST}"

# Iterate through each array, adding to the array entry in the temporary plist
index=0
for arg; do
  status=0
  inner_index=0
  while [ ${status} -eq 0 ]; do
    set +e
    # No easy way to get array length, so keep going until we go out of bounds
    entry=`/usr/libexec/PlistBuddy -c "Print UIAppFonts:${inner_index}" "${arg}" 2> /dev/null`
    status=${?}
    set -e
    if [ ${status} -eq 0 ]; then
      /usr/libexec/PlistBuddy -c "Add UIAppFonts:${index} string ${entry}" "${FONTS_PLIST}"
      index=`expr ${index} + 1`
      inner_index=`expr ${inner_index} + 1`
    fi
  done
done


文章来源: How can I add an Array to a Plist using PlistBuddy?