升级至Xcode 11后原生链接失败,求助排查CTTelephonyNetworkInfo相关问题
问题根源与解决方案
没错,你碰到的这个链接器错误确实和iOS 12到14之间CTTelephonyNetworkInfo的API变更直接相关,升级到Xcode 11后问题凸显的核心原因是:Xcode 11对应iOS 13 SDK,而Xamarin.Essentials的Connectivity模块底层会调用这个类——在iOS 12及更高版本中,CoreTelephony框架不再被默认自动链接到项目里,导致链接器找不到_OBJC_CLASS_$_CTTelephonyNetworkInfo符号的定义,最终抛出报错。
解决步骤(两种方式二选一即可)
方式一:通过mtouch参数手动指定框架
- 打开你的Xamarin.iOS项目(注意是iOS平台专属项目,不是共享代码项目)
- 右键点击项目,选择选项(Options)
- 在弹出的窗口里导航到iOS Build标签页
- 在Additional mtouch arguments输入框中添加:
-framework CoreTelephony - 保存配置,先清理项目再重新构建
方式二:直接引用CoreTelephony框架
- 在iOS项目的References节点上右键,选择Edit References
- 切换到iOS Frameworks标签页,找到并勾选CoreTelephony
- 点击确定,重新构建项目
补充说明
Xamarin.Essentials的Connectivity模块依赖CoreTelephony框架来获取蜂窝网络状态的相关信息,当你升级Xcode后,项目默认使用的SDK版本切换到iOS 13+,此时系统不再自动链接该框架,必须手动添加才能让链接器找到CTTelephonyNetworkInfo类的定义,彻底解决链接失败的问题。
内容的提问来源于stack exchange,提问作者Tek Mun
相关产品推荐
相关产品推荐

