苹果在iOS14推出了使用Network.framework的EncryptedDNS方案。
例子代码中没有objc实现,所以码了一下。
加密DNS可解决各种DNS劫持导致的App无法连接、内嵌网页显示异常等问题,会用此方案将当前App内的所有DNS请求使用阿里云HTTPDNS免费版进行解析。
if (@available(iOS 14.0, *)) {
nw_privacy_context_t parameters = _nw_privacy_context_default_context;
nw_endpoint_t address1 = nw_endpoint_create_host("223.5.5.5", "443");
nw_endpoint_t address2 = nw_endpoint_create_host("223.6.6.6", "443");
nw_endpoint_t address3 = nw_endpoint_create_host("2400:3200::1", "443");
nw_endpoint_t address4 = nw_endpoint_create_host("2400:3200:baba::1", "443");
nw_resolver_config_t resolverConfig = nw_resolver_config_create_https(nw_endpoint_create_url("https://223.5.5.5/dns-query"));
nw_resolver_config_add_server_address(resolverConfig, address1);
nw_resolver_config_add_server_address(resolverConfig, address2);
nw_resolver_config_add_server_address(resolverConfig, address3);
nw_resolver_config_add_server_address(resolverConfig, address4);
nw_privacy_context_require_encrypted_name_resolution(parameters, true, resolverConfig);
}