【问题标题】:Swift 3 Cocoapod with a Swift 4 dependency具有 Swift 4 依赖项的 Swift 3 Cocoapod
【发布时间】:2023-12-23 12:34:01
【问题描述】:

我正在尝试更新我在我的 Swift 3 pod 中的一个依赖项。有问题的依赖是Socket.IO-Client-Swift。我想将它从 Swift 3 版本升级到最新的 Swift 4 版本。

如果我将 Socket.IO-Client pod 的“Swift 语言版本”设置为 4.1,它在 Xcode 中可以正常工作。它可以毫无问题地构建。

当我尝试 lint podspec 或推送 podspec 时出现错误,因为它看起来像是在尝试使用 Swift 3 编译 Socket.IO。

错误 | [iOS] xcodebuild: Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClient.swift:111:39: 错误:无法调用非函数类型'Bool'的值

...

错误 | [iOS] xcodebuild: Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClient.swift:471:39: error: cannot call value of non-function type 'Bool'

有没有办法让 cocoapods 使用 Swift 4 编译依赖项(Socket.IO-Client-Swift),同时将 Swift 3 用于其他需要它的东西?

【问题讨论】:

    标签: ios swift swift3 cocoapods swift4


    【解决方案1】:

    在您的 pod 文件中添加以下行指定您的 pod 名称

    post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if target.name == 'Your-Pod-Name'
                config.build_settings['SWIFT_VERSION'] = '4.0' //use required pod version here
            end            
        end
    end 
    

    结束

    完成后,运行命令“pod install”

    【讨论】:

    • 这是用于 podspec 文件而不是我的 podfile。pod install 工作正常,只有当我尝试 lint 并将 pod 上传到 specs 存储库时我才会遇到问题。
    【解决方案2】:

    s.swift_version = "4.0" 添加到您的 podspec 文件中。

    如果您没有清除您的 pod 使用的 swift 版本,Cocoapods 会将其设置为您在项目中使用的版本

    【讨论】: