iOS 9将使用IPv6 6专用网络.为了支持IPv6,我的iOS应用程序必须停止使用AF_INET (以及其他许多apis,如structin_addr),而必须使用AF_INET6。
但是它也应该支持iOS 8和更早版本,所以我必须继续使用AF_INET。问题是如何知道系统使用的是哪个网络,IPv6还是IPv4?因此,我可以根据不同的网络环境使用不同的apis。
发布于 2016-08-27 07:26:59
应用程序是在IPv6网络上进行审查的。请确保您的应用程序支持IPv6网络,因为需要IPv6兼容性。
我在AFNetworking类库中使用了这段代码,现在它运行得很好,我的应用程序得到了苹果的批准:)
+ (instancetype)sharedManager {
static AFNetworkReachabilityManager *_sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
struct sockaddr_in6 address;
bzero(&address, sizeof(address));
address.sin6_len = sizeof(address);
address.sin6_family = AF_INET6;
#else
struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
#endif
_sharedManager = [self managerForAddress:&address];
});
return _sharedManager;
}https://stackoverflow.com/questions/34450362
复制相似问题