問題:.itmspフォルダーがファイルとして表示される
Finderは.itmspフォルダーをパッケージとして、つまり単一のファイルのように扱います。たとえば、列ビューでは、.itmspフォルダー内に含まれるものはすべて表示されず、ドキュメントアイコンのみが表示されます。

次の条件のいずれかが当てはまる場合、Finderはディレクトリをパッケージと見なします(バンドルプログラミングガイドから)。
- ディレクトリには、.app、.bundle、.framework、.plugin、.kextなどの既知のファイル名拡張子があります(定義されて- /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plistいるとおりです。これはバイナリplistです。Xcode :で開きます- open -a Xcode Info.plist)。
 
- ディレクトリには、他のアプリケーションがパッケージの種類を表すと主張する拡張子があります(- com.apple.package出力- mdls -name kMDItemContentTypeTree <foldername>を探して調べてください)。
 
- ディレクトリのパッケージビットが設定されています(- GetFileInfo -ab <foldername>戻る場合- 1、設定されています)。
 
ケース2.は.itmspフォルダーに適用されます。Application Loader.appタイプcom.apple.itunes-producer.itmspをエクスポートし、以下に準拠するように設定します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>
解決策:タイプを再宣言する com.apple.itunes-producer.itmsp
解決策は、タイプcom.apple.itunes-producer.itmspと拡張子itmspをフォルダーとして再宣言し、Launch Servicesが変更されたタイプ宣言を使用するように強制することです。
  重要な注意点:
  
  OPの問題は確実に解決されますが、提案されたソリューションは、他のパッケージに適用された場合、フォルダーとして表示されません。
  
  提案されたソリューションは、非標準のアプリケーションパスにあるアプリケーションによって宣言されたファイルタイプでのみ機能するようだとわかりました。
  
  これは、の場合であるApplication Loader.appに位置し、/Applications/Xcode.app/Contents/Applications/。
  
  部分的な解決策に関心がある場合は、この回答の終わりを確認してください。
Finderで.itmspフォルダーをフォルダーとして表示するには、次の手順に従います。
- [アプリケーション]フォルダーでAutomatorを開き、[ アプリケーション ]を選択します。  
 
- [ライブラリ]リストで[ユーティリティ]を選択し、[シェルスクリプトの実行]を選択して、右側のペインにドラッグします。  
 
- デフォルトのスクリプトの内容を- exit 0次のように置き換えます。
  
 
- アプリケーションをitmspOpenerとして保存します。  
 
- Automatorを閉じます。 
- itmspOpener.appその内容を選択して表示します。
  
 
- Contents> Info.plistを見つけて、お気に入りのエディターで開きます。  
 
- 以下のセクションを置き換えます- 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>
 - 
  - 注: 
  なぜin - kUTTypeDirectoryではなく?Appleのドキュメントから:重要:コードでシステム定義のUTIを使用する場合、実際のUTI文字列ではなく、Launch Servicesフレームワークで定義されている定数を使用する必要があります。たとえば、「com.apple.application」ではなくkUTTypeApplicationを渡します。「システム宣言のUniform Type Identifiers」は、UTI文字列に加えてこれらの定数をリストしています。- public.directory- UTExportedTypeDeclarations- UTCoreTypes.h
 
 
- .itmspファイルを関連付けて- itmspOpener、ボタンを押しますChange All...。
  
 
- Launch Servicesデータベースをリセットします。 - $ lsregister -kill -r -domain local -domain system -domain user
 - (OS X 10.8 - lsregisterではにあり- /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/ます。)
 
- .itmspフォルダーを作成し、そのプロパティを一覧表示します。 - $ mkdir foo3.itmsp
$ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
    "public.folder",
    "public.directory",
    "public.item"
)
 - Launch Servicesデータベースがリセットされたため、Finderは.itmspフォルダーをフォルダーとして表示するようになりました。 
- 開い- itmspOpener.appてplistファイルをロードし、登録し- com.apple.itunes-producer.itmspます。
 - $ open ~/Desktop/itmspOpener.app
 
- 開始- Application Loader.app:
 - $ open '/Applications/Xcode.app/Contents/Applications/Application Loader.app'
 - フォルダー- foo3.itmspは引き続きフォルダーとして表示されます。
 
- フォルダーのプロパティをもう一度確認します。 - $ mdls -name kMDItemContentTypeTree foo3.itmsp/
kMDItemContentTypeTree = (
    "public.directory",
    "public.item",
    "public.content"
)
 - com.apple.packageフォルダーのメタデータ属性に追加されなかったため、Finderは.itmspフォルダーをフォルダーとして表示し続けます。
 
自動化されたソリューション:ログイン後に.itmspフォルダーをフォルダーとして表示する
ログイン後に.itmspフォルダーをフォルダーとして表示するには:
- 上記のように作成- itmspOpener.appして変更します- Info.plist。
 
- /usr/local/bin/itmspTypeLoaderこのコンテンツで作成します(変数- itmspOpenerは- itmspOpener.app存在する場所を指し、必要に応じて変更します):
 - #!/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
 - sleep 15実行前と実行後の両方- lsregisterが最も重要です。目的の結果が表示されない場合は、さまざまな遅延を試してください。
 
- /usr/local/bin/itmspTypeLoaderLauncherこのコンテンツで作成:
 - #!/bin/bash
# $1 returns the short name of the user who is logging in
su - $1 -c /usr/local/bin/itmspTypeLoader &
 
- 両方のスクリプトを実行可能に設定します。 - $ sudo chmod a+x /usr/local/bin/itmspTypeLoader /usr/local/bin/itmspTypeLoaderLauncher 
 
- ログインフック- /usr/local/bin/itmspTypeLoaderLauncherとして設定:
 - $ sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/itmspTypeLoaderLauncher
 
- 変更を有効にするために再起動します。ログインすると、次のように表示されます。  
 - そして、- lsregister -dumpすることを明らかにしなければならない- itmspOpener.appのは、- UTExportedTypeDeclarationsより優先されます- 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アプリケーションLoader.appのタイプの輸出でフラグが設定されて?Application Loaderを破りました。
 
酸のテスト:.itmspフォルダーは、iTunesの更新後もそのまま表示されます
私は最近Xcodeを更新しました:

更新中に.itmspフォルダーがフォルダーとして表示されたことを確認できます。 

そしてその後:

部分的な解決策:ダブルクリックするとパッケージに内容が表示されます
前述のとおり、上記の手順は、Finderによってパッケージとして表示される任意のフォルダーでは機能しません。
ただし、パッケージをダブルクリックして開くだけの場合は、1つのbashスクリプトとAutomatorでそれを行う方法があります。
これらは、このようなアプリケーションを作成する手順です。以下の説明では、パッケージタイプの例として.itmspファイルを使用します。
- [アプリケーション]フォルダーでAutomatorを開き、[ アプリケーション ]を選択します。  
 
- [ ライブラリ]リストで[ ユーティリティ]を選択し、[ シェルスクリプトの実行]を選択して、右側のペインにドラッグします。  
 
- 引数として入力を渡すを設定します。  
 
- デフォルトのスクリプトの内容をこれに置き換えます: - 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
 
- アプリケーションをitmspOpenerとして保存します。  
 
- Automatorを閉じます。 
これで、.itmspファイルが関連付けられている場合、フォルダーとして開くことができるアプリケーションができました。
表面的な問題があります:現状では、関連するファイルには標準の白いドキュメントアイコンがあります:

これも修正しましょう:
- Automatorが閉じていることを確認してください。 
- itmspOpenerを選択して、その内容を表示します。  
 
- Contents> Info.plistを見つけて、お気に入りのエディターで開きます。  
 
- CFBundleDocumentTypes配列内のこのキーの値を置き換えます。
 - <key>CFBundleTypeName</key>
<string>itmsp folder</string>
 - このキーを追加します: - <key>CFBundleTypeIconFile</key>
<string>folder</string>
 - これで、セクションは次のようになります。  
 
- Finderに切り替えて、フォルダーを選択し、を押して⌘I、左上隅にあるフォルダーアイコンを選択し、コピーし⌘Cます。  
 
- プレビューを開き、クリップボードからファイル>新規を選択します。ファイルを- folder.icns次の名前で保存します。
  
 
- コピー- folder.icns先- itmspOpener/Contents/Resources:
  
 
- .itmspファイルを関連付けて- itmspOpener、ボタンを押しますChange All...。
  
 
.itmspファイルのアイコンはフォルダーに変更する必要がありますが、少なくともそうは思いました。残念ながら、そうではありませんでした。そこで、アプリケーションitmspOpenerを別の場所に移動しました(デスクトップに一時フォルダーを作成し、そこに移動してデスクトップに戻しました)。これにより、Finderのアイコン情報が更新されました。

.itmspファイルをダブルクリックして、フォルダーとして開いているのを確認します。
