NSWidgetExtensionContext openURL Swift
Posted
技术标签:
【中文标题】NSWidgetExtensionContext openURL Swift【英文标题】: 【发布时间】:2017-03-19 07:41:10 【问题描述】:我一直在尝试实现一个按钮来从它的小部件打开我的 ios 应用程序。我意识到这个问题在论坛上已经被打死了,但我找不到我收到的具体错误的解释。也许你们中一些更有经验的 iOS 开发人员可以对此有所了解。
我正在使用 XCode 8.1 和 Swift 2 为我的一个 iOS 10 应用程序开发更新。
我的小部件按钮的代码:
添加到小部件的 info.plist 的 URL 方案:
按下 OpenApp 按钮时收到的运行时错误:
AppWidget[11872:3577323] __55-[_NCWidgetExtensionContext openURL:completionHandler:]_block_invoke failed: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)"
// 注意:应用名称已替换为适当的泛型。
【问题讨论】:
您是否在应用设置中的 URL 类型中添加了“AppName”? 我已经这样做了,如上面的 info.plist 截图所示 您找到解决问题的方法了吗?我还注册了我的 url-scheme,我的扩展程序正在尝试打开我的应用程序,但我只在控制台中看到[_NCWidgetExtensionContext openURL:completionHandler:]_block_invoke failed: Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"
。也许是同一个问题?!?
【参考方案1】:
我经常发现OS Status lookup 站点对于从错误中推断细节非常有用。代码为-10814
的操作系统错误是kLSApplicationNotFoundErr
,它描述了以下情况:
Launch Services 数据库中没有任何应用程序符合输入条件。
听起来您的应用程序尚未在系统中正确注册为您正在使用的 URL 方案的使用者。您是否双倍(双倍!)检查捆绑标识符和 URL 方案是否匹配?您是否验证过可以使用 Safari 中的 URL 启动您的应用程序?
【讨论】:
我在这里遇到了与本文作者相同的错误。我仔细检查了我的 bundle_identifier 和 url 方案以及所有内容...仍然...我收到 -50 错误(从您发布的链接中找不到合适的错误:()您对我还有其他想法吗? "double-double (double!) 检查包标识符和 URL 方案是否匹配" (c)【参考方案2】:从 Todays Extension 打开包含的应用程序:
let myAppUrl = URL(string: "main-screen:")!
extensionContext?.open(myAppUrl, completionHandler: (success) in
if (!success)
print("error: failed to open app from Today Extension")
)
您还需要将以下行添加到应用程序的 info.plist(作为源代码打开):
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.mikitamanko.bubblewrap</string>
<key>CFBundleURLSchemes</key>
<array>
<string>main-screen</string>
</array>
</dict>
</array>
紧接着
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
这里是complete guide 如何打开应用程序或与扩展程序和包含的应用程序共享用户默认值。
【讨论】:
【参考方案3】:URL 方案应添加到主应用的 info.plist,而不是小部件的。
【讨论】:
【参考方案4】:您还应该检查您的 url 方案中是否使用了任何不允许的字符。 也许这不是你的情况,但我正在使用它并且它是错误的:
my_AppName
这终于奏效了:)
myAppName
如here所说,方案必须以字母数字字符开头,并且只能包含alphanumeric characters
、+
、-
和.
【讨论】:
以上是关于NSWidgetExtensionContext openURL Swift的主要内容,如果未能解决你的问题,请参考以下文章