日本語ドメインのURLが生成できない!
iOS16以下(Swift5.9未満)は、日本語ドメインURLをURL(string:)
に突っ込むとnilになっていました
ドメイン以外も、パラメータに日本語や特殊文字が含まれるような場合はnilになります
let url = URL(string: "https://日本語.jp")
// nil
let urlWithParam = URL(string: "https://日本語.jp?param=日本語&emoji=😃")
// nil
これに対応するにはpunycode対応したり、パーセントエンコードしたり、色々ツラミがありました
iOS16以下でもURLComponentsを使うとよしなにしてくれる
どのバージョン以上で対応されているかはわかりませんが、iOS16以下でもString -> URLの変換にURLComponents
を挟むといい感じにしてくれます
let url = URLComponents(string: "https://日本語.jp")?.url
// Optional(https://xn--wgv71a119e.jp)
let urlWithParam = URLComponents(string: "https://日本語.jp?param=日本語&emoji=😃")?.url
// Optional(https://xn--wgv71a119e.jp?param=%E6%97%A5%E6%9C%AC%E8%AA%9E&emoji=%F0%9F%98%83)
iOS17からは対応されたぞ!
iOS17からは文字列を突っ込むだけでいい感じにしてくれるようになりました !!!
let url = URL(string: "https://日本語.jp")
// Optional(https://xn--wgv71a119e.jp)
let urlWithParam = URL(string: "https://日本語.jp?param=日本語&emoji=😃")
// Optional(https://xn--wgv71a119e.jp?param=%E6%97%A5%E6%9C%AC%E8%AA%9E&emoji=%F0%9F%98%83)