2011-06-14 23 views
0

我有一個自定義的文件格式,基於文檔的應用程序中,尿路感染等,並設置爲這樣:「com.apple」 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" 

這是令人困惑,因爲我已經從字面上的Plist複製和粘貼的條目例如應用程式一樣,文字編輯,iSpend和素描,都無濟於事。

保存的文檔具有正確的UTI是非常重要的,因爲它們需要定製的QuickLook生成器,它依賴於正確的UTI。

任何幫助,非常感謝。 預先感謝您。

+0

您是否爲您的UTI創建了自定義擴展? – 2011-06-14 05:40:50

回答

3

在一個點上你有沒有做到以下幾點:

1)在某些時候,有com.apple.appname.document爲您的UTI類型,在那個時候,你創建的文件系統的類型的自定義文檔。

3)然後,您更改了應用程序中的UTI設置。

4)您正在查看您在步驟1中創建的文件的信息,該文件自創建以來未更改過?

如果是這樣,請嘗試使用終端到touch有問題的文件強制它的Spotlight重新索引,然後再看看。

否則,它可能還有助於確保您刪除的應用程序的所有多餘的副本,然後重建發射服務數據庫(你可以使用一個工具,我寫這樣做:Rebuild Launch Services Database

在一般情況下,你的Info.plist的信息是確定的,但我想提出以下建議:

  • 在你UTExportedTypeDeclarationsUTTypeTagSpecification,僅指定一個OSTYPE(文件類型代碼)如果你真的知道你在做什麼,這意味着你當然不是使用像'appe'那樣的全部小寫的類型這些都是爲Apple保留的。我知道你需要向Apple註冊創建者代碼(CFBundleSignature s)(我自己做了幾個),但我不確定文件類型,以及他們是否仍在做這件事。如果您指定了一些任意文件類型代碼,並且無法瞭解過去30年來實際代碼的使用情況,則可能會與現有定義的類型發生衝突。

  • 更改您的文檔UTI類型更具體到您的類型。像com.mycompany.appname.extension

然後改變通過移除CFBundleTypeExtensions項目並新增LSItemContentTypes像下面更改文檔CFBundleDocumentTypes項:

<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文件中的本地化版本覆蓋。

+0

非常感謝!像魅力一樣工作。請注意,請確保將這些UTI保持爲小寫。 – spudwaffle 2011-06-14 14:11:09

+0

什麼工作,觸摸文件?要麼? – NSGod 2011-06-14 15:28:56

+0

它看起來像是你所有步驟的組合。 – spudwaffle 2011-06-15 02:25:22