8

Another issue with SwiftPM Xcode integration

 3 years ago
source link: https://www.jessesquires.com/blog/2020/03/04/another-issue-with-swiftpm-xcode-integration/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

04 Mar 2020

software-dev    cocoapods, dependencies, ios, macos, swiftpm, xcode

I recently wrote about using SwiftPM instead of CocoaPods, which included a list of pros and cons. While working on one of my projects that is using SwiftPM, I realized another issue with how SwiftPM currently integrates with Xcode.

I mentioned that there is no equivalent of a Pods/ directory with SwiftPM and that package dependencies are stored in Xcode’s derived data directory, ~/Library/Developer/Xcode/DerivedData/. This is problematic beyond not being able to check-in dependencies into source control. What I failed to realize at the time are the implications for cleaning or deleting derived data, which unfortunately is often necessary when working with Xcode. In fact, I have a custom shell command for doing this (which I call xcclean), and it runs rm -rf ~/Library/Developer/Xcode/DerivedData. Most folks I know have something similar, because Xcode.

This will not work if you are using SwiftPM. If you completely nuke your DerivedData/ directory and then attempt to build your project, it will fail to build with the error “Missing package product” for each package. To trigger re-downloading, you must choose File > Swift Packages > Resolve Package Versions. What a pain this would be if you were working without an Internet connection.

Luckily, simply “cleaning” your build folder by choosing Product > Clean Build Folder in the Xcode file menu, or cmd+shift+K will do the correct thing, and leave your package sources intact.

I suppose I will have to update my xcclean command to be smarter.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK