투케이2K

380. (ios/swift5) CTTelephonyNetworkInfo CellularProviders 사용해 휴대폰 유심 Usim 장착 상태 확인 본문

IOS

380. (ios/swift5) CTTelephonyNetworkInfo CellularProviders 사용해 휴대폰 유심 Usim 장착 상태 확인

투케이2K 2023. 11. 12. 17:40

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [유심 장착 여부 상태 확인 메소드]
    // -----------------------------------------------------------------------------------------
    var checkUsimMountiongFlag = false
    func getUsimMounting() -> Bool {
        
        /*
        // -----------------------------------------
        // [getWhatOfNetwork 메소드 설명]
        // -----------------------------------------
        1. 필요 import : import CoreTelephony
        // -----------------------------------------
        2. 호출 방법 : if C_StateCheck().getUsimMounting() == true {} else {}
        // -----------------------------------------
        3. 참고 :
         
         providers를 조회하여 mobileNetworkCode가 있는 경우를 USIM이 있는 경우로 판단
         
        // -----------------------------------------
        */
        
        
        // [변수 선언]
        var M_LOG = ""
        
        
        // [세마포어 선언 : 프로그램 로직을 동기화 구현 : value 0 값은 대기 상태 선언]
        let semaphore = DispatchSemaphore(value: 0)
        
        let networkInfo = CTTelephonyNetworkInfo()
        let providers = networkInfo.serviceSubscriberCellularProviders

        if let providers = providers {
            
            M_LOG = "[ERROR] :: Usim Search Fail"
            self.checkUsimMountiongFlag = false
            
            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 있음")
                    
                    // [변수 값 삽입]
                    M_LOG = "[Success] :: Usim Mounting Device :: \(String(describing: carrier?.description ?? ""))"
                    self.checkUsimMountiongFlag = true
                    break
                    
                }
            }
            
            
            // [세마포어 신호 알림]
            semaphore.signal()
            
        }
        else {
            
            // [변수 값 삽입]
            M_LOG = "[ERROR] :: providers is nil"
            self.checkUsimMountiongFlag = false
            
            // [세마포어 신호 알림]
            semaphore.signal()
        }
        
        
        // [세마포어 확인 대기]
        semaphore.wait()

        
        // [로그 출력]
        S_Log._D_(description: "유심 장착 여부 상태 확인", data: [
            "M_LOG :: \(M_LOG)",
            "RETURN :: \(self.checkUsimMountiongFlag)"
        ])

        
        // [결과 리턴 수행 실시]
        return self.checkUsimMountiongFlag
        
    }
 

[결과 출력]

 

 

반응형
Comments