Apple In App Provisioning
Who Can Use the Apple eSIM API?
Apple provides several ways to add an eSIM to a device. The most straightforward method, widely implemented by carriers, involves scanning a QR code from the device settings. This method does not require any development work on the carrier’s app, making it accessible and easy to use for most carriers.
However, there is a more integrated method to install the eSIM profile using a carrier app. This method requires a special entitlement provided by Apple. This entitlement enables the use of the CTCellularPlanProvisioning.addPlan(with:) API, which allows the app to provision eSIM profiles directly onto the device.
To use this API, the carrier must meet specific criteria:
- Mobile Network Operator (MNO): The carrier must be an MNO, which means they own and operate the network towers.
- Contract with Apple: The carrier must enter into specific agreements with Apple to enable the eSIM APIs.
Steps to Enable eSIM APIs
- Contact Apple Sales Representative: The carrier must first discuss with their Apple sales representative to gain access to the restricted API.
- Obtain Entitlement: Apple provides the necessary entitlement after confirming the carrier’s eligibility and agreements.
- Technical Requirements: The carrier should already have processes in place for ES2+ operations such as DownloadOrder, ConfirmOrder, and potentially ReleaseProfile on the SM-DP+ (Subscription Manager Data Preparation +).
Integration Options
Depending on the carrier’s setup, they may choose one of the following methods to link an eSIM to a device:
- Linking an eSIM to an EID: This method does not generate a MatchingID.
- Allocating an eSIM: This method uses a MatchingID to add the plan with the API.
These steps ensure that only qualified and properly equipped carriers can use the advanced eSIM provisioning features, maintaining the security and reliability of the eSIM ecosystem.
Overview of CTCellularPlanProvisioning.addPlan(with:)
The CTCellularPlanProvisioning.addPlan(with:) API is part of the CoreTelephony framework. It enables carrier apps to provision a cellular plan directly onto an eSIM-enabled device without the user needing to manually enter plan details or scan a QR code.
Capabilities of addPlan(with:)
- Automatic eSIM Profile Installation
- The primary function of this API is to install an eSIM profile onto the device. The profile contains all the necessary settings for the device to connect to the carrier’s network, including the carrier’s network information, authentication credentials, and any specific configuration needed for the service.
- Streamlined User Experience
- By using this API, carriers can provide a seamless and integrated user experience within their app. Users can simply select or purchase a cellular plan within the carrier’s app, and the app can then automatically configure the eSIM without requiring additional user input or actions.
- Enhanced Security and Reliability
- The API ensures that the provisioning process is secure, adhering to Apple’s stringent security guidelines. Only authorized apps with the necessary entitlement can use this API, ensuring that only trusted carriers can provision eSIM profiles.
- Integration with Carrier Systems
- The API allows for deep integration with carrier backend systems. Carriers can implement processes to manage eSIM profiles, such as allocating a profile to a user, linking it to the device’s EID (Embedded Identity Document), and handling the necessary authentication and network setup automatically.
Technical Process
When using the CTCellularPlanProvisioning.addPlan(with:) API, the following steps are typically involved:
- Prepare the eSIM Activation Request
- The carrier app prepares an activation request containing the eSIM profile details. This includes the necessary network information, credentials, and any additional settings required for the cellular plan.
- Call the API
- The carrier app calls the
CTCellularPlanProvisioning.addPlan(with:)method, passing in the prepared activation request. This triggers the provisioning process on the device.
- The carrier app calls the
- Handle the Response
- The API returns a result indicating whether the provisioning was successful or if there were any errors. The app can then handle these responses accordingly, providing feedback to the user or taking corrective actions if necessary.
info.plist File
CFBundleName
YourAppName
CFBundleIdentifier
com.yourcompany.yourapp
CFBundleVersion
1.0
CFBundleShortVersionString
1.0
CFBundleDevelopmentRegion
en
CFBundleExecutable
${EXECUTABLE_NAME}
CFBundlePackageType
APPL
LSRequiresIPhoneOS
UILaunchStoryboardName
LaunchScreen
UIRequiredDeviceCapabilities
armv7
UIStatusBarStyle
UIStatusBarStyleDefault
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
CarrierDescriptors
MNC
03
MCC
260
GID1
ffffffffffffffffffff
GID2
ffffffffffffffffffff
UIBackgroundModes
fetch
remote-notification
NSCameraUsageDescription
$(PRODUCT_NAME) needs access to the camera to take photos.
NSLocationWhenInUseUsageDescription
$(PRODUCT_NAME) needs access to your location to show relevant content.
NSLocationAlwaysUsageDescription
$(PRODUCT_NAME) needs access to your location to show relevant content.
UIBackgroundModes
fetch
remote-notification
Explanation of the info.plist File
- Basic App Information
CFBundleName: The name of your app.CFBundleIdentifier: The unique identifier for your app.CFBundleVersionandCFBundleShortVersionString: Version numbers for your app.
- Device and Orientation Configurations
CFBundleDevelopmentRegion: Default language for your app.CFBundleExecutableandCFBundlePackageType: Specifies that this is an app package.LSRequiresIPhoneOS: Indicates that the app requires iPhone OS.UIRequiredDeviceCapabilities: Lists required device capabilities (e.g.,armv7).UIStatusBarStyle: Status bar appearance.UISupportedInterfaceOrientations: Supported interface orientations.
- eSIM Carrier Descriptors
CarrierDescriptors: An array of dictionaries, each containing:MNC: Mobile Network Code.MCC: Mobile Country Code.GID1andGID2: Group Identifiers (optional).
- Background Modes
UIBackgroundModes: Lists the background modes your app supports (e.g.,fetchandremote-notification).
- Privacy Descriptions
NSCameraUsageDescription: Describes why your app needs camera access.NSLocationWhenInUseUsageDescriptionandNSLocationAlwaysUsageDescription: Describe why your app needs location access.
Customizing the File
- Replace Placeholder Values: Ensure you replace placeholder values such as
YourAppName,com.yourcompany.yourapp, and the version numbers with your actual app details. - Carrier Information: Fill in the actual MNC, MCC, GID1, and GID2 values provided by your carrier partner.
Approval process
Becoming approved:
To be approved by Apple for eSIM entitlement, a developer needs to prepare and fulfill several requirements. Here’s an overview of the steps and necessary preparations:
1. Apple Developer Program Membership
- Ensure you are enrolled in the Apple Developer Program. This membership provides access to the tools and resources needed to develop and distribute apps on Apple platforms.
2. Carrier Agreement
- You must have a formal agreement with a supported carrier. Apple works with specific carriers that support eSIM functionality. You need to partner with one of these carriers and fulfill their requirements for eSIM provisioning.
3. Implementing eSIM Support in Your App
- CTCellularPlanProvisioningRequest API: Implement the CTCellularPlanProvisioningRequest API to request the addition of a cellular plan.
- App Configuration: Your app needs to be configured correctly to utilize this API. This includes handling user authentication and authorization for adding plans.
4. Entitlement Application
- Apply for the Entitlement: Use the Apple Developer portal to apply for the eSIM entitlement. This will involve providing detailed information about your app and its intended use of the eSIM functionality.
- Review Process: Apple will review your application. This review includes verifying your agreement with a supported carrier and evaluating your app’s use case to ensure it complies with Apple’s guidelines.
5. Security and Privacy Compliance
- User Data Protection: Ensure your app complies with Apple’s security and privacy guidelines, particularly regarding user data protection and privacy.
- Token/Key Management: Properly manage any tokens or keys required for eSIM activation, ensuring they are securely handled within your app.
6. Testing and Validation
- Testing with Carrier: Collaborate with your carrier partner to test the eSIM provisioning process. This ensures that your app correctly interfaces with the carrier’s systems and Apple’s APIs.
- Beta Testing: Conduct thorough testing with beta users to identify and fix any issues before wider deployment.
7. Documentation and Support
- User Documentation: Provide clear documentation and support for users on how to use the eSIM functionality within your app.
- Developer Support: Be prepared to address any technical issues or questions that may arise during the review and deployment process.
Resources
- Apple Developer Documentation
- Apple Developer Forums
- Technical Blogs and Articles
- Apple Support
How can eSIM Access help?
eSIM Access and parent Redtea Mobile can help with your application. We have successfully integrated in app provisioning in consumer apps like RedteaGO and others.
If you maintain an established iOS Application with thousands of ratings and tens of thousands of downloads, we may be able to help add eSIM provisioning to your application.