如何使用PListBuddy将条目从一个文件复制到另一个文件?

时间:2013-03-22 04:50:18

标签: ios xcode bash shell plist

我一直是StackOverflow的长期观察者,总是在必要时找到我的解决方案,但在经过一周的研究后,我找到了一个没有解决方案的问题。

我想要做的是扩展这个家伙的研究: http://mrox.net/blog/2008/11/16/adding-debug-only-preferences-in-iphone-applications/

我希望调试菜单显示为主Plist文件的一部分,而不是作为子窗格。

到目前为止,我有大约95%的Plist类型处理小问题。在一个坚果shell中,我基本上遍历“Debug”Plist,然后将它们描绘到Destination Plist中。

现在,出于某种原因,多值不会在这种形式下工作,因为标题/值似乎没有被恰当地设置(不知道为什么 - 下面添加了代码用于细读)。

我发现DOES工作的一个解决方案是使用PlistBuddy的COPY命令并复制Entry,但这仅限于同一个文件,这不是我需要的。

所以,总结一下: 我想使用PlistBuddy通过XCode构建脚本,使用Bash / Shell将条目从Plist文件A复制到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}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Values array $preferenceValues" ${DEST_PLIST}
${PLISTBUDDY} -c "Add PreferenceSpecifiers:$DEST_INDEX:Titles array $preferenceTitles" ${DEST_PLIST}

如果您对PlistBuddy的无证功能有任何了解,请提供帮助。 MAN页面非常纤薄,例子很远。

我要感谢你阅读本文并借助你的大脑来帮助我解决颈部疼痛。

修改: 经过一些调查后,除了数组之外,Entry已成功填充。有关详细信息,请参阅下面的代码/输出。

以下是代码片段,它会生成以下数据:

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 { }
#########

编辑#2: 我发现我可以通过分解并添加各个元素来正确添加数组:

${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...

我仍然希望有更好的解决方案。

0 个答案:

没有答案