web-dev-qa-db-ja.com

iOS 13でのCNCopyCurrentNetworkInfo

AppleはiOS 13でWiFiに関するいくつかの点を変更しました。CNCopyCurrentNetworkInfoを使用したい場合、アプリは次のいずれかを持っている必要があります

  • 場所にアクセスする権限を持つアプリ
  • アプリは現在有効なVPNアプリです
  • アプリがNEHotspotConfigurationを介してデバイスが現在使用しているWiFiネットワークを構成しました

出典:WWDC 19セッション713

NEHotspotConfigurationを使用してネットワークを構成していますが、現在のSSIDを取得できなくなっています。

次のコードはiOS 12で正常に動作しました。

/// retrieve the current SSID from a connected Wifi network  
private func retrieveCurrentSSID() -> String? {  
    let interfaces = CNCopySupportedInterfaces() as? [String]  
    let interface = interfaces?  
        .compactMap { [weak self] in self?.retrieveInterfaceInfo(from: $0) }  
        .first  

    return interface  
}  

/// Retrieve information about a specific network interface  
private func retrieveInterfaceInfo(from interface: String) -> String? {  
    guard let interfaceInfo = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: AnyObject],  
        let ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String  
        else {  
            return nil  
    }  
    return ssid  
} 

IOS 13では、CNCopyCurrentNetworkInfoは常にnilを返します。

アプリにWiFi情報へのアクセス機能が設定されています。

ご協力いただきありがとうございます!

20
MikeB

ばかげているようですが、一部のデバイスでは、障害のあるデバイスを再起動するとすべて修正されます(同じコードが更新前に機能した場合...)

以下も参照してください:

https://forums.developer.Apple.com/thread/123244

0
ingconti

私にとって、TryCopyCurrentNetworkInfoは、NEHotspotConfigurationで構成されたネットワークであっても常にnilを返します。 JoinOneオプションをfalseまたはtrueに設定してMateuszの推奨事項を試しましたが、問題は解決しませんでした。

電話OSは13.1.3プロフィールでWiFi情報へのアクセスが有効になっていますiOS 12で動作していました

0
AlexP

IOS 13.0でも同じ問題が発生しましたが、Apple修正済み)のようです。ドキュメントで、アプリによって追加されたネットワークであるか、その場所が有効になっているか、アプリがアクティブVPNが13.1 13.1 13.2で機能しなかった

0
AlexP

場所のアクセス許可のステータスや、アプリがデバイスが現在使用している現在のWi-Fiネットワークを構成しているという事実に関係なく、iOS 13でCNCopyCurrentNetworkInfoを機能させて結果を出さないようにする方法を理解するために何時間も費やしてきましたNEHotspotConfiguration経由。それはただ機能しないです。

NEHotspotConfigurationManagergetConfiguredSSIDsWithCompletionHandler:メソッドを介してSSIDを取得するための信頼できるソリューションがついに出ました。

以下に簡単な例を示します。

static func retrieveCurrentSSID(  callback: @escaping ( String? ) -> Void ){
    NEHotspotConfigurationManager.shared.getConfiguredSSIDs { ( networkSSIDs ) in
        callback( networkSSIDs.first )
    }
}

0
Garba

確認する必要があります

<key>com.Apple.developer.networking.wifi-info</key>
<true/>

Entitlements-Release.plistに追加され、ほとんどがEntitlements-Debug.plistにのみ追加されます

0
Tabish Sohail

IOS 13以降、CNCopyCurrentNetworkInfo APIは有効なWi-Fi SSIDおよびBSSID情報を返さなくなりました。代わりに、デフォルトで返される情報は次のようになります。

SSID:「Wi-Fi」または「WLAN」(「SLANの場合は「WLAN」が返されます)BSSID:「00:00:00:00:00:00」

アプリがこのAPIを使用している場合、Appleは、Wi-Fiまたはネットワーク情報を必要としない代替アプローチを採用することをお勧めします。CNCopyCurrentNetworkInfoからの有効なSSIDおよびBSSID情報は引き続きVPNに提供されますアプリ、NEHotspotConfigurationを使用して現在のWi-Fiネットワークを構成したアプリ、および位置情報サービスを通じてユーザーの位置情報にアクセスするためのアクセス許可を取得したアプリ。

最新のiOS 13ベータ版でアプリをテストして、正しく動作することを確認できます。アプリが機能するために有効なWi-Fi SSIDおよびBSSID情報を必要とする場合は、次のことを実行できます。 。他の種類のアプリの場合は、CoreLocation APIを使用して、位置情報へのアクセスにユーザーの同意を要求します。

0
Lakshay Sharma