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的主要内容,如果未能解决你的问题,请参考以下文章