Swift Package Manager混合语言源文件

时间:2018-07-26 13:59:13

标签: ios swift packages

出于某种原因,当我尝试在swift build文件上运行Package.swift时:导入PackageDescription

let package = Package(
    name: "mobile-HDISegurado-ios",
    dependencies: [
        .package(url: "https://github.com/watson-developer-cloud/swift-sdk", from: "0.30.0"),
        ],
    targets: [
        .target(
            name: "mobile-HDISegurado-ios",
            dependencies: ["WatsonDeveloperCloud"],
            path: "mobile-HDISegurado-ios",
            exclude: [
                "Config",
                "Public",
                "Resources",
                ]
        )
    ] )

我遇到以下错误:

  

错误:定位于   '... / mobile-HDISegurado-ios'   包含混合语言源文件;功能不支持

更多详细信息:

  • swift软件包工具版本:4.1.0
  • 运行Cocoapods的项目工作区。

3 个答案:

答案 0 :(得分:2)

您是否正在使用SPM构建iOS项目?目前,SPM不支持iOS。不过,有一个第三方工具可以填补这一空白:https://swiftxcode.github.io/

如果要为其他版本构建,则不能将Swift文件和其他C族语言文件混合在一起。我遇到了同样的问题,因为目标路径中只有一个Objective-C文件。我所做的就是将文件名包含在exclude数组中。

因此,如果在mobile-HDISegurado-ios参数内传递文件名,请确保忽略“-exclude”中的Objective-C类。

答案 1 :(得分:2)

对于Xcode 11及更高版本/ 2020解决方案

另外,如果您在Objective-C项目或工作区中添加了Swift文件,但是后来又删除了所有Swift文件,则Xcode仍会在“构建设置”下保留一些条目。检查Swift相关选项,如以下行所示:

  • SWIFT_INSTALL_OBJC_HEADER
  • SWIFT_OPTIMIZATION_LEVEL
  • SWIFT_VERSION

如果删除这些选项,Xcode将不再显示错误,可以安全地安装Package。

经过测试:

  • swift-tools-version:5.1
  • Xcode 11.3

最好。

答案 2 :(得分:0)

SPM 现在支持混合语言源文件,但您可能需要将它们分成多个目标。

来自the relevant docs

<块引用>

目标可以包含 Swift、Objective-C/C++ 或 C/C++ 代码,但单个目标不能将 Swift 与 C 系列语言混合。例如,一个 Swift 包可以有两个目标,一个包含 Objective-C、Objective-C++ 和 C 代码,另一个包含 Swift 代码。

在实践中,您应该将 ObjC/C/C++ 文件移动到一个目录中,将 Swift 文件移动到另一个目录中,然后修改您的 Package.swift 如下:

products: [
    .library(
        name: "MyLibrary",
        targets: ["MyLibrary"]),
],
.target(name: "MyLibraryObjC",
        path: "Sources/MyLibraryObjC"
),
.target(name: "MyLibrarySwift",
        path: "Sources/MyLibrarySwift"
)