2016-11-05 97 views
5

我一直在試圖實現一個按鈕來從它的小部件打開我的iOS應用程序。我意識到這個問題已經在論壇上被打死了,但我無法找到與我收到的具體錯誤的解釋。也許你們中一些更有經驗的iOS開發人員可以對此有所瞭解。NSWidgetExtensionContext openURL Swift

我開發一個更新的iOS我的一個用於iOS系統10的應用程序使用的XCode 8.1和斯威夫特2

代碼爲我的小部件的按鈕: enter image description here

URL方案添加到窗口小部件的Info.plist : enter image description here

按下OpenApp按鈕時,收到的運行時錯誤:

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

//注意:應用名稱已被替換爲適當的泛型。

+0

您是否在應用程序設置中的「URL類型」中添加了「AppName」? – PGDev

+0

我已經完成了,如上面的info.plist屏幕截圖所示 – JRystedt

回答

5

我經常發現OS Status lookup網站非常有用,可以從錯誤中推斷出詳細信息。與代碼-10814操作系統錯誤是kLSApplicationNotFoundErr,它描述了當場景:

在發射服務數據庫中沒有應用相匹配的輸入標準。

聽起來好像您的應用程序尚未作爲您所使用的URL方案的使用者在系統中正確註冊。你有兩倍(雙重!)檢查包標識符和URL方案是否匹配?您是否已驗證您的應用是否可以使用Safari的URL啓動?

2

從今天擴展打開包含應用程序:

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如何打開應用程序或共享用戶默認值機智h Extension和包含的應用程序。

2

URL方案應該添加到主應用的info.plist中,而不是widget的。