Diese Frage ist eine Sub-Frage/Alternativer Weg zu nähern, was ich über diese Frage zu tun, ich versuche: How can I use PListBuddy to copy an entry from one file to another?Wie kann ich ein Array mit PlistBuddy zu einem Plist hinzufügen?
Ich möchte einen Eintrag von Plist Datei A bis Plist Datei B mit PlistBuddy durch eine XCode kopieren Build-Skript mit Bash/Shell. Dadurch kann ich die "Copy" -Funktion von PlistBuddy nicht verwenden. Ich muss jeden einzelnen Eintrag mit allen seinen Elementen kopieren, da Sie keine Wörterbücher hinzufügen/einstellen können, sondern über "Einträge" mit PlistBuddy interagieren müssen.
Was ich versuche zu tun, ist Plist-Datei A und Speichern seiner Titel/Werte-Arrays für ein "PSMultiValueSpecifier" -Element. Ich bin in der Lage, die Elemente in den Arrays zu greifen und sie auf dem Bildschirm zu drucken, aber wenn ich sie in die Ziel-Plist-Datei B hinzufüge, sind die Arrays noch leer.
Code: (Code Schnappen Sie den Eintrag Hinzufügen)
# 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`
-Code den neuen Eintrag hinzufügen:
# 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####
Hier ist ein Code-Snippet ist, das die folgenden Daten erzeugt:
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 "#########"
Hier sind die Daten, die beweisen, dass die richtigen Felder transportiert werden
#########
[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 { }
#########
Bitte helfen Sie, wenn Sie irgendwelche Kenntnisse über undokumentierte Funktionen von PlistBuddy haben. Die MAN-Seiten sind super dünn und Beispiele sind weit und breit.
Ich möchte Ihnen für das Lesen dieses und für das Verleihen Ihres Gehirns danken, um mir zu helfen, diesen Hauptschmerz in meinem Hals zu lösen.
Vielleicht gibt es einen besseren Weg, aber ich habe dieses Problem gelöst, indem ich die Elemente im Quell-Array gezählt habe und sie dann einzeln kopiert habe. $ {PLISTBUDDY} -c "PreferenceSpecifiers hinzufügen: $ DEST_INDEX: Titel Array" $ {} DEST_PLIST $ {PLISTBUDDY} -c "Add PreferenceSpecifiers: $ DEST_INDEX: Titel: 0 string 'TITLE_1'" $ {} DEST_PLIST $ {PLISTBUDDY} -c "Add PreferenceSpecifiers: $ DEST_INDEX: Titel: 1 String 'TITLE_2'" $ {DEST_PLIST} etc ... Ich kann dies nicht als Antwort bis 8 Stunden oder 10 Reputation, so werde ich kommentieren es für jetzt. – jhthorp