I am using CoreTelephony's [networkInfo serviceSubscriberCellularProviders] to get details about the carrier of both the SIMs which were present in the device.
I tested this on multiple devices, firstly on an iPhone 11 with a single sim in it, in this case, it was able to retrieve an array of two CTCarrier instances, the first instance had all the values to 0 or the default ones (assuming this was pointing to E-SIM which was empty) and the second instance had the expected values i.e the carrier I am using.
Then I tested this on an iPhone 11 and SE with one e-sim and one regular sim and in both cases, I saw invalid values fetched for carrier names, mobile country code and mobile network code. The carrier name is being received as -- whereas the code was being received as 65535.
I had also tested this on iPhone 14 with a single regular sim in it but here as well I am seeing the invalid values.
So I cannot determine if the issue was due to single sim or dual sim's in the device.
I am also attaching a screenshot from my debugger when I receive these invalid values for reference.
On further research online I found out that 65535, and -- are returned by the iOS when it is unable to get the data from the carrier. But I am not able to figure out how is the same app with exact same logic to retrieve carrier details is working perfectly fine on iPhone 11 with a single regular sim in it.
I also added Privacy- LocalNetworkUsageDescription in the Info.plist of my app to see if that can help, but it too failed.
I am sharing the logic I am using to get the carrier name of both the SIMs present in the device if both exist below:
CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
if (@available(iOS 12.0, *)) {
NSDictionary *serviceProviders = [networkInfo serviceSubscriberCellularProviders];
for (NSString *rat in serviceProviders) {
CTCarrier *carrier = [serviceProviders objectForKey:rat];
if(carrier == nil) {
continue;
}
NSString *carrierName = [carrier carrierName];
if (carrierName) {
[_carrier addObject:carrierName];
}
}
} else {
CTCarrier *carrier = [networkInfo subscriberCellularProvider];
NSString *carrierName = [carrier carrierName];
if (carrierName) {
[_carrier addObject:carrierName];
}
}
I am using Xcode 14.3 if that will be helpful.
Selecting any option will automatically load the page