Документация по SPM довольно скудная, и большинство статей о ней было опубликовано в начале SPM.
Я реализовал алгоритм (венгерский алгоритм) в Swift и с нетерпением ждал возможности опубликовать его в виде библиотеки в Github. Мне впервые пришлось использовать SPM в этом проекте, чтобы устранить другую зависимость, и как только она начала работать, она была идеальной.
Теперь я не могу использовать свою библиотеку из другого проекта. Я решил начать с нового свежего git-репо, потому что я не мог заставить предыдущего работать.
Библиотека называется Hume и имеет внутри файл Hume.swift, который определяет класс Hume.
Шаги, которые я прошел, следующие:
- Создан каталог для библиотеки
swift package init --type library
- Заполнил файлы с кодом
- отправлено в репозиторий GitHub + помечено версия
- Создан каталог для исполняемого файла, который будет использовать библиотеку
swift package init --type executable
- Добавить зависимость в Package.swift
swift build
На этом этапе swift клонирует репозиторий библиотеки и без проблем компилирует его (поскольку main.swift содержит только Hello world).
swift package generate-xcodeproj
Когда я открываю проект и пытаюсь импортировать свою библиотеку, кажется, что имя модуля распознано, но когда я пытаюсь объявить объект, он говорит, что не может объявить переменную типа, являющегося модулем.
Это файл Package.swift в библиотеке:
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "Hume",
products: [
.library(
name: "Hume",
targets: ["Hume"]),
],
dependencies: [
.package(url: "https://github.com/aleph7/Upsurge.git", from: "0.10.2"),
],
targets: [
.target(
name: "Hume",
dependencies: ["Upsurge"]),
.testTarget(
name: "HumeTests",
dependencies: ["Hume"]),
]
)
В библиотеке есть только один файл с этим стилем:
import Upsurge
class Hume {
// Attributes
....
init(matriz:[[Double]]){
....
}
public func resuelve() -> (Double, [(Int, Int)]){
....
}
}
Это Package.swift в фиктивном исполняемом файле:
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "aa",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(url: "https://github.com/Jasagredo/Hume.git", from: "0.1.1"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "aa",
dependencies: ["Hume"]),
]
)
Выход при строительстве:
~/Desktop/aa swift build
Fetching https://github.com/Jasagredo/Hume.git
Fetching https://github.com/aleph7/Upsurge.git
Cloning https://github.com/Jasagredo/Hume.git
Resolving https://github.com/Jasagredo/Hume.git at 0.1.1
Cloning https://github.com/aleph7/Upsurge.git
Resolving https://github.com/aleph7/Upsurge.git at 0.10.2
Compile Swift Module 'Upsurge' (30 sources)
Compile Swift Module 'Hume' (1 sources)
Compile Swift Module 'aa' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/aa
~/Desktop/aa
Но когда я редактирую main.swift в фиктивном исполняемом файле, я нахожу эту ошибку:
import Hume
var a = Hume(matriz: [[1,1],[1,1]]) //Cannot call value of non-function type 'module<Hume>'
Кроме того, Xcode автоматически не предлагает мне класс Hume. Я просто не знаю, что я делаю не так.
Любая помощь приветствуется.