iOS – 如何使用私人/第三方库以编程方式连接到指定了SSID和密码的WiFinetworking

美好的一天。 我试图复制我现有的iOS应用程序。 在我的应用程序,我应该能够连接到一个WiFinetworkingSSID和密码。 SSID和密码可以硬编码,也可以由用户input。 我正在通过互联网来研究如何在iOS上完成这项工作,但是,似乎这种行为非常令人沮丧,并且没有办法使用公共/文档化的库来实现这一点, App Store。

事情是我会亲自使用这个应用程序,我不打算把它提交给应用程序商店,所以如果我使用外部库也没问题。 如果我的朋友想要使用它,我可以导出一个企业IPA,并给他们说明如何安装它。

经过search,似乎MobileWifi.framework是一个很好的候选人。 但是,使用这个库连接到一个给定SSID和密码的WiFinetworking似乎没有一个简单的方法。

有没有人谁已经成功地尝试连接到WifinetworkingSSID和密码? 很感谢任何forms的帮助。

与你在这里和其他地方看到的相反,你可以做到这一点。 对于普通用户来说很难做到这一点,但是如果不必这样做的话,那么编写代码非常简单。 这是一个企业pipe理的事情,但任何人都可以做到。 查找“连接configuration文件”。 例如,Comcast在他们的iOS应用程序中为您设置热点。

基本上,这是一个XML文档,您可以通过Safari或Mail获取设备。 有很多的技巧,用户体验不是很好,但我可以确认,它在iOS 10的作品,它不需要越狱。 你使用configuration器来生成XML,我build议这个线程为它服务(但人们没有find它,因为它不是专门关于WiFi), 这个博客查询是否安装,这是令人惊讶的平凡,但确实工作。

我已经多次回答了这个问题 ,但是要么没有足够的代表,要么就是不知道如何把问题作为重复来解决,这样可以更容易地find更好的答案。

在iOS 11中,Apple提供了公共API,您可以使用它们以编程方式joinWiFinetworking,而无需离开您的应用程序。

您需要使用的类称为NEHotspotConfiguration

要使用它,您需要启用应用function( 添加function )中的Hotspotfunction。 快速工作示例:

 NEHotspotConfiguration *configuration = [[NEHotspotConfiguration alloc] initWithSSID:@“SSID-Name”]; configuration.joinOnce = YES; [[NEHotspotConfigurationManager sharedManager] applyConfiguration:configuration completionHandler:nil]; 

这将提示用户join“SSID名称”WiFinetworking。 它将保持连接到WiFi,直到用户离开应用程序。

这不适用于模拟器,您需要使用实际的设备运行此代码才能使其工作。

更多信息在这里: https : //developer.apple.com/documentation/networkextension/nehotspotconfiguration

简短的回答,没有。


长的回答:)

这个问题被问了很多次:

  • 以编程方式在ios中连接到WiFi
  • 连接到具有给定的SSID和密码在ios编程的特定的WiFi
  • 我在哪里可以findiOS Obj-C代码来扫描并连接到WiFi(私有API)
  • 以编程方式自动连接到WiFi iOS

最有趣的答案似乎是在第一个链接指向一个GitHub项目: wifiAssociate 。 然而,第三个链接中的某些人解释说,这不适用于iOS8,所以你可能很难让它运行。
此外,iDevice必须越狱。

在iOS 11中连接wifinetworking。您可以使用ssid和密码来连接wifi,如下所示。

在App Id上启用热点configuration服务

在App Id上启用热点配置服务

启用热点configuration后

启用热点配置后

适用于iOS 11的Swift 4.0代码:

 let configuration = NEHotspotConfiguration.init(ssid: "SSIDname", passphrase: "Password", isWEP: false) configuration.joinOnce = true NEHotspotConfigurationManager.shared.apply(configuration) { (error) in if error != nil { if error?.localizedDescription == "already associated." { print("Connected") } else{ print("No Connected") } } else { print("Connected") } } 

我们可以编程连接IOS 11后的WiFinetworking。你可以连接使用ssid和密码的WiFi如下。

迅速

 var configuration = NEHotspotConfiguration.init(ssid: "wifi name", passphrase: "wifi password", isWEP: false) configuration.joinOnce = true NEHotspotConfigurationManager.shared.apply(configuration) { (error) in if error != nil { //an error accured print(error?.localizedDescription) } else { //success } } 

您可以使用Xcode 9和Swift 4连接到WiFi

 let WiFiConfig = NEHotspotConfiguration(ssid: "Mayur1", passphrase: "123456789", isWEP: false) WiFiConfig.joinOnce = false NEHotspotConfigurationManager.shared.apply(WiFiConfig) { error in // Handle error or success print(error?.localizedDescription) } 

我的两美分:如果你得到了:未定义的符号体系结构i386:“_OBJC_CLASS _ $ _ NEHotspotConfigurationManager”,引用自:WiFiViewController.o中的objc-class-ref“_OBJC_CLASS _ $ _ NEHotspotConfiguration”,引用自:WiFiViewController.o中的objc-class-ref ld:符号(s)找不到架构i386

只是它不能在模拟器下工作。

在真正的设备上它编译。 所以使用:

 class func startHotspotHelperStuff(){ if TARGET_IPHONE_SIMULATOR == 0 { if #available(iOS 11.0, *) { let configuration = NEHotspotConfiguration(ssid: "ss") configuration.joinOnce = true NEHotspotConfigurationManager.shared.apply(configuration, completionHandler: { (err: Error?) in print(err) }) } else { // Fallback on earlier versions } }// if TARGET_IPHONE_SIMULATOR == 0 } 
  1. 确保“function”中的“networking扩展和热点configuration”都处于打开状态。

  2. let WiFiConfig = NEHotspotConfiguration(ssid: YourSSID, passphrase: YourPassword, isWEP: false) WiFiConfig.joinOnce = false //set to 'true' if you only want to join the network while the user is within the app, then have it disconnect when user leaves your app NEHotspotConfigurationManager.shared.apply(WiFiConfig) { error in if error != nil { //an error accured print(error?.localizedDescription) } else { //success } }