1

Markdown ファイルを保存しようとするアプリがあります。これは、私の Info.plist の関連部分です。

<dict>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>md</string>
    </array>
    <key>CFBundleTypeIconFile</key>
    <string>icon.icns</string>
    <key>CFBundleTypeName</key>
    <string>Markdown document</string>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>LSItemContentTypes</key>
    <array>
        <string>net.daringfireball.markdown</string>
    </array>
    <key>LSHandlerRank</key>
    <string>Owner</string>
    <key>NSDocumentClass</key>
    <string>MyDocument</string>
    <key>NSExportableAs</key>
    <array>
        <string>Microsoft Word Document</string>
        <string>RTF</string>
        <string>HTML</string>
    </array>
    <key>NSExportableTypes</key>
    <array>
        <string>net.daringfireball.markdown</string>
        <string>com.microsoft.word.doc</string>
        <string>public.rtf</string>
        <string>public.html</string>
    </array>
</dict>

ご覧のとおり、doc、html、および rtf にエクスポートできるアプリも必要です。

UTExportedTypeDeclarations は次のとおりです。

<dict>
    <key>UTTypeConformsTo</key>
    <array>
        <string>public.source</string>
    </array>
    <key>UTTypeDescription</key>
    <string>Markdown document</string>
    <key>UTTypeIdentifier</key>
    <string>net.daringfireball.markdown</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <array>
            <string>md</string>
        </array>
    </dict>
</dict>

ドキュメントをアプリに保存mdlsし、ファイルを実行すると、次のようになります。

kMDItemContentType             = "dyn.ah62d4rv4ge8043a"
kMDItemContentTypeTree         = (
    "dyn.ah62d4rv4ge8043a",
    "public.data",
    "public.item"
)

さらに、私のアプリは以前に保存したファイルを開くことができないようで、エラーが発生します:

エラー Domain=NSCocoaErrorDomain Code=256 「自動保存されたドキュメント「test10.md」を再度開くことができませんでした。」 UserInfo=0x102210bf0 {NSLocalizedDescription=自動保存されたドキュメント「test10.md」を再度開くことができませんでした。}

私は何を間違っていますか?UTI を適切に認識させるにはどうすればよいですか?

4

2 に答える 2

4

あなたの適合は間違っていると思います。物理ツリーと機能ツリーのスーパータイプが必要です。

ドキュメントには時代遅れのものがたくさんあります。最近本当に必要なパーツについては、私の記事を参照してください。たとえば、エクスポート可能なタイプはもう必要ありません: http://www.cocoanetics.com/2012/09/fun-with-uti/

輸出入について。このアプリがファイルの種類を所有しているかどうかによって異なります。もしそうなら、それをエクスポートする必要があります。そうでない場合は、インポートする必要があります。タイプ IIRC をエクスポートするすべてのアプリのうち、最新のアプリが優先されます。タイプを読み取ることができるアプリは、それをインポートする必要があります。また、自分の UTI から上位の UTI を操作できると述べているアプリは、ファイルを開くことができます。たとえば、フォーマットがプレーン テキストに準拠している場合、TextEdit で開くこともできます。

また、実験を行っているうちに、誤って起動サービスの UTI レジストリを台無しにしてしまった可能性があります。私の記事では、それをきれいにする方法について言及しています。

于 2012-12-09T09:20:09.620 に答える