Closed 3a4oT closed 1 year ago
Hi @3a4oT,
Thank you for raising this issue! We have filed at ticket to look at it internally.
Integrate Braze SDK and implement push notification functionality using manual flow
To clarify, when you say using manual flow
, are you referencing that you integrated the Braze SDK without a package manager (SPM, Cocoapods), or are you referencing something else? Have you been able to been able to repro this when using a package manager?
Hey @hokstuff. Yes, I'm using SPM as the package manager. By "manual" flow I mean Manual push integration from documentation. So no swizzling
and no configuration.push.automation = true
(:
More context: I integrated BrazeSDK in my own swift package
and proxy needed API to it, then from iOS target, I call my library, which under the hood calls Braze API. I hope it does make sense to you.
Thanks for the additional info! If the manual integration refers to just the push feature, I don't think that should have any impact on the localization, but if you did some additional steps to proxy the Swift package into your project, it's possible that the bundle may not be accessible by default. Are you able to locate where the bundle is in your project hierarchy and maybe assign its location to the overrideResourceBundle? We added this as of 5.11.1
that allows integrations with a little more complex setups to control this piece more granularly.
Hey @jerielng , thanks for pointers. Yes, I can locate and even get bundle instance on runtime, however, it doesn't work. I used the following code:
if let resourcePath: String = Bundle.main.resourcePath {
let brazeKitBundlePath: String = resourcePath + "/" + "braze-swift-sdk_BrazeKitResources" + ".bundle"
if let brazeKitBundle = Bundle(path: brazeKitBundlePath) {
BrazeKit.overrideResourceBundle = brazeKitBundle
print(brazeKitBundle.bundlePath)
} else {
print("failed to locate brazeKit bundle")
}
}
let configuration = Braze.Configuration(apiKey: apiKey, endpoint: endpoint)
#if DISTRIBUTION
configuration.logger.level = .disabled
#else
configuration.logger.level = .info
#endif
braze = Braze(configuration: configuration)
Also, what is weird is that I haven't found any occurrences of braze-swift-sdk_BrazeKitResources
Can it be related to this #if SWIFT_PACKAGE block?
PS. After looking on Package.swift, I see you vend a private version of Swift Framework, so most probably my comment is not relevant.
OK, after checking the consumer code I found the issue, and it's NOT related to BrazeSDK. The issue was related to swizzling Bundle's localizedString(forKey:value:table:)
. The issue can be closed. Thanks everyone.
Thanks for confirming! We'll go ahead and close it but feel free to reach out again if you have more questions!
Platform
iOS
Platform Version
iOS 17.0.3
Braze SDK Version
7.1.0
Xcode Version
Xcode 15.0
Computer Processor
Apple (M1)
Repro Rate
100%
Steps To Reproduce
Expected Behavior
Should display button labels like:
Actual Incorrect Behavior
Verbose Logs
No response
Additional Information
Please note that Braze SDK backed to the internal swift package library (used with TCA as a dependency). Maybe default localised strings can't be loaded because of it since when we are on swift package level we should load resources like
Bundle(.module) instead of Bundle(.main)
??