所以我让它工作,然后我调整了一些东西:doc controller - subslassed as
class DocumentController : NSDocumentController {
override func typeForContents(of url: URL) throws -> String {
return "Document"
}
}
以及用于解析.webloc文件的URL帮助程序:
extension URL {
var webloc : URL? {
get {
do {
let data = try Data.init(contentsOf: self) as Data
let dict = try! PropertyListSerialization.propertyList(from:data, options: [], format: nil) as! [String:Any]
let urlString = dict["URL"] as! String
return URL.init(string: urlString)
}
catch
{
return nil
}
}
}
}
当我在测试应用程序时丢失了Finder菜单“open with”条目,同时分析了一个open vs make file doc问题 - 见下文。我有一个app delegate openFile:as
func application(_ sender: NSApplication, openFile: String) -> Bool {
let urlString = (openFile.hasPrefix("file://") ? openFile : "file://" + openFile)
let fileURL = URL(string: urlString.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!
return self.doOpenFile(fileURL: fileURL)
}
func doOpenFile(fileURL: URL) -> Bool {
let dc = NSDocumentController.shared()
var status : Bool = false
var itemURL = fileURL
// Resolve alias, container webloc bookmark before target bookmarking
if let original = (itemURL as NSURL).resolvedFinderAlias() { itemURL = original }
if itemURL.absoluteString.hasSuffix("webloc") {
if isSandboxed() != storeBookmark(url: itemURL as URL) {
Swift.print("Yoink, unable to bookmark (\(itemURL))")
}
if let webURL = itemURL.webloc {
itemURL = webURL
}
}
else
{
if isSandboxed() != storeBookmark(url: itemURL as URL) {
Swift.print("Yoink, unable to bookmark (\(itemURL))")
return false
}
}
dc.openDocument(withContentsOf: itemURL, display: true, completionHandler: { (nextURL, wasOpen, error) in
if error != nil {
NSApp.presentError(error!)
Swift.print("Yoink, unable to open doc for (\(String(describing: nextURL)))")
status = false
}
else
{
let newWindow = nextURL?.windowControllers.first?.window
(newWindow?.contentView?.subviews.first as! MyWebView).next(url: itemURL)
newWindow?.offsetFromKeyWindow()
status = true
}
})
return status
}
我的视图控制器出现了错误(presentError :),因为我试图打开一个'webloc'网址,而不是为它创建一个doc - 微妙的distintction?
无论如何现在我的菜单条目在Finder中消失了,所以我正在寻找一个清单来验证我[仍然]设置正确,我的应用程序的单个文档Info.plist显示为(相关的文档) :
我什么时候失踪!这项工作使用其他人:解析Finder alias,沙箱支持和webloc内容解析。
我试图解决一个问题,搜索字符串编码的文件名 - webloc,当我进行“某些”更改时丢失了Finder的“打开方式”条目时,我的-URL.webloc()函数无法解析应用
为了我和其他人的利益,我们需要一个检查清单(配方)来运行。这个应用程序是一个测试迷你浏览器,使用WKWebView和下一个(url :)函数来加载下一个URL。
答案 0 :(得分:0)
Info.plist损坏 - 请将Info.plist检查为源代码,如下所示
这些发布服务令牌,即LSItemContentTypes
对我来说是新的,虽然我没有意识到我什么时候这样做,但我立刻知道这不是我过去做过的事情。
对于记录,让您的应用“注册”是Launch Services中定义的隐含行为。如其中所述,除了正确设置Info.plist外,您不需要做任何明确的事情。
我的问题是将几种不同的文件类型扩展名注册为单独的文档类型 - 非启动器,而我所需要的只是将所有可查看类型归为一种文档类型,这种“胖手指”可能发生在疯狂冲破以纠正看起来很糟糕的事情。您的需求可能会有所不同:多种文档类型。