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
Может, я упускаю что-то очевидное? Я все еще новичок в быстром мире.
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!