Description
- I have read the documentation.
Describe the bug
xcodebuild archive
fails in the following scenario.
To Reproduce
Steps to reproduce the behavior:
- Create a Swift Package, which depends on MetaCodable
- Create a Target which depends on
MetaCodable
,HelperCoders
and uses theMetaProtocolCodable
plugin. - Include this target as a product of the package
- Add types into the target which make use of dynamic data variations, in particular Step 9 from the tutorial: https://swiftpackageindex.com/swiftylab/metacodable/v1.3.0/tutorials/metacodable/dynamic
- Create an Xcode project for an iOS app which imports the product from the package.
- Add code-signing for your app
- Build and Archive from Xcode Product menu (or using
xcodebuild archive
)
Expected behavior
I should be able to archive the product.
Actual behaviour
Build script fails because build tools cannot find the executable tool ProtocolGen
.
Showing All Issues
sandbox-exec: execvp() of '//Users/daniel/Library/Developer/Xcode/DerivedData/Posts-aaxhnzolyyfxrgcsibzfeeijakbj/Build/Intermediates.noindex/ArchiveIntermediates/Posts/BuildProductsPath/Release/ProtocolGen' failed: No such file or directory
Screenshots

Environment (please complete the following information, remove ones not applicable):
- OS: macOS
- Version 14.4.1 (23E224)
- Xcode Version 15.3 (15E204a)
- Swift $ swift -version
swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
Target: arm64-apple-macosx14.0 - CocoaPods N/A
Additional context
I have created a small project to demonstrate this issue: https://github.com/danthorpe/metacodable_demo
A possible solution, would be to export ProtocolGen
as a Swift artefact bundle, and reference this as a binary target in your Package.swift. e.g. how SwiftLint is packaged. In this project, on macOS, the dependency is a binary target instead of the source code executable.