Add dependency on a local swift package in Xcode 1

2020-06-16 08:07发布

问题:

I am trying to add a dependency on a local swift package in my Xcode project. (I don't want to add a dependency using a file url file://me/dev/app/package as this cannot be shared to other environments)

I tried to drag & drop the package to the target. This creates a references to the package in the project that I was able to add in the "Link Binary With Libraries" build phase, but the library is still not found.

No such module 'Analytics'

My original configuration

After drag & drop

and here is my package configuration:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "Analytics",
    products: [
        .library(name: "Analytics", targets: ["Analytics"]),
    ],
    dependencies: [
        .package(path: "../SomeOtherPackage"),
    ],
    targets: [
        .target(name: "Analytics", dependencies: [
            "SomeOtherPackage",
        ]),
    ]
)

I've also included the Package in the target linked binaries and/or bundle resources and/or compiled sources to no avail:

I've read this long discussion that doesn't seem to be conclusive.

Here is a simple example of what I'm trying: https://github.com/gsabran/SPM_Xcode_test

回答1:

Here is literally what I do and it just works... Xcode 11.2

I. Prepare package

  1. File > New > Swift Package > Select Empty Folder (or create new) > Enter Library Name (MyLibrary)

  2. Here in project find MyLibrary.swift and make public structure & variable, so there is some export to use in app (I made static constant and fixed UT)

  3. Build > OK > Close Project

II. Prepare project

  1. File > New > Project > iOS > Single View App > Enter Name (MyApp) > Next > Select Same Folder as above (it is by default) > Create

  2. Build > OK

  3. From Finder drag MyLibrary folder right below project name in Xcode Project Navigator

  4. Build > OK

  5. Click MyApp project icon in Project Navigator > Select MyApp application target > section Frameworks, Libraries, … click + > In topmost Workspace section select MyLibrary > Add

  6. Clean > Build > OK

  7. Open ContentView.swift > type import MyLibrary (autocompletion already see it) Replace “Hello, World” with "(MyLibrary.text)"

  8. Build & Run > OK

That’s it.

To verify used relative path open project.pbxproj in TextEdit, here is screenshot

Update:
Note1 - I've considered some delay in package resolving after Clean, so during some period of time, 1-2 mins here, Build fails exactly with reported error, but after that delay it is visible that index restarted and following Build succeeded.
Note2 - Adding second dependent package in graph (MyApp > MyLibrary > AnotherLibrary) is the same.