我已更新我的应用的info.plist
文件,以反映新的文件类型(称为.ftl
)。
当我将这种类型的文件附加到电子邮件时,iOS会将文件类型识别为可以传递到我的应用程序的文件类型(当在电子邮件中触摸文件时,我的应用程序图标会出现)。但是,当我选择图标时,我的应用程序无法启动。
在我的App委托中,我使用application:openURL:sourceApplication:sourceApplication annotation:
委托方法来处理相关NSURL
的处理。当我NSLog
这个方法时,很明显没有调用该方法。
有什么想法吗?我已经在iOS 4中使用了这个。然后我升级了Xcode以测试运行iOS 6的iPad并且遇到了这个死胡同。我的应用程序的其余部分工作正常。
根据Rob的要求,这里是我的info.plist文件中的CFBundleDocumentTypes和UTExportedTypeDeclarations。感谢:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>LSItemContentTypes</key>
<array>
<string>com.yourcompany.blinkapp.ftl</string>
</array>
<key>CFBundleTypeName</key>
<string>Blink FTL Sheet</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>Blink FTL Sheet</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.text</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.yourcompany.blinkapp.ftl</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>ftl</string>
</dict>
</dict>
</array>
我也尝试在我的UTTypeConformsTo中使用public.data而不是public.text。同样的问题。
答案 0 :(得分:1)
经过几天在这个问题上撕掉我的头发,以及本网站的一些成员的一些奇妙的意见,我发现了这个错误的来源:
在检查我的组织者设备控制台(窗口&gt;组织者,然后是您正在测试的设备的控制台)时,我注意到以下警告:
LaunchServices: Invalid LSOpenOperation request - No applications found to open document
我在Apple开发者论坛上看了一下,发现:
https://discussions.apple.com/thread/4489540?start=0&tstart=0
这看起来像是iOS 6中首次出现的问题,要求在您尝试在应用中打开的文件中包含的数据的mime类型与plist.info文件中声明的数据之间存在严格的一致性。基本上在iOS 4中,我的应用程序打开了一个文件,其中包含.ftl类型的.xml内容,其中包含以下info.plist条目:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.yourcompany.blinkapp.ftl</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>ftl</string>
<key>public.mime-type</key>
<string>application/blinkapp</string>
</dict>
</dict>
</array>
但是,在iOS 6中,必须将UTTypeConformsTo声明为XML:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.yourcompany.blinkapp.ftl</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>ftl</string>
<key>public.mime-type</key>
<string>application/blinkapp</string>
</dict>
</dict>
</array>
...注意public.xml NOT public.data
听起来可能很明显,但就像我说的那样,在iOS 4和5下,我的应用程序顺利运行......突然在iOS6中,甚至无法启动。祝你好运,希望这有帮助!
答案 1 :(得分:0)
在CFBundleDocumentTypes
(“文档类型”)中,您没有CFBundleTypeRole
(“角色”)。根据{{3}},“此键指定应用程序相对于类型的角色。值可以是Editor,Viewer,Shell或None。此键是必需的。”我可能会尝试设置它,看看是否能解决问题。
虽然我在这里,但我也倾向于定义一个mime类型,例如: public.mime-type
application/flight
(或您的应用名称)。
查看您的代码,documentation的签名未完整。方法签名是:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// handle the URL here
}