bambuser / BambuserPlayerSDK-iOS

SDK of Bambusers live video shopping player for iOS
7 stars 1 forks source link

Dependency with lower Firebase SDK version #1

Closed sergiofresneda closed 11 months ago

sergiofresneda commented 1 year ago

I'm trying to integrate this Bambuser SDK but I got the next error:

Failed to resolve dependencies Dependencies could not be resolved because root depends on 'bambuserplayersdk-ios' 1.1.0..<2.0.0 and root depends on 'firebase-ios-sdk' 10.11.0..<10.12.0.
'bambuserplayersdk-ios' >= 1.1.0 practically depends on 'firebase-ios-sdk' 10.7.0 because 'bambuserplayersdk-ios' 1.1.0 depends on 'firebase-ios-sdk' 10.7.0 and no versions of 'bambuserplayersdk-ios' match the requirement 1.1.1..<2.0.0.

As far as I figure out, this is a conflict between Bambuser SDK dependency (Firebase exact v 10.7.0) and my project dependency (Firebase v 10.11.0).

So changing Firebase dependency version it solves the issue.

Firebase iOS SDK Changelog

sergiofresneda commented 1 year ago

Finally applying this PR to my project, now I can compile the project, but it crash and throw next error:

[FBLPromise firebaseInstallationID]: unrecognized selector sent to instance 0x6000003e3630
pontusj-bambuser commented 1 year ago

Hello Sergio! Thank you for reaching out to us about this issue. We are currently investigating solutions to support a wider variety of FirebaseSDK versions.

We are also trying to reproduce your runtime crash. Could you send us what dependencies you currently have? The Package.resolved file or a screenshot of the Package Dependencies tab would be great.

sergiofresneda commented 1 year ago

Hi @pontusj-bambuser, this is the Package.resolved file:

{
  "object": {
    "pins": [
      {
        "package": "abseil",
        "repositoryURL": "https://github.com/google/abseil-cpp-binary.git",
        "state": {
          "branch": null,
          "revision": "bfc0b6f81adc06ce5121eb23f628473638d67c5c",
          "version": "1.2022062300.0"
        }
      },
      {
        "package": "AppCenter",
        "repositoryURL": "https://github.com/microsoft/appcenter-sdk-apple.git",
        "state": {
          "branch": null,
          "revision": "5756ddb0f09041e91bdb3b73c17296ac005ad11a",
          "version": "5.0.3"
        }
      },
      {
        "package": "CS_iOS_SDK",
        "repositoryURL": "https://github.com/ContentSquare/CS_iOS_SDK.git",
        "state": {
          "branch": null,
          "revision": "6b431882be9886e27993cb5e38c41a1a4d1ff7f0",
          "version": "4.24.0"
        }
      },
      {
        "package": "CwlCatchException",
        "repositoryURL": "https://github.com/mattgallagher/CwlCatchException.git",
        "state": {
          "branch": null,
          "revision": "682841464136f8c66e04afe5dbd01ab51a3a56f2",
          "version": "2.1.0"
        }
      },
      {
        "package": "CwlPreconditionTesting",
        "repositoryURL": "https://github.com/mattgallagher/CwlPreconditionTesting.git",
        "state": {
          "branch": null,
          "revision": "02b7a39a99c4da27abe03cab2053a9034379639f",
          "version": "2.0.0"
        }
      },
      {
        "package": "Firebase",
        "repositoryURL": "https://github.com/firebase/firebase-ios-sdk.git",
        "state": {
          "branch": null,
          "revision": "e700a8f40c87c31cab7984875fcc1225d96b25bf",
          "version": "10.11.0"
        }
      },
      {
        "package": "FMDB",
        "repositoryURL": "https://github.com/ccgus/fmdb",
        "state": {
          "branch": null,
          "revision": "61e51fde7f7aab6554f30ab061cc588b28a97d04",
          "version": "2.7.7"
        }
      },
      {
        "package": "GoogleAppMeasurement",
        "repositoryURL": "https://github.com/google/GoogleAppMeasurement.git",
        "state": {
          "branch": null,
          "revision": "62e3a0c09a75e2637f5300d46f05a59313f1c286",
          "version": "10.11.0"
        }
      },
      {
        "package": "GoogleDataTransport",
        "repositoryURL": "https://github.com/google/GoogleDataTransport.git",
        "state": {
          "branch": null,
          "revision": "cc7265b8e3906304e6e81f32c1662a94bbae2357",
          "version": "9.2.2"
        }
      },
      {
        "package": "GoogleUtilities",
        "repositoryURL": "https://github.com/google/GoogleUtilities.git",
        "state": {
          "branch": null,
          "revision": "871d43135925cde39ef7421d8723ce47edfdcc39",
          "version": "7.11.1"
        }
      },
      {
        "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": "ImglyKit",
        "repositoryURL": "https://github.com/imgly/imglykit-sp.git",
        "state": {
          "branch": null,
          "revision": "aaeab421d096d317102648766bacc9c1ef8dcf09",
          "version": "10.29.0"
        }
      },
      {
        "package": "Kingfisher",
        "repositoryURL": "https://github.com/onevcat/Kingfisher",
        "state": {
          "branch": null,
          "revision": "af4be924ad984cf4d16f4ae4df424e79a443d435",
          "version": "7.6.2"
        }
      },
      {
        "package": "KlarnaMobileSDK",
        "repositoryURL": "https://github.com/klarna/klarna-mobile-sdk-spm",
        "state": {
          "branch": null,
          "revision": "bd2d6b532d71f72c7ed25ce138dfa3f99bcd77ba",
          "version": "2.6.8"
        }
      },
      {
        "package": "leveldb",
        "repositoryURL": "https://github.com/firebase/leveldb.git",
        "state": {
          "branch": null,
          "revision": "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
          "version": "1.22.2"
        }
      },
      {
        "package": "Lottie",
        "repositoryURL": "https://github.com/airbnb/lottie-ios",
        "state": {
          "branch": null,
          "revision": "79a0b70547f7c40ea54c67487f935fa2f2eaaadc",
          "version": "3.2.3"
        }
      },
      {
        "package": "nanopb",
        "repositoryURL": "https://github.com/firebase/nanopb.git",
        "state": {
          "branch": null,
          "revision": "819d0a2173aff699fb8c364b6fb906f7cdb1a692",
          "version": "2.30909.0"
        }
      },
      {
        "package": "Nimble",
        "repositoryURL": "https://github.com/Quick/Nimble.git",
        "state": {
          "branch": null,
          "revision": "af1730dde4e6c0d45bf01b99f8a41713ce536790",
          "version": "9.2.0"
        }
      },
      {
        "package": "PLCrashReporter",
        "repositoryURL": "https://github.com/microsoft/PLCrashReporter.git",
        "state": {
          "branch": null,
          "revision": "1aed8f7dc79ce8e674c61e430ef51ca3db18cea9",
          "version": "1.11.1"
        }
      },
      {
        "package": "Promises",
        "repositoryURL": "https://github.com/google/promises.git",
        "state": {
          "branch": null,
          "revision": "ec957ccddbcc710ccc64c9dcbd4c7006fcf8b73a",
          "version": "2.2.0"
        }
      },
      {
        "package": "Resolver",
        "repositoryURL": "https://github.com/hmlongco/Resolver.git",
        "state": {
          "branch": null,
          "revision": "97de0b0320036607564af4a60025b48f8d041221",
          "version": "1.5.0"
        }
      },
      {
        "package": "RiskifiedBeacon",
        "repositoryURL": "https://github.com/Riskified/riskified-ios-beacon",
        "state": {
          "branch": null,
          "revision": "bdb2fb65e63cc53be15451bb19f2d15fa0efe8b8",
          "version": "1.3.3"
        }
      },
      {
        "package": "SnowplowTracker",
        "repositoryURL": "https://github.com/snowplow/snowplow-ios-tracker.git",
        "state": {
          "branch": null,
          "revision": "1f76199fb4015d6722ffd10b56b197cf2abba42b",
          "version": "5.4.2"
        }
      },
      {
        "package": "SwiftProtobuf",
        "repositoryURL": "https://github.com/apple/swift-protobuf.git",
        "state": {
          "branch": null,
          "revision": "0af9125c4eae12a4973fb66574c53a54962a9e1e",
          "version": "1.21.0"
        }
      },
      {
        "package": "Optimizely",
        "repositoryURL": "https://github.com/optimizely/swift-sdk.git",
        "state": {
          "branch": null,
          "revision": "193cc00e1004d29f16f7b32e5b6787199760c482",
          "version": "3.10.1"
        }
      },
      {
        "package": "Trackingplan",
        "repositoryURL": "https://github.com/trackingplan/trackingplan-ios",
        "state": {
          "branch": null,
          "revision": "5049ab6db8dfd64b92aa32a949a60acdb5ce524f",
          "version": "1.0.29"
        }
      },
      {
        "package": "VideoEditorSDK",
        "repositoryURL": "https://github.com/imgly/vesdk-ios-build",
        "state": {
          "branch": null,
          "revision": "b0244465df00c4b420b72c9cba024399d3d921ec",
          "version": "10.29.0"
        }
      },
      {
        "package": "ZIPFoundation",
        "repositoryURL": "https://github.com/weichsel/ZIPFoundation.git",
        "state": {
          "branch": null,
          "revision": "cf10bbff6ac3b873e97b36b9784c79866a051a8e",
          "version": "0.9.12"
        }
      }
    ]
  },
  "version": 1
}

BTW: I'm not sure why the SDK needs this Firebase dependency, I guess internally is used because of Bambuser needs analytics data or crashlogs…, but it force the apps to add this Google Service explicitly even if they are not agree with (is not our case), but countries such as CN could have different points of view for Google Services.

Thanks

pontusj-bambuser commented 1 year ago

Thank you Sergio! We will look into it.

Yes, we are working on moving away from firebase. For now it is needed as the SDK has deep integration with Firebase Firestore. One of the key improvement points we have planned for the future is to use no external libraries for the SDK, but it will take some time and we have no date when that will be done.

pontusj-bambuser commented 12 months ago

We are still having trouble reproducing the runtime crash. Do you use any third party framework installed in some other way than SPM, like trough cocoa pods? That is a known issue with firebase.

What happens if you change your own dependency to firebase to 10.7.0?

If possible, could you send the compiled app to us (from Build/Products/Debug-iphoneos directory)? If you feel uneasy to upload it to GitHub you can mail it to me at pontus.jacobsson@bambuser.com. Otherwise it would be great if we could have a quick meeting to try and debug it together.

sergiofresneda commented 12 months ago

We just use SPM for dependencies, I'll send you more information about the issue on Monday. BTW I did test (and got the crash) on Simulator iOS 16.6.x.

sergiofresneda commented 12 months ago

Log when the app crash on launch, seems an issue having two Firebase instances ~and SnowplowTracker~

2023-09-18 08:33:50.380693+0200 App[28364:185924] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FBLPromise firebaseInstallationID]: unrecognized selector sent to instance 0x600001a2e460'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000012566e78b __exceptionPreprocess + 242
    1   libobjc.A.dylib                     0x000000011a95bb73 objc_exception_throw + 48
    2   CoreFoundation                      0x000000012567d8c4 +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0
    3   CoreFoundation                      0x0000000125672c66 ___forwarding___ + 1443
    4   CoreFoundation                      0x0000000125674e08 _CF_forwarding_prep_0 + 120
    5   App                                0x000000010317784f -[FIRInstallationsItem updateWithStoredItem:] + 79
    6   App                                0x0000000103186531 __54-[FIRInstallationsStore installationForAppID:appName:]_block_invoke.23 + 209
    7   App                                0x00000001031ad0b1 __56-[FBLPromise chainOnQueue:chainedFulfill:chainedReject:]_block_invoke.67 + 113
    8   App                                0x00000001031ac8af __44-[FBLPromise observeOnQueue:fulfill:reject:]_block_invoke_2 + 159
    9   libdispatch.dylib                   0x000000012ab2554f _dispatch_call_block_and_release + 12
    10  libdispatch.dylib                   0x000000012ab267ec _dispatch_client_callout + 8
    11  libdispatch.dylib                   0x000000012ab377e9 _dispatch_main_queue_drain + 1725
    12  libdispatch.dylib                   0x000000012ab3711e _dispatch_main_queue_callback_4CF + 31
    13  CoreFoundation                      0x00000001255cc6cc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    14  CoreFoundation                      0x00000001255c6fbe __CFRunLoopRun + 2429
    15  CoreFoundation                      0x00000001255c6264 CFRunLoopRunSpecific + 560
    16  GraphicsServices                    0x000000012c30a24e GSEventRunModal + 139
    17  UIKitCore                           0x000000014ba2f7bf -[UIApplication _run] + 994
    18  UIKitCore                           0x000000014ba345de UIApplicationMain + 123
    19  App                                0x0000000101a26464 main + 276
    20  dyld                                0x0000000115d49384 start_sim + 10
    21  ???                                 0x000000020d7d941f 0x0 + 8816268319
)
Message from debugger: Terminated due to signal 6

I sent you the compiled file to your mail

EDIT:

I was talking with architecture team and they explain me how fix snowplow issue, with this already fixed the issue seems not be related with it.

pontusj-bambuser commented 11 months ago

Hello again Sergio. We received the compiled app and has investigated it some.

What we found is that you also have the legacy PlayerSDK. Please remove it from the app, as it will create duplicated frameworks for BambuserLiveVideoShoppingPlayer.framework. After doing this we recommend cleaning the DerivedData folder, as there might still be multiple references in the cache.

Also, please try changing the C compiler optimization level to "none [-O0]" in Xcode build settings (Build Settings-> Apple Clang - Code Generation-> Optimization Level)

If none of these works, please reach out to us and we will try to push a new release with a newer firebase version so we can try. The whole binary is actually also compiled with an exact version of firebase-iOS-SDK, which is what might be the problem when you change it only in the package.swift file.

sergiofresneda commented 11 months ago

Hi @pontusj-bambuser, I also moved the module which manage Bambuser SDK, from XCProject to a SPM and now seems to work.

Thanks! now just with the active PR seems to work all fine.

pontusj-bambuser commented 11 months ago

Great to hear Sergio. I will close this now, but feel free to contact us or open another issue if you have any future problems.

pontusj-bambuser commented 11 months ago

@sergiofresneda We have now updated this project to support higher versions of firebase. So now you can use tag "1.1.1" instead of your own fork.