Ошибка сборки при попытке создать инструмент командной строки на основе Swift в зависимости от сторонней среды: эта цель может включать в себя собственный продукт

Контекст: я хочу создать простой инструмент командной строки Swift с использованием CryptoSwift. Я относительно новичок в Xcode и Swift (и MacOS!).

Конфигурация:
- MacOS High Sierra 10.13.2
- Xcode: 9,2

шаги:

  1. Я запускаю Xcode
  2. Создать новый проект "Инструмент командной строки" для MacOS
  3. Вариант для моего проекта:
    • Название продукта: cryptodemo
    • Идентификатор организации: com.demo
    • Язык Свифт
  4. Я создаю проект в ~/Documents
  5. Заполните мой main.swift:

    import Foundation
    import CryptoSwift
    
    print("Hello, World!")
    
    let bytes:Array<UInt8> = [0x01, 0x02, 0x03]
    let digest = Digest.md5(bytes)
    
  6. Откройте оболочку и войдите в ~/Documents/cryptodemo

  7. Добавьте CryptoSwift как подмодуль, как определено README проекта, используя: git submodule add https://github.com/krzyzanowskim/CryptoSwift.git
  8. Откройте Finder и перетащите CryptoSwift.xcodeproj файл в мой проект XCode
  9. В Xcode я захожу в свой проект Build Phase

    • я добавил CryptoSwift как целевая зависимость
    • я добавил CryptoSwift.framework в Link Binaries with Libraries
    • я добавил CryptoSwift.framework в Copy Files с:
      • Место назначения: Framework
      • SubPath: (пусто)
  10. Тогда я строю это. У меня есть эта ошибка:

    Check dependencies
    
    Unable to run command 'PBXCp CryptoSwift.framework' - this target might include its own product.
    Unable to run command 'CodeSign A' - this target might include its own product.
    

Вот архив проекта cryptodemo.zip

2 ответа

Решение

Единственный способ, которым мне удалось создать инструмент командной строки с использованием сторонних библиотек Swift, - это использование Swift Package Manager (SPM).

Пример проекта Swift с использованием SPM (который может быть сгенерирован с использованием swift package init --type executable):

// 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: “mytool”,
    dependencies: [
        .package(url: "https://github.com/myfreeweb/SwiftCBOR.git", .branch("master")),
    ],
    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: “mytool”,
            dependencies: [ "SwiftCBOR" ]),
    ]
)

Проект XCode может быть сгенерирован из этого SPM, используя: swift package generate-xcodeproj

Удалите шаг 9 и добавьте CryptoSwift.framework в "Связанные фреймворки и библиотеки".

введите описание изображения здесь

Как здесь: введите описание изображения здесь

Другие вопросы по тегам