react-native-firework-sdk 1.7.1 → 1.9.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/FWVideoFeed.kt +0 -1
  2. package/android/src/main/java/com/fireworksdk/bridge/models/FWEventName.kt +1 -0
  3. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWVideoShoppingInterface.kt +1 -0
  4. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +11 -1
  5. package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +9 -0
  6. package/android/src/main/java/com/fireworksdk/bridge/utils/FWLanguageUtil.kt +0 -2
  7. package/android/src/main/java/com/fireworksdk/bridge/utils/FWVideoPlayerUtils.kt +1 -0
  8. package/ios/Components/StoryBlock.swift +6 -9
  9. package/ios/Components/StoryBlockManager.swift +4 -0
  10. package/ios/Components/VideoFeed.swift +14 -15
  11. package/ios/Components/VideoFeedConfiguration.swift +2 -0
  12. package/ios/Components/VideoFeedManager.m +2 -0
  13. package/ios/Components/VideoFeedManager.swift +4 -0
  14. package/ios/Components/VideoPlayerConfiguration.swift +1 -0
  15. package/ios/FireworkSdk-Bridging-Header.h +6 -0
  16. package/ios/FireworkSdk.xcodeproj/project.pbxproj +374 -200
  17. package/ios/Models/Common/FontInfo.swift +57 -0
  18. package/ios/Models/NativeToRN/FireworkEventName.swift +1 -0
  19. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.m +2 -0
  20. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.swift +271 -107
  21. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +0 -2
  22. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +1 -0
  23. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +43 -12
  24. package/ios/Modules/LiveStream/LiveStreamModule.swift +5 -3
  25. package/ios/Modules/Shopping/ProductInfoViewConfiguration.swift +7 -2
  26. package/ios/Modules/Shopping/ShoppingModule.m +1 -1
  27. package/ios/Modules/Shopping/ShoppingModule.swift +72 -63
  28. package/ios/Utils/AppLanguage/Bundle+FWSwizzle.swift +58 -0
  29. package/ios/Utils/AppLanguage/FWAppLanguageManager.swift +118 -0
  30. package/ios/Utils/AppLanguage/FWLanguageUtil.swift +39 -0
  31. package/ios/Utils/AppLanguage/NumberFormatter+FWSwizzle.swift +25 -0
  32. package/ios/Utils/AppLanguage/UIImageView+FWSwizzle.swift +91 -0
  33. package/ios/Utils/AppLanguage/UILabel+FWSwizzle.swift +98 -0
  34. package/ios/Utils/AppLanguage/UITextField+FWSwizzle.swift +97 -0
  35. package/ios/Utils/AppLanguage/UITextView+FWSwizzle.swift +97 -0
  36. package/ios/Utils/AppLanguage/UIView+FWSwizzle.swift +38 -0
  37. package/ios/Utils/AppLanguage/UIViewController+FWSwizzle.swift +32 -0
  38. package/ios/Utils/AppLanguage/UIWindow+FWSwizzle.swift +26 -0
  39. package/ios/Utils/AppLanguage/URLSession+FWSwizzle.swift +69 -0
  40. package/ios/Utils/{DispatchQueue+FWOnce.swift → Extensions/DispatchQueue+FWOnce.swift} +3 -3
  41. package/ios/Utils/{UINavigationController+FWSwizzle.swift → Extensions/Swizzle/UINavigationController+FWSwizzle.swift} +6 -8
  42. package/ios/Utils/Extensions/UIView+FWUIHierarchy.swift +47 -0
  43. package/ios/Utils/FWRTL/Classes/Manager/FWRTLManager.h +25 -0
  44. package/ios/Utils/FWRTL/Classes/Manager/FWRTLManager.m +75 -0
  45. package/ios/Utils/FWRTL/Classes/UICategories/CALayer+FWRTL.h +21 -0
  46. package/ios/Utils/FWRTL/Classes/UICategories/CALayer+FWRTL.m +124 -0
  47. package/ios/Utils/FWRTL/Classes/UICategories/FWRTLRemoteViewControllerAdaptor.h +11 -0
  48. package/ios/Utils/FWRTL/Classes/UICategories/FWRTLRemoteViewControllerAdaptor.m +86 -0
  49. package/ios/Utils/FWRTL/Classes/UICategories/FWRTLWhiteListManager.h +16 -0
  50. package/ios/Utils/FWRTL/Classes/UICategories/FWRTLWhiteListManager.m +55 -0
  51. package/ios/Utils/FWRTL/Classes/UICategories/UILabel+FWRTL.h +18 -0
  52. package/ios/Utils/FWRTL/Classes/UICategories/UILabel+FWRTL.m +39 -0
  53. package/ios/Utils/FWRTL/Classes/UICategories/UIView+FWRTL.h +54 -0
  54. package/ios/Utils/FWRTL/Classes/UICategories/UIView+FWRTL.m +141 -0
  55. package/ios/Utils/FWRTL/Classes/UICategories/UIWindow+FWRTL.h +16 -0
  56. package/ios/Utils/FWRTL/Classes/UICategories/UIWindow+FWRTL.m +20 -0
  57. package/ios/Utils/FWRTL/Classes/Utils/FWRTLDefinitions.h +52 -0
  58. package/ios/Utils/FWRTL/Classes/Utils/NSObject+FWRTLReloadBlock.h +19 -0
  59. package/ios/Utils/FWRTL/Classes/Utils/NSObject+FWRTLReloadBlock.m +49 -0
  60. package/ios/Utils/FWRTL/Classes/Utils/NSString+FWRTL.h +21 -0
  61. package/ios/Utils/FWRTL/Classes/Utils/NSString+FWRTL.m +38 -0
  62. package/ios/Utils/FWRTL/Classes/Utils/UIImage+FWRTL.h +18 -0
  63. package/ios/Utils/FWRTL/Classes/Utils/UIImage+FWRTL.m +43 -0
  64. package/ios/Utils/FWSwizzleLoader.m +1 -2
  65. package/ios/Utils/FWSwizzleLoader.swift +13 -0
  66. package/ios/Utils/FWSwizzleUtil.swift +17 -9
  67. package/ios/react_native_firework_sdk.h +1 -0
  68. package/ios/scripts/firework_sdk_pods.rb +3 -0
  69. package/lib/commonjs/FWNavigator.js +32 -1
  70. package/lib/commonjs/FWNavigator.js.map +1 -1
  71. package/lib/commonjs/FireworkSDK.js +26 -12
  72. package/lib/commonjs/FireworkSDK.js.map +1 -1
  73. package/lib/commonjs/VideoShopping.js +64 -9
  74. package/lib/commonjs/VideoShopping.js.map +1 -1
  75. package/lib/commonjs/components/VideoFeed.js +26 -5
  76. package/lib/commonjs/components/VideoFeed.js.map +1 -1
  77. package/lib/commonjs/index.js +6 -0
  78. package/lib/commonjs/index.js.map +1 -1
  79. package/lib/commonjs/models/FWEventName.js +2 -0
  80. package/lib/commonjs/models/FWEventName.js.map +1 -1
  81. package/lib/commonjs/models/IOSFontInfo.js +2 -0
  82. package/lib/commonjs/models/IOSFontInfo.js.map +1 -0
  83. package/lib/commonjs/modules/FWNavigatorModule.js.map +1 -1
  84. package/lib/commonjs/modules/ShoppingModule.js.map +1 -1
  85. package/lib/module/FWNavigator.js +31 -1
  86. package/lib/module/FWNavigator.js.map +1 -1
  87. package/lib/module/FireworkSDK.js +27 -11
  88. package/lib/module/FireworkSDK.js.map +1 -1
  89. package/lib/module/VideoShopping.js +63 -9
  90. package/lib/module/VideoShopping.js.map +1 -1
  91. package/lib/module/components/VideoFeed.js +21 -5
  92. package/lib/module/components/VideoFeed.js.map +1 -1
  93. package/lib/module/index.js +1 -1
  94. package/lib/module/index.js.map +1 -1
  95. package/lib/module/models/FWEventName.js +2 -0
  96. package/lib/module/models/FWEventName.js.map +1 -1
  97. package/lib/module/models/IOSFontInfo.js +2 -0
  98. package/lib/module/models/IOSFontInfo.js.map +1 -0
  99. package/lib/module/modules/FWNavigatorModule.js.map +1 -1
  100. package/lib/module/modules/ShoppingModule.js.map +1 -1
  101. package/lib/typescript/FWNavigator.d.ts +17 -2
  102. package/lib/typescript/FireworkSDK.d.ts +9 -5
  103. package/lib/typescript/LiveStream.d.ts +2 -2
  104. package/lib/typescript/VideoShopping.d.ts +33 -11
  105. package/lib/typescript/components/VideoFeed.d.ts +5 -1
  106. package/lib/typescript/index.d.ts +8 -4
  107. package/lib/typescript/models/AdBadgeConfiguration.d.ts +1 -1
  108. package/lib/typescript/models/FWEventName.d.ts +3 -1
  109. package/lib/typescript/models/FWEvents.d.ts +5 -0
  110. package/lib/typescript/models/IOSFontInfo.d.ts +19 -0
  111. package/lib/typescript/models/NewNativeContainerProps.d.ts +1 -1
  112. package/lib/typescript/models/ProductInfoViewConfiguration.d.ts +23 -0
  113. package/lib/typescript/models/StoryBlockSource.d.ts +1 -1
  114. package/lib/typescript/models/VideoFeedConfiguration.d.ts +20 -2
  115. package/lib/typescript/models/VideoFeedSource.d.ts +1 -1
  116. package/lib/typescript/models/VideoPlayerConfiguration.d.ts +20 -4
  117. package/lib/typescript/modules/FWNavigatorModule.d.ts +2 -0
  118. package/lib/typescript/modules/ShoppingModule.d.ts +2 -1
  119. package/package.json +7 -4
  120. package/react-native-firework-sdk.podspec +15 -18
  121. package/src/{FWNavigator.tsx → FWNavigator.ts} +30 -2
  122. package/src/FireworkSDK.ts +24 -13
  123. package/src/VideoShopping.ts +86 -20
  124. package/src/components/VideoFeed.tsx +24 -2
  125. package/src/{index.tsx → index.ts} +24 -1
  126. package/src/models/FWEventName.ts +2 -0
  127. package/src/models/FWEvents.ts +6 -0
  128. package/src/models/IOSFontInfo.ts +29 -0
  129. package/src/models/ProductInfoViewConfiguration.ts +25 -0
  130. package/src/models/VideoFeedConfiguration.ts +20 -1
  131. package/src/models/VideoPlayerConfiguration.ts +17 -0
  132. package/src/modules/FWNavigatorModule.ts +2 -0
  133. package/src/modules/ShoppingModule.ts +2 -4
  134. package/ios/Utils/FWPiPManager.swift +0 -24
  135. package/ios/Utils/UIButton+FWSwizzle.swift +0 -33
  136. package/ios/Utils/UIView+ParentViewController.swift +0 -21
  137. /package/ios/Utils/{String+Color.swift → Extensions/String+Color.swift} +0 -0
  138. /package/ios/Utils/{UIView+Constraints.swift → Extensions/UIView+Constraints.swift} +0 -0
  139. /package/ios/Utils/{UIViewController+AttachChild.swift → Extensions/UIViewController+AttachChild.swift} +0 -0
@@ -203,7 +203,6 @@ class FWVideoFeed(
203
203
  LayoutInflater.from(context).inflate(R.layout.fw_bridge_fragment_videofeed, this, false) as ConstraintLayout?
204
204
  videoFeedView = videoFeedViewContainer?.findViewById(R.id.fw_bridge_videofeed)
205
205
  if (videoFeedView != null) {
206
- Log.e("videoFeedView", "layoutDirection: " + videoFeedView?.layoutDirection.toString())
207
206
  videoFeedView?.layoutDirection = LAYOUT_DIRECTION_LOCALE
208
207
  addView(videoFeedViewContainer)
209
208
  }
@@ -35,6 +35,7 @@ enum class FWVideoShoppingEventName(val rawValue: String) {
35
35
  ClickCartIcon("fw:shopping:click-cart-icon"),
36
36
  UpdateProductDetails("fw:shopping:update-product-details"),
37
37
  WillDisplayProduct("fw:shopping:will-display-product"),
38
+ CustomLinkButtonClick("fw:shopping:custom-link-button-click"),
38
39
  }
39
40
 
40
41
  enum class FWLiveStreamEventName(val rawValue: String) {
@@ -13,4 +13,5 @@ interface FWVideoShoppingInterface {
13
13
  fun jumpToCartPage(callbackId: Int?, props: ReadableMap?)
14
14
  fun setCartIconVisible(visible: Boolean?)
15
15
  fun setCartItemCount(count: Int?)
16
+ fun setCustomClickLinkButtonEnabled(value: Boolean?, promise: Promise)
16
17
  }
@@ -8,6 +8,7 @@ import com.fireworksdk.bridge.reactnative.utils.FWEventUtils
8
8
  import com.fireworksdk.bridge.utils.FWDateUtils
9
9
  import com.fireworksdk.bridge.utils.FWGsonUtil
10
10
  import com.fireworksdk.bridge.utils.FWLogUtils
11
+ import com.fireworksdk.bridge.utils.FWVideoPlayerUtils
11
12
  import com.google.gson.reflect.TypeToken
12
13
  import com.loopnow.fireworklibrary.baya.Baya
13
14
  import com.loopnow.fireworklibrary.baya.UpdateCartStatus
@@ -214,11 +215,20 @@ class FWVideoShoppingModule(
214
215
  unitId: String,
215
216
  productWebUrl: String?
216
217
  ): Boolean {
217
- return false
218
+ if (FWVideoPlayerUtils.customClickLinkButtonEnabled) {
219
+ FWEventUtils.sendCustomLinkButtonClickEvent(reactApplicationContext, productWebUrl, productId, unitId, callbackId)
220
+ }
221
+ return FWVideoPlayerUtils.customClickLinkButtonEnabled
218
222
  }
219
223
  }
220
224
  }
221
225
 
226
+ @ReactMethod
227
+ override fun setCustomClickLinkButtonEnabled(value: Boolean?, promise: Promise) {
228
+ FWVideoPlayerUtils.customClickLinkButtonEnabled = value?:false
229
+ promise.resolve(true)
230
+ }
231
+
222
232
  @ReactMethod
223
233
  fun addListener(eventName: String?) {
224
234
  // Set up any upstream listeners or background tasks as necessary
@@ -263,4 +263,13 @@ object FWEventUtils {
263
263
 
264
264
  sendEvent(reactContext, FWEventName.LiveStreamChat.rawValue, eventMap)
265
265
  }
266
+
267
+ fun sendCustomLinkButtonClickEvent(reactContext: ReactContext, url: String?, productId: String?, unitId: String?, callbackId: Int?) {
268
+ val eventMap = Arguments.createMap()
269
+ eventMap.putString("url", url ?: "")
270
+ eventMap.putString("productId", productId)
271
+ eventMap.putString("unitId", unitId)
272
+ eventMap.putInt("callbackId", callbackId?:0)
273
+ sendEvent(reactContext, FWVideoShoppingEventName.CustomLinkButtonClick.rawValue, eventMap)
274
+ }
266
275
  }
@@ -2,8 +2,6 @@ package com.fireworksdk.bridge.utils
2
2
 
3
3
  import android.app.Activity
4
4
  import android.content.Context
5
- import android.os.Handler
6
- import android.os.Looper
7
5
  import com.loopnow.fireworklibrary.FwSDK
8
6
  import java.util.*
9
7
 
@@ -18,6 +18,7 @@ object FWVideoPlayerUtils {
18
18
 
19
19
  var customCTAClickEnabled: Boolean = false
20
20
  var videoPlaybackEventEnabled: Boolean = false
21
+ var customClickLinkButtonEnabled: Boolean = false
21
22
 
22
23
  private var hasAssignedLaunchAppWithMute = false
23
24
  /**
@@ -45,8 +45,6 @@ public class StoryBlock: UIView, StoryBlockViewControllerDelegate {
45
45
  }
46
46
  }
47
47
 
48
- private var pipController: PictureInPictureController?
49
-
50
48
  public override init(frame: CGRect) {
51
49
  super.init(frame: frame)
52
50
  self.clipsToBounds = true
@@ -63,7 +61,7 @@ public class StoryBlock: UIView, StoryBlockViewControllerDelegate {
63
61
  }
64
62
 
65
63
  private func embed() {
66
- guard let parentVC = parentViewController else {
64
+ guard let parentVC = fwParentViewController else {
67
65
  return
68
66
  }
69
67
  guard self.storyBlockVC == nil else {
@@ -72,7 +70,11 @@ public class StoryBlock: UIView, StoryBlockViewControllerDelegate {
72
70
 
73
71
  let storyBlockVC = StoryBlockViewController(source: source)
74
72
  if self.enablePictureInPicture {
75
- self.pipController = PictureInPictureController(storyBlock: storyBlockVC)
73
+ storyBlockVC.isPictureInPictureEnabled = true
74
+ }
75
+
76
+ if FWAppLanguageManager.shared.shouldHorizontalFlip {
77
+ storyBlockVC.view.fwrtl_viewType = FWRTLViewTypeFlip
76
78
  }
77
79
 
78
80
  storyBlockVC.delegate = self
@@ -83,11 +85,6 @@ public class StoryBlock: UIView, StoryBlockViewControllerDelegate {
83
85
  public override func removeFromSuperview() {
84
86
  super.removeFromSuperview()
85
87
 
86
- if let pipController = pipController {
87
- FWPiPManager.shared.addPiPController(pipController)
88
- self.pipController = nil
89
- }
90
-
91
88
  guard let storyBlockVC = self.storyBlockVC else {
92
89
  return
93
90
  }
@@ -21,6 +21,10 @@ class StoryBlockManager: RCTViewManager, StoryBlockViewDelegate {
21
21
  return true
22
22
  }
23
23
 
24
+ override var methodQueue: DispatchQueue {
25
+ return DispatchQueue.main
26
+ }
27
+
24
28
  func storyBlockDidLoadFeed(_ view: StoryBlock) {
25
29
  view.onStoryBlockLoadFinished?(nil)
26
30
  }
@@ -53,6 +53,8 @@ public class VideoFeed: UIView, VideoFeedViewControllerDelegate {
53
53
  }
54
54
  }
55
55
  @objc public var adConfiguration: AdConfiguration?
56
+ @objc public var enablePictureInPicture: Bool = false
57
+
56
58
  @objc var onVideoFeedLoadFinished: RCTBubblingEventBlock?
57
59
  // @objc var onVideoFeedClick: RCTBubblingEventBlock?
58
60
 
@@ -149,16 +151,15 @@ public class VideoFeed: UIView, VideoFeedViewControllerDelegate {
149
151
  return resultAdConfiguration
150
152
  }
151
153
 
152
- private var pipController: PictureInPictureController?
153
-
154
154
  public override func layoutSubviews() {
155
155
  super.layoutSubviews()
156
156
 
157
157
  embed()
158
158
  }
159
159
 
160
+ // swiftlint:disable:next function_body_length
160
161
  private func embed() {
161
- guard let parentVC = parentViewController else {
162
+ guard let parentVC = fwParentViewController else {
162
163
  return
163
164
  }
164
165
  guard self.feedVC == nil else {
@@ -205,10 +206,12 @@ public class VideoFeed: UIView, VideoFeedViewControllerDelegate {
205
206
  feedVC.viewConfiguration = viewConfiguration
206
207
  }
207
208
 
208
- // swiftlint:disable:next notification_center_detachment
209
- NotificationCenter.default.removeObserver(self)
210
- if feedViewConfig?.enablePictureInPicture == true {
211
- self.pipController = PictureInPictureController(videoFeed: feedVC)
209
+ if self.enablePictureInPicture || feedViewConfig?.enablePictureInPicture == true {
210
+ feedVC.isPictureInPictureEnabled = true
211
+ }
212
+
213
+ if FWAppLanguageManager.shared.shouldHorizontalFlip {
214
+ feedVC.view.fwrtl_viewType = FWRTLViewTypeFlip
212
215
  }
213
216
 
214
217
  feedVC.delegate = self
@@ -218,12 +221,6 @@ public class VideoFeed: UIView, VideoFeedViewControllerDelegate {
218
221
 
219
222
  public override func removeFromSuperview() {
220
223
  super.removeFromSuperview()
221
- // swiftlint:disable:next notification_center_detachment
222
- NotificationCenter.default.removeObserver(self)
223
- if let pipController = pipController {
224
- FWPiPManager.shared.addPiPController(pipController)
225
- self.pipController = nil
226
- }
227
224
 
228
225
  guard let feedVC = self.feedVC else {
229
226
  return
@@ -284,7 +281,8 @@ extension VideoFeed {
284
281
  vfcConfig.title.textColor = textcolor.uicolor()
285
282
  }
286
283
  if let fontSize = title.fontSize {
287
- vfcConfig.title.font = UIFont.systemFont(ofSize: fontSize)
284
+ let iOSFontInfo = title.iOSFontInfo ?? FontInfo()
285
+ vfcConfig.title.font = iOSFontInfo.getFont(fontSize)
288
286
  }
289
287
  }
290
288
  if let playIcon = config.playIcon {
@@ -353,7 +351,8 @@ extension VideoFeed {
353
351
  vpcConfig.ctaButton.contentConfiguration.textColor = textcolor.uicolor()
354
352
  }
355
353
  if let fontSize = ctaButtonStyle.fontSize {
356
- vpcConfig.ctaButton.contentConfiguration.font = UIFont.systemFont(ofSize: fontSize)
354
+ let iOSFontInfo = ctaButtonStyle.iOSFontInfo ?? FontInfo()
355
+ vpcConfig.ctaButton.contentConfiguration.font = iOSFontInfo.getFont(fontSize)
357
356
  }
358
357
  }
359
358
  if let showPlaybackButton = config.showPlaybackButton {
@@ -21,12 +21,14 @@ public class VideoFeedConfiguration: NSObject, Codable {
21
21
  var itemSpacing: Double?
22
22
  var enableAutoplay: Bool?
23
23
  var gridColumns: Int?
24
+ // legacy property
24
25
  var enablePictureInPicture: Bool?
25
26
 
26
27
  class VideoFeedTitleConfiguration: NSObject, Codable {
27
28
  public var hidden: Bool?
28
29
  public var textColor: String?
29
30
  public var fontSize: Double?
31
+ public var iOSFontInfo: FontInfo?
30
32
  }
31
33
 
32
34
  class VideoFeedPlayIconConfiguration: NSObject, Codable {
@@ -44,6 +44,8 @@ RCT_CUSTOM_VIEW_PROPERTY(adConfiguration, AdConfiguration, VideoFeed) {
44
44
  view.adConfiguration = config;
45
45
  }
46
46
 
47
+ RCT_EXPORT_VIEW_PROPERTY(enablePictureInPicture, BOOL)
48
+
47
49
  RCT_EXPORT_VIEW_PROPERTY(onVideoFeedLoadFinished, RCTBubblingEventBlock)
48
50
  //RCT_EXPORT_VIEW_PROPERTY(onVideoFeedClick, RCTBubblingEventBlock)
49
51
 
@@ -23,6 +23,10 @@ class VideoFeedManager: RCTViewManager, VideoFeedViewDelegate {
23
23
  return true
24
24
  }
25
25
 
26
+ override var methodQueue: DispatchQueue {
27
+ return DispatchQueue.main
28
+ }
29
+
26
30
  // MARK: - FWVideoFeedViewDelegate
27
31
  func videoFeedDidLoadFeed(_ view: VideoFeed) {
28
32
  view.onVideoFeedLoadFinished?(nil)
@@ -32,6 +32,7 @@ public class VideoPlayerConfiguration: NSObject, Codable {
32
32
  var backgroundColor: String?
33
33
  var textColor: String?
34
34
  var fontSize: Double?
35
+ var iOSFontInfo: FontInfo?
35
36
  }
36
37
 
37
38
  public enum VideoLaunchBehavior: String, Codable {
@@ -6,3 +6,9 @@
6
6
  #import <React/RCTLog.h>
7
7
  #import <React/RCTRootView.h>
8
8
  #import <React/RCTBridge+Private.h>
9
+ #import "FWSwizzleLoader.h"
10
+ #import "FWRTLManager.h"
11
+ #import "UIView+FWRTL.h"
12
+ #import "UIWindow+FWRTL.h"
13
+ #import "UIView+FWRTL.h"
14
+ #import "UIImage+FWRTL.h"