Existe algum utilitário de shell para imprimir o conteúdo de uma plist? De preferência, para um dispositivo iOS com jailbreak?

4

Eu preciso de uma ferramenta que imprima o texto real em um arquivo plist (o plutil altera o formato, o cat imprime sem sentido e não há um comando padrão para o iOS). Ele precisa estar em um script, então os editores de texto não funcionam.

Isso é o que eu preciso para isso:

apps="$(find /var/mobile/Applications -name "Info.plist" | grep "\.app/Info\.plist")"
mkdir /var/mobile/rmnames
for app in $apps; do 
    newplist="$(echo $app | sed 's|/var/mobile/Applications/[^/]*/||' | sed 's|\.app/Info\.plist|.txt|')"
    #1# $app | sed 's|<string>#2#</string>|<string></string>|' > "/var/mobile/rmnames/"$newplist
    mv "/var/mobile/rmnames/"$newplist $app 
done
rm -rf /var/mobile/rmnames

O que eu espero que isso faça é excluir todos os nomes de aplicativos da loja de aplicativos no meu trampolim sem precisar fazer isso manualmente. Onde "# 1 #" é um utilitário de impressão de plist, e "# 2 #" é um regex para encontrar o CFBundleDisplayName.

Além disso, se você está se perguntando por que eu não faço apenas um ajuste de Cydia que faz isso, eu desprezo o Mobile Substrate .. haha, obrigado antes do tempo!

Exemplo do que quero dizer com bobagens:

mobile:Flixster.app> cat Info.plist
bplist00?#


!"#$%&'()*+,(4567(9:;    <=>CDEVWXY[\]^_bc_CFBundleSignatureYDTSDKName_DTPlatformBuild_BuildMachineOSBuil  d_UIPrerenderedIcon_MedialetsUseTestServers_CFShortVersionString_CFBundleExecuta  ble_CFBundleIconFiles_LSRequiresIPhoneOS]NSMainNibFile^MedialetsAppID_CFBundlePackageTypeZDTSDKBuild_UIRequiresPersistentWiFi\DTXcodeBuild_NSMainNibFile~ipad_CFBundleResourceSpecificationZDTCompiler_CFBundleDisplayName_%UISupportedInterfaceOrientations~ipad_CFBundleDevelopmentRegion^DTPlatformName_CFBundleURLTypes\CFBundleName_CFBundleVersion_DTPlatformVersion_CFBundleSupportedPlatformsWDTXcode_FLXReleaseCandidate_MinimumOSVersion_CFBundleIdentifier^UIDeviceFamily_CFBundleIconFile_CFBundleInfoDictionaryVersionT????[iphoneos5.0U9A334V10K549 T5.20XFlixster?-./012XIcon.png[[email protected][Icon-72.png_Icon-Small-50.png^[email protected]    ZMainWindow_(83e69fab771f958d7de70ada6ba32ff334b9eec1TAPPLU9A334    U4C199_MainWindow-iPad_ResourceRules.plist_com.apple.compilers.llvmgcc42P??@AB_#UIInterfaceOrientationLandscapeLeft_$UIInterfaceOrientationLandscapeRight_UIInterfaceOrientationPortrait_(UIInterfaceOrientationPortraitUpsideDownUen_USXiphoneos?F?GHIJ_CFBundleURLName_CFBundleURLSchemes_com.jeffreygrossman.moviesapp?  KLMNOPQRSTUXflixster\fb2558160538\fb2373897986\fb2446021478]fb55312797380\fb5769  273609\fb2352444510\fb2451978556]fb16478767641]fb87604592406\fb2532675812XFlixst  erT5.20S5.0?ZXiPhoneOST0420R10S4.0_com.jeffreygrossman.moviesapp? 'aXIcon.pngS6.Qeo??????(7MXs??????)<I[o???????%+2349BIR^j~?????????? 238^????????.:CP]┘│??????????????!␍%└⎺␉␋┌␊:F┌␋│⎽├␊⎼.▒⎻⎻> 
    
por Cade 08.03.2012 / 01:13

1 resposta

5

Você pode usar file para determinar o tipo da plist e se ela é binária:

 plutil -convert xml1 $file && sed /*whatever*/  $file && plutil -convert binary1 $file

caso contrário, você pode usar apenas sed (ou perl) diretamente no arquivo xml.

    
por 26.04.2012 / 12:33