NSWidgetExtensionContext openURL Swift

时间:2016-11-05 15:49:19

标签: ios swift widget openurl

我一直在尝试实现一个按钮,从其小部件中打开我的iOS应用。我意识到这个问题已经在论坛上被打死了,但是我找不到我收到的具体错误的解释。也许你们中有些经验丰富的iOS开发人员可以对此有所了解。

我正在使用XCode 8.1和Swift 2开发iOS 10 iOS应用程序的更新。

我的小部件按钮的代码: enter image description here

添加到小部件的info.plist中的URL方案: enter image description here

按下OpenApp按钮时收到的运行时错误:

AppWidget[11872:3577323] __55-[_NCWidgetExtensionContext openURL:completionHandler:]_block_invoke failed: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)"

//注意:应用名称已替换为相应的泛型。

4 个答案:

答案 0 :(得分:6)

我经常发现OS Status lookup网站对于从错误中推断细节非常有用。代码-10814的操作系统错误是kLSApplicationNotFoundErr,它描述了以下情况:

  

Launch Services数据库中的任何应用程序都不符合输入条件。

听起来您的应用程序尚未作为您正在使用的URL方案的使用者在系统中正确注册。你有两倍(双倍!)检查捆绑标识符和URL方案是否匹配?您是否确认可以使用Safari中的网址启动您的应用?

答案 1 :(得分:4)

从Todays Extension中打开Containing App:

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如何打开应用或分享带扩展程序的用户默认值和包含应用的内容。

答案 2 :(得分:4)

URL方案应添加到主应用程序的info.plist中,而不是小部件的。

答案 3 :(得分:0)

此外,您还应该检查您的URL方案是否使用了不允许的字符。 也许不是您的情况,但我正在使用它,这是错误的:

my_AppName

相反,这终于奏效了:)

myAppName

here所述,该方案必须以字母数字字符开头,并且只能包含alphanumeric characters+-.