【iOS開發】canOpenURL:failedforURL
如圖是在我啟動一個 Xcode 7 + iOS 9 的 App 之後,控制檯的輸出。
這在 Xcode 6.4 + iOS 8 時,是不會有的情況,原因是【為了強制增強資料訪問安全, iOS9 預設會把所有從NSURLConnection
、 CFURL
、 NSURLSession
發出的 HTTP 請求,都改為 HTTPS 請求:iOS9.x-SDK編譯時,預設會讓所有從NSURLConnection
、 CFURL
、 NSURLSession
發出的 HTTP 請求統一採用 TLS 1.2(SSL 3.1) 協議。】
下面說解決方案:
①如果你的輸出資訊是-canOpenURL: failed for URL: “kindle://home” – error: “This app is not allowed to query for scheme kindle”
去你的 target 裡面的 Build Settings 下的 Enable Bitcode,把它設定成 NO,這不一定會阻擋你的控制檯繼續輸出這條資訊,但是可以保證你的 App 正常執行。
②如果你的輸出資訊是 xxxx – error: “This app is not allowed to query for scheme xxxx”
(在這裡因為我的 App 整合了分享到QQ、微信、微博的功能,xxxx部分我看到了 mqq、wechat、sinaweibosso 等多條資訊)
去 Info.plist 裡面建立一個叫 LSApplicationQueriesSchemes 的 Array,把你在xxxx部分看到的詞彙一個一個填進去,直至控制檯沒有任何相關輸出即可。
③關於其他通過 WebView 訪問 http 網址引發的控制檯報錯資訊
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如之前所說,Apple 希望我們訪問相對安全的 HTTPS,所以在你需要訪問 HTTP 時,
雖 Apple 不建議,但可通過在 Info.plist 中宣告如上圖所示的內容,倒退回不安全的網路請求,這樣依然能讓 App 訪問指定 HTTP,甚至任意的 HTTP。
相關文章
- iOS開發系列--IOS程式開發概覽iOS
- iOS 開發iOS
- iOS開發iOS
- 玩轉iOS開發:iOS中的GCD開發(一)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(三)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(二)iOSGC
- iOS開發:UIAlertViewiOSUIView
- iOS 開發薪水iOS
- iOS開發-沙箱iOS
- 【iOS開發】whoseviewisnotinthewindowhierarchyiOSView
- iOS開發-MVCiOSMVC
- iOS開發- RunLoopiOSOOP
- 【iOS開發】iOS 動畫詳解iOS動畫
- 玩轉iOS開發:iOS中的NSOperation開發(一)iOS
- 玩轉iOS開發:iOS中的NSOperation開發(二)iOS
- iOS 本地通知NSNotificationcenter --- iOS 開發iOS
- Flutter混合開發-iOSFlutteriOS
- iOS 開發加密做法iOS加密
- iOS藍芽開發iOS藍芽
- iOS 提高開發效率iOS
- iOS 開發之— NSURLProtocoliOSProtocol
- iOS開發小tipiOS
- ios遊戲開發iOS遊戲開發
- Mac iOS開發工具MaciOS
- iOS開發之WebViewiOSWebView
- iOS開發之GCDiOSGC
- iOS 開發小技巧iOS
- ios開發 ad hociOS
- iOS開發--泛型iOS泛型
- iOS開發-單例iOS單例
- iOS開發細節iOS
- iOS開發框架--MyLayoutiOS框架
- iOS開發框架--SDWebImageiOS框架Web
- iOS開發框架--QMUIKitiOS框架UI
- iOS開發-UIButtoniOSUI
- iOS開發-手勢iOS
- Flutter外掛開發《iOS原生模組開發》FlutteriOS
- iOS開發框架MVVM 1理解開發模式iOS框架MVVM模式