airbridge-react-native-sdk-restricted 4.3.0 → 4.4.1
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.
- package/airbridge_sdk.json +2 -2
- package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeReactNative.kt +7 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/extension/AirbridgeOptionBuilderApply.kt +20 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/extension/IntentUtils.kt +22 -0
- package/android/src/main/java/co/ab180/airbridge/reactnative/module/PlacementInteractor.kt +7 -1
- package/android/src/main/java/co/ab180/airbridge/reactnative/module/SwitchInteractor.kt +15 -0
- package/build/document/assets/search.js +1 -1
- package/build/document/classes/Airbridge.html +12 -2
- package/build/document/classes/AirbridgeAttribute.html +1 -3
- package/build/source/Airbridge.d.ts +20 -0
- package/build/source/Airbridge.js +23 -0
- package/build/source/Airbridge.js.map +1 -1
- package/build/source/constant/AirbridgeAttribute.d.ts +0 -2
- package/build/source/constant/AirbridgeAttribute.js +0 -6
- package/build/source/constant/AirbridgeAttribute.js.map +1 -1
- package/build/source/module/Switch.d.ts +6 -0
- package/build/source/module/Switch.js +12 -0
- package/build/source/module/Switch.js.map +1 -1
- package/changelog.md +20 -0
- package/ios/AirbridgeReactNative/AirbridgeReactNative.swift +4 -2
- package/ios/AirbridgeReactNative/Extension/AirbridgeOptionBuilderApply.swift +17 -3
- package/ios/AirbridgeReactNative/Module/AirbridgeModuleExtern.m +7 -0
- package/ios/AirbridgeReactNative/Module/SwitchInteractor.swift +18 -0
- package/ios/copy-airbridge-json.rb +1 -1
- package/ios/create-library-info-json.rb +1 -1
- package/package.json +1 -1
- package/qa/airbridge.json +3 -1
- package/qa/airbridge_qa.json +2 -2
- package/qa/android/app/build.gradle +6 -4
- package/qa/android/app/src/main/AndroidManifest.xml +1 -1
- package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/ConfigurationLoader.kt +7 -1
- package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/module/ModuleInjector.kt +2 -1
- package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/module/TestUiInteractor.kt +41 -0
- package/qa/ios/AirbridgeQA/AirbridgeJSONSwizzler.swift +8 -0
- package/qa/ios/AirbridgeQA/TestUiInteractor.m +15 -0
- package/qa/ios/AirbridgeQA/TestUiInteractor.swift +103 -0
- package/qa/ios/AirbridgeQA.xcodeproj/project.pbxproj +9 -1
- package/qa/ios/InternalLibrary/airbridge-ios-sdk-qa-library.podspec +1 -1
- package/qa/ios/InternalLibrary/airbridge-ios-sdk-restricted.podspec +1 -1
- package/qa/ios/Podfile +1 -1
- package/qa/ios/Podfile.lock +14 -14
- package/qa/package-lock.json +8730 -2172
- package/qa/source/common/Colors.js +1 -0
- package/qa/source/component/CustomSwitch.js +29 -0
- package/qa/source/component/CustomView.js +31 -0
- package/qa/source/pages/Home.js +101 -24
- package/source/Airbridge.ts +26 -0
- package/source/constant/AirbridgeAttribute.ts +0 -8
- package/source/module/Switch.ts +19 -0
package/changelog.md
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
## 4.4.1
|
|
2
|
+
|
|
3
|
+
**FIXED**
|
|
4
|
+
* Fixed `onDeeplinkReceived` callback not being called multiple times
|
|
5
|
+
|
|
6
|
+
## 4.4.0
|
|
7
|
+
|
|
8
|
+
**ADDED**
|
|
9
|
+
* Added an interface for IAP event tracking.
|
|
10
|
+
* Added interface setCollectTCFDataEnabled to collect DMA consent data.
|
|
11
|
+
|
|
12
|
+
**CHANGED**
|
|
13
|
+
* Update `Airbridge Android SDK` to 4.4.1
|
|
14
|
+
* Update `Airbridge iOS SDK` to 4.4.2
|
|
15
|
+
* Update to enable appSetID collection in restricted version.
|
|
16
|
+
* Removed `ORIGINAL_CURRENCY`, `ORIGINAL_CONTRIBUTION_MARGIN` attribute key values.
|
|
17
|
+
|
|
18
|
+
**FIXED**
|
|
19
|
+
* Solve issue that SDK is not installed on some monorepo environment.
|
|
20
|
+
|
|
1
21
|
## 4.3.0
|
|
2
22
|
|
|
3
23
|
**ADDED**
|
|
@@ -119,8 +119,10 @@ func getSDKVersionAttributes() -> [String: String] {
|
|
|
119
119
|
let data = try? Data(contentsOf: URL(fileURLWithPath: path))
|
|
120
120
|
else { return [:] }
|
|
121
121
|
|
|
122
|
-
if
|
|
123
|
-
|
|
122
|
+
if
|
|
123
|
+
let raw = try? JSONSerialization.jsonObject(with: data),
|
|
124
|
+
let json = raw as? [String: Any] {
|
|
125
|
+
return json.compactMapValues { $0 as? String }
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
Logger.warning("File LibraryInfo.json is not in json format")
|
|
@@ -10,7 +10,7 @@ import Airbridge
|
|
|
10
10
|
extension AirbridgeOptionBuilder {
|
|
11
11
|
func setAirbridgeJSON(_ airbridgeJSON: [AnyHashable: Any]?) -> AirbridgeOptionBuilder {
|
|
12
12
|
guard let json = airbridgeJSON else { return self }
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
if let sdkEnabled = json["sdkEnabled"] as? Bool {
|
|
15
15
|
setSDKEnabled(sdkEnabled)
|
|
16
16
|
}
|
|
@@ -34,7 +34,7 @@ extension AirbridgeOptionBuilder {
|
|
|
34
34
|
setAutoStartTrackingEnabled(autoStartTrackingEnabled)
|
|
35
35
|
}
|
|
36
36
|
if
|
|
37
|
-
let autoDetermineTrackingAuthorizationTimeoutInSecond
|
|
37
|
+
let autoDetermineTrackingAuthorizationTimeoutInSecond
|
|
38
38
|
= json["autoDetermineTrackingAuthorizationTimeoutInSecond"] as? Double
|
|
39
39
|
{
|
|
40
40
|
setAutoDetermineTrackingAuthorizationTimeout(second: autoDetermineTrackingAuthorizationTimeoutInSecond)
|
|
@@ -80,7 +80,21 @@ extension AirbridgeOptionBuilder {
|
|
|
80
80
|
if let eventTransmitIntervalInSecond = json["eventTransmitIntervalInSecond"] as? Double {
|
|
81
81
|
setEventTransmitInterval(second: eventTransmitIntervalInSecond)
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
|
|
84
|
+
// 4.4.0
|
|
85
|
+
if let inAppPurchaseEnvironment = json["inAppPurchaseEnvironment"] as? String {
|
|
86
|
+
switch inAppPurchaseEnvironment.lowercased() {
|
|
87
|
+
case "production":
|
|
88
|
+
setInAppPurchaseEnvironment(AirbridgeInAppPurchaseEnvironment.production)
|
|
89
|
+
case "sandbox":
|
|
90
|
+
setInAppPurchaseEnvironment(AirbridgeInAppPurchaseEnvironment.sandbox)
|
|
91
|
+
default: break
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if let collectTCFDataEnabled = json["collectTCFDataEnabled"] as? Bool {
|
|
95
|
+
setCollectTCFDataEnabled(collectTCFDataEnabled)
|
|
96
|
+
}
|
|
97
|
+
|
|
84
98
|
return self
|
|
85
99
|
}
|
|
86
100
|
}
|
|
@@ -123,6 +123,13 @@ RCT_EXTERN_METHOD(stopTracking)
|
|
|
123
123
|
RCT_EXTERN_METHOD(isTrackingEnabled:(RCTPromiseResolveBlock)resolve
|
|
124
124
|
reject:(RCTPromiseRejectBlock)reject)
|
|
125
125
|
|
|
126
|
+
RCT_EXTERN_METHOD(startInAppPurchaseTracking)
|
|
127
|
+
|
|
128
|
+
RCT_EXTERN_METHOD(stopInAppPurchaseTracking)
|
|
129
|
+
|
|
130
|
+
RCT_EXTERN_METHOD(isInAppPurchaseTrackingEnabled:(RCTPromiseResolveBlock)resolve
|
|
131
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
132
|
+
|
|
126
133
|
@end
|
|
127
134
|
|
|
128
135
|
// WebInterface
|
|
@@ -45,4 +45,22 @@ class SwitchInteractor: NSObject {
|
|
|
45
45
|
) {
|
|
46
46
|
resolve(Airbridge.isTrackingEnabled)
|
|
47
47
|
}
|
|
48
|
+
|
|
49
|
+
@objc(startInAppPurchaseTracking)
|
|
50
|
+
func startInAppPurchaseTracking() {
|
|
51
|
+
Airbridge.startInAppPurchaseTracking()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@objc(stopInAppPurchaseTracking)
|
|
55
|
+
func stopInAppPurchaseTracking() {
|
|
56
|
+
Airbridge.stopInAppPurchaseTracking()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@objc(isInAppPurchaseTrackingEnabled:reject:)
|
|
60
|
+
func isInAppPurchaseTrackingEnabled(
|
|
61
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
62
|
+
_ reject: RCTPromiseRejectBlock
|
|
63
|
+
) {
|
|
64
|
+
resolve(Airbridge.isInAppPurchaseTrackingEnabled)
|
|
65
|
+
}
|
|
48
66
|
}
|
|
@@ -3,7 +3,7 @@ require 'pathname'
|
|
|
3
3
|
|
|
4
4
|
current_directory=File.dirname(__FILE__)
|
|
5
5
|
|
|
6
|
-
ios_project_directory=`cd #{current_directory}; cd
|
|
6
|
+
ios_project_directory=`cd #{current_directory}; cd #{Pod::Config.instance.installation_root}; pwd`.gsub("\n", "")
|
|
7
7
|
ios_project_file=File.join(
|
|
8
8
|
ios_project_directory,
|
|
9
9
|
`cd #{ios_project_directory}; find . -maxdepth 1 -name "*.xcodeproj" | tail -1`,
|
|
@@ -3,7 +3,7 @@ require 'pathname'
|
|
|
3
3
|
|
|
4
4
|
current_directory=File.dirname(__FILE__)
|
|
5
5
|
|
|
6
|
-
ios_project_directory=`cd #{current_directory}; cd
|
|
6
|
+
ios_project_directory=`cd #{current_directory}; cd #{Pod::Config.instance.installation_root}; pwd`.gsub("\n", "")
|
|
7
7
|
ios_project_file=File.join(
|
|
8
8
|
ios_project_directory,
|
|
9
9
|
`cd #{ios_project_directory}; find . -maxdepth 1 -name "*.xcodeproj" | tail -1`,
|
package/package.json
CHANGED
package/qa/airbridge.json
CHANGED
|
@@ -4,5 +4,7 @@
|
|
|
4
4
|
"sdkSignatureSecretID": "eacf944d-a6da-47e2-a38c-ac3f76bb37bb",
|
|
5
5
|
"sdkSignatureSecret": "d8ddd2b61947195fa73ef5d8d3cc4092acb280c281f1fc96479c35ef483f2cfe",
|
|
6
6
|
"logLevel": "debug",
|
|
7
|
-
"isHandleAirbridgeDeeplinkOnly": true
|
|
7
|
+
"isHandleAirbridgeDeeplinkOnly": true,
|
|
8
|
+
"inAppPurchaseEnvironment": "sandbox",
|
|
9
|
+
"collectTCFDataEnabled": true
|
|
8
10
|
}
|
package/qa/airbridge_qa.json
CHANGED
|
@@ -57,7 +57,7 @@ react {
|
|
|
57
57
|
autolinkLibrariesWithApp()
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
def enableProguardInReleaseBuilds =
|
|
60
|
+
def enableProguardInReleaseBuilds = true
|
|
61
61
|
|
|
62
62
|
def jscFlavor = 'org.webkit:android-jsc:+'
|
|
63
63
|
|
|
@@ -117,13 +117,15 @@ dependencies {
|
|
|
117
117
|
implementation jscFlavor
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
if (airbridgeQA['
|
|
120
|
+
if (airbridgeQA['internal_library']['android_version'] == null) {
|
|
121
121
|
implementation "io.airbridge:sdk-android-restricted:${airbridgeSDK['android_version']}"
|
|
122
122
|
implementation "io.airbridge:configuration-spec:${airbridgeSDK['android_version']}"
|
|
123
|
+
implementation "io.airbridge:testUi:${airbridgeSDK['android_version']}"
|
|
123
124
|
}
|
|
124
125
|
else {
|
|
125
|
-
implementation "io.airbridge:sdk-android-restricted:${airbridgeQA['
|
|
126
|
-
implementation "io.airbridge:configuration-spec:${airbridgeQA['
|
|
126
|
+
implementation "io.airbridge:sdk-android-restricted:${airbridgeQA['internal_library']['android_version']}"
|
|
127
|
+
implementation "io.airbridge:configuration-spec:${airbridgeQA['internal_library']['android_version']}"
|
|
128
|
+
implementation "io.airbridge:testUi:${airbridgeQA['internal_library']['android_version']}"
|
|
127
129
|
}
|
|
128
130
|
}
|
|
129
131
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
android:roundIcon="@mipmap/ic_launcher"
|
|
24
24
|
android:theme="@style/AppTheme"
|
|
25
25
|
android:supportsRtl="true"
|
|
26
|
-
tools:replace="android:allowBackup">
|
|
26
|
+
tools:replace="android:allowBackup, android:theme">
|
|
27
27
|
<activity
|
|
28
28
|
android:name=".MainActivity"
|
|
29
29
|
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/ConfigurationLoader.kt
CHANGED
|
@@ -38,8 +38,14 @@ class ConfigurationLoader {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
// android - 4.4.0 기준
|
|
42
|
+
// Loader.convertAirbridgeJsonFormat 에 아래 항목이 누락됨
|
|
43
|
+
// collectTCFDataEnabled
|
|
41
44
|
private fun loadOption(context: Context): Map<String, Any> =
|
|
42
45
|
Loader.loadOption(context)
|
|
43
|
-
.let {
|
|
46
|
+
.let {
|
|
47
|
+
Loader.convertAirbridgeJsonFormat(it) +
|
|
48
|
+
("collectTCFDataEnabled" to it.collectTCFDataEnabled)
|
|
49
|
+
}
|
|
44
50
|
.also { Log.d(TAG, "loadOption : $it") }
|
|
45
51
|
}
|
package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/module/ModuleInjector.kt
CHANGED
|
@@ -11,7 +11,8 @@ class ModuleInjector : ReactPackage {
|
|
|
11
11
|
PermissionInteractor(reactApplicationContext),
|
|
12
12
|
IdentifiersInteractor(reactApplicationContext),
|
|
13
13
|
DeviceInfoInteractor(reactApplicationContext),
|
|
14
|
-
InstallReferrerInteractor(reactApplicationContext)
|
|
14
|
+
InstallReferrerInteractor(reactApplicationContext),
|
|
15
|
+
TestUiInteractor(reactApplicationContext)
|
|
15
16
|
)
|
|
16
17
|
}
|
|
17
18
|
|
package/qa/android/app/src/main/java/co/ab180/airbridge/qa/application/module/TestUiInteractor.kt
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package co.ab180.airbridge.qa.application.module
|
|
2
|
+
|
|
3
|
+
import android.content.Intent
|
|
4
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
5
|
+
import co.ab180.airbridge.testui.ConsentDataActivity
|
|
6
|
+
import co.ab180.airbridge.testui.PurchaseActivity
|
|
7
|
+
import co.ab180.airbridge.testui.TestUi
|
|
8
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
10
|
+
import com.facebook.react.bridge.ReactMethod
|
|
11
|
+
|
|
12
|
+
class TestUiInteractor(
|
|
13
|
+
reactContext: ReactApplicationContext?
|
|
14
|
+
) : ReactContextBaseJavaModule(reactContext) {
|
|
15
|
+
|
|
16
|
+
override fun getName(): String = "TestUiInteractor"
|
|
17
|
+
|
|
18
|
+
@ReactMethod
|
|
19
|
+
fun purchase() {
|
|
20
|
+
setHomeButtonAction()
|
|
21
|
+
open(PurchaseActivity::class.java)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@ReactMethod
|
|
25
|
+
fun consentData() {
|
|
26
|
+
setHomeButtonAction()
|
|
27
|
+
open(ConsentDataActivity::class.java)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private fun setHomeButtonAction() {
|
|
31
|
+
TestUi.setHomeButtonAction {
|
|
32
|
+
(it as? AppCompatActivity)?.finish()
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private fun open(clazz: Class<*>) {
|
|
37
|
+
currentActivity?.run {
|
|
38
|
+
startActivity(Intent(this, clazz))
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -47,6 +47,12 @@ public class AirbridgeJSONSwizzler: NSObject {
|
|
|
47
47
|
}()
|
|
48
48
|
|
|
49
49
|
var newDic = configuration.toAirbridgeJSON()
|
|
50
|
+
|
|
51
|
+
// ios - 4.4.2 기준
|
|
52
|
+
// configuration.toAirbridgeJSON() 에 아래 항목 누락으로 따로 추가 함.
|
|
53
|
+
// trackingLinkCustomDomains
|
|
54
|
+
// collectTCFDataEnabled
|
|
55
|
+
// inAppPurchaseEnvironment
|
|
50
56
|
newDic["trackingLinkCustomDomains"] = [
|
|
51
57
|
"qaabr.dev.abr.ge",
|
|
52
58
|
"qaabr.dev1.abr.ge",
|
|
@@ -60,6 +66,8 @@ public class AirbridgeJSONSwizzler: NSObject {
|
|
|
60
66
|
"qa.dev2.ab180.co",
|
|
61
67
|
"xn--qa--bw8n.xn--ob0bx63e.com"
|
|
62
68
|
]
|
|
69
|
+
newDic["collectTCFDataEnabled"] = configuration.isCollectTCFDataEnabled
|
|
70
|
+
newDic["inAppPurchaseEnvironment"] = configuration.inAppPurchaseEnvironment
|
|
63
71
|
|
|
64
72
|
configuration.applyToStorage()
|
|
65
73
|
NSLog("Swizzling AirbridgeJSON loadOption: \(newDic)")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
// TestUiInteractor.m
|
|
3
|
+
// AirbridgeQA
|
|
4
|
+
//
|
|
5
|
+
// Created by ab180 on 3/31/25.
|
|
6
|
+
//
|
|
7
|
+
#import <React/RCTBridgeModule.h>
|
|
8
|
+
|
|
9
|
+
@interface RCT_EXTERN_MODULE(TestUiInteractor, NSObject)
|
|
10
|
+
|
|
11
|
+
RCT_EXTERN_METHOD(purchase)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(consentData)
|
|
14
|
+
|
|
15
|
+
@end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//
|
|
2
|
+
// TestUiInteractor.swift
|
|
3
|
+
// AirbridgeQA
|
|
4
|
+
//
|
|
5
|
+
// Created by ab180 on 3/31/25.
|
|
6
|
+
//
|
|
7
|
+
import UIKit
|
|
8
|
+
import React
|
|
9
|
+
import Foundation
|
|
10
|
+
import AirbridgeQALibrary
|
|
11
|
+
|
|
12
|
+
@objc(TestUiInteractor)
|
|
13
|
+
class TestUiInteractor: NSObject {
|
|
14
|
+
|
|
15
|
+
@objc
|
|
16
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
17
|
+
return true
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@objc(purchase)
|
|
21
|
+
func purchase() {
|
|
22
|
+
let vc = InAppPurchaseViewController()
|
|
23
|
+
WindowPresenter.show(viewController: vc)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@objc(consentData)
|
|
27
|
+
func consentData() {
|
|
28
|
+
let uiStoryboard = UIStoryboard(
|
|
29
|
+
name: "Application",
|
|
30
|
+
bundle: Bundle(identifier: "co.ab180.airbridge.qa.library")
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
let vc = uiStoryboard.instantiateViewController(identifier: "DMAController")
|
|
34
|
+
WindowPresenter.show(viewController: vc)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
enum WindowPresenter {
|
|
39
|
+
static var window: UIWindow = UIWindow()
|
|
40
|
+
static var context: Context? = nil
|
|
41
|
+
|
|
42
|
+
static func show(viewController: UIViewController) {
|
|
43
|
+
DispatchQueue.main.async {
|
|
44
|
+
window.frame = UIScreen.main.bounds
|
|
45
|
+
window.rootViewController = UIViewController()
|
|
46
|
+
window.windowLevel = .alert + 1
|
|
47
|
+
window.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
|
|
48
|
+
|
|
49
|
+
window.makeKeyAndVisible()
|
|
50
|
+
|
|
51
|
+
let navigationController = UINavigationController()
|
|
52
|
+
let homeAction = HomeAction {
|
|
53
|
+
navigationController.dismiss(animated: true) {
|
|
54
|
+
window.isHidden = true
|
|
55
|
+
context = nil
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
context = Context(
|
|
60
|
+
homeAction: homeAction,
|
|
61
|
+
navigationController: navigationController,
|
|
62
|
+
viewController: viewController
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
navigationController.pushViewController(viewController, animated: true)
|
|
66
|
+
|
|
67
|
+
navigationController.modalPresentationStyle = .fullScreen
|
|
68
|
+
window.rootViewController?.present(navigationController, animated: true) {
|
|
69
|
+
viewController.navigationItem.rightBarButtonItems = [
|
|
70
|
+
{
|
|
71
|
+
let button = UIBarButtonItem(
|
|
72
|
+
title: "Home",
|
|
73
|
+
style: .plain,
|
|
74
|
+
target: homeAction,
|
|
75
|
+
action: #selector(HomeAction.execute)
|
|
76
|
+
)
|
|
77
|
+
button.accessibilityIdentifier = "navigateHome"
|
|
78
|
+
return button
|
|
79
|
+
}(),
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
struct Context {
|
|
86
|
+
let homeAction: HomeAction
|
|
87
|
+
let navigationController: UINavigationController
|
|
88
|
+
let viewController: UIViewController
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
class HomeAction {
|
|
92
|
+
let block: () -> Void
|
|
93
|
+
|
|
94
|
+
init(block: @escaping () -> Void) {
|
|
95
|
+
self.block = block
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@objc
|
|
99
|
+
func execute() {
|
|
100
|
+
block()
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
|
15
15
|
20D0876B7957883E58D87769 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 509084115650365DDB501091 /* PrivacyInfo.xcprivacy */; };
|
|
16
16
|
6364E1D52D76C486009281C3 /* AirbridgeJSONSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6364E1D42D76C486009281C3 /* AirbridgeJSONSwizzler.swift */; };
|
|
17
|
+
63F1373D2D9A98D900D2962F /* TestUiInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F1373C2D9A98D900D2962F /* TestUiInteractor.swift */; };
|
|
18
|
+
63F1373F2D9A990100D2962F /* TestUiInteractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 63F1373E2D9A990100D2962F /* TestUiInteractor.m */; };
|
|
17
19
|
7699B88040F8A987B510C191 /* libPods-AirbridgeQA-AirbridgeQATests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-AirbridgeQA-AirbridgeQATests.a */; };
|
|
18
20
|
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
|
|
19
21
|
9FEEF72A2D5233C20024EBC7 /* APNsSetting.m in Resources */ = {isa = PBXBuildFile; fileRef = 9FEEF7292D5233BD0024EBC7 /* APNsSetting.m */; };
|
|
@@ -54,6 +56,8 @@
|
|
|
54
56
|
5B7EB9410499542E8C5724F5 /* Pods-AirbridgeQA-AirbridgeQATests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AirbridgeQA-AirbridgeQATests.debug.xcconfig"; path = "Target Support Files/Pods-AirbridgeQA-AirbridgeQATests/Pods-AirbridgeQA-AirbridgeQATests.debug.xcconfig"; sourceTree = "<group>"; };
|
|
55
57
|
5DCACB8F33CDC322A6C60F78 /* libPods-AirbridgeQA.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AirbridgeQA.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
56
58
|
6364E1D42D76C486009281C3 /* AirbridgeJSONSwizzler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AirbridgeJSONSwizzler.swift; path = AirbridgeQA/AirbridgeJSONSwizzler.swift; sourceTree = "<group>"; };
|
|
59
|
+
63F1373C2D9A98D900D2962F /* TestUiInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = TestUiInteractor.swift; path = AirbridgeQA/TestUiInteractor.swift; sourceTree = "<group>"; };
|
|
60
|
+
63F1373E2D9A990100D2962F /* TestUiInteractor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestUiInteractor.m; path = AirbridgeQA/TestUiInteractor.m; sourceTree = "<group>"; };
|
|
57
61
|
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = AirbridgeQA/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
58
62
|
89C6BE57DB24E9ADA2F236DE /* Pods-AirbridgeQA-AirbridgeQATests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AirbridgeQA-AirbridgeQATests.release.xcconfig"; path = "Target Support Files/Pods-AirbridgeQA-AirbridgeQATests/Pods-AirbridgeQA-AirbridgeQATests.release.xcconfig"; sourceTree = "<group>"; };
|
|
59
63
|
9FEEF71C2D52039A0024EBC7 /* APNsSetting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = APNsSetting.h; path = AirbridgeQA/APNsSetting.h; sourceTree = SOURCE_ROOT; };
|
|
@@ -129,6 +133,8 @@
|
|
|
129
133
|
C3A5047D2C291CA9003D3C3C /* DeviceInfoInteractor.swift */,
|
|
130
134
|
C3A5047F2C292006003D3C3C /* DeviceInfoInteractor.m */,
|
|
131
135
|
6364E1D42D76C486009281C3 /* AirbridgeJSONSwizzler.swift */,
|
|
136
|
+
63F1373C2D9A98D900D2962F /* TestUiInteractor.swift */,
|
|
137
|
+
63F1373E2D9A990100D2962F /* TestUiInteractor.m */,
|
|
132
138
|
);
|
|
133
139
|
name = AirbridgeQA;
|
|
134
140
|
sourceTree = "<group>";
|
|
@@ -469,7 +475,7 @@
|
|
|
469
475
|
);
|
|
470
476
|
runOnlyForDeploymentPostprocessing = 0;
|
|
471
477
|
shellPath = /bin/sh;
|
|
472
|
-
shellScript = "echo '{\"wrapperName\": \"airbridge-react-native-sdk\", \"wrapperVersion\": \"4.
|
|
478
|
+
shellScript = "echo '{\"wrapperName\": \"airbridge-react-native-sdk\", \"wrapperVersion\": \"4.4.1\"}' > \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LibraryInfo.json\"\n";
|
|
473
479
|
};
|
|
474
480
|
F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
|
|
475
481
|
isa = PBXShellScriptBuildPhase;
|
|
@@ -505,6 +511,7 @@
|
|
|
505
511
|
files = (
|
|
506
512
|
9FEEF72B2D5236F90024EBC7 /* APNsSetting.m in Sources */,
|
|
507
513
|
6364E1D52D76C486009281C3 /* AirbridgeJSONSwizzler.swift in Sources */,
|
|
514
|
+
63F1373F2D9A990100D2962F /* TestUiInteractor.m in Sources */,
|
|
508
515
|
C3A5047A2C291A32003D3C3C /* IdentifiersInteractor.swift in Sources */,
|
|
509
516
|
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
|
|
510
517
|
C3A5047C2C291BE5003D3C3C /* IdentifiersInteractor.m in Sources */,
|
|
@@ -512,6 +519,7 @@
|
|
|
512
519
|
C32569CD2C2523F9005224AD /* PermissionInteractor.m in Sources */,
|
|
513
520
|
13B07FC11A68108700A75B9A /* main.m in Sources */,
|
|
514
521
|
C3A504802C292006003D3C3C /* DeviceInfoInteractor.m in Sources */,
|
|
522
|
+
63F1373D2D9A98D900D2962F /* TestUiInteractor.swift in Sources */,
|
|
515
523
|
C32569CA2C252200005224AD /* PermissionInteractor.swift in Sources */,
|
|
516
524
|
);
|
|
517
525
|
runOnlyForDeploymentPostprocessing = 0;
|
|
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
|
|
|
17
17
|
s.swift_version = '5.0'
|
|
18
18
|
|
|
19
19
|
s.source = {
|
|
20
|
-
:http => "https://sdk-internal.airbridge.io/build/airbridge-ios-sdk/#{airbridge_qa['
|
|
20
|
+
:http => "https://sdk-internal.airbridge.io/build/airbridge-ios-sdk/#{airbridge_qa['internal_library']['ios_version']}/AirbridgeQALibrary.zip"
|
|
21
21
|
}
|
|
22
22
|
s.preserve_paths = 'AirbridgeQALibrary'
|
|
23
23
|
s.source_files = 'AirbridgeQALibrary/.Source/AirbridgeQALibrary.swift'
|
|
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
|
|
|
17
17
|
s.swift_version = '5.0'
|
|
18
18
|
|
|
19
19
|
s.source = {
|
|
20
|
-
:http => "https://sdk-internal.airbridge.io/build/airbridge-ios-sdk/#{airbridge_qa['
|
|
20
|
+
:http => "https://sdk-internal.airbridge.io/build/airbridge-ios-sdk/#{airbridge_qa['internal_library']['ios_version']}/AirbridgeRestricted.zip"
|
|
21
21
|
}
|
|
22
22
|
s.preserve_paths = 'Airbridge'
|
|
23
23
|
s.source_files = 'Airbridge/.Source/Airbridge.swift'
|
package/qa/ios/Podfile
CHANGED
|
@@ -27,7 +27,7 @@ target 'AirbridgeQA' do
|
|
|
27
27
|
pod 'FirebaseCore', :modular_headers => true
|
|
28
28
|
pod 'FBSDKCoreKit'
|
|
29
29
|
pod 'GoogleUtilities', :modular_headers => true
|
|
30
|
-
if airbridge_qa['
|
|
30
|
+
if airbridge_qa['internal_library']['ios_version'].nil?
|
|
31
31
|
pod 'airbridge-ios-sdk-qa-library', :podspec => 'Library/airbridge-ios-sdk-qa-library.podspec'
|
|
32
32
|
else
|
|
33
33
|
pod 'airbridge-ios-sdk-restricted', :podspec => 'InternalLibrary/airbridge-ios-restricted.podspec'
|
package/qa/ios/Podfile.lock
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
PODS:
|
|
2
|
-
- airbridge-ios-sdk (4.
|
|
3
|
-
- airbridge-ios-sdk-qa-library (4.
|
|
4
|
-
- airbridge-react-native-sdk (4.
|
|
5
|
-
- airbridge-ios-sdk (= 4.
|
|
2
|
+
- airbridge-ios-sdk (4.4.2)
|
|
3
|
+
- airbridge-ios-sdk-qa-library (4.4.2)
|
|
4
|
+
- airbridge-react-native-sdk (4.4.1):
|
|
5
|
+
- airbridge-ios-sdk (= 4.4.2)
|
|
6
6
|
- React
|
|
7
7
|
- boost (1.84.0)
|
|
8
8
|
- DoubleConversion (1.1.6)
|
|
@@ -1336,7 +1336,7 @@ PODS:
|
|
|
1336
1336
|
- react-native-simple-toast (3.3.2):
|
|
1337
1337
|
- React-Core
|
|
1338
1338
|
- Toast (~> 4)
|
|
1339
|
-
- react-native-webview (13.13.
|
|
1339
|
+
- react-native-webview (13.13.5):
|
|
1340
1340
|
- DoubleConversion
|
|
1341
1341
|
- glog
|
|
1342
1342
|
- hermes-engine
|
|
@@ -1646,7 +1646,7 @@ PODS:
|
|
|
1646
1646
|
- FirebaseCoreExtension
|
|
1647
1647
|
- React-Core
|
|
1648
1648
|
- RNFBApp
|
|
1649
|
-
- RNGestureHandler (2.
|
|
1649
|
+
- RNGestureHandler (2.25.0):
|
|
1650
1650
|
- DoubleConversion
|
|
1651
1651
|
- glog
|
|
1652
1652
|
- hermes-engine
|
|
@@ -1667,7 +1667,7 @@ PODS:
|
|
|
1667
1667
|
- ReactCommon/turbomodule/bridging
|
|
1668
1668
|
- ReactCommon/turbomodule/core
|
|
1669
1669
|
- Yoga
|
|
1670
|
-
- RNScreens (3.
|
|
1670
|
+
- RNScreens (3.37.0):
|
|
1671
1671
|
- DoubleConversion
|
|
1672
1672
|
- glog
|
|
1673
1673
|
- hermes-engine
|
|
@@ -1942,9 +1942,9 @@ EXTERNAL SOURCES:
|
|
|
1942
1942
|
:path: "../node_modules/react-native/ReactCommon/yoga"
|
|
1943
1943
|
|
|
1944
1944
|
SPEC CHECKSUMS:
|
|
1945
|
-
airbridge-ios-sdk:
|
|
1946
|
-
airbridge-ios-sdk-qa-library:
|
|
1947
|
-
airbridge-react-native-sdk:
|
|
1945
|
+
airbridge-ios-sdk: 21c97103a0343c46f3c2c755099f4ea111a2845b
|
|
1946
|
+
airbridge-ios-sdk-qa-library: 313aaa31c16c32943e2a0e255b88d6a33337210d
|
|
1947
|
+
airbridge-react-native-sdk: 7da16ce1295d6de0cbc9902a9a7f18ae0c2f034e
|
|
1948
1948
|
boost: 4cb898d0bf20404aab1850c656dcea009429d6c1
|
|
1949
1949
|
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
|
|
1950
1950
|
FBAEMKit: e34530df538b8eb8aeb53c35867715ba6c63ef0c
|
|
@@ -1996,7 +1996,7 @@ SPEC CHECKSUMS:
|
|
|
1996
1996
|
react-native-native-log: b6d4756019312793917f89e988b204eb939ed24c
|
|
1997
1997
|
react-native-safe-area-context: 758e894ca5a9bd1868d2a9cfbca7326a2b6bf9dc
|
|
1998
1998
|
react-native-simple-toast: 4c9cc976cb92b6e5fb555e7c57fce38b90a56d07
|
|
1999
|
-
react-native-webview:
|
|
1999
|
+
react-native-webview: 5ee4c0adc823251a7034a66fb193bdea1512cbc7
|
|
2000
2000
|
React-nativeconfig: 7af2ccce165f86b233a9f9d63295f6207e62640e
|
|
2001
2001
|
React-NativeModulesApple: 6861baf05010ce6aa9fb407ed0a54f5b29552f73
|
|
2002
2002
|
React-perflogger: 7c4e97b47d8bc58c03fad1a6b97d96181b59aa41
|
|
@@ -2026,12 +2026,12 @@ SPEC CHECKSUMS:
|
|
|
2026
2026
|
RNCMaskedView: e2e87cbd6366581943892b44176e7976ff988dfd
|
|
2027
2027
|
RNFBApp: 0e66b9f844efdf2ac3fa2b30e64c9db41a263b3d
|
|
2028
2028
|
RNFBMessaging: 70b12c9f22c7c9d5011ac9b12ac2bafbfb081267
|
|
2029
|
-
RNGestureHandler:
|
|
2030
|
-
RNScreens:
|
|
2029
|
+
RNGestureHandler: 667fcafe32933456d8851e0a96932d2d2b34411a
|
|
2030
|
+
RNScreens: 631b8768411a16e356f7934058d2139d0cc75157
|
|
2031
2031
|
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
|
|
2032
2032
|
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
|
|
2033
2033
|
Yoga: 06fc4b2c3664ae0e278964b8fbcb0ee9d21f0a5a
|
|
2034
2034
|
|
|
2035
|
-
PODFILE CHECKSUM:
|
|
2035
|
+
PODFILE CHECKSUM: dc328b8d9c91069e2e6937344b4a4de8fa5b5f50
|
|
2036
2036
|
|
|
2037
2037
|
COCOAPODS: 1.16.2
|