Il problema: le cartelle .itmsp sono mostrate come file
Il Finder tratta le cartelle .itmsp come pacchetti , ovvero come se fossero un singolo file. Ad esempio, nella vista colonna, tutto ciò che è contenuto nella cartella .itmsp è invisibile, viene mostrata solo l'icona del documento:

Il Finder considera una directory come un pacchetto se si verifica una delle seguenti condizioni (dalla Guida alla programmazione del pacchetto ):
La directory ha un'estensione di file nota: .app, .bundle, .framework, .plugin, .kext e così via (come definito in /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist. Questo è un plist binario, aprilo con Xcode:) open -a Xcode Info.plist.
La directory ha un'estensione che alcune altre rivendicazioni dell'applicazione rappresentano un tipo di pacchetto (cercare com.apple.packagenell'output di mdls -name kMDItemContentTypeTree <foldername>per scoprirlo).
La directory ha il bit del pacchetto impostato (se GetFileInfo -ab <foldername>restituito 1, è impostato).
Il caso 2. si applica alle cartelle .itmsp: Application Loader.appesporta il tipo com.apple.itunes-producer.itmspe lo imposta in conformità a com.apple.package:
$ mkdir foo.itmsp
$ mdls -name kMDItemContentTypeTree foo.itmsp/
kMDItemContentTypeTree = (
"com.apple.itunes-producer.itmsp",
"com.apple.package",
(...)
)
$ grep -B 5 -A 8 com.apple.package /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Info.plist
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.apple.package</string>
<string>public.composite-content</string>
</array>
<key>UTTypeDescription</key>
<string>iTunes Package</string>
<key>UTTypeIconFile</key>
<string>ITMSP.icns</string>
<key>UTTypeIdentifier</key>
<string>com.apple.itunes-producer.itmsp</string>
Una soluzione: ri-dichiarare il tipo com.apple.itunes-producer.itmsp
Una soluzione sarebbe quella di ri-dichiarare il tipo com.apple.itunes-producer.itmspe l'estensione itmspcome una cartella e forzare i Servizi di avvio a utilizzare la dichiarazione di tipo modificata.
Nota importante:
Sebbene risolva in modo affidabile il problema dell'OP, la soluzione proposta, quando applicata ad altri pacchetti, non li visualizza come cartelle.
Ho scoperto che la soluzione proposta sembra funzionare solo con i tipi di file dichiarati dalle applicazioni situate in un percorso dell'applicazione non standard.
Questo è il caso di Application Loader.app, che si trova in /Applications/Xcode.app/Contents/Applications/.
Se sei interessato a una soluzione parziale, controlla la fine di questa risposta.
Per fare in modo che le cartelle .itmsp vengano visualizzate come cartelle dal Finder, procedi come segue:
Apri Automator nella cartella Applicazioni e seleziona Applicazione :

Seleziona Utilità nell'elenco Libreria, seleziona Esegui script shell e trascinalo nel riquadro a destra:

Sostituisci il contenuto dello script predefinito con exit 0:

Salvare l'applicazione come itmspOpener:

Chiudi Automator.
Seleziona itmspOpener.appe mostra i suoi contenuti:

Individua Contenuti> Info.plist e aprilo con il tuo editor preferito:

Sostituisci queste sezioni in Info.plist:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>itmsp</string>
</array>
<key>CFBundleTypeName</key>
<string>itmsp folder</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>folder</string>
<key>LSTypeIsPackage</key>
<false/>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
(...)
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>kUTTypeDirectory</string>
</array>
<key>UTTypeDescription</key>
<string>itmsp folder</string>
<key>UTTypeIconFile</key>
<string>folder.icns</string>
<key>UTTypeIdentifier</key>
<string>com.apple.itunes-producer.itmsp</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>itmsp</string>
</dict>
</dict>
</array>
Nota:
perché kUTTypeDirectoryanziché public.directoryin UTExportedTypeDeclarations? Dalla documentazione di Apple : Importante: quando si utilizzano UTI definite dal sistema nel codice, è necessario utilizzare le costanti definite nel UTCoreTypes.hframework Launch Services quando disponibili, anziché le stringhe UTI effettive. Ad esempio, passa kUTTypeApplication anziché "com.apple.application". "Identificatori di tipo uniformi dichiarati dal sistema" elenca queste costanti oltre alle stringhe UTI.
Associare un file .itmsp a itmspOpenere premere il pulsante Change All...:

Reimposta il database di Launch Services:
$ lsregister -kill -r -domain local -domain system -domain user
(su OS X 10.8 lsregistersi trova in /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/.)
Crea una cartella .itmsp ed elenca le sue proprietà:
$ mkdir foo3.itmsp
$ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
"public.folder",
"public.directory",
"public.item"
)
Poiché il database di Launch Services è stato ripristinato, ora il Finder mostra le cartelle .itmsp come cartelle.
Apri itmspOpener.appper caricare il suo file plist e registrarti com.apple.itunes-producer.itmsp:
$ open ~/Desktop/itmspOpener.app
Inizio Application Loader.app:
$ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
La cartella foo3.itmspdeve comunque essere visualizzata come cartella.
Controlla di nuovo le proprietà della cartella:
$ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
"public.directory",
"public.item",
"public.content"
)
com.apple.package non è stato aggiunto agli attributi dei metadati della cartella, ecco perché il Finder mostra ancora le cartelle .itmsp come cartelle!
Soluzione automatizzata: visualizzazione delle cartelle .itmsp come cartelle dopo il login
Per visualizzare le cartelle .itmsp come cartelle dopo il login:
Crea itmspOpener.appe modifica il suo Info.plistcome descritto sopra.
Crea /usr/local/bin/itmspTypeLoadercon questo contenuto (la variabile itmspOpenerpunta alla posizione in cui itmspOpener.apprisiede, cambia se necessario):
#!/bin/bash
itmspOpener="/Users/jaume/Applications/itmspOpener.app/"
echo "$(date): Starting" > /tmp/itmspTypeLoader.log
sleep 15
echo "$(date): Deleting Launch Services database" >> /tmp/itmspTypeLoader.log
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user >> /tmp/itmspTypeLoader.log
sleep 15
echo "$(date): Starting $itmspOpener" >> /tmp/itmspTypeLoader.log
open $itmspOpener >> /tmp/itmspTypeLoader.log
sleep 1
echo "$(date): Starting Application Loader.app" >> /tmp/itmspTypeLoader.log
open "/Applications/Xcode.app/Contents/Applications/Application Loader.app/"
# Wait until process "Application Loader.app" exists
while [ $(ps -ef|grep -v grep|grep -c "Application Loader") -ne 1 ]; do
sleep 1
echo "$(date): Waiting" >> /tmp/itmspTypeLoader.log
done
# Send TERM signal
kill -TERM $(ps -ef|grep "Application Loader"|grep -v grep|awk "{print \$2}")
if [ $? -eq 0 ]; then
echo "$(date): Application Loader killed" >> /tmp/itmspTypeLoader.log
else
echo "$(date): Application Loader could not be killed" >> /tmp/itmspTypeLoader.log
fi
echo "$(date): Exiting" >> /tmp/itmspTypeLoader.log
Sia sleep 15prima che dopo la corsa lsregistersono della massima importanza. Se non vedi il risultato desiderato, prova diversi ritardi.
Crea /usr/local/bin/itmspTypeLoaderLaunchercon questo contenuto:
#!/bin/bash
# $1 returns the short name of the user who is logging in
su - $1 -c /usr/local/bin/itmspTypeLoader &
Imposta entrambi gli script eseguibili:
$ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher
Imposta /usr/local/bin/itmspTypeLoaderLaunchercome hook di accesso :
$ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
Riavvia per rendere effettive le modifiche. Dopo aver effettuato l'accesso dovresti vedere questo:

e lsregister -dumpdovrebbe rivelare che itmspOpener.app's UTExportedTypeDeclarationsha la precedenza su Application Loader.app' s:
$ lsregister -dump | less
bundle id: 24748
path: /Users/jaume/Desktop/itmspOpener.app/
name: itmspOpener
(...)
flags: apple-internal relative-icon-path ui-element has-min-sys-version-by-arch hi-res-capable user-can-change-hi-res-mode
item flags: container package application extension-hidden native-app scriptable services x86_64
(...)
--------------------------------------------------------
type id: 33796
uti: com.apple.itunes-producer.itmsp
description: itmsp folder
flags: exported active apple-internal trusted
icon: Contents/Resources/folder.icns
conforms to: kuttypedirectory
tags: .itmsp
--------------------------------------------------------
(...)
bundle id: 24600
path: /Applications/Xcode.app/Contents/Applications/Application Loader.app/
name: Application Loader
(...)
flags: apple-internal relative-icon-path hi-res-capable user-can-change-hi-res-mode
item flags: container package application extension-hidden native-app i386 x86_64
(...)
--------------------------------------------------------
type id: 33832
uti: com.apple.itunes-producer.itmsp
description: iTunes Package
flags: exported inactive apple-internal trusted
icon: Contents/Resources/ITMSP.icns
conforms to: com.apple.package, public.composite-content
tags: .itmsp
--------------------------------------------------------
Vedi il inactiveflag impostato nell'esportazione del tipo di Loader.app dell'applicazione? Abbiamo sconfitto il Caricatore applicazioni.
Il test dell'acido: le cartelle .itmsp vengono ancora visualizzate come tali dopo l'aggiornamento di iTunes
Ho recentemente aggiornato Xcode:

e può confermare che le cartelle .itmsp sono state mostrate come cartelle durante l'aggiornamento:

e successivamente:

Una soluzione parziale: il pacchetto mostrerà i contenuti facendo doppio clic
Come precedentemente commentato, la procedura sopra descritta non funziona con cartelle arbitrarie che vengono visualizzate come pacchetti dal Finder.
Tuttavia, se vuoi solo essere in grado di fare doppio clic su un pacchetto per aprirlo, c'è un modo per farlo con uno bashscript e Automator:
Lo script crea una cartella nascosta temporanea all'interno del pacchetto, la rivela nel Finder (rivelando così il pacchetto come cartella) e quindi elimina la cartella temporanea.
Nota:
Lo script potrebbe invece creare un file temporaneo nascosto. Tuttavia, preferisco creare una cartella perché rmdirelimina solo le cartelle vuote , mentre rmelimina qualsiasi file, quindi se, per qualche motivo. lo script crea scompiglio, verranno eliminate solo le cartelle vuote, il che probabilmente non è così grave come se i file fossero eliminati.
Automator raggruppa lo script in un'applicazione che verrà associata ai file del pacchetto.
Questi sono i passaggi per creare una tale applicazione. Userò i file .itmsp come esempio di tipo di pacchetto nella spiegazione seguente:
Apri Automator nella cartella Applicazioni e seleziona Applicazione :

Seleziona Utilità nell'elenco Libreria, seleziona Esegui script shell e trascinalo nel riquadro a destra:

Imposta Passa input a come argomenti :

Sostituisci il contenuto dello script predefinito con questo:
for f in "$@"; do
# If not dealing with a directory, exit
if [ ! -d "$f" ]; then exit; fi
# Create a temporary directory inside the itmsp "file"
tmpdir="$f/.itmspOpener$$"
if mkdir $tmpdir; then
# Reveal in Finder
open -R $tmpdir
# Delete temporary file
rmdir $tmpdir
fi
done
Salvare l'applicazione come itmspOpener:

Chiudi Automator.
Ora hai un'applicazione che può aprire i file .itmsp come cartelle se associati ad essa.
C'è un problema estetico: così com'è, i file associati avranno l'icona standard del documento bianco:

Risolviamo anche questo:
Assicurarsi che Automator sia chiuso.
Seleziona itmspOpener e mostra i suoi contenuti:

Individua Contenuti> Info.plist e aprilo con il tuo editor preferito:

Sostituisci il valore per questa chiave CFBundleDocumentTypesnell'array:
<key>CFBundleTypeName</key>
<string>itmsp folder</string>
e aggiungi questa chiave:
<key>CFBundleTypeIconFile</key>
<string>folder</string>
Ora, la sezione è simile alla seguente:

Passa al Finder, seleziona una cartella, premi ⌘I, seleziona l'icona della cartella nell'angolo in alto a sinistra e copiala con ⌘C:

Apri l'anteprima e seleziona File> Nuovo dagli Appunti. Salva il file come folder.icns:

Copia folder.icnsin itmspOpener/Contents/Resources:

Associare un file .itmsp a itmspOpenere premere il pulsante Change All...:

L'icona dei file .itmsp dovrebbe cambiare in una cartella, o almeno lo pensavo: sfortunatamente, non era così. Quindi ho spostato l'applicazione itmspOpener in un'altra posizione (ho creato una cartella temporanea sul mio desktop, spostata lì e di nuovo sul mio desktop). Che ha aggiornato le informazioni dell'icona nel Finder:

Ora fai doppio clic su un file .itmsp e guardalo aperto come una cartella:
