Xcode 7.0.1 / Swift 2.0 代碼:
var url = NSURL(string: "https://www.baidu.com")!
webview.loadRequest(NSURLRequest(URL: url))
// 無報錯,但頁面空白
iOS 9+ 默認**強制 HTTPS** 且要求 TLS 1.2+、前向保密。若服務器不符合要求(或加載 HTTP),系統網絡層直接阻斷,WebView 不報錯只顯示空白。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/> <!-- 允許任意負載(開發/舊項目臨時用) -->
<!-- 生產環境建議精確域名例外 -->
<key>NSExceptionDomains</key>
<dict>
<key>baidu.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
| 設置 | 適用場景 | 安全性 |
|---|---|---|
NSAllowsArbitraryLoads = YES | 開發調試、臨時兼容、舊項目 | 低,App Store 審核需說明理由 |
NSExceptionDomains 精確域名 | 生產環境、已知安全域名 | 高,符合 ATS 原則 |
| 完全符合 ATS(HTTPS+TLS1.2+) | 新項目、標準合規 | 最高,無需例外 |
Info.plist 後 **Clean Build Folder (Shift+Cmd+K)** 重新構建。NSURLSession 委托方法 didReceiveChallenge 是否攔截。import WebKit
let webView = WKWebView()
if let url = URL(string: "https://www.baidu.com") {
webView.load(URLRequest(url: url))
}
// 同樣受 ATS 管控,需同樣配置 Info.plist
核心提示:**iOS 9+ 網絡請求默認走 ATS,WebView/NSURLSession/WKWebView 同樣受限**,Info.plist 配置例外是標準解法。