美文网首页
iOS 17 URL 的变化

iOS 17 URL 的变化

作者: 游城十代2dai | 来源:发表于2024-02-19 11:11 被阅读0次

    0x00 背景

    在如以往一样写着代码, 发现了问题, 举个例子 let url = URL(string: "https://www.baidu.com?search=你好") , 按照 iOS17 之前没有编码的字符串是生成不了 url 的, 这里的 url == nil

    但是在 iOS17 遇到的问题是不一样了, 犹豫服务器数据没有注意这个, 客户端也没有写编码, 在 iOS17 Xcode15 写的时候并没有任何异样, 在测试手里的设备就出问题了

    0x01 问题在哪

    查阅了官网文档 https://developer.apple.com/documentation/foundation/url/3126806-init, 发现有个重要的提示

    Important
    For apps linked on or after iOS 17 and aligned OS versions, URL parsing has updated from the obsolete RFC 1738/1808 parsing to the same RFC 3986 parsing as URLComponents. This unifies the parsing behaviors of the URL and URLComponents APIs. Now, URL automatically percent- and IDNA-encodes invalid characters to help create a valid URL.

    根据这段提示知道了, 在 iOS 17 之前,URL 初始化时支持的是较久的 RFC 1738/1808 标准, iOS17 后全面支持 RFC 3986 标准

    0x02 RFC 是什么

    维基百科是这么定义和解释的

    RFC 是 Request for Comments 的首字母缩写,是互联网工程任务组 (IETF)的对于 URL 的规范出的文档,其中包含有关互联网和计算机网络相关主题(如路由、寻址和传输技术)的规范和组织说明。

    0x03 怎么兼容

    iOS 17 有一个 api public init?(string: String, encodingInvalidCharacters: Bool), 其中 encodingInvalidCharacters,这个参数代表是否 encoding 掉无效的字符,如果传 false,URL 的行为将会和 iOS 16 上一致。

    // iOS 16
    let url = URL(string: "https://www.baidu.com?search=你好") // => nil
    
    // iOS 17
    let url = URL(string: "https://www.baidu.com?search=你好", encodingInvalidCharacters: false) // => nil
    

    相关文章

      网友评论

          本文标题:iOS 17 URL 的变化

          本文链接:https://www.haomeiwen.com/subject/cpcvadtx.html