firebase-ios-sdk: `No such module 'Promises'` when building for testing on Xcode 15.0-beta5

Description

We have been using the Firebase iOS SDK for some time in our iOS project. In looking to start using Xcode 15 exclusively, when using current versions of everything (specified below), we see the following issue, using the same Xcode project file:

  1. In Xcode 14.3.1, Build for Running -> builds ok
  2. In Xcode 14.3.1, Build for Testing -> builds ok
  3. In Xcode 15.0-beta5, Build for Running -> builds ok
  4. In Xcode 15.0-beta5, Build for Testing -> fails to build with the following error:

No such module 'Promises in FirebaseSessions at line 21: @_implementationOnly import Promises

We’ve tried adding the -ld64 other linker flag, cleaning the build and Derived Data folders, as well as removing and re-adding the Firebase package.

Screenshot: 258692003-2f3f88ad-7aaf-4b57-aec7-2cbd7b42982d

Reproducing the issue

No response

Firebase SDK Version

10.13.0

Xcode Version

15.0 beta 5 (15A5209g)

Installation Method

Swift Package Manager

Firebase Product(s)

All

Targeted Platforms

iOS

Relevant Log Output

No response

If using Swift Package Manager, the project’s Package.resolved

Expand Package.resolved snippet

{
  "object": {
    "pins": [
      {
        "package": "abseil",
        "repositoryURL": "https://github.com/google/abseil-cpp-binary.git",
        "state": {
          "branch": null,
          "revision": "bfc0b6f81adc06ce5121eb23f628473638d67c5c",
          "version": "1.2022062300.0"
        }
      },
      {
        "package": "Diagnostics",
        "repositoryURL": "https://github.com/WeTransfer/Diagnostics.git",
        "state": {
          "branch": null,
          "revision": "c3816d37ff6993b7de46aff3370354c4cadca7c8",
          "version": "4.5.0"
        }
      },
      {
        "package": "ExceptionCatcher",
        "repositoryURL": "https://github.com/sindresorhus/ExceptionCatcher",
        "state": {
          "branch": null,
          "revision": "a7acaf40f8bd67a1f3a05a14de5b6a861ac3d1ac",
          "version": "2.0.1"
        }
      },
      {
        "package": "Firebase",
        "repositoryURL": "https://github.com/firebase/firebase-ios-sdk",
        "state": {
          "branch": null,
          "revision": "df2171b0c6afb9e9d4f7e07669d558c510b9f6be",
          "version": "10.13.0"
        }
      },
      {
        "package": "GoogleAppMeasurement",
        "repositoryURL": "https://github.com/google/GoogleAppMeasurement.git",
        "state": {
          "branch": null,
          "revision": "03b9beee1a61f62d32c521e172e192a1663a5e8b",
          "version": "10.13.0"
        }
      },
      {
        "package": "GoogleDataTransport",
        "repositoryURL": "https://github.com/google/GoogleDataTransport.git",
        "state": {
          "branch": null,
          "revision": "aae45a320fd0d11811820335b1eabc8753902a40",
          "version": "9.2.5"
        }
      },
      {
        "package": "GoogleUtilities",
        "repositoryURL": "https://github.com/google/GoogleUtilities.git",
        "state": {
          "branch": null,
          "revision": "c38ce365d77b04a9a300c31061c5227589e5597b",
          "version": "7.11.5"
        }
      },
      {
        "package": "gRPC",
        "repositoryURL": "https://github.com/google/grpc-binary.git",
        "state": {
          "branch": null,
          "revision": "f1b366129d1125be7db83247e003fc333104b569",
          "version": "1.50.2"
        }
      },
      {
        "package": "GTMSessionFetcher",
        "repositoryURL": "https://github.com/google/gtm-session-fetcher.git",
        "state": {
          "branch": null,
          "revision": "d415594121c9e8a4f9d79cecee0965cf35e74dbd",
          "version": "3.1.1"
        }
      },
      {
        "package": "Kingfisher",
        "repositoryURL": "https://github.com/onevcat/Kingfisher.git",
        "state": {
          "branch": null,
          "revision": "c75584ac759cbb16b204d0a7de3ebf53ea6b304d",
          "version": "7.9.0"
        }
      },
      {
        "package": "leveldb",
        "repositoryURL": "https://github.com/firebase/leveldb.git",
        "state": {
          "branch": null,
          "revision": "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
          "version": "1.22.2"
        }
      },
      {
        "package": "nanopb",
        "repositoryURL": "https://github.com/firebase/nanopb.git",
        "state": {
          "branch": null,
          "revision": "819d0a2173aff699fb8c364b6fb906f7cdb1a692",
          "version": "2.30909.0"
        }
      },
      {
        "package": "Promises",
        "repositoryURL": "https://github.com/google/promises.git",
        "state": {
          "branch": null,
          "revision": "e70e889c0196c76d22759eb50d6a0270ca9f1d9e",
          "version": "2.3.1"
        }
      },
      {
        "package": "RevenueCat",
        "repositoryURL": "https://github.com/RevenueCat/purchases-ios.git",
        "state": {
          "branch": null,
          "revision": "f2f5314fa92d3556fe23e857b34eeed13934c6fb",
          "version": "4.25.2"
        }
      },
      {
        "package": "SFSafeSymbols",
        "repositoryURL": "https://github.com/SFSafeSymbols/SFSafeSymbols",
        "state": {
          "branch": null,
          "revision": "7cca2d60925876b5953a2cf7341cd80fbeac983c",
          "version": "4.1.1"
        }
      },
      {
        "package": "swift-log",
        "repositoryURL": "https://github.com/apple/swift-log.git",
        "state": {
          "branch": null,
          "revision": "32e8d724467f8fe623624570367e3d50c5638e46",
          "version": "1.5.2"
        }
      },
      {
        "package": "SwiftProtobuf",
        "repositoryURL": "https://github.com/apple/swift-protobuf.git",
        "state": {
          "branch": null,
          "revision": "ce20dc083ee485524b802669890291c0d8090170",
          "version": "1.22.1"
        }
      },
      {
        "package": "swiftui-introspect",
        "repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git",
        "state": {
          "branch": "master",
          "revision": "e93995cb75170a18113ddf1e3cf0d0668c33c8b2",
          "version": null
        }
      },
      {
        "package": "SwiftUIX",
        "repositoryURL": "https://github.com/SwiftUIX/SwiftUIX",
        "state": {
          "branch": null,
          "revision": "75d5be2c85ec1e3ccbd9d99d321dd3abb5955e8d",
          "version": "0.1.6"
        }
      }
    ]
  },
  "version": 1
}


If using CocoaPods, the project’s Podfile.lock

Expand Podfile.lock snippet

Replace this line with the contents of your Podfile.lock!

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 18 (10 by maintainers)

Most upvoted comments

woohoo, thanks @ncooke3 and @paulb777 !! 🎉

Yep. I still see the C++ linkage issue from Firestore with the Xcode 15 RC. The original issue reported here of not being able to add both Crashlytics and Performance to the test target has been addressed.

I suspect something about the Xcode 14 generated binary for Firestore may be missing something needed by Xcode 15. We’ll continue to investigate.

Seems to be some sort of C++ symbol or linkage problem. I’m not sure why it only shows up in the test target. @ncooke3 any ideas?

I’ve reduced the test case to determine it’s sufficient to have only FirebasePerformance and FirebaseCrashlytics as dependencies of the test target. Removing one of them is sufficient to build successfully.

We might want to do a bit more investigation, but my current thought is that this is an Xcode build system bug.

A workaround may be to remove one of those two dependencies if you don’t need to depend on both in the test target.

Screenshot 2023-08-07 at 2 39 38 PM

Thanks! I’ve reproduced and I’m investigating …

Here is a reproducible example @paulb777https://github.com/whforward/promises-debugging – a fresh new Xcode project created with Xcode 15-beta5, bringing in only the current 10.13.0 version of the Firebase SDK, and I get the results as described above.

Greatly appreciate any insight you might have here.

Hmm, we may need a reproducible example, since I’m able to successfully build Sessions for testing in beta 5.