gpt4 book ai didi

swift - 在 macOS 应用程序中支持 URL 方案

转载 作者:行者123 更新时间:2023-12-05 06:52:53 25 4
gpt4 key购买 nike

关于这个主题有几个(旧的)问题,但没有一个解决方案对我有用,所以这里是问题:如何添加 URL 方案,以便可以通过浏览器打开我的应用程序?

我做了以下事情:

  1. 将所需信息添加到 info.plist:

enter image description here

  1. 我添加了那些功能:
func applicationWillFinishLaunching(_ notification: Notification) {
NSAppleEventManager.shared().setEventHandler(self, andSelector: #selector(handleEvent(_:with:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
}

@objc func handleEvent(_ event: NSAppleEventDescriptor, with replyEvent: NSAppleEventDescriptor) {
NSLog("at handleEvent")
}
  1. 我也试过添加这个功能:
func application(_ application: NSApplication, open urls: [URL]) {
for url in urls {
NSLog("url:\(url)")
}
}

以上均无效。我有一个使用 MyAppLogin://test 重定向的网页,但没有任何反应。应用程序是打开还是关闭并不重要(我希望它在这两种情况下都能正常工作)

知道这里有什么问题吗?

编辑:另外两个细节:

  1. 该应用是沙盒
  2. 我通过 Xcode 运行它(因此安装不在“应用程序”文件夹中)

最佳答案

一年后,我是这样工作的:

  1. 将此添加到您的 AppDelegate:
func applicationWillFinishLaunching(_ notification: Notification) {
let appleEventManager: NSAppleEventManager = NSAppleEventManager.shared()
appleEventManager.setEventHandler(self, andSelector: #selector(handleGetURLEvent(_:withReplyEvent:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
}
  1. 添加这个,解析 URL 并做任何你想做的事:
@objc func handleGetURLEvent(_ event: NSAppleEventDescriptor, withReplyEvent: NSAppleEventDescriptor) {
if let urlString = event.forKeyword(AEKeyword(keyDirectObject))?.stringValue {
let url = URL(string: urlString)
guard url != nil, let scheme = url!.scheme else {
//some error
return
}
if scheme.caseInsensitiveCompare("yourSchemeUrl") == .orderedSame {
//your code
}
}
}

关于swift - 在 macOS 应用程序中支持 URL 方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65890597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com