この質問は、私はこの質問を経由して行うことをしようとしていますどのようなアプローチするサブ質問/別の方法である:How can I use PListBuddy to copy an entry from one file to another?PlistBuddyを使用してPlistに配列を追加するにはどうすればよいですか?
私はビルドのXCodeの通過スクリプトをPlistBuddyを使用してplistファイルBへのplistファイルAからエントリをコピーします、Bash/Shellを使用します。これを行うことで、私はPlistBuddyの "コピー"機能を使うことができません。辞書を追加/設定することはできませんが、 "Entries"を介してPlistBuddyとやりとりする必要があるため、個々のエントリをすべての要素でコピーする必要があります。
私がしようとしているのは、PlistファイルAをとり、 "PSMultiValueSpecifier"要素のTitles/Values Arraysを格納することです。私は配列の要素をつかんで画面に表示することができますが、目的のPlistファイルBにそれらを追加すると、配列はまだ空です。
コード:ここで
# 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####
は、以下のデータを生成するコードの抜粋です:
新しいエントリを追加する
# 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`
コード(コードは追加のエントリをつかむために)
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