当我尝试从 Mail 中将文件导出到我的应用程序时,它正在发送文件以使用错误的扩展名导出。
这是一个例子:
- 我通过电子邮件将附件发送给自己
- 在邮件中打开附件
- 导出文件并使用我的应用程序打开
- 传递给 application:handleOpenUrl: 的 url 错误
我尝试导出的文件名为“NSIS.nsi”(不带引号)。邮件(iOS?)通过应用程序将文件传递回我的应用程序时将文件重命名为“NSIS.4th”:handleOpenUrl。我注意到的一件事是 Exported Type UTIs > Item 0 > Conforms to UTIs > Equivalent Types > public.filename-extension 中的第一个扩展名(项目)是“4th”(同样,没有引号)。
另一件需要注意的是,我在同一个 public.filename-extension 数组中确实有“nsi”扩展名。
还有一点需要注意的是,这似乎只发生在“nsi”扩展名中。我还没有测试我的应用程序支持的所有扩展(有 92 个。大约第 40 个后我就累了)。但是这个扩展特别有问题。
顺便说一下,这里是代码示例……真的就是这么简单。传递的 NSURL 包含错误的扩展名。这将记录传递的 url - 这是错误的。因此,我可以肯定地说,在将 NSURL 传递给 application:handleOpenUrl: 之前,我的应用程序中没有任何东西在使用它。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
NSLog(@"url: %@", url);
...
}
我也不知道这是否有帮助,但在邮件应用程序中,它确实在 NSIS.nsi 文件旁边显示了我的应用程序图标。是的,文件名在 Mail 中显示为“NSIS.nsi”。
更新 2
我能够确认将第一个扩展名更改为“5th”(用于踢球),然后导入“NSIS.nsi”文件,它确实将文件扩展名更改为“NSIS.5th”。我认为正在发生的事情是我正在定义我的应用程序不正确支持的 UTI。我只想说,“嘿,iOS,我支持所有这些文件扩展名。不要更改名称。只要给我文件,让我做我需要做的事情。” 实际上,我只是希望我的应用程序支持所有类型的文本文件(文本、utf8、utf16 等)。这就是最终结果。
问题是,当我告诉 iOS 我支持纯文本、utf8 和 utf16 时,它仍然不会在可以打开文件的应用程序列表中显示我的应用程序,除非我在 public.filename-extension 数组中专门设置了扩展名. 我希望 plist 中只有一个包罗万象的“我支持所有文本文件”配置值。
我注意到的另一件事是该问题确实会影响其他文件扩展名。例如,我有一个文件要从 Mail 导出到我的应用程序,名为“Ada.adb”。iOS 将文件作为“Ada.ada”返回(注意末尾的“a”而不是“b”)。这是有道理的......我什至在 public.filename-extension 数组或我的应用程序中的任何地方的文件扩展名列表中都没有'ada'。
更新 3
我想出了如何支持所有类型的 public.text 文件。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>icon_buffer_ipad_small.png</string>
<string>icon_buffer_iphone_small.png</string>
</array>
<key>LSItemContentTypes</key>
<array>
<string>public.text</string>
</array>
<key>NSExportableTypes</key>
<array>
<string>public.text</string>
</array>
<key>CFBundleTypeName</key>
<string>Source File</string>
<key>LSHandlerRank</key>
<string>Default</string>
</dict>
</array>
本质上,除了LSItemContentTypes之外,您还需要包含NSExportableTypes。当我弄清楚如何制作其他“public.text”文件类型(例如 4th、md 以及与您的应用程序相关联的 public.text 其他文件类型的巨大列表)时,我将添加更新。希望这不是必需的。无论如何,我会更新我的发现。
更新 4
你们不会相信这个的。这个问题会影响我测试过的每个应用程序。本质上,当我尝试导出“Ada.adb”文件时,它会将文件作为“Ada.ada”导出到每个应用程序。哇!我要弄清楚如何向Apple提交这个错误。当然,除非这是预期的行为!
小更新:我将错误提交给 Apple。错误 ID# 12802236
我不记得这发生在 iOS 5 中。我相信这是 iOS 6 中引入的回归。