Post

Replies

Boosts

Views

Activity

serviceSubscriberCellularProviders behaving Weirdly on Different devices
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.
1
0
2.4k
May ’23