出于某种原因,当我尝试在我的
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' 包含混合语言源文件;不支持该功能
更多详情:
SPM 现在支持混合语言源文件,但您可能必须将它们分成多个目标。
来自相关文档:
目标可以包含 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: ["MyLibrarySwift", "MyLibraryObjC"]),
],
.target(name: "MyLibraryObjC",
path: "Sources/MyLibraryObjC"
),
.target(name: "MyLibrarySwift",
path: "Sources/MyLibrarySwift"
)
此外,如果您在 Objective-C 项目或工作区中添加了 Swift 文件,但后来删除了所有 Swift 文件,Xcode 仍会在“构建设置”下保留一些条目。检查 Swift 相关选项,如下行所示:
如果删除这些选项,Xcode 将不再给出错误,您可以安全地安装您的软件包,没有任何麻烦。
测试:
最好的。
您正在使用 SPM 构建 iOS 项目吗?目前 SPM 不支持 iOS。不过,有一个 3rd 方工具可以填补这一空白:https://swiftxcode.github.io/
如果您正在为其他语言构建,那么您不能混合使用 Swift 文件和其他 C 系列语言文件。我遇到了同样的问题,因为我的目标路径中有一个 Objective-C 文件。我所做的只是将文件名包含在
exclude
数组中。
因此,如果“
mobile-HDISegurado-ios
”中有一个 Objective-C 类,请确保通过在 exclude
参数中传递文件名来忽略 Objective-C 类。
在搜索了大量内容之后,如果您想在包中使用目标 c 文件,那么这里是我使用过的包文件
// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "DMixed",
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "DMixed",
targets: ["DMixed"]),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "ObjHel",
publicHeadersPath: "include"
),
.target(
name: "DMixed", dependencies: ["ObjHel"]),
.testTarget(
name: "DMixedTests",
dependencies: ["DMixed"]),
]
)
我的项目结构看起来像这样
你可以这样使用它
import UIKit
import ObjHel
class TestVCs: UIViewController,WPCustomNumberPadViewControllerDelegate
{
func didTappedDone(withValue value: String!) {
print("Abc")
}
}