Этот вопрос Суб-Вопрос/Альтернативный способ подойти, что я пытаюсь сделать через этот вопрос: How can I use PListBuddy to copy an entry from one file to another?Как добавить массив в Plist используя PlistBuddy?
Я хочу, чтобы скопировать запись из Plist файла А в Plist Файл B с помощью PlistBuddy через XCode сценария сборки , используя Bash/Shell. Делая это, я не могу использовать функцию «Копировать» PlistBuddy. Я должен копировать каждую отдельную запись со всеми ее элементами, так как вы не можете добавлять/устанавливать словари, но должны взаимодействовать с PlistBuddy через «Записи».
Что я пытаюсь сделать, это взять файл Plist A и сохранить его массивы Titles/Values для элемента «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. Страницы MAN очень тонкие, а примеры - далеко друг от друга.
Я хотел бы поблагодарить вас за то, что вы прочитали это и заработали свои мозги, чтобы помочь мне решить эту серьезную боль на шее.
Возможно, это лучший способ сделать это, но я решил эту проблему, посчитав элементы в исходном массиве и затем скопировав их по отдельности. $ {PLISTBUDDY} -c "Добавить PreferenceSpecifiers: $ DEST_INDEX: Названия массива" $ {} DEST_PLIST $ {PLISTBUDDY} -c "Добавить PreferenceSpecifiers: $ DEST_INDEX: Титулы: 0 строка 'TITLE_1'" $ {} DEST_PLIST $ {PLISTBUDDY} -c "Добавить PreferenceSpecifiers: $ DEST_INDEX: Заголовки: 1 строка 'TITLE_2'" $ {DEST_PLIST} и т. Д. Я не могу опубликовать это как ответ до 8 часов или 10 репутации, поэтому буду комментировать это на данный момент. – jhthorp