对于我正在开发的Mac应用程序,我想使用一个URL方案,所以我设置了这样的方案:
NSAppleEventManager.shared().setEventHandler(
self,
andSelector: #selector(handleUrlEvent(_:with:)),
forEventClass: AEEventClass(kInternetEventClass),
andEventID: AEEventID(kAEGetURL))我有一个像这样注册的管理人员:
@objc
func handleUrlEvent(_ event: NSAppleEventDescriptor, with replyEvent: NSAppleEventDescriptor) {
log.verbose("handleUrlEvent")
}我的URL方案已在我的Info.plist中注册
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
<string>Look for photo</string>
<key>CFBundleURLSchemes</key>
<array>
<string>gisync</string>
</array>
</dict>
</array>问题是,当我使用Xcode运行我的应用程序时,URL方案没有注册,应用程序也没有得到我需要的事件。
当我从那里存档并启动我的应用程序时,方案是注册的,应用程序得到通知。因此,它可以正常工作,但我失去了调试功能。
编辑:发行版构建确实能以某种方式工作,因此对于发行版和调试来说,这似乎是不同的。
发布于 2018-11-03 20:40:26
尝试使用启动服务显式注册应用程序:LSRegisterURL
该函数将指定的应用程序及其文档和URL声明(如果有的话)添加到Launch数据库中,使应用程序成为文档和URL绑定的候选对象。
我会在applicationDidFinishLaunching中这样做,并且只在调试版本中使用条件编译。
另外,应用程序包的版本号也有影响:URL的首选应用程序
如果已找到同一应用程序的两个或多个版本,请优先选择具有最新版本号的版本。
https://stackoverflow.com/questions/53129883
复制相似问题