Hello!

I'm trying to extract some of our internal modules to external modules, compiled and distributed as xcframeworks. I'm struggling right now linking back the new xcframework back to the app.

When I compile the application with the new dependency added, I get several errors in the generated swiftinterface.

The original code (the library to be extracted) contains among many other things, an extension on Swift.Result:

public extension Swift.Result {
  
  typealias Callback = (_ result: Swift.Result<Success, Failure>) -> Void

  init(value: Success) {
    self = .success(value)
  }
  
  init(error: Failure) {
    self = .failure(error)
  }

  var value: Success? {
    return try? self.get()
  }

...

Where Success and Failure are defined as generic types of Swift.Result:

// A value that represents either a success or a failure, including an
/// associated value in each case.
@frozen public enum Result<Success, Failure> where Failure : Error {

    /// A success, storing a `Success` value.
    case success(Success)

    /// A failure, storing a `Failure` value.
    case failure(Failure)

...

The generated .swiftinterface contains these declarations as expected, but when I try to compile the app it raises an "use of undeclared type" for both Success and Failure. How can I let the compiler know those are generic types?

This is definitely a bug -- any .swiftinterface that the compiler produces when BUILD_LIBRARY_FOR_DISTRIBUTION is enabled needs to be compilable. Is there any chance you can file it on bugs.swift.org and attach a small project that reproduces the issue?

1 Like

Sure!

Thanks for coming back so quickly. I'll try to generate a minimal version with the current setup and file it.

1 Like