任何人都可以向我解释Xcode 5.1中文档类型,导出的UTI和导入的UTI之间的区别吗?我希望能够让我的应用程序根据文件扩展名自动检测文件类型.为了做到这一点,我需要实施这三个中的哪一个?
我正在尝试实现注册过程,该过程允许我的iOS应用程序显示在其他应用程序的"打开方式"列表中(如Apple的文档交互编程主题中所述).我希望我的应用程序能够处理来自任何提供标准音频文件格式(MP3,AIFF,WAV等)的应用程序的音频.
据我所知,我需要做的就是将CFBundleDocumentTypes关键字和相关的子数据添加到我的应用程序的Info.plist中.这是我放入的(通过Xcode 4的文档类型编辑器):
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>scrubbulator-icon</string>
</array>
<key>CFBundleTypeName</key>
<string>Audio</string>
<key>LSHandlerRank</key>
<string>Alternative</string>
<key>LSItemContentTypes</key>
<array>
<string>public.mp3</string>
</array>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
添加此代码不会在应用程序的"打开方式"菜单中显示我的应用程序(我在iPhone上测试,使用Dropbox中的MP3作为文件源.应用程序AudioMemos和Evernote都显示为Dropbox中的MP3文件,所以我知道支持的格式).有什么明显的东西我做错了,还是还有其他我需要实现的东西?
(注意:我没有UTExportedTypeDeclarations在我的Info.plist中设置一个项目,因为我理解这些只是自定义UTI所必需的.因为我使用的是系统UTI,我认为它不应该是必要的,但如果我有正确的请纠正我我错了.)
编辑
我添加了以下Exported Type UTI,但没有成功:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>kUTTypeMP3</string>
</array>
<key>UTTypeDescription</key>
<string>Audio file</string>
<key>UTTypeIdentifier</key>
<string>kUTTypeMP3</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>mp3</string>
</array>
</dict>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud) 我试图在Cocoa中找到一些方法来从文件扩展名转换为统一类型标识符.也就是说,我想找到一些方法:
".jpg" => "public.jpeg"
".html" => "public.html"
".ttf"=> "public.truetype-font"
Run Code Online (Sandbox Code Playgroud)
我搜索过NSWorkspace文档但找不到任何内容.我能得到的最接近的是:
- (NSImage *)iconForFileType:(NSString *)fileType
Run Code Online (Sandbox Code Playgroud)
返回文件扩展名的图标,和
– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
Run Code Online (Sandbox Code Playgroud)
这与我正在尝试的完全相反.你们中的任何人都知道怎么做吗?
我真的希望我不必手动检查很多扩展.
提前致谢.
我想在iOS7上将图像附加到MMS上.我写了以下代码:
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;
NSData *imgData = [NSData dataWithContentsOfFile:@"blablabla"];
BOOL didAttachImage = [messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image"];
if (didAttachImage)
{
// Present message view controller on screen
[self presentViewController:messageController animated:YES completion:nil];
}
else
{
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Failed to attach image"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[warningAlert show];
return;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当显示SMS屏幕时,它无法识别图像,也无法发送.我看到这样的事情:

我相信这与我发送的imgData或者typeIdentifier有关.
注意:我尝试了几乎所有可能的typeIdentifiers:@"public.data",@"public.image",@"public.item",...等没有工作.
有人可以帮帮我吗?你使用的typeIdentifier是什么?我在iPhone 5,iOS 7.0.2上测试.
谢谢.
解:
正如Greg指示的那样,这解决了我的问题:将文件名设置为@"image.png",将typeIdentifier设置为kUTTypePNG.
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
Run Code Online (Sandbox Code Playgroud)
谢谢格雷格.
阅读Developer Library的文档,doc的标识符是" com.microsoft.word.doc ".但是docx的标识符是什么?
我为iOS 9的iOS应用程序定义并使用了自定义UTI类型.现在,在使用XCode 8和iOS 10后,如果通过iMessage发送文件,我无法"打开"该文件.如果我点击图标,虽然显示了正确的图标,但没有任何反应.如果是通过电子邮件发送的,我仍然可以将其导入我的应用程序.邮件和iMessage有区别吗?
我的info.plist声明如下所示:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon-60@3x</string>
</array>
<key>CFBundleTypeName</key>
<string>My Voting Lists File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.my-org.document.lists</string>
</array>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
和
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.text</string>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My Voting List File</string>
<key>UTTypeIdentifier</key>
<string>com.my-org.document.lists</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>mylist</string>
</array>
</dict>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
我也搜索了一个解决方案,但没有找到对我有用的东西. 这个stackoverflow讨论没有帮助我:(任何想法改变了什么或我的错误是什么?提前感谢!
在Xcode 4中,项目信息中有"文档类型","导入的UTI"和"导出的UTI"的列表.我知道哪些文档类型,但导入/导出的UTI是什么?我是否还需要将每种文档类型声明为导入/导出的UTI?我用UTI.
谢谢.
如何编写我的.plist文件的CFBundleDocumentTypes属性,以允许应用程序显示在其他应用程序的"Open in ..."对话框中?
这是我的,但它不起作用
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array/>
<key>CFBundleTypeName</key>
<string>Readings</string>
<key>LSItemContentTypes</key>
<array>
<string>text.csv</string>
</array>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud) iCloud在哪里获取它在iCloud首选项中显示的应用程序名称?
Settings.app > iCloud > Storage & Backup > Manage Store > Documents & DataSystem Preferences > iCloud > Manage ...我知道iCloud会将应用程序列为"未知",最初会显示一个空白图标(这确实发生在我的情况下),但是我的应用程序现在通过其"内部"名称而不是"漂亮"名称出现在此列表中(包含iCloud的应用更新尚未提交,因此这更加奇怪).
我的直觉说该名称将被定义为我的应用程序中的部分CFBundleDocumentTypes或UTExportedTypeDeclarations部分,info.plist但iCloud使用的名称仅出现在那里的UTI值中.iCloud值也不匹配应用程序CFBundleDisplayName或配置门户中附加到App ID的描述.
从iOS 11开始,每次使用UIDocumentAPI 创建新文档时都会遇到以下错误:
[错误]无法获取项目/var/mobile/Containers/Data/Application/XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/Documents/myDoc-XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX.myFile(n)的属性值.
错误:错误域= NSFileProviderInternalErrorDomain代码= 1
"不允许读者访问该URL."
UserInfo = {NSLocalizedDescription =不允许读者访问该URL.}
不同于类似的问题(1,2,3上SO)在此,我没有使用UIDocumentBrowserViewController.我只是创建一个UIDocument并自己调用save()该Documents目录.我发现的最接近的问题用途UIManagedDocument.但是,就我而言,尽管出现错误消息,仍然可以成功创建和写入文件.
这是我保存例程的要点:
@IBAction func createDoc(_ sender: Any) {
let uuid = UUID().uuidString
let doc = Document(baseName: "myDoc-\(uuid)")
doc.save(to: doc.fileURL, for: .forCreating) { (completed) in
if (completed) {
doc.close(completionHandler: nil)
self.verifyNumberOfFiles()
}
}
}
Run Code Online (Sandbox Code Playgroud)
UIDocument为了简化这个问题,我的子类也几乎是空白的:
class Document: UIDocument {
let fileExtension = "myFile"
override …Run Code Online (Sandbox Code Playgroud) uti ×10
ios ×5
xcode ×2
cocoa ×1
cocoa-touch ×1
csv ×1
document ×1
file-type ×1
icloud ×1
imessage ×1
info.plist ×1
ios11 ×1
ios5 ×1
ios7 ×1
macos ×1
mfmessagecomposeviewcontroller ×1
mms ×1
objective-c ×1
plist ×1
sync ×1
uidocument ×1