Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CoreTelephony eSIM functions not working on device

I've been having some trouble implementing eSIM into an existing iOS carrier-application.

The setup

  • The app has received the public-cellular-plan entitlement which I understand is the entitlement giving me access to the eSIM functions of CoreTelephony.
  • I've imported the CoreTelephony framework in the app's target: General > Frameworks, Libraries, and Embedded Content which is marked as Do not Embed, same as other frameworks like CoreData and such.
  • I've imported the library in the class making the calls import CoreTelephony
  • I'm running a development build with the correct profile via Xcode on an iPhone XR, which has a data plan active so I'm sure it supports it.

The problem
Supposedly with all this, I should now have access to the eSIM functions like supportsCellularPlan but unfortunately it doesn't seem to be working:

let provisioning = CTCellularPlanProvisioning()
let supportsESIM = provisioning.supportsCellularPlan()

print("\(supportsESIM)") 
// This prints false but should be true as the XR supports eSIM

I've also tried via TestFlight with the distribution profile but same result.

Any ideas as to what I'm doing wrong?

like image 938
Thomas Avatar asked Oct 30 '19 17:10

Thomas


1 Answers

So... after a lot of trial an error I was able to solve this little issue.

There are 2 things to know about supportsCellularPlan() (other then having the eSIM entitlements of course).

First:
You need to have WiFi enabled for it to work as it seems to need to connect with Apple for some checks.

Second:
It requires the CarrierDescriptors to be entered correctly in your info.plist as it is carrier-bound.

Once you have that, it should work as expected.

like image 180
Thomas Avatar answered Oct 01 '22 03:10

Thomas