3

では、取引は次のとおりです。

  • 新しいファイルタイプに関連付けたい新しいアプリがあります-たとえば、.xyz
  • .xyzfiles - それが重要な場合 - はパッケージファイルです。

さて、これが私のファイルタイプ固有の部分がどのようにinfo.plist見えるかです:

CFBundleDocumentTypes = (
        {   
            CFBundleTypeExtensions = ( "xyz" );
            CFBundleTypeIconFile = "xyz-icon";
            CFBundleTypeName = "XYZ file";
            CFBundleTypeRole = "Viewer";
            LSTypeIsPackage = "1";
        }
    );

ただし、.xyzパッケージ ファイルは、単一のファイル (「パッケージ」) としてではなく、フォルダーとして表示されます。私は何を間違っていますか?


ヒント :私は過去にそれを行うことができましたが、何かが欠けているかどうかを思い出せません。おそらくシステムを再起動する必要がありますか?何も思いつきません...

4

4 に答える 4

4

このスタック オーバーフロー ページが機能しないために見つかった場合は、ドキュメント タイプの宣言にLSTypeIsPackageを使用している可能性があります。LSItemContentTypesを使用LSItemContentTypesすると、システムは無視されますLSTypeIsPackage(これは、このスタックオーバーフローの質問には当てはまりません)。

を使用している場合はLSItemContentTypes、エクスポートされた型を に準拠させる必要がありますcom.apple.package。例:

CFBundleDocumentTypes
  LSItemContentTypes
    Item 0 = com.example.xyz
  CFBundleTypeExtensions
    Item 0 = xyz
  CFBundleTypeRole = Editor
  etc.

UTExportedTypeDeclarations
  Item 0
    UTTypeIdentifier = com.example.xyz
    UTTypeConformsTo
      Item 0 = public.data // or whatever
      Item 1 = com.apple.package          <-------------
    UTTypeDescription = XYZ Document
    etc.
于 2017-01-11T20:05:58.233 に答える
1

このフォルダがパッケージであることをOSに通知するには、「バンドルビット」とも呼ばれる「パッケージビット」を設定する必要があると思います。

于 2013-02-14T08:22:37.030 に答える
1

アプリをインストールすると、エクスポートされたタイプ (Info.plist から) によってシステムにパッケージが通知されると思います。

開発中は、ウォルトが言及した「パッケージビット」を次のように設定することをお勧めします。

    if !directoryURL.setResourceValue(true, forKey: NSURLIsPackageKey, error: &error) {
        println("Soft warning: cannot set package bit for \(directoryURL)")
    }

Finder が開発ディレクトリを調べて新しいユニバーサル型を見つけるとは思わないからです。

于 2015-03-29T06:38:44.497 に答える