Sorun: .itmsp klasörleri dosya olarak gösteriliyor
Finder .itmsp klasörlerini paketler halinde , yani tek bir dosyaymış gibi ele alır . Örneğin, sütun görünümünde .itmsp klasöründe bulunan herhangi bir şey görünmezdir, yalnızca belge simgesi gösterilir:
Aşağıdaki koşullardan herhangi biri doğruysa Finder bir dizini paket olarak kabul eder ( Paket Programlama Kılavuzu'ndan ):
Dizin bilinen bir uzantısı bulunmaktadır: .App, .bundle, .framework, .plugin, .kext, ve böylece (de tanımlandığı gibi /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist
. Bu Xcode ile açmak, bir ikili Plist olup: open -a Xcode Info.plist
).
Dizin, diğer bazı uygulama iddialarının bir paket türünü temsil ettiği bir uzantıya sahiptir (bulmak için com.apple.package
çıktıya bakın mdls -name kMDItemContentTypeTree <foldername>
.)
Dizinde paket biti ayarlanmıştır ( GetFileInfo -ab <foldername>
döndürürse 1
ayarlanır.)
Durum 2. .itmsp klasörlerine uygulanır: Application Loader.app
türü dışa aktarır com.apple.itunes-producer.itmsp
ve aşağıdakilere uyacak şekilde ayarlar 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>
Bir çözüm: türü yeniden beyan com.apple.itunes-producer.itmsp
Bir çözüm, tür com.apple.itunes-producer.itmsp
ve uzantıyı itmsp
bir klasör olarak yeniden bildirmek ve Launch Services'ı değiştirilmiş tür bildirimini kullanmaya zorlamak olacaktır.
Önemli Not:
Her ne kadar OP'nin sorununu güvenilir bir şekilde çözse de, önerilen çözüm diğer paketlere uygulandığında bunları klasör olarak görüntülemez.
Önerilen çözümün yalnızca standart olmayan bir uygulama yolunda bulunan uygulamalar tarafından bildirilen dosya türleriyle çalıştığını öğrendim.
Bu olduğu Application Loader.app
yer almaktadır /Applications/Xcode.app/Contents/Applications/
.
Kısmi bir çözümle ilgileniyorsanız, bu cevabın sonunu kontrol edin.
.İtmsp klasörlerinin Finder tarafından klasör olarak görüntülenmesini sağlamak için aşağıdaki adımları izleyin:
Açık Otomatikleştirici Uygulamaları klasör basıp içinde Uygulaması :
Kütüphane listesinden Yardımcı Programlar'ı seçin, Kabuk Betiğini Çalıştır'ı seçin ve sağdaki bölmeye sürükleyin:
Varsayılan komut dosyası içeriğini aşağıdakilerle değiştirin exit 0
:
Uygulamayı itmspOpener kaydedin:
Automator'u kapatın.
itmspOpener.app
İçeriğini seçin ve gösterin:
İçindekiler> Bilgi.plist'i bulun ve favori düzenleyicinizle açın:
Bu bölümleri aşağıdaki gibi değiştirin 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>
Not:
Neden kUTTypeDirectory
yerine public.directory
de UTExportedTypeDeclarations
? Gönderen Apple'ın belgelerinde : Önemli: Kodunuzdaki sistem tanımlı İYE kullanırken, tanımlanan sabitleri kullanmalıdır UTCoreTypes.h
mevcut Lansmanı Hizmetleri çerçevesinde yerine gerçek İYE dizeleri. Örneğin, "com.apple.application" yerine kUTTypeApplication iletin. “Sistem tarafından Beyan Edilen Tek Tip Tip Tanımlayıcılar” bu sabitleri UTI dizelerine ek olarak listeler.
Bir .itmsp dosyasını ilişkilendirin itmspOpener
ve düğmesine basın Change All...:
Başlatma Hizmetleri veritabanını sıfırlayın:
$ lsregister -kill -r -domain local -domain system -domain user
(OS X 10.8'de lsregister
bulunur /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/
.)
Bir .itmsp klasörü oluşturun ve özelliklerini listeleyin:
$ mkdir foo3.itmsp
$ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
"public.folder",
"public.directory",
"public.item"
)
Başlatma Hizmetleri veritabanı sıfırlandığından, Finder .itmsp klasörlerini klasör olarak gösterir.
Açık itmspOpener.app
olan Plist dosyası yüklemek ve kaydetmek için com.apple.itunes-producer.itmsp
:
$ open ~/Desktop/itmspOpener.app
Başlangıç Application Loader.app
:
$ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
Klasör foo3.itmsp
yine de klasör olarak görüntülenmelidir.
Klasör özelliklerini tekrar kontrol edin:
$ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
"public.directory",
"public.item",
"public.content"
)
com.apple.package
klasörün meta veri özniteliklerine eklenmediğinden, Finder hala .itmsp klasörlerini klasör olarak görüntüler!
Otomatik çözüm: .itmsp klasörlerini giriş yaptıktan sonra klasör olarak görüntüleme
Oturum açtıktan sonra .itmsp klasörlerini klasör olarak görüntülemek için:
Oluşturun itmspOpener.app
ve Info.plist
yukarıda açıklandığı gibi değiştirin .
/usr/local/bin/itmspTypeLoader
Bu içerikle oluşturun (değişken itmspOpener
, bulunduğu yere işaret eder, itmspOpener.app
gerekirse değiştirin):
#!/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
Koşmadan sleep 15
önce ve sonra hem lsregister
çok önemlidir. İstediğiniz sonucu görmüyorsanız, farklı gecikmeler deneyin.
/usr/local/bin/itmspTypeLoaderLauncher
Bu içerikle oluştur :
#!/bin/bash
# $1 returns the short name of the user who is logging in
su - $1 -c /usr/local/bin/itmspTypeLoader &
Her iki komut dosyasını yürütülebilir olarak ayarla:
$ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher
Giriş kancası/usr/local/bin/itmspTypeLoaderLauncher
olarak ayarla :
$ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
Değişikliklerin etkili olması için yeniden başlatın. Giriş yaptıktan sonra şunu görmelisiniz:
ve lsregister -dump
o açığa çıkarmalıdır itmspOpener.app
's UTExportedTypeDeclarations
önceliklidir 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
--------------------------------------------------------
inactive
Application Loader.app türünün dışa aktarımında ayarlanmış bayrağı görüyor musunuz ? Uygulama Yükleyiciyi yendik.
Asit testi: .itmsp klasörleri iTunes güncellemesinden sonra hala görüntüleniyor
Son zamanlarda Xcode'u güncelledim:
ve güncelleme sırasında .itmsp klasörlerinin klasör olarak gösterildiğini onaylayabilir:
ve sonrasında:
Kısmi bir çözüm: Paket, çift tıklandığında içeriği gösterecektir
Daha önce yorumlandığı gibi, yukarıda açıklanan prosedür Finder tarafından paket olarak görüntülenen rastgele klasörlerle çalışmaz.
Ancak, bir paketi açmak için sadece çift tıklamak istiyorsanız, bir bash
komut dosyası ve Automator ile yapmanın bir yolu vardır :
Komut dosyası, paketin içinde gizli, geçici bir klasör oluşturur, onu Finder'da gösterir (böylece paketi klasör olarak gösterir) ve sonra geçici klasörü siler.
Not:
Komut dosyası bunun yerine gizli, geçici bir dosya oluşturabilir. Ancak, bir klasör oluşturmayı tercih ediyorum çünkü rmdir
sadece boş klasörleri rm
silerken, herhangi bir dosyayı siler , bu nedenle eğer bir nedenle. komut dosyası tahribat yaratır, sadece boş klasörler silinir, bu da dosyalar silinmiş gibi kötü değildir.
Automator, komut dosyasını paket dosyalarıyla ilişkilendirilecek bir uygulamada paketler.
Bunlar böyle bir uygulama oluşturma adımlarıdır. Aşağıdaki açıklamada .itmsp dosyalarını paket türü örneği olarak kullanacağım:
Açık Otomatikleştirici Uygulamaları klasör basıp içinde Uygulaması :
Kütüphane listesinden Yardımcı Programlar'ı seçin , Kabuk Betiğini Çalıştır'ı seçin ve sağdaki bölmeye sürükleyin:
Set Geçiş giriş için argümanlar olarak :
Varsayılan komut dosyası içeriğini bununla değiştir:
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
Uygulamayı itmspOpener kaydedin:
Automator'u kapatın.
Şimdi .itmsp dosyalarını ilişkilendirilmişse klasör olarak açabilen bir uygulamanız var.
Kozmetik bir sorun var: durduğu gibi, ilişkili dosyalar standart beyaz belge simgesine sahip olacak:
Bunu da düzeltelim:
Automator'un kapalı olduğundan emin olun.
İtmspOpener'ı seçin ve içindekileri gösterin:
İçindekiler> Bilgi.plist'i bulun ve favori düzenleyicinizle açın:
Dizideki bu anahtarın değerini değiştirin CFBundleDocumentTypes
:
<key>CFBundleTypeName</key>
<string>itmsp folder</string>
ve şu anahtarı ekleyin:
<key>CFBundleTypeIconFile</key>
<string>folder</string>
Şimdi, bölüm şöyle görünür:
Finder'a geçin, bir klasör seçin, tuşuna basın ⌘I, sol üst köşedeki klasör simgesini seçin ve şununla kopyalayın ⌘C:
Önizleme'yi açın ve Panodan Dosya> Yeni'yi seçin. Dosyayı şu şekilde kaydedin folder.icns
:
Kopya folder.icns
için itmspOpener/Contents/Resources
:
Bir .itmsp dosyasını ilişkilendirin itmspOpener
ve düğmesine basın Change All...:
.İtmsp dosyalarının simgesi bir klasöre değişmeli veya en azından ben öyle düşündüm: maalesef durum böyle değildi. Bu yüzden itmspOpener uygulamasını başka bir yere taşıdım (Masaüstümde geçici bir klasör oluşturdum, oraya ve Masaüstüme geri taşıdım). Finder'daki simge bilgilerini yenileyen:
Şimdi bir .itmsp dosyasına çift tıklayın ve klasör olarak açıldığını izleyin: