2

I often create my own document type for my desktop applications. But I have never registered my own custom UTI. Anyway, I want to save a simple Dictionary data as a data (NSData) file like the following.

@IBAction func testClicked(_ sender: NSButton) {
    let savePath = self.documentPath() // setting a default path
    let savePanel = NSSavePanel()
    savePanel.directoryURL = NSURL.fileURL(withPath: savePath)
    savePanel.title = ""
    savePanel.message = ""
    savePanel.nameFieldStringValue = "File"
    savePanel.showsHiddenFiles = false
    savePanel.showsTagField = false
    savePanel.canCreateDirectories = true
    savePanel.allowsOtherFileTypes = false
    savePanel.allowedFileTypes = ["customtype"]
    savePanel.isExtensionHidden = false
    if savePanel.runModal() == NSFileHandlingPanelOKButton {
        let dict = ["title": "New York Nightly News", "url": "http://www.newyorknightlynews.net/cmlink/TopNews.rss"] as Dictionary<String, String>
        let data = NSKeyedArchiver.archivedData(withRootObject: dict)
        do {
            try data.write(to: savePanel.url!, options: .atomic)
        }
        catch {

        }
    } else {
        print("canceled")
    }
}

enter image description here

I have set up a document type and an exported UTI as shown above.

Initially, I set the UTTypeConformsTo type to public.data. But I've changed it to public.xml and public.text. Yet, an exported file has no file icon. It doesn't appear that my custom UTI is correctly recognized. My goal is to let this desktop application produces a file such that the user can send it to an iOS equivalent through AirDrop. What am I doing wrong? Thanks.

El Tomato
  • 6,479
  • 6
  • 46
  • 75

0 Answers0