0

カスタムファイル形式、UTIなどを次のように設定したドキュメントベースのアプリがあります。

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>extension</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon</string>
        <key>CFBundleTypeName</key>
        <string>Custom Document</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
        <key>NSDocumentClass</key>
        <string>MyDocument</string>
    </dict>
</array>

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Custom Document</string>
        <key>UTTypeIconFile</key>
        <string>Icon</string>
        <key>UTTypeIdentifier</key>
        <string>com.mycompany.appname</string>
        <key>UTTypeReferenceURL</key>
        <string></string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <string>XXXX</string>
            <key>public.filename-extension</key>
            <array>
                <string>extension</string>
            </array>
        </dict>
    </dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array/>

これは(私が読んだことに基づいて、私が推測する)それを行う正しい方法です。ただし、保存したファイルに対して mdls を実行すると、UTI は次のように表示されます。

kMDItemContentType             = "com.apple.appname.document"

TextEdit、iSpend、Sketch などのサンプル アプリの plist からエントリを文字通りコピー アンド ペーストしましたが、すべて役に立ちませんでした。

正しい UTI に依存するカスタム QuickLook ジェネレーターが必要なため、保存されたドキュメントが正しい UTI を持つことが特に重要です。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

3

ある時点で次のことを行いましたか。

1) ある時点で、com.apple.appname.documentUTI タイプとして持っていて、その時点で、ファイル システムにそのタイプのカスタム ドキュメントを作成しました。

3) 次に、アプリの UTI 設定を変更しました。

4) ステップ 1 で作成したファイルの情報を見ていますが、そのファイルは作成されてから変更されていませんか?

その場合は、ターミナルを使用してtouch問題のファイルにアクセスし、Spotlight で強制的にインデックスを再作成してから、もう一度確認してください。

それ以外の場合は、アプリの余分なコピーをすべて削除してから、Launch Services データベースを再構築することも役立つ場合があります (これを行うために私が書いたユーティリティを使用できます: Rebuild Launch Services Database .

一般に、Info.plist 情報は問題ありませんが、次のことをお勧めします。

  • UTExportedTypeDeclarations下ではUTTypeTagSpecification、何をしているのか本当にわかっている場合にのみ、OSType (ファイル タイプ コード) を指定してください。つまり'appe'、Apple 用に予約されているため、もちろんすべて小文字のような型を使用していないということです。作成者コードを Apple に登録する必要があったことは知っていますがCFBundleSignature(私自身もいくつか登録しました)、ファイルの種類や、現在も登録を行っているかどうかについてはわかりません。任意のファイル タイプ コードを指定し、実際のコードが過去 30 年間に使用されるようになった感覚がない場合は、既存の定義済みタイプと競合する危険があります。

  • ドキュメントの UTI タイプを、より具体的なタイプに変更してください。のようなものcom.mycompany.appname.extension

CFBundleDocumentTypes次に、エントリを削除し、次CFBundleTypeExtensionsのように追加して、ドキュメント エントリを変更します。LSItemContentTypes

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>LSItemContentTypes</key>
        <array>
              <string>com.mycompany.appname.extension</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon</string>
        <key>CFBundleTypeName</key>
        <string>Custom Document</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
        <key>NSDocumentClass</key>
        <string>MyDocument</string>
    </dict>
</array>

次に、Info.plist 内のキーがInfoPlist.stringsファイル内のローカライズされたバージョンによって上書きされていないことを最後に確認します (存在する場合)。

于 2011-06-14T10:10:40.807 に答える