思考如何创建一个库,以便我可以这样做:
// in MyProject/main.swift
import MyLibrary
let x = MyLibrary("foo")
...
目前,我只是在编译如下这样的快速文件:
swiftc main.swift
我也有一个Package.swift
,所以最终在main
生成了一个./main
文件。
想知道如何在本地执行此操作,因此我可以构建一个本地模块/库MyLibrary
,并在另一个项目MyProject
中本地使用它。
答案 0 :(得分:1)
如果仅打算使该库在macOS或Linux上可用,我建议切换到Swift Package Manager。目前,SPM仅适用于macOS和Linux,不适用于iOS / tvOS / watchOS。但是,它使库分发更加容易。
要将您的库转换为Swift Package Manager,其源文件必须位于以下目录结构中:
MyLibrary-package
├── Sources
│ └── MyLibrary
│ ├── File1.swift
│ └── File2.swift
├── Tests
│ └── MyLibraryTests
│ └── MyLibraryTests.swift
└── Package.swift
可以根据需要调用顶层文件夹,但是Sources
和Tests
文件夹应保留其名称。我有MyLibrary
的地方,可以放置包裹的名称,但是它必须与Package.swift
中目标的名称匹配。另外,用MyLibraryTests
替换的任何内容都必须与Package.swift
中测试目标的名称匹配。
您应将所有源文件放在MyLibrary
目录(或任何您重命名的目录)中。
这是一个示例Package.swift
文件,我认为它与您的项目设置相匹配。
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
.library(name: "MyLibrary", targets: ["MyLibrary"]),
],
targets: [
.target(name: "MyLibrary", dependencies: []),
.testTarget(name: "MyLibraryTests", dependencies: ["MyLibrary"]),
]
)
一旦您移动了源文件并更改了Package.swift
,就可以运行swift build
。您的库应建立在.build
文件夹中的某个位置(将创建)。它因计算机而异,但我的是.build/x86_64-apple-macosx10.10/debug/MyLibrary.build/
。
如果要专门使用静态库,请更改此行:
.library(name: "MyLibrary", targets: ["MyLibrary"]),
对此:
.library(name: "MyLibrary", type: .static, targets: ["MyLibrary"]),