You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode12.5更新后自定义Swift框架无法构建应用问题咨询

问题根因
  1. Swift 5.4(Xcode 12.5配套版本)对模块接口的跨版本兼容性校验规则大幅收紧,会严格检查协议符合性的可访问性,不再兼容低版本Swift编译器生成的隐式协议继承逻辑。
  2. 你使用的Reachability库中NetworkStatus枚举的Equatable符合性是编译器内部隐式合成的,访问级别为内部(internal),没有在framework的公开模块接口中暴露,导入时Swift 5.4编译器无法找到对应的符合性声明,直接抛出不可用错误。
  3. 你后续用Swift 5.4重新编译时仍报错,是因为没有显式声明协议符合性的公开访问权限,生成的模块接口依然缺失必要的声明,编译器判定模块接口损坏。
解决方案
  • 显式声明NetworkStatus的公开协议符合性:如果可以修改Reachability库源码,直接在NetworkStatus的枚举定义处添加public修饰的Equatable和Hashable声明:
public enum NetworkStatus: Equatable, Hashable {
    // 原有枚举定义保持不变
}

如果不希望修改第三方库源码,可在你的自研framework中新增公开扩展,手动实现两个协议的逻辑:

public extension Reachability.NetworkStatus {
    static func == (lhs: Self, rhs: Self) -> Bool {
        switch (lhs, rhs) {
        case (.unavailable, .unavailable): return true
        case (.wifi, .wifi): return true
        case (.cellular, .cellular): return true
        default: return false
        }
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(self.rawValue)
    }
}
  • 编译framework前确认BUILD_LIBRARY_FOR_DISTRIBUTION编译配置为YES,该配置是生成稳定、可跨版本使用的模块接口的必要前提。
  • 清理Xcode全局编译缓存和旧的xcframework产物,使用Xcode 12.5重新编译生成全新的xcframework。
  • 接入应用侧清理DerivedData缓存,移除旧的framework导入,重新导入新生成的xcframework即可完成编译。

内容的提问来源于stack exchange,提问作者gamerounet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:54:01