strings nslocationwheninuseusagedescription localize infoplist info how create xcode plist

nslocationwheninuseusagedescription - info.plist xcode



¿Cómo puedo usar PlistBuddy para acceder a un elemento de Preferencias especificado por su propiedad? (2)

En este momento estoy usando este código.

/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" "Test/Settings.bundle/Root.plist"

en la parte del script de la fase de compilación para colocar la versión del producto en un campo de solo lectura de la configuración de la aplicación. Ese campo tiene la posición 1 (comenzando desde 0) de la matriz de preferencias.

Estoy preguntando si es posible usar algo más robusto que uno para acceder a ese campo, ya que la posición puede ser cambiada accidentalmente por mí o por otros desarrolladores.

¿Puedo acceder a ese elemento especificando su identificador independientemente de su posición?

Para explicar mejor mis necesidades, escribí un ejemplo. Necesito poner algo como 1.2.345 en el nodo de la string del segundo dict de la array es decir, necesito cambiar de 0.0.0 a 1.2.345 . ¿Es posible acceder a dict node sin indicar que es el segundo en la matriz? Estoy pidiendo que se use algo similar a una expresión xpath en PlistBuddy (si existe).

<?xml version="1.0" encoding="UTF-8"?> <dict> <key>PreferenceSpecifiers</key> <array> <dict> <key>Title</key> <string>Application info</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> <dict> <key>DefaultValue</key> <string>0.0.0</string> <key>Key</key> <string>version</string> <key>Title</key> <string>Version</string> <key>Type</key> <string>PSTitleValueSpecifier</string> </dict> <dict> <key>DefaultValue</key> <string>0</string> <key>Key</key> <string>build</string> <key>Title</key> <string>Build</string> <key>Type</key> <string>PSTitleValueSpecifier</string> </dict> ...


Una pequeña mejora en la respuesta del geowar. Obtenga la versión del producto de Info.plist.

#!/bin/tcsh set infoPlist="Info.plist" set version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${infoPlist}` set bundleVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" ${infoPlist}` set productVersion=$version.$bundleVersion # echo "the product version is ${productVersion}." set settingsPlist="Settings.bundle/Root.plist" set settingsCnt=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:" ${settingsPlist} | grep "Dict"|wc -l` # echo "the count is: $settingsCnt." set settingsCnt=`expr "$settingsCnt" ''-'' ''1''` foreach idx (`seq 0 $settingsCnt`) # echo "the index is: $idx." set val=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:${idx}:Key" ${settingsPlist}` # echo "the value of PreferenceSpecifiers:${idx}:Title: is ${val}." if ( "$val" == "version" ) then echo "the index of the entry whose ''Key'' is ''version'' is $idx." # now set it /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:${idx}:DefaultValue $productVersion" ${settingsPlist} # just to be sure that it worked set ver=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:${idx}:DefaultValue" ${settingsPlist}` echo ''PreferenceSpecifiers:$idx:DefaultValue set to: '' $ver endif end


#!/bin/tcsh set productVersion="1.2.345" set theFile="~/Desktop/PlistBuddy/Root.plist" set cnt=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:" ${theFile} | grep "Dict"|wc -l` # echo "the count is: $cnt." set cnt=`expr "$cnt" ''-'' ''1''` foreach idx (`seq 0 $cnt`) # echo "the index is: $idx." set val=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:${idx}:Title" ${theFile}` # echo "the value of PreferenceSpecifiers:${idx}:Title: is ${val}." if ( "$val" == "Version" ) then echo "the index of the entry whose ''Title'' is ''Version'' is $idx." # now set it /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:${idx}:DefaultValue $productVersion" ${theFile} # just to be sure that it worked set ver=`/usr/libexec/PlistBuddy -c "Print PreferenceSpecifiers:${idx}:DefaultValue" ${theFile}` echo ''PreferenceSpecifiers:$idx:DefaultValue set to: '' $ver endif end