Swift 包管理器混合语言源文件
Swift Package Manager Mixed Language Source Files
出于某种原因,当我尝试 运行 swift build
我的 Package.swift
file:import 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",
]
)
] )
我遇到以下错误:
error: target at
'.../mobile-HDISegurado-ios'
contains mixed language source files; feature not supported
更多详情:
- swift 工具包-版本:4.1.0
- 带有 Cocoapods 的项目工作区 运行ning.
您正在使用 SPM 构建 iOS 项目吗?目前 SPM 没有 iOS 支持。虽然,有一个第 3 方工具可以填补这个空白:https://swiftxcode.github.io/
如果您正在为其他人构建,那么您不能将 Swift 文件和其他 C 系列语言文件混合。我遇到了同样的问题,因为我的目标路径中有一个 Objective-C 文件。我所做的只是将文件名包含在 exclude
数组中。
因此,如果您在“mobile-HDISegurado-ios
”中有一个文件,请务必忽略 Objective-C 类,方法是在 exclude
参数中传递文件名。
2021 年解决方案 - Xcode 11 岁及以上
此外,如果您在 Objective-C 项目或工作区中添加了 Swift 文件,但后来删除了所有 Swift 文件,Xcode 仍会在构建设置下保留一些条目。检查 Swift 相关选项,如下所示:
- SWIFT_INSTALL_OBJC_HEADER
- SWIFT_OPTIMIZATION_LEVEL
- SWIFT_VERSION
如果您删除这些选项,Xcode 将不再出现错误,您可以安全地安装您的软件包。
测试:
- swift-tools-version:5.1及以上
- Xcode 11.3 及以上
最佳。
SPM 现在支持混合语言源文件,但您可能必须将它们分成多个目标。
Targets can contain Swift, Objective-C/C++, or C/C++ code, but an individual target can’t mix Swift with C-family languages. For example, a Swift package can have two targets, one that contains Objective-C, Objective-C++, and C code, and a second one that contains Swift code.
实际上,您应该将 ObjC/C/C++ 文件移动到一个目录,将您的 Swift 文件移动到另一个目录,然后修改您的 Package.swift 这样:
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrarySwift", "MyLibraryObjC"]),
],
.target(name: "MyLibraryObjC",
path: "Sources/MyLibraryObjC"
),
.target(name: "MyLibrarySwift",
path: "Sources/MyLibrarySwift"
)
出于某种原因,当我尝试 运行 swift build
我的 Package.swift
file:import 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",
]
)
] )
我遇到以下错误:
error: target at '.../mobile-HDISegurado-ios' contains mixed language source files; feature not supported
更多详情:
- swift 工具包-版本:4.1.0
- 带有 Cocoapods 的项目工作区 运行ning.
您正在使用 SPM 构建 iOS 项目吗?目前 SPM 没有 iOS 支持。虽然,有一个第 3 方工具可以填补这个空白:https://swiftxcode.github.io/
如果您正在为其他人构建,那么您不能将 Swift 文件和其他 C 系列语言文件混合。我遇到了同样的问题,因为我的目标路径中有一个 Objective-C 文件。我所做的只是将文件名包含在 exclude
数组中。
因此,如果您在“mobile-HDISegurado-ios
”中有一个文件,请务必忽略 Objective-C 类,方法是在 exclude
参数中传递文件名。
2021 年解决方案 - Xcode 11 岁及以上
此外,如果您在 Objective-C 项目或工作区中添加了 Swift 文件,但后来删除了所有 Swift 文件,Xcode 仍会在构建设置下保留一些条目。检查 Swift 相关选项,如下所示:
- SWIFT_INSTALL_OBJC_HEADER
- SWIFT_OPTIMIZATION_LEVEL
- SWIFT_VERSION
如果您删除这些选项,Xcode 将不再出现错误,您可以安全地安装您的软件包。
测试:
- swift-tools-version:5.1及以上
- Xcode 11.3 及以上
最佳。
SPM 现在支持混合语言源文件,但您可能必须将它们分成多个目标。
Targets can contain Swift, Objective-C/C++, or C/C++ code, but an individual target can’t mix Swift with C-family languages. For example, a Swift package can have two targets, one that contains Objective-C, Objective-C++, and C code, and a second one that contains Swift code.
实际上,您应该将 ObjC/C/C++ 文件移动到一个目录,将您的 Swift 文件移动到另一个目录,然后修改您的 Package.swift 这样:
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrarySwift", "MyLibraryObjC"]),
],
.target(name: "MyLibraryObjC",
path: "Sources/MyLibraryObjC"
),
.target(name: "MyLibrarySwift",
path: "Sources/MyLibrarySwift"
)