2010-12-01 8 views

Respuesta

40

El comando defaults puede leer/escribir en cualquier archivo plist, simplemente le dan un camino menos la extensión .plist:

$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier 

com.apple.Preview 

Esto empuja el valor CFBundleIdentifier directamente desde el archivo del paquete de aplicaciones Info.plist.

Los valores predeterminados también funcionan con listas binarias sin ningún paso adicional.

+3

Esta es la mejor respuesta (especialmente porque PlistBuddy ya no está instalado por defecto); debes seleccionarlo – Olie

+13

También tenga en cuenta que los valores predeterminados parecen querer una ruta completa, no una ruta relativa, ni siquiera si se encuentra actualmente en el directorio con el archivo plist que está tratando de leer. (¡Extraño!) – Olie

+6

Entonces, cuando lo haces dentro de algún directorio, puedes usar: valores predeterminados write $ PWD/SomeMyDirectory/Info.plist CFBundleIdentifier "com.apple.Preview" – iVader

4

Puede leer el archivo directamente desde el producto creado. Sin embargo, si miras el archivo info.plist en el editor, verás las variables del shell. P.ej. el ID de paquete se tiene el siguiente comando shell:

com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 

Puede llamar ${PRODUCT_NAME:rfc1034identifier} en cualquier script que se ejecuta Xcode y se debe llenar.

+0

Eso suena bien aunque no lo he probado. El inconveniente es que no recuperas el ID del paquete, sino solo la última parte del mismo, por lo que tendrías que codificar la parte "com.mycompanyname" en algún lugar ... – Dimitris

3

Hay un programa de línea de comandos instalado en la Mac llamado PlistBuddy que puede leer/escribir valores en un plist. Escriba 'man PlistBuddy' en la Terminal para obtener más información.

+0

He intentado PlistBuddy y he jugado mucho con él. El problema es que PlistBuddy puede imprimir el ID del paquete pero no devolverlo (solo devuelve 0 o 1). Así que al ser un novato de shell tuve problemas para obtener el asignado a una variable. Sin embargo, fue cómo conseguí que funcionara. Publicaré mi respuesta ahora. – Dimitris

33

Usando PlistBuddy, una aplicación por Apple, es posible asignar la cadena a var así:

#!/bin/sh 
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}") 

Dónde BUILD_ROOT y INFOPLIST_PATH son variables definidas por Xcode si ejecuta este script en un "Run Script" fase de construcción

+1

PlistBuddy no siempre está presente en el sistema. Si distribuye la secuencia de comandos, puede considerar el uso de valores predeterminados, como señalaron las otras respuestas. –

Cuestiones relacionadas