核心通信库(CoreTelephony)eSIM功能在设备上无法正常工作

6

我一直在尝试将 eSIM 实现到现有的 iOS 运营商应用程序中,但遇到了一些问题。

设置

  • 该应用程序已获得 public-cellular-plan 权限,我理解这是赋予我访问 CoreTelephony 的 eSIM 功能的权限。
  • 我在应用程序的目标中导入了 CoreTelephony 框架:General > Frameworks, Libraries, and Embedded Content ,并将其标记为 Do not Embed,与 CoreData 等其他框架相同。
  • 我在调用的类中导入了库 import CoreTelephony
  • 我正在 iPhone XR 上通过 Xcode 运行正确的配置文件的开发构建,并且该 iPhone XR 已激活数据计划,因此我确定它支持它。

问题
据说这样做后,我现在应该能够访问 eSIM 的功能,如 supportsCellularPlan,但不幸的是它似乎没有起作用:

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

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

我也尝试了使用分发配置文件通过TestFlight进行测试,但结果相同。

你有任何想法我做错了什么吗?


1
我也遇到了同样的问题,有任何更新吗? - Nick
你最终解决了这个问题吗?我也遇到了同样的问题。 - Matt Rees
3个回答

8

经过多次尝试和错误,我终于解决了这个小问题。

关于 supportsCellularPlan() ,除了需要eSIM权限之外,还有两个要知道的事情。

第一:
你需要开启WiFi才能使其正常工作,因为它似乎需要与苹果进行一些检查。

第二:
它需要在你的info.plist中正确输入CarrierDescriptors,因为它是与运营商绑定的。

如果你做到了以上两点,那么它应该可以正常工作了。


如果我们有缘相遇,我欠你一瓶啤酒。 - Matt Rees
我会记住的 ;) - Thomas
什么是CarrierDescriptors?能否请您分享我们需要放置在info.plist中的 CarrierDescriptors示例,@Thomas。 - naresh kolindala
1
@nareshkolindala CarrierDescriptors是一个字典,其中包含由您的运营商提供的唯一代码,用于在网络上识别他们。您应该与他们核实这些代码。 - Thomas
@Thomas,你能否举个例子说明在info.plist中应该如何查找? - Marat

0

CarrierDescriptors示例:

  <key>CarrierDescriptors</key>
    <array>
      <dict> 
      <key>MCC</key> //Mobile country code
       <string>’mnc value’</string>
       <key>MNC</key> // Mobile network code
        <string>’mnc value’</string>
      </dict>
    </array>

0
您可以在这里找到正确的MCC/MNC值:https://www.mcc-mnc.com 顺便说一句,由于某些原因,当只有随机值“xxx”时,它对我也起作用。 但是它需要出现在plist中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接