GCDWebServer: невозможно открыть домашнюю страницу при использовании настоящего iPhone

У меня есть старое приложение, использующее GCDWebUploader из GCDWebServer для загрузки файлов в приложение. И копирую код реализации в новый проект.

Проблема: в этом новом проекте домашняя страница GCDWebServer может быть открыта в симуляторе iOS, но не может подключиться в реальном iPhone.

Среда: Xcode 12.2, iOS 14 CocoaPods

Это странно, так как у меня уже есть работающее приложение. Итак, я сделал несколько проверок:

  • во-первых, старое приложение работает. Означает, что домашняя страница может быть открыта.
  • все устройства находятся под одним Wi-Fi.
  • попробуйте открыть http://192.168.1.5/ или http://192.168.1.5:80 в браузере, сафари сказал, что невозможно открыть страницу, потому что сервер не отвечает, однако я смог успешно пропинговать 192.168.1.5 в терминале.
  • перезагрузить мой айфон
  • сравнить info.plist между двумя проектами

Безрезультатно! Не могли бы вы, ребята, посоветовать, что я пропустил, может быть, какую-то конфигурацию в Xcode, чтобы разрешить HTTP-связь или какие-то возможности для включения?

Что в консоли:

[DEBUG] Did open IPv4 listening socket 3
[DEBUG] Did open IPv6 listening socket 4
[INFO] GCDWebUploader started on port 80 and reachable at http://192.168.1.5/
Visit http://192.168.1.5/ in your web browser

Код:

import GCDWebServer
import Foundation

class MyWebUploader {
    // move webuploader to outside of init func to fix app crash issue.
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    lazy var webUploader = GCDWebUploader(uploadDirectory: self.documentsPath)
    
    func initWebUploader() -> String {
        var ipAddress = String()
        
        webUploader.start()
        webUploader.allowedFileExtensions = ["mp3", "aac", "m4a", "wav"]
        if webUploader.serverURL != nil {
            // retrieve IP address from URL
            let str = webUploader.serverURL!.absoluteString
            let start = str.index(str.startIndex, offsetBy: 7)
            let end = str.index(str.endIndex, offsetBy: -1)
            let range = start..<end
            let mySubstring = str[range]
            ipAddress = String(mySubstring)
            print("Visit \(webUploader.serverURL!) in your web browser")
        } else {
            ipAddress = "No Wifi connected"
        }
        return ipAddress
    }
    
    func stopWebUploader() {
        webUploader.stop()
    }
}

person ChuckZHB    schedule 09.12.2020    source источник
comment
Да, это все установлено.   -  person ChuckZHB    schedule 09.12.2020


Ответы (1)


Эта проблема вызвана новым разрешением в iOS 14 to find and connect to devices on your local network.

Чтобы исправить это, нам нужно добавить следующую информацию в info.plist

    <key>NSLocalNetworkUsageDescription</key>
    <string>Reason for using Bonjour that the user can understand</string>
    <key>NSBonjourServices</key>
    <array>
        <string>_http._tcp</string>
        <string>_http._udp</string>
    </array>

Дополнительные сведения см. в разделе NSNetServiceBrowser не выполнил поиск с ошибкой -72008 на iOS 14

person ChuckZHB    schedule 14.12.2020