Ocasionalmente, trabalho com pacotes da iTunes Music Store. Esses pacotes têm uma .itmsp
extensão. Como .app
, .itmsp
é essencialmente um diretório de contêiner. .itmsp
pastas contêm arquivos XML e de mídia.
A atualização mais recente do Xcode e / ou Mac OS X (Xcode 4.6.1 no Mac OS 10.8.3) seqüestrou a associação de tipo de arquivo para diretórios com a .itmsp
extensão. Anteriormente, eles eram tratados como pastas normais - não é necessário clicar duas vezes para ver o interior. Agora, eu tenho que clicar duas vezes neles para interagir com eles. Quando o faço, um programa chamado Application Loader tenta abri-los. Para ver dentro, tenho que clicar com o botão direito do mouse e selecionar "Mostrar conteúdo do pacote". Estou lidando com milhares desses arquivos a qualquer momento, para que não funcionem.
Tentei alterar ou remover a associação de tipo de arquivo usando Get Info e RCDefaultApp. Nem funciona. A remoção da associação do tipo de arquivo simplesmente transforma os .itmsp
diretórios em arquivos em branco. O mesmo acontece com a exclusão completa do Application Loader.app. Nos dois casos, ainda não consigo navegar pelo conteúdo sem clicar com o botão direito.
A resposta anteriormente aceita funcionou por um tempo: lsregister -u /Applications/Contents/Applications/Application\ Loader.app/
parou de funcionar desde que atualizei o Xcode e / ou o Mac OS X. Se você tiver o Xcode instalado, poderá testá-lo nomeando um diretório foo.itmsp
.
Como posso fazer com que os .itmsp
arquivos sejam tratados como pastas mais uma vez?
Respostas:
O problema: as pastas .itmsp são mostradas como arquivos
O Finder trata as pastas .itmsp como pacotes , ou seja, como se fossem um único arquivo. Por exemplo, no modo de exibição de coluna, qualquer coisa contida na pasta .itmsp é invisível, apenas o ícone do documento é mostrado:
O Finder considera um diretório como um pacote se alguma das seguintes condições for verdadeira (no Guia de programação de pacotes ):
O diretório possui uma extensão de nome de arquivo conhecida: .app, .bundle, .framework, .plugin, .kext e assim por diante (conforme definido em
/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. Este é um argumento binário, abra-o com o Xcode:)open -a Xcode Info.plist
.O diretório tem uma extensão que outras reivindicações de aplicativos representam um tipo de pacote (procure
com.apple.package
na saída demdls -name kMDItemContentTypeTree <foldername>
para descobrir).O diretório tem seu bit de pacote definido (se
GetFileInfo -ab <foldername>
retornar1
, está definido).O caso 2. se aplica às pastas .itmsp:
Application Loader.app
exporta o tipocom.apple.itunes-producer.itmsp
e o configura paracom.apple.package
:Uma solução: declarar novamente o tipo
com.apple.itunes-producer.itmsp
Uma solução seria declarar novamente o tipo
com.apple.itunes-producer.itmsp
e a extensãoitmsp
como uma pasta e forçar o Launch Services a usar a declaração de tipo modificada.Para que as pastas .itmsp sejam exibidas como pastas pelo Finder, siga as próximas etapas:
Abra o Automator na pasta Aplicativos e selecione Aplicativo :
Selecione Utilitários na lista Biblioteca, selecione Executar Shell Script e arraste-o para o painel à direita:
Substitua o conteúdo padrão do script por
exit 0
:Salve o aplicativo como itmspOpener:
Feche o Automator.
Selecione
itmspOpener.app
e mostre seu conteúdo:Localize Conteúdo> Info.plist e abra-o com seu editor favorito:
Substitua estas seções em
Info.plist
:Associe um arquivo .itmsp ae
itmspOpener
pressione o botão Change All...:Redefina o banco de dados do Launch Services:
(no OS X 10.8
lsregister
está localizado em/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)Crie uma pasta .itmsp e liste suas propriedades:
Como o banco de dados dos Serviços de Inicialização foi redefinido, agora o Finder mostra pastas .itmsp como pastas.
Abra
itmspOpener.app
para carregar seu arquivo plist e registrecom.apple.itunes-producer.itmsp
- se :Início
Application Loader.app
:A pasta
foo3.itmsp
ainda deve ser exibida como uma pasta.Verifique as propriedades da pasta novamente:
com.apple.package
não foi adicionado aos atributos de metadados da pasta, é por isso que o Finder ainda exibe pastas .itmsp como pastas!Solução automatizada: exibindo pastas .itmsp como pastas após o login
Para exibir pastas .itmsp como pastas após o login:
Crie
itmspOpener.app
e modifique-oInfo.plist
conforme descrito acima.Crie
/usr/local/bin/itmspTypeLoader
com este conteúdo (a variávelitmspOpener
aponta para o local em queitmspOpener.app
reside, altere conforme necessário):Ambos
sleep 15
antes e depois de correrlsregister
são de extrema importância. Se você não encontrar o resultado desejado, tente atrasos diferentes.Crie
/usr/local/bin/itmspTypeLoaderLauncher
com este conteúdo:Defina os dois scripts executáveis:
Defina
/usr/local/bin/itmspTypeLoaderLauncher
como gancho de login :Reinicie para que as alterações entrem em vigor. Após o login, você deverá ver o seguinte:
e
lsregister -dump
deve revelar queitmspOpener.app
éUTExportedTypeDeclarations
tem precedência sobreApplication Loader.app
's:Você vê o
inactive
sinalizador definido na exportação de tipo do Application Loader.app? Derrotamos o Application Loader.As pastas acid test: .itmsp ainda são exibidas como tal após a atualização do iTunes
Atualizei recentemente o Xcode:
e pode confirmar que as pastas .itmsp foram mostradas como pastas durante a atualização:
e depois:
Uma solução parcial: o pacote mostrará o conteúdo ao clicar duas vezes
Como comentado anteriormente, o procedimento detalhado acima não funcionará com pastas arbitrárias que são exibidas como pacotes pelo Finder.
No entanto, se você quiser apenas clicar duas vezes em um pacote para abri-lo, existe uma maneira de fazê-lo com um
bash
script e o Automator:O script cria uma pasta temporária oculta dentro do pacote, a revela no Finder (revelando o pacote como uma pasta) e exclui a pasta temporária.
O Automator agrupa o script em um aplicativo que será associado aos arquivos do pacote.
Estas são as etapas para criar um aplicativo. Usarei arquivos .itmsp como exemplo de tipo de pacote na explicação abaixo:
Abra o Automator na pasta Aplicativos e selecione Aplicativo :
Selecione Utilitários na lista Biblioteca, selecione Executar Shell Script e arraste-o para o painel à direita:
Conjunto de entrada da passagem de como argumentos :
Substitua o conteúdo do script padrão por este:
Salve o aplicativo como itmspOpener:
Feche o Automator.
Agora você tem um aplicativo que pode abrir arquivos .itmsp como pastas, se associado a ele.
Há um problema estético: como está, os arquivos associados terão o ícone padrão de documento branco:
Vamos corrigir isso também:
Verifique se o Automator está fechado.
Selecione itmspOpener e mostre seu conteúdo:
Localize Conteúdo> Info.plist e abra-o com seu editor favorito:
Substitua o valor para esta chave na
CFBundleDocumentTypes
matriz:e adicione esta chave:
Agora, a seção fica assim:
Alterne para o Finder, selecione uma pasta, pressione ⌘I, selecione o ícone da pasta no canto superior esquerdo e copie-o com ⌘C:
Abra Visualizar e selecione Arquivo> Novo na área de transferência. Salve o arquivo como
folder.icns
:Copiar
folder.icns
paraitmspOpener/Contents/Resources
:Associe um arquivo .itmsp ae
itmspOpener
pressione o botão Change All...:O ícone dos arquivos .itmsp deve mudar para uma pasta, ou pelo menos pensei: infelizmente, esse não foi o caso. Então, mudei o aplicativo itmspOpener para outro local (criei uma pasta temporária na minha área de trabalho, mudei para lá e voltei para a minha área de trabalho). Isso atualizou as informações do ícone no Finder:
Agora clique duas vezes em um arquivo .itmsp e observe-o como uma pasta:
fonte
.itmsp
pasta ficará invisível. Não sei por que, mas aí está. Além disso, se eu tivesse meus leitores, você não precisaria clicar duas vezes no arquivo para ver dentro, mas tudo bem.Uma opção seria cancelar o registro do Application Loader
lsregister -u /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/
, mas ele será registrado novamente se for aberto, se o banco de dados do Launch Services for reconstruído ou, possivelmente, se o Xcode for atualizado.Você também pode comentar as entradas nos dicionários CFBundleDocumentTypes e UTExportedTypeDeclarations
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Info.plist
e executarlsregister -f /Applications/Xcode.app/Contents/Applications/Utilities/Application\ Loader.app/
. Não invalida a assinatura de código do Xcode, mas as alterações podem ser substituídas por atualizações.O caminho completo para o lsregister é
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
na versão 10.5 e posterior.fonte
Info.plist
cancelará o registro dos tipos de arquivos removidos da lista? Eu posso imaginá-lo funcionando e facilmente imaginá-lo falhando. também.lsregister -u $app && lsregister $app
parece aplicar as alterações em um Info.plist pelo menos nesse caso.CFBundleDocumentTypes
Assim, você pode excluir essa "ferramenta" quando ela aparecer, se não precisar e / ou cansa de modificá-lo.Aqui está um trecho relevante a partir da Apple documenation sobre pacotes ( grifo nosso )
Quase certamente o Xcode está representando que afirma
.itmsp
representar um tipo de pacote, conforme descrito em Pacotes de Documentos . Portanto, talvez a remoção dessa extensão do XcodeInfo.plist
funcione, mas suspeito que, uma vez que a associação tenha sido notada pelo Finder, removê-la do Xcode não a desfará. Quais são os "aplicativos recomendados" que você obtém ao clicar com o botão direito do mouse em "Abrir com ..."? Você precisa verificar todas as listas de informações.Sugiro ver se você pode se safar com o uso
lsregister -u
para cancelar o registro de aplicativos que reivindicaram.itmsp
. Caso contrário, talvez você precise remover.itmsp
de todas as listas e depois matar o banco de dados inteiro da associação do localizador usandolsregister -kill -seed
. Nunca fiz isso, sem dizer quanto dano isso causará ao resto do seu sistema. Provavelmente você deseja cancelar o registro, editar as listas e, em seguida, matar e reenviar o banco de dados. Não me surpreenderia se o cancelamento de registro não excluir a associação se você já tiver removido o plist, e o reenvio o adicionará novamente se você ainda não o tiver removido. Além disso, dessa forma, você não perderá todas as outras associações dos aplicativos ofensivos.O que é pior, o Xcode poderia ter passado e definir o bit do pacote em todas as pastas. Acho que você teria que escrever um script usando
GetFileInfo
eSetFile
para digitalizar o disco e desfazê-los, o que é meio doloroso, mas factível. Os dedos cruzados nos bits do pacote permanecem não definidos. UseGetFileInfo
para verificar testando alguns.fonte
Eu acredito que você pode consertar isso usando
/usr/bin/SetFile -a B /path/to/file.itmsp
Teste-o em um antes de tentar em todos os outros, obviamente.
Se você precisar executar todos eles em uma determinada pasta:
find . -name \*.itmsp -exec /usr/bin/SetFile -a B {} \;
deve fazer isso por você.
fonte
SetFile -a B
define o bit do pacote. Na verdade, ele deve ser desativado:SetFile -a b
. Mas isso não terá efeito, pois oHas bundle
bit não está definido:GetFileInfo -ab foo.itmsp
retorna0
.