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

时间:2019-09-28 21:22:32

标签: ios c swift xcode package-managers

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

这是C函数,它添加2个双精度值。

//  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
}
}

项目结构如下:

enter image description here

此应用程序可以正常运行。

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

enter image description here

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

但是,该包裹无法识别。

enter image description here

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

没有看到您的Package.swift文件,就无法知道您的软件包安装是否正确。查看您发布的图片,我可能得出的最好猜测是它的配置不正确。

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

如果您查看我拥有的this回购,我同时使用C和Swift,因此您可以看到如何设置Package.swift来构建两个目标。