如何在 Xcode 11 包管理器中处理 C 文件?

How to handle C-Files in Xcode 11 package manager?

我有一个 C 函数,我在 Swift 包装函数中调用它。 现在,我想用这个 Swift 包装函数创建一个 Swift 包。 但是,我做错了。

这是将 2 个双精度值相加的 C 函数。

//  addDoubles.c
#include <math.h>
#include "addDoubles.h"

double addDoubleWithC(double val1, double val2) {
    return val1 + val2;
}

这里是 Swift 具有包装功能的文件:

//  WrappedCFunctions.swift
import Foundation
public struct WrappedCFunctions {    
public static func addDoubles(val1:Double, val2:Double) -> Double{
    let resulFromCFunction = addDoubleWithC(val1, val2)
return resulFromCFunction
}
}

在viewController我正在使用这个函数:

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    let val1 = 1.11
    let val2 = 2.22
    let result = WrappedCFunctions.addDoubles(val1: val1, val2: val2) 
    let txt = String(val1) + " + " + String(val2) + " = " + String(result)
    textLabel.text = txt
}
}

项目结构如下:

此应用程序正常运行,符合预期。

在下一步中,我使用 File-> New-> Swift 创建了一个名为 Math 的包。 然后我将文件 WrappedCFunctions.swift 从 AddDoubles 文件夹移动到包的 CMath/Source/CMath 文件夹中。在下一步中,我将包包含到项目中。这导致以下结构:

最后但同样重要的是,我在 ViewController.swift 中添加了一个 Import CMath 语句并构建了项目。

但是,无法识别包裹。

如何解决这个问题?

如果没有看到您的 Package.swift 文件,就不可能知道您的包是否设置正确。查看您制作的图片 post 我的最佳猜测是配置不正确。

我猜这是因为当您需要 2 个目标时,您的 Sources/ 中只有 1 个目录(通常 SwiftPM 每个目标有 1 个目录,而我没有在包中看不到任何 .c 文件)。 C 代码需要成为 Swift 目标所依赖的目标。然后你有一个依赖于 Swift 目标的产品。该产品就是您 link 并在 Xcode 中导入的产品。

如果您查看我的 this 存储库,我会同时使用 C 和 Swift,这样您就可以看到我是如何设置 Package.swift 来构建 2 个目标的。