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
To resolve, Open the project from the project panel, select the project (not the targets), then select the "Swift Packages" tab. Double click on the package you want to update and change the minimum version to the next major version.
Open your Xcode project, navigate the File tab within the macOS bar, and click on “Add Packages”. In the Add New Package window, you can select from recently used or Apple Swift Packages. Alternatively, you can search for a package via the name or the URL to the Github page.
In order to cache the dependencies, they should be located in the project directory, but by default, SPM downloads the dependencies into the system folder: ~/Library/Developer/Xcode/DerivedData.
Select your project in the Project navigator, then select your app target and navigate to its General pane. Click the + button in the “Frameworks, Libraries, and Embedded Content” section, select the local package's library product, and add it as a dependency.
Here is literally what I do and it just works... Xcode 11.2
I. Prepare package
File > New > Swift Package > Select Empty Folder (or create new) > Enter Library Name (MyLibrary)
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)
Build > OK > Close Project
II. Prepare project
File > New > Project > iOS > Single View App > Enter Name (MyApp) > Next > Select Same Folder as above (it is by default) > Create
Build > OK
From Finder drag MyLibrary folder right below project name in Xcode Project Navigator
Build > OK
Click MyApp project icon in Project Navigator > Select MyApp application target > section Frameworks, Libraries, … click + > In topmost Workspace section select MyLibrary > Add
Clean > Build > OK
Open ContentView.swift > type import MyLibrary
(autocompletion already see it)
Replace “Hello, World” with "(MyLibrary.text)"
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With