iOS/Swift + Objective-c

[Swift / Objective-c] 디바이스 USIM 확인하기 (유심 확인)

안경 쓴 귀니 2022. 12. 20. 21:49
반응형

디바이스에 USIM이 있는지, 통신사 등 확인하는 방법

 

CTTelephonyNetworkInfo를 사용하여 providers를 조회하여 USIM 유무를 확인한다.

 

mobileNetworkCode와 mobileCountryCode를 확인하여 유심이 있는지 확인한다.

 

테스트한 결과, 6s는 providers가 1개, 아이폰 13 mini, Xr, 11 pro max는 providers가 2개 조회된다.

아마도 USIM, eSIM을 지원하는 디바이스에서는 Providers가 2개 조회되는 듯하다.

 

USIM 1개만 존재하는 경우, 모든 providers를 조회하여 mobileNetworkCode가 있는 경우를 USIM이 있는 경우로 판단한다.

 

  • Swift
import CoreTelephony


let networkInfo = CTTelephonyNetworkInfo()
let providers = networkInfo.serviceSubscriberCellularProviders

if let providers = providers {
    for key in providers.keys {
        let carrier = providers[key]
        print("key : \(key) / value : \(carrier)")

        let mnc = carrier?.mobileNetworkCode
        let mcc = carrier?.mobileCountryCode
        print("mnc : \(mnc)")

        if carrier?.mobileNetworkCode == nil {
            print("USIM 없음")
        } else {
            print("USIM 있음")
        }
    }
}

 

  • Objective-c
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>


CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
NSDictionary<NSString *, CTCarrier *> *providers = [networkInfo serviceSubscriberCellularProviders];

if (providers != nil) {
    for (NSString *key in [providers allKeys]) {
        CTCarrier *carrier = [providers valueForKey:key];
        NSLog(@"key : %@ / value : %@", key, carrier);

        NSString *mnc = carrier.mobileNetworkCode;
        NSString *mcc = carrier.mobileCountryCode;
        NSLog(@"mnc : %@", mnc);
        if (mnc == nil) {
            NSLog(@"USIM 없음");
        } else {
            NSLog(@"USIM 있음");
        }
    }
}

 

 

  • 결과

유심이 있는 경우, CTCarrier가 아래처럼 Country code, network code가 조회된다.

Carrier name: [SK Telecom]
Mobile Country Code: [450]
Mobile Network Code:[05]
ISO Country Code:[kr]
Allows VOIP? [YES]

 

유심이 없는 경우, CTCarrier 조회 시 아래와 같이 nil로 조회된다.

Carrier name: [<nil>]
Mobile Country Code: [<nil>]
Mobile Network Code:[<nil>]
ISO Country Code:[<nil>]
Allows VOIP? [YES]

 

반응형