我一直在尝试实现一个按钮,从其小部件中打开我的iOS应用。我意识到这个问题已经在论坛上被打死了,但是我找不到我收到的具体错误的解释。也许你们中有些经验丰富的iOS开发人员可以对此有所了解。
我正在使用XCode 8.1和Swift 2开发iOS 10 iOS应用程序的更新。
按下OpenApp按钮时收到的运行时错误:
AppWidget[11872:3577323] __55-[_NCWidgetExtensionContext openURL:completionHandler:]_block_invoke failed: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)"
//注意:应用名称已替换为相应的泛型。
答案 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
,+
,-
和.