【问题标题】:GCDWebServer: Unable to open home page when using real iPhoneGCDWebServer:使用真 iPhone 时无法打开主页
【发布时间】:2020-12-09 06:54:25
【问题描述】:

我有一个使用 GCDWebServer 的 GCDWebUploader 将文件上传到应用程序的旧应用程序。我将实现代码复制到一个新项目中。

问题:在这个新项目中,GCDWebServer的主页在iOS模拟器中可以打开,但在真iPhone中无法连接。

环境: Xcode 12.2,iOS 14 可可豆荚

这很奇怪,因为我已经有了一个可以工作的应用程序。所以我做了一些检查:

  • 首先,旧应用程序可以运行。表示可以打开主页。
  • 所有设备都在同一个 wifi 下。
  • 尝试在浏览器中打开http://192.168.1.5/http://192.168.1.5:80,safari 提示“无法打开页面,因为服务器没有响应”,但我可以在终端中成功ping 192.168.1.5
  • 重启我的 iPhone
  • 比较两个项目之间的 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()
    }
}

【问题讨论】:

  • 是的,一切就绪。

标签: ios swift cocoapods gcdwebserver


【解决方案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 did not search with error -72008 on iOS 14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多