swift CryptoKit на Ubuntu

Я пытаюсь скомпилировать небольшую быструю программу main.swift в исполняемый файл в Ubuntu 18.08. Я использую Swift Package Manager для управления своими зависимостями. В этом очень простом случае у меня есть только одна зависимость, а именно этот CryptoKit с открытым исходным кодом. У меня есть один быстрый файл, который просто пытается импортировать CryptoKit.

import Foundation
import CryptoKit
print("phew")

Мой файл Package.swift выглядит так:

// swift-tools-version:5.2

import PackageDescription

let package = Package(
    name: "decryp",
    dependencies: [
      .package(url: "https://github.com/apple/swift-crypto.git", .upToNextMajor(from: "1.0.1"))
    ],
    targets: [
        .target(
            name: "decryp",
            dependencies: ["swift-crypto"]
        ),
        .testTarget(
            name: "decrypTests",
            dependencies: ["decryp"]),
    ]
)

Когда я пытаюсь собрать исполняемый файл с помощью быстрой сборки, он извлекает репозиторий, но затем выдает ошибку с не найденным продуктом. stdout из быстрой сборки:

Fetching https://github.com/apple/swift-crypto.git
Cloning https://github.com/apple/swift-crypto.git
Resolving https://github.com/apple/swift-crypto.git at 1.0.2
'decryp' /home/kah/decryp: error: product 'swift-crypto' not found. It is required by target 'decryp'.
warning: dependency 'swift-crypto' is not used by any target

Может, я упускаю что-то очевидное? Я все еще новичок в быстром мире.


person Whir    schedule 14.08.2020    source источник


Ответы (1)


Глядя на swift-crypto Package.swift, можно было понять. Имя библиотеки swift-crypto - Crypto, поэтому я попытался использовать это, что дало ошибку:

 error: dependency 'Crypto' in target 'decryp' requires explicit declaration; 
 reference the package in the target dependency with '.product(name: "Crypto", 
 package: "swift-crypto")'

Но это говорит о том, что делать, поэтому, когда я изменил свой Package.swift на следующий и импортировал Crypto вместо CryptoKit, все работает!

// swift-tools-version:5.2

import PackageDescription

let package = Package(
    name: "decryp",
    dependencies: [
      .package(url: "https://github.com/apple/swift-crypto.git", .upToNextMajor(from: "1.0.1"))
    ],
    targets: [
        .target(
            name: "decryp",
            dependencies: [
              .product(name: "Crypto", package: "swift-crypto")
]
        ),
        .testTarget(
            name: "decrypTests",
            dependencies: ["decryp"]),
    ]
)

Теперь я могу отправить зашифрованное сообщение со своего телефона на сервер, а затем расшифровать его локально на моем ноутбуке с Ubuntu благодаря команде swift-crypto!

person Whir    schedule 14.08.2020