私は長年 StackOverflow を閲覧しており、必要に応じて常に解決策を見つけていますが、非常に熱心な 1 週間の調査の後、解決策のない質問を見つけました。
私がやろうとしているのは、この男の研究を拡張することです: http://mrox.net/blog/2008/11/16/adding-debug-only-preferences-in-iphone-applications/
サブペインとしてではなく、メインの Plist ファイルの一部としてデバッグ メニューを表示したいと考えています。
これまでのところ、Plist タイプの約 95% で小さな問題が発生しています。簡単に言うと、基本的に「デバッグ」Plist を反復処理してから、それらを Destination Plist に描画します。
現在、何らかの理由で、タイトル/値が適切に設定されていないように見えるため、複数の値はこのフォームでは機能しません (理由はわかりません - 熟読のためにコードを以下に追加しました)。
DOES が機能することがわかった 1 つの解決策は、PlistBuddy の COPY コマンドを使用してエントリをコピーすることですが、これは同じファイルに限定されているため、必要なものではありません。
つまり、要約すると、Bash/Shellを使用して、XCodeビルドスクリプトを介してPlistBuddyを使用して、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 のページは非常にスリムで、例は際立っています。
これを読んでくれて、そして私の首のこの大きな痛みを解決するためにあなたの頭脳を貸してくれてありがとう。
編集: さらに調査した後、配列を除いて、エントリは正常に入力されています。詳細については、以下のコード/出力を参照してください。
以下のデータを生成するコードのスニペットを次に示します。
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...
私はまだそこにもっと良い解決策があることを望んでいます.