Невозможно создать библиотеку Swift Package Manager - PullRequest
0 голосов
/ 29 апреля 2018

Документация по SPM довольно скудная, и большинство статей о ней было опубликовано в начале SPM.

Я реализовал алгоритм (венгерский алгоритм) в Swift и с нетерпением ждал возможности опубликовать его в виде библиотеки в Github. Мне впервые пришлось использовать SPM в этом проекте, чтобы устранить другую зависимость, и как только она начала работать, она была идеальной.

Теперь я не могу использовать свою библиотеку из другого проекта. Я решил начать с нового свежего git-репо, потому что я не мог заставить предыдущего работать.

Библиотека называется Hume и имеет внутри файл Hume.swift, который определяет класс Hume.

Шаги, которые я прошел, следующие:

  1. Создан каталог для библиотеки
  2. swift package init --type library
  3. Заполнил файлы с кодом
  4. отправлено в репозиторий GitHub + помечено версия
  5. Создан каталог для исполняемого файла, который будет использовать библиотеку
  6. swift package init --type executable
  7. Добавить зависимость в Package.swift
  8. swift build

На этом этапе swift клонирует репозиторий библиотеки и без проблем компилирует его (поскольку main.swift содержит только Hello world).

  1. 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. Я просто не знаю, что я делаю не так.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 29 апреля 2018

Мне наконец-то удалось заставить вещи работать. Проблема заключалась в том, что класс (и его метод init) не был объявлен как public. Остальная конфигурация верна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...