swift-log icon indicating copy to clipboard operation
swift-log copied to clipboard

Build fails when BUILD_LIBRARY_FOR_DISTRIBUTION is set to YES

Open manuelmayer-dev opened this issue 1 year ago • 4 comments

Expected behavior

The build should succeed when BUILD_LIBRARY_FOR_DISTRIBUTION is set to YES

Actual behavior

The build failes with following error:

/Users/.../Library/Developer/Xcode/DerivedData/...-bpquduvhbvfnlzdecjxlvelyutun/SourcePackages/checkouts/swift-log/Sources/Logging/Logging.swift:56:9: error: initializer for class 'Logger.Storage' is '@inlinable' and must delegate to another initializer
        init(label: String, handler: any LogHandler) {
        ^
** ARCHIVE FAILED **

If BUILD_LIBRARY_FOR_DISTRIBUTION is set to NO, it compiles without problems.

Steps to reproduce

  1. Create a new framework and add SwiftLog dependency
  2. Build with xcodebuild: xcodebuild archive -quiet -scheme framework -configuration Release SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES -archivePath "./framework-iphoneos" -destination "generic/platform=iOS"

SwiftLog version/commit hash

1.6.1

Swift & OS version (output of swift --version && uname -a)

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 Darwin MBP-MMayer.local 23.5.0 Darwin Kernel Version 23.5.0: Wed May 1 20:12:58 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6000 arm64

manuelmayer-dev avatar Jun 28 '24 10:06 manuelmayer-dev

Any fix for this. I am facing the similar issue

zeeshanmakeen avatar Jul 12 '24 07:07 zeeshanmakeen

This package, like many other packages, doesn't support building in library evolution mode. The package is intended to be consumed from source. If you want to use this package in a framework that you are distributing you need to use private import Logging or @_implementationOnly import Logging to hide the dependency.

FranzBusch avatar Jul 12 '24 07:07 FranzBusch

Would one have any recourse as a consumer of a package that depends on this? I'm experiencing the same issue, but I'm not the author of the package that depends on swift-log

TheNorthEestern avatar Aug 09 '24 21:08 TheNorthEestern

If you're using an Xcode project, you could split the code that (transitively) depends on swift-log into a separate framework that has BUILD_LIBRARY_FOR_DISTRIBUTION=NO. This combined with Franz's suggestions above of making the imports not leak into dependents should allow a framework to have a stable ABI, but still internally depend on swift-log.

czechboy0 avatar Mar 11 '25 12:03 czechboy0