赢得系统wifi列表

前言: iOS 9
发表之后,推出NetworkExtension, 它可给系统WiFi列表列表里边的WiFi设置密码
、标签(副标题)。 还可取得整个WiFi列表。
率先你得向苹果申请二个权力,人家同意你利用了,你再在工程里面配备一下,那样您才得以使用.苹果会给您发个问卷调查,依据你协调的状态填写.那儿多谢笔者初级中学学霸,专业的乌克兰语翻译果然6.
1-1.框架申请链接:https://developer.apple.com/contact/network-extension

问卷调查表

基于自身的其真实情境况填写.里面有个产品介绍,最好找个英文好的…

1-2 调查表填写实现后,大概过了2
,3小时,苹果会回复给您一封邮件,并且重返给您2个fllowup.(注意,那并不是代表你曾经提请成功了,邮件里面只是承认你填写的问卷新闻!)

并不是马到成功的邮件.png

1-3
接下去,就不得不等了.逛苹果论坛,据他们说要等三礼拜,但是,笔者TM等了5星期是怎么鬼.所以当跨越Samsung期的时候小编也没闲着,打电话
:4006701855 , 就算获得的复原照旧等…
还要,值得一提的是:有人遭受过那种情状,向来未曾收取苹果拒绝或许同意的邮件.不过足以利用那几个类.所以当跨越3星期今后,作者是每一天都登录到开发者账号
配置描述文件,假使发现此时多了七个选项.如下图,那也表明您报名成功了

布置描述文件

1-5 所以呢,打了三次电话,重发了5 ,玖回邮件之后,大致苹果也以为倒霉意思了吧,终于通过了.此时您会接到这也一封邮件:

透过邮件.png

恭喜你,通过了.但是只可以说,那只成功了一小半.后头你恐怕遇见更悲哀的事情.

2上边就来的话更优伤的事情.
2-1 配置工程
a .新建二个App ID.

新建 App ID

b. 添加iCloud 和Wireless Accessory

添加iCloud 和Wireless Accessory.png

c.新建iCloud Containers

新建iCloud Containers.png

d.打开刚刚创立的App ID 发现那个是铅色的,上面就要编写制定那么些App ID

编写刚刚创制的AppID.png

e

17407914-2B9F-42D2-9E21-7EBF50DF0FEC.png

f

ABD85AAF-04C8-4FDD-B6E5-005D188980ED.png

g 配置App ID完成

2DEACBF8-CB87-4CB0-A6B1-2E092DAD4369.png

2-2 安顿描述文件 .

专注选拔新建的App ID

注意那些值要加上.png

布置好这几个现在,能够到苹果提供的检查和测试条件检查和测试一下计划文件的不易
屈居网址
:https://forums.developer.apple.com/message/75928\#75928

这一步很重点:正是检查和测试你的工程布署的描述文件和这几个账号使用权力是不是对等.后面有同伴境遇多少个bug正是ruternType平昔重回NO,获取不到wifi列表,然后经过上边表明发现,证书的权力和报名采用的权柄分歧.
由此此时有个建议,如若发现赢得列表时重返值是NO,把测试申明删掉,重新创建.然后再走3遍下边包车型大巴流程.(笔者遇见的BUG奇怪的很,对着英文文书档案走了几许遍,显著文件没什么难题,就是重回值向来都以NO,后来,在成立iCoud的时候,把这几个id改成和App
ID不等同,正是遵循她上边包车型大巴渴求成立,就奇怪的好了.)

在意 :创制完描述文件别忘了安装到Xcode,直接下载,完了双击就ok了.

3.配置Xcode工程了;
3-1 布署plist文件 (允许后台运维)
通过xml添加
<key>UIBackgroundModes</key>
<array>
<string>network-authentication</string>
</array>

由此xml格局添加.png

添加完了会有那

3-2 targets->Capabilities->iCloud
和Wireless-Accessory-Configuration

,打开并布署icould

打开Wireless-Accessory-Configuration.png

布局完上边多少个你就会意识工程左侧会多了三个.entitlements说到底的文件.
然后还要向那些文件之中添加七个BOOL值为YES的字段
com.apple.developer.networking.HotspotHelper

配置.entitlements文件.png

3-3 Tagarts–>Build Settings -> code Signing

配置Build Settings

3-4 上代码 (也是蛮辛勤的)

Register a Hotspot Helper

+ (BOOL)registerWithOptions:(NSDictionary*)options queue:(dispatch_queue_t)queue handler:(NEHotspotHelperHandler)handler

@param options 

 kNEHotspotHelperOptionDisplayName :WIFI的注释tag字符串// 此处设置的内容会在WiFi列表中每个WiFi下边展示出来 

@param queue dispatch_queue_t 用来调用handle的block 

@param handler NEHotspotHelperHandler block 用于执行处理 helper commands.

 @return 注册成功YES, 否则NO. 

@discussion 一旦这个API调用成功,应用程序有资格在后台启动,并参与各种热点相关的功能。 当应用程序启动此方法应该调用一次。再次调用它不会产生影响,并返回NO。

这个方法是主要的.

+ (BOOL)logoff:(NEHotspotNetwork *)network

@param network 对应当前关联的WiFi网络NEHotspotNetwork

 @return 注销命令已成功进入队列YES, 否则NO. 

@discussion 调用此方法使kNEHotspotHelperCommandTypeLogoff型的NEHotspotHelperCommand向应用程序发出的“handler”模块 网络参数必须符合当前关联的WiFi网络,即它必须来自对NEHotspotHelperCommand网络属性或方法supportedInterfaces

+ (NSArray *)supportedNetworkInterfaces

@return 如果没有网络接口被管理,返回nil。否则,返回NEHotspotNetwork对象数组。 

@discussion 每个网络接口由NEHotspotNetwork对象表示。当前返回的数组包含一个NEHotspotNetwork对象代表Wi-Fi接口。

 这种方法的主要目的是当没有得到一个命令来处理它时,让一个热点助手偶尔提供在UI里其准确的状态。 此方法加上NEHotspotNetwork的isChosenHelper方法允许应用程序知道它是否是当前处理的网络。

//最终奉上自作者的落到实处代码,获取wifi列表,并给钦定ssid做标记;

+(void)getWifiList{

    NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
    [options setObject:@"🔑😀新网程-点我上网😀🔑" forKey:kNEHotspotHelperOptionDisplayName];

    dispatch_queue_t queue = dispatch_queue_create("com.pronetwayXY", 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:@"proict_test"]) {

                    double signalStrength = network.signalStrength;
                    NSLog(@"Signal Strength: %f", signalStrength);
                    [network setConfidence:kNEHotspotHelperConfidenceHigh];
                    [network setPassword:@"password"];

                    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);

}

注意
:运营一次,然后供给开辟系统安装连wifi界面,才能在控制台查看打印消息的.

下边附上两张效果图:

系统的wifi列表.png

修改系统wifi的竹签

最终附上贰个Network Extension
使用的难兄(福)难(利)弟群(群里很多都早已落成了这几个效果)—-585640621

末尾推荐二个技能调换群,里面大神很多! 529043462
QQ1 :2806539826
QQ2 :576484150

demo已上传到gitHub上
:https://github.com/chengkunlun/FirstRePository

参考文书档案:http://blog.csdn.net/qinxianjun163/article/details/51583057

相关文章