3

I created a new Package with Xcode and incorporated a dependency, however when I try to use it, I get an error.

Swift Package Error

How do I use the dependency in the Package sources? In a normal project, I can easily import and use AgileDB.

Here's the Package:


// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "DBCore",
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library(
            name: "DBCore",
            targets: ["DBCore"]),
    ],

    dependencies: [
          .package(url: "https://github.com/AaronBratcher/AgileDB", from: "6.4.0")
    ],

    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 this package depends on.

        .target(
            name: "DBCore",
            dependencies: []),
        .testTarget(
            name: "DBCoreTests",
            dependencies: ["DBCore"]),
    ]
)

Perhaps the AgileDB package as a dependency in the target? I tried copying that and it won't recognize it.

3
  • Inside AgileDB check file Package. That will have something like name: "X". Try using that in your import Commented Apr 24, 2022 at 18:15
  • @SuyashMedhavi The name is AgileDB and can be found here: github.com/AaronBratcher/AgileDB Commented Apr 24, 2022 at 21:54
  • I have added a detailed answer explaining how to add a Library. Please check if you have maybe missed a step here or all the required entries are present as outlined. Commented Apr 25, 2022 at 17:04

3 Answers 3

2

Found my answer.

In the target dependencies, need to include the package name as a string:

        // 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 this package depends on.

        .target(
            name: "DBCore",
            dependencies: [
                    "AgileDB"
                ]),

        .testTarget(
            name: "DBCoreTests",
            dependencies: ["DBCore"]),
    ]
Sign up to request clarification or add additional context in comments.

Comments

0

In my case I had to specify both package and product. E.g. for swift-math-parser, the Package.swift states:

let package = Package(
  name: "swift-math-parser",
  // ...
  products: [
    .library(
      name: "MathParser",
      targets: ["MathParser"]
    )
  ],
  // ...

So I had to specify the dependency in my own Package.swift as:

let package = Package(
    // ...
    targets: [
        .target(
            name: "MyPackage",
            dependencies: [
                .product(name: "MathParser", package: "swift-math-parser"),
            ]
        ),
    // ...

Comments

-3

Step by step guide:

enter image description here

  1. Open project settings
  2. Click on "Package Dependencies"
  3. Click on the "Plus" icon and add your package in the window that opens
  4. Your added package should appear in the list

enter image description here

  1. Package should also appear under "Package Dependencies" in the left bar

enter image description here

  1. Click on your target
  2. Navigate to "General" tab and "Frameworks and Libraries" section under that
  3. Click on "Plus" icon and select/add your package in the window that opens
  4. Your added package should appear in the list

enter image description here

  1. Package should automatically be added in "Build Phases" tab under "Link Binary with Libraries" section. If it isn’t add it by clicking the "Plus" icon

At this point you should be able to import and use the package in any of the files under this target.

1 Comment

My "Project" is a Swift Package. See the picture in my question. There is no project or targets as you specify in your directions. What you show is good, however I already have that working elsewhere. I recommend deleting this answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.