2017-09-27 189 views
5

的Bug蘋果手錶製作URLSession請求時:「互聯網連接似乎已離線」使用LTE

我一直收到錯誤代碼-1009「的互聯網連接顯示爲脫機狀態。」在Apple Watch Series 3上Apple Watch擴展程序中的URLSession請求僅在通過LTE連接到Internet時發生錯誤。

重現步驟:

  1. 安裝應用程序。
  2. 配置您的設備,使其僅在LTE上。
  3. 使用iMessages驗證您與LTE的連接,例如,
  4. 啓動應用程序。
  5. 使用.default或.ephemeral會話配置初始化URLSession。
  6. 爲任何已知良好的https網址發出數據任務請求。

預期的行爲:

請求設法到達目的地。

觀測到的行爲:

請求,錯誤代碼-1009立即失敗「的互聯網連接顯示爲脫機狀態。」

代碼示例:

let config = URLSessionConfiguration.ephemeral 
let sesh = URLSession(configuration: config) 
let url = URL(string: "https://google.com")! 
sesh.dataTask(with: request) { (_, _, error) in 
    print(error) 
}.resume() 

回答

5

NOPE:請參閱更新#3下:的關鍵缺少的元素:你必須設置waitsForConnectivity標誌上的會話配置true

let config = URLSessionConfiguration.ephemeral 
config.waitsForConnectivity = true 
let sesh = URLSession(configuration: config) 
let url = URL(string: "https://google.com")! 
sesh.dataTask(with: request) { (_, _, error) in 
    print(error) 
}.resume() 

如果您沒有設置該標誌,請求會立即失敗,因爲LTE訪問不可即時提供,而只能在最短的延遲後才能使用。將此標誌設置爲true將使請求生效。在我的測試中,在啓用LTE上的waitsForConnectivity和發出相同的請求而不是啓用waitsForConnectivity但通過WiFi進行傳輸之間的時間似乎沒有明顯的差異,這幾乎與在某些情況下由waitsForConnectivity啓用的等待時間是下一回合這種運行環境的情況。

更新#1

我無法作出了LTE的任何請求。當waitsForConnectivity設置爲true時,請求僅根據會話配置的超時屬性超時。當waitsForConnectivityfalse時,請求立即失敗。當我有更多信息時,我會更新我的問題和答案。我正在等待通常需要幾天的Apple TSI請求的響應。

更新#2

添加到謎,在同一樣品的代碼運行在蜂窩上的其他兩個開發的硬件細。我知道,我的硬件是好的,因爲蘋果的應用程序的樂趣很好,通過LTE(電話呼叫在汽車裏除了我的手錶之外沒有任何東西)。所以有一些真正可怕的事情發生。我已經請Apple DTS研究這個問題,他們也不能重現這個問題。我會盡快跟進他們。

更新#3

有時在中間星期後,我最後更新這個帖子,蜂窩請求開始在我的應用程序工作。我沒有改變我的手錶,沒有軟件更新,沒有重置,什麼都沒有。我甚至沒有重新編譯代碼;與之前相同的版本仍然在我的手錶上。它只是像預期的那樣開始工作,就像它在其他開發者的設備上一樣。

我唯一注意到的是我從AT &得到了三個背靠背的相同的SMS消息,通知我我的Apple Watch現在已鏈接到我的iPhone號碼。這很奇怪,因爲這種聯繫可能發生在我拆箱的那個晚上,而不是兩個月後。我不知道這是否與我的問題有關。我所知道的是,蜂窩式請求正在工作。

¯\ _(ツ)_ /¯