最近需要在APP中加入WiFi相关的功能,之前没有做过,比较迷茫!这个框架是iOS9 以后才出来的,国内有APP用的,但是开发的资料很少!自己在网上找了很多零散的资料,然后写了一个demo,下面把自己的写的过程分享给大家,希望可以对你有所帮助,也请大神支出不足之处:
这个框架的使用大致分为这几个步骤
- 向苹果申请使用权限
- 配置证书文件
- 配置工程
- 代码实现
向苹果申请框架的使用权限
- 上这个网站去填写一个申请表。
- 申请的周期比较长最少是两周,甚至更长时间。我在第一次申请的时候就用了两个月的时间。
- 在填写申请表的时候尽量使用英文去填写,那样申请陈宫的概率会比较大的
- 这个是申请的网址NetworkExtension框架使用权限申请
- 如果申请成功了会收到一个内容这样的邮件
证书文件配置
等待收到申请成功后。就可以着手下面的工作了,开始配置证书和配置文件,我建议在获得这个框架的使用权限以后从新申请一个证书来调试,我的就是把原来旧的证书删除以后才调试成功的!
- 下面就是配置证书的步骤
- 证书添加完成后配置identifiers文件
- 在配置identifiers文件的时候注意要勾选上我图片上箭头标注的两个选项
- 接下来配置iCloud文件
- Identifiers的时候要和你的工程的bundle ID 是一样的
- 这里配置完成后,再点开刚才生成的APP IDs,这个时候,iCloud那一行的两个点会显示黄色的 ,然后找到到edit,点击进去
- 然后配置你刚才生成的iCloud文件
-
这样ID文件就配置完成了
-
接下来就是配置profile文件了
- 这里选择你刚才配置好的APP IDs
- 选择刚才刚刚生成的证书
- 选择调试设备
- 如果你申请框架使用权限成功了,那么最后一步就会有这个选项,选择下面那个!
OK!到这个地方,证书配置完成了!接下来就是配置自己的工程了
工程配置
- 首先打开工程,啥东西都不要动!按照下面的图片里面的内容进行工程配置
- 这个地方很重要,不能整错了
- 配置info.plist文件
OK!这就是工程里面需要配置的地方
代码实现
- 直接把下面的代码复制到工程里面不出问题就可以看到控制台输出WiFi列表信息了,(工程运行后要打开系统的WiFi设置界面才有WiFi信息输出):
// // ViewController.m // Wifi // // Created by Jone Yin on 16/9/22. // Copyright © 2016年 Jone Yin. All rights reserved. // #import "ViewController.h" #import <NetworkExtension/NetworkExtension.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSMutableDictionary* options = [[NSMutableDictionary alloc] init]; [options setObject:@"" forKey:kNEHotspotHelperOptionDisplayName]; dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", NULL); BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) { NEHotspotNetwork* network; NSLog(@"COMMAND TYPE: %ld", (long)cmd.commandType); [cmd createResponse:kNEHotspotHelperResultAuthenticationRequired]; if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) { NSLog(@"WIFILIST: %@", cmd.networkList); for (network in cmd.networkList) { NSLog(@"COMMAND TYPE After: %ld", (long)cmd.commandType); if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"roam2free_dev_5G"]) { double signalStrength = network.signalStrength; NSLog(@"Signal Strength: %f", signalStrength); [network setConfidence:kNEHotspotHelperConfidenceHigh]; [network setPassword:@"roam2free_deVelop"]; NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess]; NSLog(@"Response CMD %@", response); [response setNetworkList:@[network]]; [response setNetwork:network]; [response deliver]; } } } }]; NSLog(@"result :%d", returnType); NSArray *array = [NEHotspotHelper supportedNetworkInterfaces]; NSLog(@"wifiArray:%@", array); NEHotspotNetwork *connectedNetwork = [array lastObject]; NSLog(@"supported Network Interface: %@", connectedNetwork); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
联系方式
- 有什么指正可以加入这个群 585640621,大家一起讨论!