#available(iOSApplicationExtension与iOS:Swift Package编译报错原因解析
编译错误的根本原因
核心问题在于UITabBar.scrollEdgeAppearance这个API的可用性标记范围不包含iOS应用扩展(iOSApplicationExtension)平台:
- 苹果对每个API的可用性会按不同平台单独标记,有些API会同时覆盖主iOS应用和扩展,但
scrollEdgeAppearance只在主iOS应用的SDK中被标记为「iOS 15.0+可用」,没有给iOSApplicationExtension平台添加对应的可用性声明。 - 当你用
#available(iOSApplicationExtension 15.0, *)做版本判断时,编译器会严格检查该API在iOSApplicationExtension平台下的可用性,发现没有对应的标记,就会判定这个API在该平台下完全不可用,哪怕系统版本满足15.0+也会抛出编译错误。 - 换成
iOS的可用性判断后,编译器会匹配到该API在主iOS平台的可用性声明,确认版本达标后就允许编译通过。实际运行时,只要你的扩展所在的系统是iOS 15.0+,这个API是可以正常工作的——只是苹果没给扩展平台补上官方的可用性标记而已。
内容的提问来源于stack exchange,提问作者Kelvin Lau
相关产品推荐
相关产品推荐

