7

コマンドラインから実行され、Swifttestを使用してテストされるSwift Package Managerを使用するアプリケーションがあります。私は Xcode を使用しておらず、これが私の最初の Swift プロジェクトであるため、このエラーから抜け出す方法がわかりません。

使用しなくなった依存関係を削除しようとしています。私のPackage.swiftファイルは次のようになります。

import PackageDescription

let package = Package(
    name: "MyApplication",
    targets: [
        Target(name: "Target1"),
        Target(name: "Target2", dependencies: ["Target1"]),
        Target(name: "Application", dependencies: ["Target2"]),
        Target(name: "Specs", dependencies: ["Target1", "Target2"]),
    ],
    dependencies: [
        .Package(url: (test package))
    ]
)

そして、「Target2」から「Target1」への依存をなくしたいと考えています。このエラーが発生しています:

Linking Application
Undefined symbols for architecture x86_64:
  "__TFC10Target1CfT_S0_", referenced from:
      _main in main.swift.o
  "__TMaC10Target1", referenced from:
      _main in main.swift.o
ld: symbol(s) not found for architecture x86_64

このエラーについて私が確認した解決策はすべて Xcode を参照しているため、正直なところ、これをどこで探すべきかさえわかりません。Target1 ファイルは、Target2 ファイルのどこでも使用または参照されていません。アプリケーションの設計は次のとおりです。

├── Package.swift
├── README.md
└── Sources
    ├── Application
    │   └── main.swift
    ├── Target1
    │   ├── Model1.swift
    │   └── Model2.swift
    ├── Target2
    │   ├── Model3.swift
    │   └── View.swift
    └── Specs
        ├── main.swift
        ├── Model1Spec.swift
        ├── Model2Spec.swift
        └── Model3Spec.swift

アプリケーション内の私のmain.swiftファイルはランナーです。ここでは、Target1 クラスの関数の戻り値を Target2 クラスの新しいインスタンスに挿入しているため、2 つのファイルが接続される唯一の場所です。これはおそらく必要以上の情報です。

とにかく、なぜこれが起こっているのですか?Package.swift実際に依存していないものへの依存を維持する必要があるのはなぜですか?

ご協力いただきありがとうございます。さらに情報が必要な場合はお知らせください。

4

1 に答える 1

5

アプリケーションからターゲット 1 を使用していますが、それがエラーの原因です。アプリケーションはターゲット 2 に依存します (これは現在、提供された Package.swift のターゲット 1 に依存しています)。それを削除すると、アプリケーションはターゲット 1 から何も使用できなくなります。

于 2016-03-17T17:18:30.253 に答える