-->

why do serviceSubscriberCellularProviders return n

2019-06-02 21:29发布

问题:

Question about CTCarrier from CoreTelephony. I heard that I should use serviceSubscriberCellularProviders instead of subscriberCellularProvider in iOS 12 because subscriberCellularProvider would be deprecated. So I wrote following codes.

import UIKit
import CoreTelephony

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        let telephony = CTTelephonyNetworkInfo()
        if #available(iOS 12.0, *) {
            let carrier = telephony.serviceSubscriberCellularProviders
            print(carrier)
        }
        else {
            let carrier = telephony.subscriberCellularProvider
            print(carrier)
        }
        
    }

}

SubscriberCellularProvider successfully return right SIM card information, however, serviceSubscriberCellularProviders just return nil value.

Do you know why happens like this? Please help me

回答1:

I think it's an Apple's bug. Try this:

    CTTelephonyNetworkInfo *networkStatus = [[CTTelephonyNetworkInfo alloc] init];
if (@available(iOS 12.0, *)) {
    NSDictionary *info = networkStatus.serviceSubscriberCellularProviders;
    NSLog(@"%@", [networkStatus valueForKey:@"serviceSubscriberCellularProvider"]);
}

It works well on iPhone XS Max (double Sim cards).And it seems to be a private method.



回答2:

It's a bug in iOS 12.0.x, and it has fixed in iOS 12.1