iOS 12开发ssid获取失败 xcode 10 beta
一年一度的苹果春季发布会已经过去一段时间了,xcode的beta版本以及iOS12版本也发布很久了,为了体验下iOS 12也顺手把一部公司测试机升级了iOS12,随之而来的就是升级xcode beta10。
总体的感觉就是xcode beta10版本变化不大,由于beta版本使用时间比较少,发现的bug也只有那么几处,毕竟公司的项目还是稳定为主,主力还是xcode9.4.1。
真机调试的时候就出现了问题,iOS12必须要使用xcode beta10真机运行, 但是试用期间发现了一个不能忍受的bug。由于工作的特殊性,现在工作大部分都是和智能音响、智能家居交互。用户拿到智能设备第一件事情肯定就是需要配置网络环境,连接wifi路由器,这个时候就凸显出我工作的重要性了,虽然说在智能设备中手机APP只是辅助作用,但是少了我们这一环用户的体验就会差了很多,这个时候就该我们上了。
但是、但是、当我在xcode beta 10版本上运行我们的项目是出现了比较尴尬的事情,使用的手机设备是iOS12 beta5版本,开发环境使用的是xcode 10 beta版本, 当我电脑链接手机真机测试的时候出现了问题,在获取当前设备链接WiFi ssid的时候出现了一个有趣的现象,之前在iOS11上很稳定的获得ssid居然获取不到了。当时很疑惑,获取当前wifi ssid从iOS4时候开始支持,到iOS11已经经历了七代的更迭,难道在这一代也要和获取wifi列表一样必须通过给苹果发邮件获得权限的形式一样吗?于是在网上看了很多相关的资料,也从苹果的官方文档里找一些相关东西,经历了一个下午仔细调研,发现很多智能设备厂商的iOS开发工程师也遇到了类似的问题,但是始终没有切实的解决方案,查询苹果官方文档也没有找到蛛丝马迹。
于是分析得出两个可能性:
第一种可能这个情况属于xcode 10 beta版本的一个bug,在新的版本中或者正式版本可能会修复
第二种可能就是在iOS12种可能会收紧这项权限,以后想获取当前设备ssid这样的权限,也是需要写邮件申请获取相应的权限的。
其实个人更加希望这个是属于第一个。毕竟发邮件给苹果申请不是每个公司一次申请就可以通过的,往往这样的东西会经历很多次的申请递交很多的资料才可以通过。
但是问题不解决总觉得不合适,于是给苹果开发者发去了一封邮件询问这个情况,苹果给我的回复如下:
邮件显示的大概意思就是对于beta版本不提供支持。事已至此只能是自己想一下办法了。
但是靠着这几年iOS开发经验依然感觉这可能是xcode beta版本的一个bug,由此继续对自己的代码仔细检查,发现并没有什么问题,在iOS4开始获取ssid方法就已经有很多人使用,随便逛一个搜索引擎都可以搜索到相关的代码。大体代码如下:
通过对代码分析发现并没有什么不妥之处#import <SystemConfiguration/CaptiveNetwork.h>
- (NSString*)currentWifiSSID {
// Does not work on the simulator.
NSString*ssid =nil;
NSArray *ifs = (__bridge_transferid)CNCopySupportedInterfaces();
for(NSString*ifnam in ifs) {
NSDictionary*info = (__bridge_transferid)CNCopyCurrentNetworkInfo((__bridgeCFStringRef)ifnam);
if(info[@"SSID"]) {
ssid = info[@"SSID"];
}
}
returnssid;
}
于是乎想看看下这具体是不是xcode的问题,想着彻底将xcode beta版本和iOS12 beta分开
在xcode9.4.1版本下,打包了我的项目,并且上传了蒲公英,通过蒲公英安装,不通过xcode 10 beta版本打包,直接绕开了xcode 10 beta版本,实际测试发现用xcode 9.4.1版本打好的包,在iOS12 beta 设备上成功获取到了ssid 。但是猜想这会不会是蒲公英有什么加持?于是下载了pp手机助手mac版,通过pp手机助手安装,并且发现通过这个方式依然是可以获取ssid。
由此分析这个应该是xcode 10 beta版本的一个bug,可能是由于xcode beta版本有些功能还处于不稳定阶段,难免出现类似的bug。
由此暂时告一段落,ssid获取不到的这个bug也希望可以通过xcode 10 正式版得到修复。