iOS 17 URL 的變化

0x00 背景

在如以往一樣寫(xiě)著代碼, 發(fā)現(xiàn)了問(wèn)題, 舉個(gè)例子 let url = URL(string: "https://www.baidu.com?search=你好") , 按照 iOS17 之前沒(méi)有編碼的字符串是生成不了 url 的, 這里的 url == nil

但是在 iOS17 遇到的問(wèn)題是不一樣了, 猶豫服務(wù)器數(shù)據(jù)沒(méi)有注意這個(gè), 客戶端也沒(méi)有寫(xiě)編碼, 在 iOS17 Xcode15 寫(xiě)的時(shí)候并沒(méi)有任何異樣, 在測(cè)試手里的設(shè)備就出問(wèn)題了

0x01 問(wèn)題在哪

查閱了官網(wǎng)文檔 https://developer.apple.com/documentation/foundation/url/3126806-init, 發(fā)現(xiàn)有個(gè)重要的提示

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.

根據(jù)這段提示知道了, 在 iOS 17 之前,URL 初始化時(shí)支持的是較久的 RFC 1738/1808 標(biāo)準(zhǔn), iOS17 后全面支持 RFC 3986 標(biāo)準(zhǔn)

0x02 RFC 是什么

維基百科是這么定義和解釋的

RFC 是 Request for Comments 的首字母縮寫(xiě),是互聯(lián)網(wǎng)工程任務(wù)組 (IETF)的對(duì)于 URL 的規(guī)范出的文檔,其中包含有關(guān)互聯(lián)網(wǎng)和計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)主題(如路由、尋址和傳輸技術(shù))的規(guī)范和組織說(shuō)明胸囱。

0x03 怎么兼容

iOS 17 有一個(gè) api public init?(string: String, encodingInvalidCharacters: Bool), 其中 encodingInvalidCharacters,這個(gè)參數(shù)代表是否 encoding 掉無(wú)效的字符,如果傳 false混滔,URL 的行為將會(huì)和 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歹颓,一起剝皮案震驚了整個(gè)濱河市坯屿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍扛,老刑警劉巖领跛,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撤奸,居然都是意外死亡吠昭,警方通過(guò)查閱死者的電腦和手機(jī)喊括,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矢棚,“玉大人郑什,你說(shuō)我怎么就攤上這事∑牙撸” “怎么了蹦误?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肉津。 經(jīng)常有香客問(wèn)我强胰,道長(zhǎng),這世上最難降的妖魔是什么妹沙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任偶洋,我火速辦了婚禮,結(jié)果婚禮上距糖,老公的妹妹穿的比我還像新娘玄窝。我一直安慰自己,他們只是感情好悍引,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布恩脂。 她就那樣靜靜地躺著,像睡著了一般趣斤。 火紅的嫁衣襯著肌膚如雪俩块。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天浓领,我揣著相機(jī)與錄音玉凯,去河邊找鬼。 笑死联贩,一個(gè)胖子當(dāng)著我的面吹牛漫仆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泪幌,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盲厌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了祸泪?” 一聲冷哼從身側(cè)響起吗浩,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浴滴,沒(méi)想到半個(gè)月后拓萌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體岁钓,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡升略,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年微王,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品嚣。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炕倘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翰撑,到底是詐尸還是另有隱情罩旋,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布眶诈,位于F島的核電站涨醋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逝撬。R本人自食惡果不足惜浴骂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宪潮。 院中可真熱鬧溯警,春花似錦、人聲如沸狡相。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尽棕。三九已至喳挑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滔悉,已是汗流浹背蟀悦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氧敢,地道東北人日戈。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像孙乖,于是被迫代替她去往敵國(guó)和親浙炼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容