在非越狱iOS设备上启用/禁用WiFi

3

我需要这个功能用于我的内部应用,希望能在iOS设备上切换wifi。有没有可用的框架?我尝试了以下代码,但它并没有帮助我改变wifi设置。

{       
    Class BluetoothManager = objc_getClass("BluetoothManager");
    id btCont = [BluetoothManager sharedInstance];
    [self performSelector:@selector(toggle:) withObject:btCont afterDelay:0.1f] ;
}
- (void)toggle:(id)btCont
{
    BOOL currentState = [btCont enabled] ;
    [btCont setEnabled:!currentState] ;
    [btCont setPowered:!currentState] ;
    exit( EXIT_SUCCESS ) ;
}

可能有(或没有)使用苹果内部接口来实现这一点的方法,但它们并未经过“批准”,也无法通过应用商店的审核。你甚至无法测试自己是否处于“飞行模式”。 - Hot Licks
是的,我只需要内部使用。 - user2259101
2个回答

4

应用程序

notify_post("com.yourcompany.yourapp.yournotification");

从Dylib中获取

#import <objc/runtime.h>
#import <SpringBoard/SBWiFiManager.h>

HOOK(SpringBoard, applicationDidFinishLaunching$, void, id app) {
    //Listen for events via DARWIN NOTIFICATION CENTER
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
     &NotificationReceivedCallback, CFSTR("com.yourcompany.yourapp.yournotification"), NULL, 
      CFNotificationSuspensionBehaviorCoalesce);
}

//THIS IS WHERE THE MAGIC HAPPENS
static void NotificationReceivedCallback(CFNotificationCenterRef center, 
                                            void *observer, CFStringRef name, 
                                            const void *object, CFDictionaryRef 
                                            userInfo) 
{ 
    [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:NO];
}

注意:

如果您在使用Hook方法时遇到任何错误,可以参考此链接,它演示了如何挂钩SpringBoard中的init方法,在启动手机时显示警报消息。

警告:

您不能将此用于App Store应用程序,因为使用了私有API。

参考资料

署名

希望这能帮助到您。


3
你无法做到。iOS限制第三方应用程序与底层硬件的交互量。所有使用公共SDK编写的应用程序都是沙箱化的。
正如7KV7在这里的回答中所说:
他们只能访问苹果认为在该沙盒内可行使用的属性和数据。恐怕Wi-Fi不在列表中。

我理解在App商店发布应用有一些限制。但是这个应用不是为Appstore设计的。它是我的内部应用,我想从中切换手机的wifi设置。我相信有一些技巧可以实现这个功能。 - user2259101
@js1568:我们可以在非越狱设备上使用私有框架来实现吗?我需要在多个设备上验证。并且不需要每个设备都越狱。 - user2259101
@user2259101 不,你做不到。苹果公司非常擅长限制第三方应用程序的功能。 - Undo
我们能否使用脚本更改非越狱设备的设置? - user2259101
开发人员可以使用Xcode附带的一套工具进行自动化测试。此外,他们只需在wifi开启和关闭时运行测试。很简单。 - Undo
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接