WatchOS 26下MKReverseGeocodingRequest报NSURLErrorDomain -1009错误求助
解决MKReverseGeocodingRequest在watchOS 26返回NSURLErrorDomain -1009错误的方法
错误码-1009提示网络不可达,但你的App其他网络请求正常,说明问题出在Apple地理编码服务的域名权限或专属配置上,而非设备基础网络。以下是具体排查和解决步骤:
1. 检查App Transport Security(ATS)配置
gsp-ssl.ls.apple.com是Apple地理编码服务的专属域名,需确保ATS未限制该域名的访问:
- 若你的App使用
NSAllowsArbitraryLoads,确认未单独对该域名设置禁止规则; - 若采用ATS严格模式,需在
Info.plist中将该域名加入白名单:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>gsp-ssl.ls.apple.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> </dict> </dict> </dict>
2. 验证Watch App的独立网络权限
如果你的Watch App是独立运行(不依赖iPhone):
- 打开Watch设备的「设置」→ 找到你的App → 确认「蜂窝网络」或「Wi-Fi」权限已开启;
- 若为与iPhone配对的App,同步检查iPhone端对应App的网络权限是否启用。
3. 确认位置参数有效性
检查你创建的CLLocation实例经纬度是否在合法范围(纬度±90,经度±180),无效的位置参数可能导致服务端拒绝请求,触发网络错误的误导性提示。
4. 测试区域网络兼容性
Apple地理编码服务在部分区域可能存在访问限制,尝试切换到其他网络环境(如更换Wi-Fi)测试,确认是否为区域网络问题。
5. 添加重试机制优化错误处理
偶尔的服务端波动也可能触发该错误,可添加简单重试逻辑:
if (@available(watchOS 26.0, *)) { MKReverseGeocodingRequest *r = [[MKReverseGeocodingRequest alloc] initWithLocation:[[CLLocation alloc] initWithLatitude:latitude longitude:longitude]]; __weak typeof(self) weakSelf = self; [r getMapItemsWithCompletionHandler:^(NSArray<MKMapItem *> * _Nullable mapItems, NSError * _Nullable error) { if (error != nil) { NSLog(@"Geocoding error: %@", error.description); // 间隔2秒重试一次 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [weakSelf retryGeocodingWithLatitude:latitude longitude:longitude]; }); } // 处理正常返回结果 }]; }
内容的提问来源于stack exchange,提问作者Andreas Garzotto
相关产品推荐
相关产品推荐

