2012-02-24 46 views
2

我試圖關聯我的應用程序創建的自定義文件(它是XML),以便用戶可以通過電子郵件將文件發送給對方。我在這裏遵循的優秀教程:在iOS中關聯我的應用程序的自定義文件

How do I associate file types with an iPhone application?

文件名爲XXX.checklist

但它不關聯。我相信我的問題是與public.mime類型的關鍵,因爲我不知道我應該放在那裏。以下是相關信息-plist中的條目

<key>CFBundleDocumentTypes</key> 
<array> 
    <array> 
     <dict> 
      <key>CFBundleTypeIconFiles</key> 
      <array> 
       <string>docIcon64.png</string> 
       <string>docIcon320.png</string> 
      </array> 
      <key>CFBundleTypeName</key> 
      <string>My App Checklist</string> 
      <key>CFBundleTypeRole</key> 
      <string>Viewer</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>com.mycompany.appid.checklist</string> 
      </array> 
     </dict> 
    </array> 
</array> 

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.content</string>/// i tried public.text but it allowed the file to be opened by the devices default text viewer which I would not like. 
     </array> 
     <key>UTTypeDescription</key> 
     <string>My App Checklist</string> 
     <key>UTTypeIdentifier</key> 
     <string>com.mycompany.appid.checklist</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> // fixed this key 
      <string>checklist</string> 
      <key>public.mime-type</key> 
      <string>text/xml</string> /// changed to this, still doest work though 
     </dict> 
    </dict> 
</array> 
+0

我已經實現了以上解決方案。但我很想在共享菜單上看到我的應用程序。你可以提供給我確切的答案 – 2015-06-22 08:15:08

回答

5

如果作爲public.data我假設你的清單文件是一個自定義的二進制數據的UTI聲明。

然後你應該簡單地使用application/octet-stream作爲MIME類型。

更新: 明白了,你的問題比任何人都期待的更加微不足道。對於初學者一兩件事 - public.data是好的,它的所有後代(包括public.xml),所以對於一個XML文件,你可以設置任何這些:

  • public.item
  • public.data
  • public.content
  • public.text
  • public.xml

提供打開文件類型的應用程序列表是根據系統中已知的應用程序構建的,可以處理給定的UTI和您的文件。由於默認文本編輯器打開public.textpublic.xml,它將成爲您的文件類型的默認操作(您的應用程序將顯示在通過長按郵件附件調用的列表上)。

有(顯然)沒有處理public.datapublic.content相同)的應用程序,因此,當您使用此UTI時,附件的默認操作是在您的應用程序中打開它。

現在的地步......你CFBundleDocumentTypes有一個額外的<array>級別:

<key>CFBundleDocumentTypes</key> 
<array> 
    <array>  <!-- remove this line --> 
     <dict> 
      <key>CFBundleTypeIconFiles</key> 
      <array> 
       <string>docIcon64.png</string> 
       <string>docIcon320.png</string> 
      </array> 
      <key>CFBundleTypeName</key> 
      <string>My App Checklist</string> 
      <key>CFBundleTypeRole</key> 
      <string>Viewer</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>com.mycompany.appid.checklist</string> 
      </array> 
     </dict> 
    </array>  <!-- and this line --> 
</array> 

而且它會工作。 UTExportedTypeDeclarations部分已經很好。

+0

該文件只是一個文本XML文件。我把public.data,因爲這是在我看到 – Brodie 2012-02-28 14:19:03

+0

編輯我的代碼以上的教程之一,以反映我從你的答案中學到的東西。它仍然不起作用,雖然 – Brodie 2012-02-28 14:43:44

+0

更新了答案 – ayoy 2012-02-28 18:41:24

相關問題