diff --git a/.gitignore b/.gitignore
index d48de0bc..7d35ed6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.xcuserstate
Samples/Cordova/ExampleProject/platforms/android/.idea/
+Samples/Cordova/ExampleProject/plugins/
Samples/Cordova/ExampleProject/platforms/android/.gradle/
Samples/Cordova/ExampleProject/platforms/android/build/
Samples/Cordova/ExampleProject/platforms/android/CordovaLib/build/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b03ecc11..3e52802a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,68 @@
Change Log
==========
+Version 2.7.0 *(August 2, 2023)*
+-------------------------------------------
+#### New Features
+
+**Android specific**
+* Supports [CleverTap Android SDK v5.1.0](https://github.com/CleverTap/clevertap-android-sdk/releases/tag/corev5.1.0_ptv1.1.0).
+* Supports [cordova android 12.0.0](https://cordova.apache.org/announcements/2023/05/22/cordova-android-12.0.0.html)
+* `deleteInboxMessagesForIds(messageIDs)` is now supported in Android as well.
+* New callback `onCleverTapInAppNotificationShow(JSONObject)`
+* **Behavioral change of `onCleverTapInboxItemClick`**:
+ - Previously, the callback was raised when the App Inbox Item is clicked.
+ - Now, it is also raised when the App Inbox button and Item is clicked.
+
+
+**iOS specific**
+* Supports [CleverTap iOS SDK v5.1.2](https://github.com/CleverTap/clevertap-ios-sdk/releases/tag/5.1.2).
+* Supports [cordova ios 7.0.0](https://cordova.apache.org/announcements/2023/07/10/cordova-ios-7.0.0.html)
+
+**Common for both android and iOS**
+* Adds below new public APIs for supporting [Android 13 notification runtime permission](https://developer.android.com/develop/ui/views/notifications/notification-permission)
+ * `isPushPermissionGranted(successCallback)` [Usage can be found here](docs/pushprimer.md#get-the-push-notification-permission-status)
+ * `promptPushPrimer(JSONObject)` [Usage can be found here](docs/pushprimer.md#push-primer-using-half-interstitial-local-in-app)
+ * `promptForPushPermission(boolean)` [Usage can be found here](docs/pushprimer.md#prompt-the-notification-permission-dialog-without-push-primer)
+ * New callback `onCleverTapPushPermissionResponseReceived` available which returns after user Allows/Denies notification permission [Usage can be found here](docs/pushprimer.md#available-callbacks-for-push-primer)
+* Adds support for Remote Config Variables. Please refer to the [Variables.md](docs/Variables.md) file to
+ read more on how to integrate this to your app.
+* Adds new API, `markReadInboxMessagesForIds(messageIDs)` to mark read an array of
+ Inbox Messages.
+* Adds new API, `dismissInbox()` to dismiss the App Inbox.
+
+#### API Changes
+
+* **Deprecated:** The following methods and callbacks related to Product Config and Feature Flags have
+ been marked as deprecated in this release, instead use new remote config variables feature. These
+ methods and callbacks will be removed in the future versions with prior notice.
+ * Product config
+ - `setDefaultsMap()`
+ - `fetch()`
+ - `fetchWithMinimumFetchIntervalInSeconds()`
+ - `activate()`
+ - `fetchAndActivate()`
+ - `setMinimumFetchIntervalInSeconds()`
+ - `getLastFetchTimeStampInMillis()`
+ - `getString()`
+ - `getBoolean()`
+ - `getLong()`
+ - `getDouble()`
+ - `reset()`
+ - callback `onCleverTapProductConfigDidInitialize`
+ - callback `onCleverTapProductConfigDidFetch`
+ - callback `onCleverTapProductConfigDidActivate`
+
+ * Feature flags
+ - `getFeatureFlag()`
+ - callback `onCleverTapFeatureFlagsDidUpdate`
+
+#### Breaking API Changes
+
+* **Return value change of `onCleverTapInboxItemClick` callback in android and `messageDidSelect` callback in iOS**: callback returns `JSONObject` with below entries
+ - `data` corresponds to the payload of clicked inbox item
+ - The `contentPageIndex` corresponds to the page index of the content, which ranges from 0 to the total number of pages for carousel templates. For non-carousel templates, the value is always 0, as they only have one page of content.
+ - The `buttonIndex` represents the index of the App Inbox button clicked (0, 1, or 2). A value of -1 indicates the App Inbox item is clicked.
+
Version 2.6.2 *(April 18, 2023)*
-------------------------------------------
- Fixed compilation errors in xcode 14.3+ in iOS.
diff --git a/README.md b/README.md
index 4663a0eb..2b111e10 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,8 @@ To get started, sign up [here](https://clevertap.com/live-product-demo/).
## ✅ Supported Versions
-- [CleverTap Android SDK version 4.6.6](https://github.com/CleverTap/clevertap-android-sdk/releases/tag/corev4.6.6)
-- [CleverTap iOS SDK version 4.2.2](https://github.com/CleverTap/clevertap-ios-sdk/releases/tag/4.2.2)
+- [CleverTap Android SDK version 5.1.0](https://github.com/CleverTap/clevertap-android-sdk/releases/tag/corev5.1.0_ptv1.1.0)
+- [CleverTap iOS SDK version 5.1.2](https://github.com/CleverTap/clevertap-ios-sdk/releases/tag/5.1.2)
## 🚀 Installation and Quick Start
diff --git a/Samples/Cordova/ExampleProject/package-lock.json b/Samples/Cordova/ExampleProject/package-lock.json
index 5b647be2..38da14cf 100644
--- a/Samples/Cordova/ExampleProject/package-lock.json
+++ b/Samples/Cordova/ExampleProject/package-lock.json
@@ -41,6 +41,12 @@
"fastq": "^1.6.0"
}
},
+ "@xmldom/xmldom": {
+ "version": "0.8.10",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
+ "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
+ "dev": true
+ },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -48,20 +54,12 @@
"dev": true
},
"android-versions": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.1.tgz",
- "integrity": "sha512-5a0YyylAk6pPM2Ezi0vWaPPNbS6tSNRs+micbgk5NpHEN5YW1ez+T94G5orysfwBEBDMHoxm5GNc5ZDUPgRrhw==",
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.2.tgz",
+ "integrity": "sha512-2MT/Y/mR3BLSbR9E3ugwvE/aA4k84XtjG2Iusu4pRKt4FwfpEvIEAHzm7ZBhL3/aTVNdx3PzZ+sAiK+Dbc4r9A==",
"dev": true,
"requires": {
- "semver": "^5.7.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
+ "semver": "^7.5.2"
}
},
"ansi": {
@@ -138,8 +136,8 @@
}
},
"clevertap-cordova": {
- "version": "git+https://github.com/CleverTap/clevertap-cordova.git#d6485d722e99910e345587c41377496edabd311b",
- "from": "git+https://github.com/CleverTap/clevertap-cordova.git#SDK-2617-FixInboxCallback",
+ "version": "git+https://github.com/CleverTap/clevertap-cordova.git#159e01de050f808b19300d0bdf33fb394a440a8e",
+ "from": "git+https://github.com/CleverTap/clevertap-cordova.git#SDK-3108-Support_iOS_SDK_5.1.1",
"dev": true
},
"concat-map": {
@@ -222,34 +220,103 @@
}
},
"cordova-ios": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.2.0.tgz",
- "integrity": "sha512-sLjZg2QBI1SpQVwfe0MSn89YNVkBGLW9Q1vcFJBsqKBrhvoEOJ5Ytq0gwqdhgTOGzlwJUfxC6OHM3jcsRjtYrw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-7.0.0.tgz",
+ "integrity": "sha512-uMeGZZa2NBRx8xbM4kgt3aQW72XxS3lkyJhWS3j31+4epLtxthsMkWZ/IdjovHWL4Ibmq3E6/PQYL5SURUIuwQ==",
"dev": true,
"requires": {
- "cordova-common": "^4.0.2",
- "fs-extra": "^9.1.0",
+ "cordova-common": "^5.0.0",
+ "execa": "^5.1.1",
+ "fs-extra": "^11.1.1",
"ios-sim": "^8.0.2",
- "nopt": "^5.0.0",
- "plist": "^3.0.1",
- "semver": "^7.3.4",
+ "nopt": "^7.1.0",
+ "plist": "^3.0.6",
+ "semver": "^7.4.0",
"unorm": "^1.6.0",
- "which": "^2.0.2",
+ "which": "^3.0.0",
"xcode": "^3.0.1",
"xml-escape": "^1.1.0"
},
"dependencies": {
+ "abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "dev": true
+ },
+ "bplist-parser": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
+ "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
+ "dev": true,
+ "requires": {
+ "big-integer": "1.6.x"
+ }
+ },
+ "cordova-common": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-5.0.0.tgz",
+ "integrity": "sha512-6Aa7o52/iEvsKx6K94ijzFel5acCULR49KL27OUVhEpJ4oS7Dc3y2eOP1Eu0P4Wmiw/eLEDQjGXGiAa2D5zFZA==",
+ "dev": true,
+ "requires": {
+ "@netflix/nerror": "^1.1.3",
+ "ansi": "^0.3.1",
+ "bplist-parser": "^0.3.2",
+ "cross-spawn": "^7.0.3",
+ "elementtree": "^0.1.7",
+ "endent": "^2.1.0",
+ "fast-glob": "^3.2.12",
+ "fs-extra": "^11.1.0",
+ "glob": "^7.1.6",
+ "lodash.assign": "^4.2.0",
+ "lodash.isdate": "^4.0.1",
+ "lodash.isobject": "^3.0.2",
+ "lodash.zip": "^4.2.0",
+ "plist": "^3.0.6",
+ "q": "^1.5.1",
+ "read-chunk": "^3.2.0",
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "endent": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz",
+ "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==",
+ "dev": true,
+ "requires": {
+ "dedent": "^0.7.0",
+ "fast-json-parse": "^1.0.3",
+ "objectorarray": "^1.0.5"
+ }
+ },
"fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dev": true,
"requires": {
- "at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
+ },
+ "nopt": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz",
+ "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==",
+ "dev": true,
+ "requires": {
+ "abbrev": "^2.0.0"
+ }
+ },
+ "which": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
@@ -314,9 +381,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@@ -403,9 +470,9 @@
}
},
"graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"has": {
@@ -481,9 +548,9 @@
}
},
"is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -544,6 +611,30 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
+ "dev": true
+ },
+ "lodash.isdate": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isdate/-/lodash.isdate-4.0.1.tgz",
+ "integrity": "sha512-hg5B1GD+R9egsBgMwmAhk+V53Us03TVvXT4dnyKugEfsD4QKuG9Wlyvxq8OGy2nu7qVGsh4DRSnMk33hoWBq/Q==",
+ "dev": true
+ },
+ "lodash.isobject": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==",
+ "dev": true
+ },
+ "lodash.zip": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
+ "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==",
+ "dev": true
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -674,11 +765,12 @@
"dev": true
},
"plist": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz",
- "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
+ "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
"dev": true,
"requires": {
+ "@xmldom/xmldom": "^0.8.8",
"base64-js": "^1.5.1",
"xmlbuilder": "^15.1.1"
}
@@ -723,12 +815,12 @@
}
},
"resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"requires": {
- "is-core-module": "^2.9.0",
+ "is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -755,9 +847,9 @@
"dev": true
},
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
diff --git a/Samples/Cordova/ExampleProject/package.json b/Samples/Cordova/ExampleProject/package.json
index 258d93bb..7c9c0578 100644
--- a/Samples/Cordova/ExampleProject/package.json
+++ b/Samples/Cordova/ExampleProject/package.json
@@ -13,10 +13,10 @@
"author": "CleverTap",
"license": "Apache-2.0",
"devDependencies": {
- "clevertap-cordova": "git+https://github.com/CleverTap/clevertap-cordova.git#SDK-2617-FixInboxCallback",
+ "clevertap-cordova": "git+https://github.com/CleverTap/clevertap-cordova.git#SDK-3108-Support_iOS_SDK_5.1.1",
"cordova-android": "^11.0.0",
"cordova-android-support-gradle-release": "^3.0.1",
- "cordova-ios": "^6.2.0",
+ "cordova-ios": "^7.0.0",
"ios": "0.0.1"
},
"cordova": {
@@ -25,17 +25,17 @@
"ANDROID_SUPPORT_VERSION": "27.+"
},
"clevertap-cordova": {
- "CLEVERTAP_ACCOUNT_ID": "TEST-R78-ZZK-955Z",
- "CLEVERTAP_TOKEN": "TEST-311-ba2"
+ "CLEVERTAP_ACCOUNT_ID": "TEST-R55-999-486Z",
+ "CLEVERTAP_TOKEN": "TEST-ccc-552"
}
},
"platforms": [
- "ios",
- "android"
+ "android",
+ "ios"
]
},
"dependencies": {
"lru-cache": "^6.0.0",
"q": "^1.5.1"
}
-}
+}
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/android/app/src/main/AndroidManifest.xml b/Samples/Cordova/ExampleProject/platforms/android/app/src/main/AndroidManifest.xml
index d59e7c12..521664fd 100644
--- a/Samples/Cordova/ExampleProject/platforms/android/app/src/main/AndroidManifest.xml
+++ b/Samples/Cordova/ExampleProject/platforms/android/app/src/main/AndroidManifest.xml
@@ -22,6 +22,8 @@
+
+
diff --git a/Samples/Cordova/ExampleProject/platforms/android/app/src/main/assets/www/js/index.js b/Samples/Cordova/ExampleProject/platforms/android/app/src/main/assets/www/js/index.js
index 54a5f12d..c481d9db 100644
--- a/Samples/Cordova/ExampleProject/platforms/android/app/src/main/assets/www/js/index.js
+++ b/Samples/Cordova/ExampleProject/platforms/android/app/src/main/assets/www/js/index.js
@@ -94,7 +94,14 @@ function setupButtons() {
["title","Feature flag"],
["get Feature Flag", () => CleverTap.getFeatureFlag("test", true, val => log("Value is " + val))],
-
+
+ ["title","Product Experiences"],
+ ["get Feature Flag", () => CleverTap.getFeatureFlag("test", true, val => log("Value is " + val))],
+
+// defineVariables({
+// "cordova_var_string": "cordova_var_string_value"
+// })],
+
["title","Device Identifiers"],
["get CleverTap ID", () => CleverTap.getCleverTapID(val => log("getCleverTapID is " + val))],
@@ -281,6 +288,7 @@ function initListeners() {
CleverTap.getAllInboxMessages(val => log("Inbox messages are " + val))
CleverTap.getUnreadInboxMessages(val => log("Unread Inbox messages are " + val))
CleverTap.deleteInboxMessageForId("messageId")
+ CleverTap.deleteInboxMessagesForIds(["id1", "id2"])
CleverTap.markReadInboxMessageForId("messageId")
CleverTap.pushInboxNotificationViewedEventForId("messageId")
CleverTap.pushInboxNotificationClickedEventForId("messageId")
@@ -357,4 +365,4 @@ document.addEventListener(
false
)
//TEST-R78-ZZK-955Z TEST-311-ba2
-// following tag combination gives a very clean log stream under logcat(make sure to check regex) : chromium|CleverTap
\ No newline at end of file
+// following tag combination gives a very clean log stream under logcat(make sure to check regex) : chromium|CleverTap
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h
index afb5cc66..fab728ff 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h
@@ -17,6 +17,8 @@
under the License.
*/
+@import Foundation;
+
@interface NSArray (CDVJSONSerializingPrivate)
- (NSString*)cdv_JSONString;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m
index 175ed398..5c13593e 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m
@@ -17,8 +17,9 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
+@import Foundation;
+
#import "CDVJSON_private.h"
-#import
@implementation NSArray (CDVJSONSerializingPrivate)
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h
index 14c6a66d..652cb39a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h
@@ -18,7 +18,7 @@
*/
#import
-#import
+#import
#define CDVWebViewNavigationType int
@@ -30,7 +30,7 @@ typedef NS_ENUM(NSInteger, CDVIntentAndNavigationFilterValue) {
@interface CDVIntentAndNavigationFilter : CDVPlugin
-+ (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url intentsWhitelist:(CDVWhitelist*)intentsWhitelist navigationsWhitelist:(CDVWhitelist*)navigationsWhitelist;
++ (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url allowIntentsList:(CDVAllowList*)allowIntentsList navigationsAllowList:(CDVAllowList*)navigationsAllowList;
+ (BOOL)shouldOverrideLoadWithRequest:(NSURLRequest*)request navigationType:(CDVWebViewNavigationType)navigationType filterValue:(CDVIntentAndNavigationFilterValue)filterValue;
+ (BOOL)shouldOpenURLRequest:(NSURLRequest*)request navigationType:(CDVWebViewNavigationType)navigationType;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m
index 3021f8f5..4430426a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m
@@ -24,8 +24,8 @@ @interface CDVIntentAndNavigationFilter ()
@property (nonatomic, readwrite) NSMutableArray* allowIntents;
@property (nonatomic, readwrite) NSMutableArray* allowNavigations;
-@property (nonatomic, readwrite) CDVWhitelist* allowIntentsWhitelist;
-@property (nonatomic, readwrite) CDVWhitelist* allowNavigationsWhitelist;
+@property (nonatomic, readwrite) CDVAllowList* allowIntentsList;
+@property (nonatomic, readwrite) CDVAllowList* allowNavigationsList;
@end
@@ -61,8 +61,8 @@ - (void)parserDidStartDocument:(NSXMLParser*)parser
- (void)parserDidEndDocument:(NSXMLParser*)parser
{
- self.allowIntentsWhitelist = [[CDVWhitelist alloc] initWithArray:self.allowIntents];
- self.allowNavigationsWhitelist = [[CDVWhitelist alloc] initWithArray:self.allowNavigations];
+ self.allowIntentsList = [[CDVAllowList alloc] initWithArray:self.allowIntents];
+ self.allowNavigationsList = [[CDVAllowList alloc] initWithArray:self.allowNavigations];
}
- (void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError
@@ -79,13 +79,13 @@ - (void)pluginInitialize
}
}
-+ (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url intentsWhitelist:(CDVWhitelist*)intentsWhitelist navigationsWhitelist:(CDVWhitelist*)navigationsWhitelist
++ (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url allowIntentsList:(CDVAllowList*)allowIntentsList navigationsAllowList:(CDVAllowList*)navigationsAllowList
{
// a URL can only allow-intent OR allow-navigation, if both are specified,
// only allow-navigation is allowed
- BOOL allowNavigationsPass = [navigationsWhitelist URLIsAllowed:url logFailure:NO];
- BOOL allowIntentPass = [intentsWhitelist URLIsAllowed:url logFailure:NO];
+ BOOL allowNavigationsPass = [navigationsAllowList URLIsAllowed:url logFailure:NO];
+ BOOL allowIntentPass = [allowIntentsList URLIsAllowed:url logFailure:NO];
if (allowNavigationsPass && allowIntentPass) {
return CDVIntentAndNavigationFilterValueNavigationAllowed;
@@ -100,7 +100,7 @@ + (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url intentsWhitelist:(CD
- (CDVIntentAndNavigationFilterValue) filterUrl:(NSURL*)url
{
- return [[self class] filterUrl:url intentsWhitelist:self.allowIntentsWhitelist navigationsWhitelist:self.allowNavigationsWhitelist];
+ return [[self class] filterUrl:url allowIntentsList:self.allowIntentsList navigationsAllowList:self.allowNavigationsList];
}
#define CDVWebViewNavigationTypeLinkClicked 0
@@ -118,8 +118,8 @@ + (BOOL)shouldOpenURLRequest:(NSURLRequest*)request navigationType:(CDVWebViewNa
+ (BOOL)shouldOverrideLoadWithRequest:(NSURLRequest*)request navigationType:(CDVWebViewNavigationType)navigationType filterValue:(CDVIntentAndNavigationFilterValue)filterValue
{
- NSString* allowIntents_whitelistRejectionFormatString = @"ERROR External navigation rejected - not set for url='%@'";
- NSString* allowNavigations_whitelistRejectionFormatString = @"ERROR Internal navigation rejected - not set for url='%@'";
+ NSString* allowIntents_allowListRejectionFormatString = @"ERROR External navigation rejected - not set for url='%@'";
+ NSString* allowNavigations_allowListRejectionFormatString = @"ERROR Internal navigation rejected - not set for url='%@'";
NSURL* url = [request URL];
@@ -136,10 +136,10 @@ + (BOOL)shouldOverrideLoadWithRequest:(NSURLRequest*)request navigationType:(CDV
return NO;
case CDVIntentAndNavigationFilterValueNoneAllowed:
// allow-navigation attempt failed for sure
- NSLog(@"%@", [NSString stringWithFormat:allowNavigations_whitelistRejectionFormatString, [url absoluteString]]);
+ NSLog(@"%@", [NSString stringWithFormat:allowNavigations_allowListRejectionFormatString, [url absoluteString]]);
// anchor tag link means it was an allow-intent attempt that failed as well
if (CDVWebViewNavigationTypeLinkClicked == navigationType) {
- NSLog(@"%@", [NSString stringWithFormat:allowIntents_whitelistRejectionFormatString, [url absoluteString]]);
+ NSLog(@"%@", [NSString stringWithFormat:allowIntents_allowListRejectionFormatString, [url absoluteString]]);
}
return NO;
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.h b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.h
index 47e26d1e..5725a9e8 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.h
@@ -17,7 +17,7 @@
under the License.
*/
-#import
+@import WebKit;
#import
@interface CDVWebViewEngine : CDVPlugin
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
index a07bf290..0efdf958 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
@@ -19,9 +19,9 @@ Licensed to the Apache Software Foundation (ASF) under one
#import "CDVWebViewEngine.h"
#import "CDVWebViewUIDelegate.h"
-#import "CDVWebViewProcessPoolFactory.h"
+#import
#import
-#import "CDVURLSchemeHandler.h"
+#import
#import
@@ -45,6 +45,7 @@ @interface CDVWebViewEngine ()
@property (nonatomic, strong) CDVURLSchemeHandler * schemeHandler;
@property (nonatomic, readwrite) NSString *CDV_ASSETS_URL;
@property (nonatomic, readwrite) Boolean cdvIsFileScheme;
+@property (nullable, nonatomic, strong, readwrite) WKWebViewConfiguration *configuration;
@end
@@ -55,24 +56,36 @@ @implementation CDVWebViewEngine
@synthesize engineWebView = _engineWebView;
-- (instancetype)initWithFrame:(CGRect)frame
+- (nullable instancetype)initWithFrame:(CGRect)frame configuration:(nullable WKWebViewConfiguration *)configuration
{
self = [super init];
if (self) {
if (NSClassFromString(@"WKWebView") == nil) {
return nil;
}
-
- self.engineWebView = [[WKWebView alloc] initWithFrame:frame];
+
+ self.configuration = configuration;
+ self.engineWebView = configuration ? [[WKWebView alloc] initWithFrame:frame configuration:configuration] : [[WKWebView alloc] initWithFrame:frame];
}
return self;
}
+- (nullable instancetype)initWithFrame:(CGRect)frame
+{
+ return [self initWithFrame:frame configuration:nil];
+}
+
- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings
{
- WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
- configuration.processPool = [[CDVWebViewProcessPoolFactory sharedFactory] sharedProcessPool];
+ WKWebViewConfiguration* configuration;
+ if (_configuration) {
+ configuration = _configuration;
+ } else {
+ configuration = [[WKWebViewConfiguration alloc] init];
+ configuration.processPool = [[CDVWebViewProcessPoolFactory sharedFactory] sharedProcessPool];
+ }
+
if (settings == nil) {
return configuration;
}
@@ -145,6 +158,10 @@ - (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)setti
}
+ if (@available(iOS 14.0, *)) {
+ configuration.limitsNavigationsToAppBoundDomains = [settings cordovaBoolSettingForKey:@"LimitsNavigationsToAppBoundDomains" defaultValue:NO];
+ }
+
return configuration;
}
@@ -205,6 +222,20 @@ - (void)pluginInitialize
WKWebView* wkWebView = [[WKWebView alloc] initWithFrame:self.engineWebView.frame configuration:configuration];
wkWebView.UIDelegate = self.uiDelegate;
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 160400
+ // With the introduction of iOS 16.4 the webview is no longer inspectable by default.
+ // We'll honor that change for release builds, but will still allow inspection on debug builds by default.
+ // We also introduce an override option, so consumers can influence this decision in their own build.
+ if (@available(iOS 16.4, *)) {
+#ifdef DEBUG
+ BOOL allowWebviewInspectionDefault = YES;
+#else
+ BOOL allowWebviewInspectionDefault = NO;
+#endif
+ wkWebView.inspectable = [settings cordovaBoolSettingForKey:@"InspectableWebview" defaultValue:allowWebviewInspectionDefault];
+ }
+#endif
+
/*
* This is where the "OverrideUserAgent" is handled. This will replace the entire UserAgent
* with the user defined custom UserAgent.
@@ -376,7 +407,10 @@ - (void)updateSettings:(NSDictionary*)settings
// prevent webView from bouncing
if (!bounceAllowed) {
if ([wkWebView respondsToSelector:@selector(scrollView)]) {
- ((UIScrollView*)[wkWebView scrollView]).bounces = NO;
+ UIScrollView* scrollView = [wkWebView scrollView];
+ scrollView.bounces = NO;
+ scrollView.alwaysBounceVertical = NO; /* iOS 16 workaround */
+ scrollView.alwaysBounceHorizontal = NO; /* iOS 16 workaround */
} else {
for (id subview in wkWebView.subviews) {
if ([[subview class] isSubclassOfClass:[UIScrollView class]]) {
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewUIDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewUIDelegate.h
index 8ae39b67..c5f85fd7 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewUIDelegate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewUIDelegate.h
@@ -17,7 +17,7 @@
under the License.
*/
-#import
+@import WebKit;
@interface CDVWebViewUIDelegate : NSObject
{
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m
index 9188be79..a77fd2b4 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m
@@ -17,24 +17,25 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVAppDelegate.h"
+#import
@implementation CDVAppDelegate
@synthesize window, viewController;
-- (id)init
+- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
- self = [super init];
- return self;
-}
+#if DEBUG
+ NSLog(@"Apache Cordova iOS platform version %@ is starting.", CDV_VERSION);
+#endif
-#pragma mark UIApplicationDelegate implementation
+ return YES;
+}
/**
* This is main kick off after the app inits, the views and Settings are setup here. (preferred - iOS4 and up)
*/
-- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
@@ -60,7 +61,7 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(N
}
// this happens while we are running ( in the background, or from within our own app )
-// only valid if 40x-Info.plist specifies a protocol to handle
+// only valid if Info.plist specifies a protocol to handle
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
if (!url) {
@@ -86,12 +87,4 @@ - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDiction
return YES;
}
-- (UIInterfaceOrientationMask)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window
-{
- // iPhone doesn't support upside down by default, while the iPad does. Override to allow all orientations always, and let the root view controller decide what's allowed (the supported orientations mask gets intersected).
- NSUInteger supportedInterfaceOrientations = (1 << UIInterfaceOrientationPortrait) | (1 << UIInterfaceOrientationLandscapeLeft) | (1 << UIInterfaceOrientationLandscapeRight) | (1 << UIInterfaceOrientationPortraitUpsideDown);
-
- return supportedInterfaceOrientations;
-}
-
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m
index b78ed833..98ad3deb 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m
@@ -18,8 +18,8 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
#include
-#import "CDVCommandQueue.h"
-#import "CDVViewController.h"
+#import
+#import
#import "CDVCommandDelegateImpl.h"
#import "CDVJSON_private.h"
#import "CDVDebug.h"
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m
index ab32b4a7..a5663e59 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVConfigParser.h"
+#import
@interface CDVConfigParser ()
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m
index 5b4281df..c0e6b79f 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVInvokedUrlCommand.h"
+#import
#import "CDVJSON_private.h"
@implementation CDVInvokedUrlCommand
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m
index 56907385..f18f7429 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVPlugin+Resources.h"
+#import
@implementation CDVPlugin (CDVPluginResources)
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m
index 6af03e9c..275f52e9 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m
@@ -17,10 +17,10 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVPlugin.h"
+#import
#import "CDVPlugin+Private.h"
-#import "CDVPlugin+Resources.h"
-#import "CDVViewController.h"
+#import
+#import
#include
@implementation UIView (org_apache_cordova_UIView_Extension)
@@ -66,7 +66,7 @@ @implementation CDVPlugin
// Do not override these methods. Use pluginInitialize instead.
- (instancetype)initWithWebViewEngine:(id )theWebViewEngine
{
- self = [super init];
+ self = [self init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppTerminate) name:UIApplicationWillTerminateNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m
index 930aeaba..1a5ab024 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVPluginResult.h"
+#import
#import "CDVJSON_private.h"
#import "CDVDebug.h"
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVTimer.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVTimer.m
index 784e94d3..1d62f952 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVTimer.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVTimer.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "CDVTimer.h"
+#import
#pragma mark CDVTimerItem
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVURLSchemeHandler.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVURLSchemeHandler.m
index 333124c2..ec9fcb1c 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVURLSchemeHandler.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVURLSchemeHandler.m
@@ -18,7 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
-#import "CDVURLSchemeHandler.h"
+#import
#import
#import
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVViewController.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVViewController.m
index dcec9589..dd8ba165 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVViewController.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVViewController.m
@@ -17,17 +17,19 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
+@import AVFoundation;
+@import Foundation;
+@import WebKit;
+
#import
-#import "CDV.h"
+#import
+#import
#import "CDVPlugin+Private.h"
-#import "CDVWebViewUIDelegate.h"
-#import "CDVConfigParser.h"
-#import
-#import "NSDictionary+CordovaPreferences.h"
+#import
+#import
#import "CDVCommandDelegateImpl.h"
-#import
-@interface CDVViewController () { }
+@interface CDVViewController () { }
@property (nonatomic, readwrite, strong) NSXMLParser* configParser;
@property (nonatomic, readwrite, strong) NSMutableDictionary* settings;
@@ -78,9 +80,6 @@ - (void)__init
self.supportedOrientations = [self parseInterfaceOrientations:
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"]];
- [self printVersion];
- [self printMultitaskingInfo];
- [self printPlatformVersionWarning];
self.initialized = YES;
}
}
@@ -106,37 +105,6 @@ - (id)init
return self;
}
-- (void)printVersion
-{
- NSLog(@"Apache Cordova native platform version %@ is starting.", CDV_VERSION);
-}
-
-- (void)printPlatformVersionWarning
-{
- if (!IsAtLeastiOSVersion(@"8.0")) {
- NSLog(@"CRITICAL: For Cordova 4.0.0 and above, you will need to upgrade to at least iOS 8.0 or greater. Your current version of iOS is %@.",
- [[UIDevice currentDevice] systemVersion]
- );
- }
-}
-
-- (void)printMultitaskingInfo
-{
- UIDevice* device = [UIDevice currentDevice];
- BOOL backgroundSupported = NO;
-
- if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
- backgroundSupported = device.multitaskingSupported;
- }
-
- NSNumber* exitsOnSuspend = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIApplicationExitsOnSuspend"];
- if (exitsOnSuspend == nil) { // if it's missing, it should be NO (i.e. multi-tasking on by default)
- exitsOnSuspend = [NSNumber numberWithBool:NO];
- }
-
- NSLog(@"Multi-tasking -> Device: %@, App: %@", (backgroundSupported ? @"YES" : @"NO"), (![exitsOnSuspend intValue]) ? @"YES" : @"NO");
-}
-
-(NSString*)configFilePath{
NSString* path = self.configFile ?: @"config.xml";
@@ -180,7 +148,7 @@ - (void)loadSettings
[self parseSettingsWithParser:delegate];
- // Get the plugin dictionary, whitelist and settings from the delegate.
+ // Get the plugin dictionary, allowList and settings from the delegate.
self.pluginsMap = delegate.pluginsDict;
self.startupPluginNames = delegate.startupPluginNames;
self.settings = delegate.settings;
@@ -238,7 +206,7 @@ - (NSURL*)appUrl
return appURL;
}
-- (NSURL*)errorURL
+- (nullable NSURL*)errorURL
{
NSURL* errorUrl = nil;
@@ -277,14 +245,6 @@ - (void)viewDidLoad
// Load settings
[self loadSettings];
- NSString* backupWebStorageType = @"cloud"; // default value
-
- id backupWebStorage = [self.settings cordovaSettingForKey:@"BackupWebStorage"];
- if ([backupWebStorage isKindOfClass:[NSString class]]) {
- backupWebStorageType = backupWebStorage;
- }
- [self.settings setCordovaSetting:backupWebStorageType forKey:@"BackupWebStorage"];
-
// // Instantiate the Launch screen /////////
if (!self.launchView) {
@@ -380,52 +340,6 @@ -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id> 16))/255.0
- green:((float)((colorValue & 0x0000FF00) >> 8))/255.0
- blue:((float)((colorValue & 0x000000FF) >> 0))/255.0
- alpha:((float)((colorValue & 0xFF000000) >> 24))/255.0];
-}
-
- (NSArray*)parseInterfaceOrientations:(NSArray*)orientations
{
NSMutableArray* result = [[NSMutableArray alloc] init];
@@ -485,54 +399,97 @@ - (BOOL)supportsOrientation:(UIInterfaceOrientation)orientation
return [self.supportedOrientations containsObject:@(orientation)];
}
-- (UIView*)newCordovaViewWithFrame:(CGRect)bounds
+/// Retrieves the view from a newwly initialized webViewEngine
+/// @param bounds The bounds with which the webViewEngine will be initialized
+- (nonnull UIView*)newCordovaViewWithFrame:(CGRect)bounds
{
- NSString* defaultWebViewEngineClass = [self.settings cordovaSettingForKey:@"CordovaDefaultWebViewEngine"];
- NSString* webViewEngineClass = [self.settings cordovaSettingForKey:@"CordovaWebViewEngine"];
+ NSString* defaultWebViewEngineClassName = [self.settings cordovaSettingForKey:@"CordovaDefaultWebViewEngine"];
+ NSString* webViewEngineClassName = [self.settings cordovaSettingForKey:@"CordovaWebViewEngine"];
- if (!defaultWebViewEngineClass) {
- defaultWebViewEngineClass = @"CDVWebViewEngine";
+ if (!defaultWebViewEngineClassName) {
+ defaultWebViewEngineClassName = @"CDVWebViewEngine";
}
- if (!webViewEngineClass) {
- webViewEngineClass = defaultWebViewEngineClass;
+ if (!webViewEngineClassName) {
+ webViewEngineClassName = defaultWebViewEngineClassName;
}
- // Find webViewEngine
- if (NSClassFromString(webViewEngineClass)) {
- self.webViewEngine = [[NSClassFromString(webViewEngineClass) alloc] initWithFrame:bounds];
- // if a webView engine returns nil (not supported by the current iOS version) or doesn't conform to the protocol, or can't load the request, we use WKWebView
- if (!self.webViewEngine || ![self.webViewEngine conformsToProtocol:@protocol(CDVWebViewEngineProtocol)] || ![self.webViewEngine canLoadRequest:[NSURLRequest requestWithURL:self.appUrl]]) {
- self.webViewEngine = [[NSClassFromString(defaultWebViewEngineClass) alloc] initWithFrame:bounds];
+ // Determine if a provided custom web view engine is sufficient
+ id engine;
+ Class customWebViewEngineClass = NSClassFromString(webViewEngineClassName);
+ if (customWebViewEngineClass) {
+ id customWebViewEngine = [self initWebViewEngine:customWebViewEngineClass bounds:bounds];
+ BOOL customConformsToProtocol = [customWebViewEngine conformsToProtocol:@protocol(CDVWebViewEngineProtocol)];
+ BOOL customCanLoad = [customWebViewEngine canLoadRequest:[NSURLRequest requestWithURL:self.appUrl]];
+ if (customConformsToProtocol && customCanLoad) {
+ engine = customWebViewEngine;
}
- } else {
- self.webViewEngine = [[NSClassFromString(defaultWebViewEngineClass) alloc] initWithFrame:bounds];
}
-
- if ([self.webViewEngine isKindOfClass:[CDVPlugin class]]) {
- [self registerPlugin:(CDVPlugin*)self.webViewEngine withClassName:webViewEngineClass];
+
+ // Otherwise use the default web view engine
+ if (!engine) {
+ Class defaultWebViewEngineClass = NSClassFromString(defaultWebViewEngineClassName);
+ id defaultWebViewEngine = [self initWebViewEngine:defaultWebViewEngineClass bounds:bounds];
+ NSAssert([defaultWebViewEngine conformsToProtocol:@protocol(CDVWebViewEngineProtocol)],
+ @"we expected the default web view engine to conform to the CDVWebViewEngineProtocol");
+ engine = defaultWebViewEngine;
+ }
+
+ if ([engine isKindOfClass:[CDVPlugin class]]) {
+ [self registerPlugin:(CDVPlugin*)engine withClassName:webViewEngineClassName];
}
+ self.webViewEngine = engine;
return self.webViewEngine.engineWebView;
}
+/// Initialiizes the webViewEngine, with config, if supported and provided
+/// @param engineClass A class that must conform to the `CDVWebViewEngineProtocol`
+/// @param bounds with which the webview will be initialized
+- (id _Nullable) initWebViewEngine:(nonnull Class)engineClass bounds:(CGRect)bounds {
+ WKWebViewConfiguration *config = [self respondsToSelector:@selector(configuration)] ? [self configuration] : nil;
+ if (config && [engineClass respondsToSelector:@selector(initWithFrame:configuration:)]) {
+ return [[engineClass alloc] initWithFrame:bounds configuration:config];
+ } else {
+ return [[engineClass alloc] initWithFrame:bounds];
+ }
+}
+
- (void)createLaunchView
{
CGRect webViewBounds = self.view.bounds;
webViewBounds.origin = self.view.bounds.origin;
UIView* view = [[UIView alloc] initWithFrame:webViewBounds];
+ view.translatesAutoresizingMaskIntoConstraints = NO;
[view setAlpha:0];
NSString* launchStoryboardName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchStoryboardName"];
if (launchStoryboardName != nil) {
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:launchStoryboardName bundle:[NSBundle mainBundle]];
UIViewController* vc = [storyboard instantiateInitialViewController];
+ [self addChildViewController:vc];
+
+ UIView* imgView = vc.view;
+ imgView.translatesAutoresizingMaskIntoConstraints = NO;
+ [view addSubview:imgView];
- [view addSubview:vc.view];
+ [NSLayoutConstraint activateConstraints:@[
+ [NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeWidth multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:imgView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]
+ ]];
}
self.launchView = view;
[self.view addSubview:view];
+
+ [NSLayoutConstraint activateConstraints:@[
+ [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeHeight multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0],
+ [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]
+ ]];
}
- (void)createGapView
@@ -608,10 +565,10 @@ - (void)registerPlugin:(CDVPlugin*)plugin withPluginName:(NSString*)pluginName
/**
Returns an instance of a CordovaCommand object, based on its name. If one exists already, it is returned.
*/
-- (id)getCommandInstance:(NSString*)pluginName
+- (nullable id)getCommandInstance:(NSString*)pluginName
{
// first, we try to find the pluginName in the pluginsMap
- // (acts as a whitelist as well) if it does not exist, we return nil
+ // (acts as a allowList as well) if it does not exist, we return nil
// NOTE: plugin names are matched as lowercase to avoid problems - however, a
// possible issue is there can be duplicates possible if you had:
// "org.apache.cordova.Foo" and "org.apache.cordova.foo" - only the lower-cased entry will match
@@ -642,7 +599,7 @@ - (id)getCommandInstance:(NSString*)pluginName
#pragma mark -
-- (NSString*)appURLScheme
+- (nullable NSString*)appURLScheme
{
NSString* URLScheme = nil;
@@ -798,6 +755,10 @@ - (void)showLaunchScreen:(BOOL)visible
[UIView animateWithDuration:fadeDuration animations:^{
[self.launchView setAlpha:(visible ? 1 : 0)];
+
+ if (!visible) {
+ [self.webView becomeFirstResponder];
+ }
}];
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVWebViewProcessPoolFactory.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVWebViewProcessPoolFactory.m
index 577624e0..3781f48a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVWebViewProcessPoolFactory.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/CDVWebViewProcessPoolFactory.m
@@ -17,9 +17,9 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import
-#import
-#import "CDVWebViewProcessPoolFactory.h"
+@import Foundation;
+@import WebKit;
+#import
static CDVWebViewProcessPoolFactory *factory = nil;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m
index 1266ba20..a60004d9 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m
@@ -17,8 +17,9 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "NSDictionary+CordovaPreferences.h"
-#import
+@import Foundation;
+
+#import
@implementation NSDictionary (CordovaPreferences)
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m
index 2b3acdc0..65b97a0e 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m
@@ -17,7 +17,7 @@ Licensed to the Apache Software Foundation (ASF) under one
under the License.
*/
-#import "NSMutableArray+QueueAdditions.h"
+#import
@implementation NSMutableArray (QueueAdditions)
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
index f0958e47..04a7b35c 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
@@ -9,26 +9,26 @@
/* Begin PBXBuildFile section */
28BFF9141F355A4E00DDF01A /* CDVLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 28BFF9121F355A4E00DDF01A /* CDVLogger.h */; };
28BFF9151F355A4E00DDF01A /* CDVLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 28BFF9131F355A4E00DDF01A /* CDVLogger.m */; };
- 2F4D42BC23F218BA00501999 /* CDVURLSchemeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F4D42BA23F218BA00501999 /* CDVURLSchemeHandler.h */; };
+ 2F4D42BC23F218BA00501999 /* CDVURLSchemeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F4D42BA23F218BA00501999 /* CDVURLSchemeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
2F4D42BD23F218BA00501999 /* CDVURLSchemeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F4D42BB23F218BA00501999 /* CDVURLSchemeHandler.m */; };
2FCCEA17247E7366007276A8 /* CDVLaunchScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E714D3423F535B500A321AF /* CDVLaunchScreen.m */; };
2FCCEA18247E7366007276A8 /* CDVLaunchScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E714D3223F535B500A321AF /* CDVLaunchScreen.h */; };
3093E2231B16D6A3003F381A /* CDVIntentAndNavigationFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3093E2211B16D6A3003F381A /* CDVIntentAndNavigationFilter.h */; };
3093E2241B16D6A3003F381A /* CDVIntentAndNavigationFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3093E2221B16D6A3003F381A /* CDVIntentAndNavigationFilter.m */; };
4E23F8FB23E16E96006CD852 /* CDVWebViewProcessPoolFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F523E16E96006CD852 /* CDVWebViewProcessPoolFactory.m */; };
- 4E23F8FC23E16E96006CD852 /* CDVWebViewUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F623E16E96006CD852 /* CDVWebViewUIDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4E23F8FC23E16E96006CD852 /* CDVWebViewUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F623E16E96006CD852 /* CDVWebViewUIDelegate.h */; };
4E23F8FD23E16E96006CD852 /* CDVWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F723E16E96006CD852 /* CDVWebViewUIDelegate.m */; };
4E23F8FE23E16E96006CD852 /* CDVWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F823E16E96006CD852 /* CDVWebViewEngine.m */; };
4E23F8FF23E16E96006CD852 /* CDVWebViewProcessPoolFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F923E16E96006CD852 /* CDVWebViewProcessPoolFactory.h */; settings = {ATTRIBUTES = (Public, ); }; };
4E23F90023E16E96006CD852 /* CDVWebViewEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8FA23E16E96006CD852 /* CDVWebViewEngine.h */; };
- 4E23F90323E17FFA006CD852 /* CDVWebViewUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F623E16E96006CD852 /* CDVWebViewUIDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4E23F90323E17FFA006CD852 /* CDVWebViewUIDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F623E16E96006CD852 /* CDVWebViewUIDelegate.h */; };
4E714D3623F535B500A321AF /* CDVLaunchScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E714D3223F535B500A321AF /* CDVLaunchScreen.h */; };
4E714D3823F535B500A321AF /* CDVLaunchScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E714D3423F535B500A321AF /* CDVLaunchScreen.m */; };
4F56D82D254A2EB50063F1D6 /* CDVWebViewEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F823E16E96006CD852 /* CDVWebViewEngine.m */; };
4F56D830254A2ED70063F1D6 /* CDVWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F723E16E96006CD852 /* CDVWebViewUIDelegate.m */; };
4F56D833254A2ED90063F1D6 /* CDVWebViewProcessPoolFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E23F8F523E16E96006CD852 /* CDVWebViewProcessPoolFactory.m */; };
4F56D836254A2EE10063F1D6 /* CDVWebViewEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8FA23E16E96006CD852 /* CDVWebViewEngine.h */; };
- 4F56D839254A2EE40063F1D6 /* CDVWebViewProcessPoolFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F923E16E96006CD852 /* CDVWebViewProcessPoolFactory.h */; };
+ 4F56D839254A2EE40063F1D6 /* CDVWebViewProcessPoolFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E23F8F923E16E96006CD852 /* CDVWebViewProcessPoolFactory.h */; settings = {ATTRIBUTES = (Public, ); }; };
4F56D83C254A2F2F0063F1D6 /* CDVURLSchemeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F4D42BB23F218BA00501999 /* CDVURLSchemeHandler.m */; };
7E7F69B91ABA3692007546F4 /* CDVHandleOpenURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95CF81AB9028C008C4574 /* CDVHandleOpenURL.h */; };
7ED95D021AB9028C008C4574 /* CDVDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95CF21AB9028C008C4574 /* CDVDebug.h */; };
@@ -42,7 +42,7 @@
7ED95D381AB9029B008C4574 /* CDVAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D121AB9029B008C4574 /* CDVAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; };
7ED95D391AB9029B008C4574 /* CDVAvailabilityDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D131AB9029B008C4574 /* CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
7ED95D3A1AB9029B008C4574 /* CDVCommandDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D141AB9029B008C4574 /* CDVCommandDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7ED95D3B1AB9029B008C4574 /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7ED95D3B1AB9029B008C4574 /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */; };
7ED95D3C1AB9029B008C4574 /* CDVCommandDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D161AB9029B008C4574 /* CDVCommandDelegateImpl.m */; };
7ED95D3D1AB9029B008C4574 /* CDVCommandQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D171AB9029B008C4574 /* CDVCommandQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
7ED95D3E1AB9029B008C4574 /* CDVCommandQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D181AB9029B008C4574 /* CDVCommandQueue.m */; };
@@ -62,8 +62,8 @@
7ED95D501AB9029B008C4574 /* CDVViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2A1AB9029B008C4574 /* CDVViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
7ED95D511AB9029B008C4574 /* CDVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2B1AB9029B008C4574 /* CDVViewController.m */; };
7ED95D521AB9029B008C4574 /* CDVWebViewEngineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2C1AB9029B008C4574 /* CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7ED95D531AB9029B008C4574 /* CDVWhitelist.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2D1AB9029B008C4574 /* CDVWhitelist.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7ED95D541AB9029B008C4574 /* CDVWhitelist.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2E1AB9029B008C4574 /* CDVWhitelist.m */; };
+ 7ED95D531AB9029B008C4574 /* CDVAllowList.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2D1AB9029B008C4574 /* CDVAllowList.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7ED95D541AB9029B008C4574 /* CDVAllowList.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2E1AB9029B008C4574 /* CDVAllowList.m */; };
7ED95D571AB9029B008C4574 /* NSDictionary+CordovaPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D311AB9029B008C4574 /* NSDictionary+CordovaPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
7ED95D581AB9029B008C4574 /* NSDictionary+CordovaPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D321AB9029B008C4574 /* NSDictionary+CordovaPreferences.m */; };
7ED95D591AB9029B008C4574 /* NSMutableArray+QueueAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D331AB9029B008C4574 /* NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -78,7 +78,7 @@
9052DE782150D040008E83D4 /* CDVPluginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D221AB9029B008C4574 /* CDVPluginResult.m */; };
9052DE792150D040008E83D4 /* CDVTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D251AB9029B008C4574 /* CDVTimer.m */; };
9052DE7C2150D040008E83D4 /* CDVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2B1AB9029B008C4574 /* CDVViewController.m */; };
- 9052DE7D2150D040008E83D4 /* CDVWhitelist.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2E1AB9029B008C4574 /* CDVWhitelist.m */; };
+ 9052DE7D2150D040008E83D4 /* CDVAllowList.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D2E1AB9029B008C4574 /* CDVAllowList.m */; };
9052DE7E2150D040008E83D4 /* NSDictionary+CordovaPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D321AB9029B008C4574 /* NSDictionary+CordovaPreferences.m */; };
9052DE7F2150D040008E83D4 /* NSMutableArray+QueueAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95D341AB9029B008C4574 /* NSMutableArray+QueueAdditions.m */; };
9052DE802150D040008E83D4 /* CDVJSON_private.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED95CF41AB9028C008C4574 /* CDVJSON_private.m */; };
@@ -93,6 +93,7 @@
9052DE8D2150D06B008E83D4 /* CDVGestureHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B082D21BB15CEA00D8DC35 /* CDVGestureHandler.h */; };
9052DE8E2150D06B008E83D4 /* CDVIntentAndNavigationFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3093E2211B16D6A3003F381A /* CDVIntentAndNavigationFilter.h */; };
9052DE8F2150D06B008E83D4 /* CDVHandleOpenURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95CF81AB9028C008C4574 /* CDVHandleOpenURL.h */; };
+ 9059F51C26F2CE2400B3B2B7 /* CDVURLSchemeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F4D42BA23F218BA00501999 /* CDVURLSchemeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; };
A3B082D41BB15CEA00D8DC35 /* CDVGestureHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B082D21BB15CEA00D8DC35 /* CDVGestureHandler.h */; };
A3B082D51BB15CEA00D8DC35 /* CDVGestureHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B082D31BB15CEA00D8DC35 /* CDVGestureHandler.m */; };
C0C01EB61E3911D50056E6CB /* Cordova.h in Headers */ = {isa = PBXBuildFile; fileRef = C0C01EB41E3911D50056E6CB /* Cordova.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -101,7 +102,7 @@
C0C01EBD1E39131A0056E6CB /* CDVAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D121AB9029B008C4574 /* CDVAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01EBE1E39131A0056E6CB /* CDVAvailabilityDeprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D131AB9029B008C4574 /* CDVAvailabilityDeprecated.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01EBF1E39131A0056E6CB /* CDVCommandDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D141AB9029B008C4574 /* CDVCommandDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C0C01EC01E39131A0056E6CB /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C0C01EC01E39131A0056E6CB /* CDVCommandDelegateImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */; };
C0C01EC11E39131A0056E6CB /* CDVCommandQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D171AB9029B008C4574 /* CDVCommandQueue.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01EC21E39131A0056E6CB /* CDVConfigParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D191AB9029B008C4574 /* CDVConfigParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01EC31E39131A0056E6CB /* CDVInvokedUrlCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D1B1AB9029B008C4574 /* CDVInvokedUrlCommand.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -112,7 +113,7 @@
C0C01EC81E39131A0056E6CB /* CDVTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D241AB9029B008C4574 /* CDVTimer.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01ECB1E39131A0056E6CB /* CDVViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2A1AB9029B008C4574 /* CDVViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01ECC1E39131A0056E6CB /* CDVWebViewEngineProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2C1AB9029B008C4574 /* CDVWebViewEngineProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C0C01ECD1E39131A0056E6CB /* CDVWhitelist.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2D1AB9029B008C4574 /* CDVWhitelist.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C0C01ECD1E39131A0056E6CB /* CDVAllowList.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D2D1AB9029B008C4574 /* CDVAllowList.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01ECE1E39131A0056E6CB /* NSDictionary+CordovaPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D311AB9029B008C4574 /* NSDictionary+CordovaPreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
C0C01ECF1E39131A0056E6CB /* NSMutableArray+QueueAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED95D331AB9029B008C4574 /* NSMutableArray+QueueAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
/* End PBXBuildFile section */
@@ -165,15 +166,14 @@
7ED95D2A1AB9029B008C4574 /* CDVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVViewController.h; sourceTree = ""; };
7ED95D2B1AB9029B008C4574 /* CDVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVViewController.m; sourceTree = ""; };
7ED95D2C1AB9029B008C4574 /* CDVWebViewEngineProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVWebViewEngineProtocol.h; sourceTree = ""; };
- 7ED95D2D1AB9029B008C4574 /* CDVWhitelist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVWhitelist.h; sourceTree = ""; };
- 7ED95D2E1AB9029B008C4574 /* CDVWhitelist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVWhitelist.m; sourceTree = ""; };
+ 7ED95D2D1AB9029B008C4574 /* CDVAllowList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVAllowList.h; sourceTree = ""; };
+ 7ED95D2E1AB9029B008C4574 /* CDVAllowList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVAllowList.m; sourceTree = ""; };
7ED95D311AB9029B008C4574 /* NSDictionary+CordovaPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+CordovaPreferences.h"; sourceTree = ""; };
7ED95D321AB9029B008C4574 /* NSDictionary+CordovaPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+CordovaPreferences.m"; sourceTree = ""; };
7ED95D331AB9029B008C4574 /* NSMutableArray+QueueAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+QueueAdditions.h"; sourceTree = ""; };
7ED95D341AB9029B008C4574 /* NSMutableArray+QueueAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+QueueAdditions.m"; sourceTree = ""; };
A3B082D21BB15CEA00D8DC35 /* CDVGestureHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVGestureHandler.h; sourceTree = ""; };
A3B082D31BB15CEA00D8DC35 /* CDVGestureHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVGestureHandler.m; sourceTree = ""; };
- AA747D9E0F9514B9006C5449 /* CordovaLib_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CordovaLib_Prefix.pch; sourceTree = SOURCE_ROOT; };
C0C01EB21E3911D50056E6CB /* Cordova.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Cordova.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C0C01EB41E3911D50056E6CB /* Cordova.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Cordova.h; sourceTree = ""; };
C0C01EB51E3911D50056E6CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
@@ -209,6 +209,7 @@
0867D691FE84028FC02AAC07 = {
isa = PBXGroup;
children = (
+ 9064EF5E26FAB74200C9D65B /* include */,
7ED95D0E1AB9029B008C4574 /* Public */,
7ED95CF11AB9028C008C4574 /* Private */,
C0C01EB31E3911D50056E6CB /* Cordova */,
@@ -257,7 +258,8 @@
7ED95CF11AB9028C008C4574 /* Private */ = {
isa = PBXGroup;
children = (
- AA747D9E0F9514B9006C5449 /* CordovaLib_Prefix.pch */,
+ 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */,
+ 7ED95D161AB9029B008C4574 /* CDVCommandDelegateImpl.m */,
7ED95CF21AB9028C008C4574 /* CDVDebug.h */,
7ED95CF31AB9028C008C4574 /* CDVJSON_private.h */,
7ED95CF41AB9028C008C4574 /* CDVJSON_private.m */,
@@ -291,47 +293,60 @@
sourceTree = "";
};
7ED95D0E1AB9029B008C4574 /* Public */ = {
+ isa = PBXGroup;
+ children = (
+ 7ED95D111AB9029B008C4574 /* CDVAppDelegate.m */,
+ 7ED95D181AB9029B008C4574 /* CDVCommandQueue.m */,
+ 7ED95D1A1AB9029B008C4574 /* CDVConfigParser.m */,
+ 7ED95D1C1AB9029B008C4574 /* CDVInvokedUrlCommand.m */,
+ 7ED95D1E1AB9029B008C4574 /* CDVPlugin+Resources.m */,
+ 7ED95D201AB9029B008C4574 /* CDVPlugin.m */,
+ 7ED95D221AB9029B008C4574 /* CDVPluginResult.m */,
+ 7ED95D251AB9029B008C4574 /* CDVTimer.m */,
+ 4E23F8F523E16E96006CD852 /* CDVWebViewProcessPoolFactory.m */,
+ 7ED95D2B1AB9029B008C4574 /* CDVViewController.m */,
+ 7ED95D2E1AB9029B008C4574 /* CDVAllowList.m */,
+ 7ED95D321AB9029B008C4574 /* NSDictionary+CordovaPreferences.m */,
+ 7ED95D341AB9029B008C4574 /* NSMutableArray+QueueAdditions.m */,
+ 2F4D42BB23F218BA00501999 /* CDVURLSchemeHandler.m */,
+ );
+ name = Public;
+ path = Classes/Public;
+ sourceTree = "";
+ };
+ 9064EF5E26FAB74200C9D65B /* include */ = {
+ isa = PBXGroup;
+ children = (
+ 9064EF5F26FAB74800C9D65B /* Cordova */,
+ );
+ path = include;
+ sourceTree = "";
+ };
+ 9064EF5F26FAB74800C9D65B /* Cordova */ = {
isa = PBXGroup;
children = (
7ED95D0F1AB9029B008C4574 /* CDV.h */,
7ED95D101AB9029B008C4574 /* CDVAppDelegate.h */,
- 7ED95D111AB9029B008C4574 /* CDVAppDelegate.m */,
7ED95D121AB9029B008C4574 /* CDVAvailability.h */,
7ED95D131AB9029B008C4574 /* CDVAvailabilityDeprecated.h */,
7ED95D141AB9029B008C4574 /* CDVCommandDelegate.h */,
- 7ED95D151AB9029B008C4574 /* CDVCommandDelegateImpl.h */,
- 7ED95D161AB9029B008C4574 /* CDVCommandDelegateImpl.m */,
7ED95D171AB9029B008C4574 /* CDVCommandQueue.h */,
- 7ED95D181AB9029B008C4574 /* CDVCommandQueue.m */,
7ED95D191AB9029B008C4574 /* CDVConfigParser.h */,
- 7ED95D1A1AB9029B008C4574 /* CDVConfigParser.m */,
7ED95D1B1AB9029B008C4574 /* CDVInvokedUrlCommand.h */,
- 7ED95D1C1AB9029B008C4574 /* CDVInvokedUrlCommand.m */,
7ED95D1D1AB9029B008C4574 /* CDVPlugin+Resources.h */,
- 7ED95D1E1AB9029B008C4574 /* CDVPlugin+Resources.m */,
7ED95D1F1AB9029B008C4574 /* CDVPlugin.h */,
- 7ED95D201AB9029B008C4574 /* CDVPlugin.m */,
7ED95D211AB9029B008C4574 /* CDVPluginResult.h */,
- 7ED95D221AB9029B008C4574 /* CDVPluginResult.m */,
7ED95D231AB9029B008C4574 /* CDVScreenOrientationDelegate.h */,
7ED95D241AB9029B008C4574 /* CDVTimer.h */,
- 7ED95D251AB9029B008C4574 /* CDVTimer.m */,
7ED95D2A1AB9029B008C4574 /* CDVViewController.h */,
4E23F8F923E16E96006CD852 /* CDVWebViewProcessPoolFactory.h */,
- 4E23F8F523E16E96006CD852 /* CDVWebViewProcessPoolFactory.m */,
- 7ED95D2B1AB9029B008C4574 /* CDVViewController.m */,
7ED95D2C1AB9029B008C4574 /* CDVWebViewEngineProtocol.h */,
- 7ED95D2D1AB9029B008C4574 /* CDVWhitelist.h */,
- 7ED95D2E1AB9029B008C4574 /* CDVWhitelist.m */,
+ 7ED95D2D1AB9029B008C4574 /* CDVAllowList.h */,
7ED95D311AB9029B008C4574 /* NSDictionary+CordovaPreferences.h */,
- 7ED95D321AB9029B008C4574 /* NSDictionary+CordovaPreferences.m */,
7ED95D331AB9029B008C4574 /* NSMutableArray+QueueAdditions.h */,
- 7ED95D341AB9029B008C4574 /* NSMutableArray+QueueAdditions.m */,
2F4D42BA23F218BA00501999 /* CDVURLSchemeHandler.h */,
- 2F4D42BB23F218BA00501999 /* CDVURLSchemeHandler.m */,
);
- name = Public;
- path = Classes/Public;
+ path = Cordova;
sourceTree = "";
};
A3B082D11BB15CEA00D8DC35 /* CDVGestureHandler */ = {
@@ -373,12 +388,13 @@
C0C01EC41E39131A0056E6CB /* CDVPlugin+Resources.h in Headers */,
C0C01EC51E39131A0056E6CB /* CDVPlugin.h in Headers */,
C0C01EC61E39131A0056E6CB /* CDVPluginResult.h in Headers */,
+ 9059F51C26F2CE2400B3B2B7 /* CDVURLSchemeHandler.h in Headers */,
C0C01EC71E39131A0056E6CB /* CDVScreenOrientationDelegate.h in Headers */,
4F56D836254A2EE10063F1D6 /* CDVWebViewEngine.h in Headers */,
C0C01EC81E39131A0056E6CB /* CDVTimer.h in Headers */,
C0C01ECB1E39131A0056E6CB /* CDVViewController.h in Headers */,
C0C01ECC1E39131A0056E6CB /* CDVWebViewEngineProtocol.h in Headers */,
- C0C01ECD1E39131A0056E6CB /* CDVWhitelist.h in Headers */,
+ C0C01ECD1E39131A0056E6CB /* CDVAllowList.h in Headers */,
C0C01ECE1E39131A0056E6CB /* NSDictionary+CordovaPreferences.h in Headers */,
4E23F90323E17FFA006CD852 /* CDVWebViewUIDelegate.h in Headers */,
C0C01ECF1E39131A0056E6CB /* NSMutableArray+QueueAdditions.h in Headers */,
@@ -417,7 +433,7 @@
7ED95D501AB9029B008C4574 /* CDVViewController.h in Headers */,
7ED95D521AB9029B008C4574 /* CDVWebViewEngineProtocol.h in Headers */,
4E23F90023E16E96006CD852 /* CDVWebViewEngine.h in Headers */,
- 7ED95D531AB9029B008C4574 /* CDVWhitelist.h in Headers */,
+ 7ED95D531AB9029B008C4574 /* CDVAllowList.h in Headers */,
7ED95D571AB9029B008C4574 /* NSDictionary+CordovaPreferences.h in Headers */,
7ED95D591AB9029B008C4574 /* NSMutableArray+QueueAdditions.h in Headers */,
7ED95D021AB9028C008C4574 /* CDVDebug.h in Headers */,
@@ -438,10 +454,9 @@
isa = PBXNativeTarget;
buildConfigurationList = C0C01EB91E3911D50056E6CB /* Build configuration list for PBXNativeTarget "Cordova" */;
buildPhases = (
+ C0C01EAF1E3911D50056E6CB /* Headers */,
C0C01EAD1E3911D50056E6CB /* Sources */,
C0C01EAE1E3911D50056E6CB /* Frameworks */,
- C0C01EAF1E3911D50056E6CB /* Headers */,
- CEDDBB5523948D4C00506451 /* ShellScript */,
);
buildRules = (
);
@@ -475,6 +490,7 @@
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
+ BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1010;
TargetAttributes = {
C0C01EB11E3911D50056E6CB = {
@@ -506,26 +522,6 @@
};
/* End PBXProject section */
-/* Begin PBXShellScriptBuildPhase section */
- CEDDBB5523948D4C00506451 /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PROJECT_DIR}/../update_podspec.sh\" -s cordova\n";
- };
-/* End PBXShellScriptBuildPhase section */
-
/* Begin PBXSourcesBuildPhase section */
C0C01EAD1E3911D50056E6CB /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -545,7 +541,7 @@
4F56D82D254A2EB50063F1D6 /* CDVWebViewEngine.m in Sources */,
9052DE7C2150D040008E83D4 /* CDVViewController.m in Sources */,
4F56D83C254A2F2F0063F1D6 /* CDVURLSchemeHandler.m in Sources */,
- 9052DE7D2150D040008E83D4 /* CDVWhitelist.m in Sources */,
+ 9052DE7D2150D040008E83D4 /* CDVAllowList.m in Sources */,
9052DE7E2150D040008E83D4 /* NSDictionary+CordovaPreferences.m in Sources */,
9052DE7F2150D040008E83D4 /* NSMutableArray+QueueAdditions.m in Sources */,
9052DE802150D040008E83D4 /* CDVJSON_private.m in Sources */,
@@ -574,7 +570,7 @@
4E23F8FE23E16E96006CD852 /* CDVWebViewEngine.m in Sources */,
4E23F8FB23E16E96006CD852 /* CDVWebViewProcessPoolFactory.m in Sources */,
7ED95D511AB9029B008C4574 /* CDVViewController.m in Sources */,
- 7ED95D541AB9029B008C4574 /* CDVWhitelist.m in Sources */,
+ 7ED95D541AB9029B008C4574 /* CDVAllowList.m in Sources */,
7ED95D581AB9029B008C4574 /* NSDictionary+CordovaPreferences.m in Sources */,
7ED95D5A1AB9029B008C4574 /* NSMutableArray+QueueAdditions.m in Sources */,
7ED95D041AB9028C008C4574 /* CDVJSON_private.m in Sources */,
@@ -593,6 +589,9 @@
1DEB921F08733DC00010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ ENABLE_MODULE_VERIFIER = YES;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
TARGETED_DEVICE_FAMILY = "1,2";
};
@@ -601,6 +600,9 @@
1DEB922008733DC00010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ ENABLE_MODULE_VERIFIER = YES;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
TARGETED_DEVICE_FAMILY = "1,2";
};
@@ -632,6 +634,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -641,14 +644,15 @@
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
+ DEFINES_MODULE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = CordovaLib_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
@@ -660,6 +664,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MERGEABLE_LIBRARY = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
@@ -696,6 +701,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -705,12 +711,13 @@
CODE_SIGN_IDENTITY = "";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEFINES_MODULE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = CordovaLib_Prefix.pch;
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
@@ -719,6 +726,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MERGEABLE_LIBRARY = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = "-ObjC";
@@ -732,8 +740,8 @@
C0C01EB71E3911D50056E6CB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- DEFINES_MODULE = YES;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
INFOPLIST_FILE = Cordova/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
@@ -741,6 +749,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
PRODUCT_BUNDLE_IDENTIFIER = org.apache.cordova.Cordova;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
@@ -751,8 +761,8 @@
C0C01EB81E3911D50056E6CB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- DEFINES_MODULE = YES;
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
INFOPLIST_FILE = Cordova/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
@@ -760,6 +770,8 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
PRODUCT_BUNDLE_IDENTIFIER = org.apache.cordova.Cordova;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/VERSION b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/VERSION
index 6abaeb2f..798e3899 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/VERSION
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/VERSION
@@ -1 +1 @@
-6.2.0
+6.3.0
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/cordova.js b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/cordova.js
index 37f329f5..c1005068 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/cordova.js
+++ b/Samples/Cordova/ExampleProject/platforms/ios/CordovaLib/cordova.js
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var PLATFORM_VERSION_BUILD_LABEL = '6.2.0';
+var PLATFORM_VERSION_BUILD_LABEL = '6.3.0';
// file: src/scripts/require.js
var require;
var define;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject.xcodeproj/project.pbxproj b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject.xcodeproj/project.pbxproj
index 1c3612b0..61fae620 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject.xcodeproj/project.pbxproj
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject.xcodeproj/project.pbxproj
@@ -7,16 +7,18 @@
objects = {
/* Begin PBXBuildFile section */
- 0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
+ 0207DA581B56EA530066E2B4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Assets.xcassets */; };
1D3623260D0F684500981E51 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* AppDelegate.m */; };
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
301BF552109A68D80062928A /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 301BF535109A57CC0062928A /* libCordova.a */; settings = {ATTRIBUTES = (Required, ); }; };
302D95F114D2391D003F00A1 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D95EF14D2391D003F00A1 /* MainViewController.m */; };
302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 302D95F014D2391D003F00A1 /* MainViewController.xib */; };
+ 4E7CA2B6272ABB0D00177EF9 /* config.xml in Copy Staging Resources */ = {isa = PBXBuildFile; fileRef = F840E1F0165FE0F500CFE078 /* config.xml */; };
+ 4E7CA2B7272ABB0D00177EF9 /* www in Copy Staging Resources */ = {isa = PBXBuildFile; fileRef = 301BF56E109A69640062928A /* www */; };
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */; };
- AD72400BD15B4D16A8BD05A9 /* AppDelegate+CleverTapPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = C8520E2D94124E4C9E379DF9 /* AppDelegate+CleverTapPlugin.m */; };
- F443F68E20C643D0B20FDCBD /* CleverTapPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = C60E37BF58D944AEB25A6BC3 /* CleverTapPlugin.m */; };
- F5C587BEDEEFB99395C0C57D /* libPods-ExampleProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EDEC84873A4FB62AB153BED /* libPods-ExampleProject.a */; };
+ 79E34FAD932141AAAED80323 /* AppDelegate+CleverTapPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 9072FE03CBFB4BA1B3D674EF /* AppDelegate+CleverTapPlugin.m */; };
+ 8869C715A9AFB9105187968D /* libPods-ExampleProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A155B6ECBE7FA5665DB46E27 /* libPods-ExampleProject.a */; };
+ D6D7091FE62E4E71A2ECFB0C /* CleverTapPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 96D13DA9D5D94C098C714621 /* CleverTapPlugin.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -43,8 +45,23 @@
};
/* End PBXContainerItemProxy section */
+/* Begin PBXCopyFilesBuildPhase section */
+ 857339E32710CC9700A1C74C /* Copy Staging Resources */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 7;
+ files = (
+ 4E7CA2B6272ABB0D00177EF9 /* config.xml in Copy Staging Resources */,
+ 4E7CA2B7272ABB0D00177EF9 /* www in Copy Staging Resources */,
+ );
+ name = "Copy Staging Resources";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
- 0207DA571B56EA530066E2B4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ExampleProject/Images.xcassets; sourceTree = SOURCE_ROOT; };
+ 0207DA571B56EA530066E2B4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; sourceTree = ""; };
1D3623240D0F684500981E51 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
1D3623250D0F684500981E51 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
1D6058910D05DD3D006BFB54 /* ExampleProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExampleProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -58,19 +75,19 @@
3047A5101AB8059700498E2A /* build-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "build-release.xcconfig"; path = "cordova/build-release.xcconfig"; sourceTree = SOURCE_ROOT; };
3047A5111AB8059700498E2A /* build.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = build.xcconfig; path = cordova/build.xcconfig; sourceTree = SOURCE_ROOT; };
32CA4F630368D1EE00C91783 /* ExampleProject-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ExampleProject-Prefix.pch"; sourceTree = ""; };
- 34095DC61A85023B420313D0 /* Pods-ExampleProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.release.xcconfig"; path = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.release.xcconfig"; sourceTree = ""; };
- 36C68E7C744A4B49ADA24C00 /* CleverTapPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CleverTapPlugin.h; path = "clevertap-cordova/CleverTapPlugin.h"; sourceTree = ""; };
- 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; path = ExampleProject/CDVLaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
- 6EDEC84873A4FB62AB153BED /* libPods-ExampleProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ExampleProject.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 8D1107310486CEB800E47090 /* ExampleProject-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "ExampleProject-Info.plist"; path = "ExampleProject/ExampleProject-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = SOURCE_ROOT; };
- 96822B858E1C4257A69E8942 /* AppDelegate+CleverTapPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "AppDelegate+CleverTapPlugin.h"; path = "clevertap-cordova/AppDelegate+CleverTapPlugin.h"; sourceTree = ""; };
- C60E37BF58D944AEB25A6BC3 /* CleverTapPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CleverTapPlugin.m; path = "clevertap-cordova/CleverTapPlugin.m"; sourceTree = ""; };
- C8520E2D94124E4C9E379DF9 /* AppDelegate+CleverTapPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "AppDelegate+CleverTapPlugin.m"; path = "clevertap-cordova/AppDelegate+CleverTapPlugin.m"; sourceTree = ""; };
+ 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CDVLaunchScreen.storyboard; sourceTree = ""; };
+ 8BA5915B2658EAE4EF9242FE /* Pods-ExampleProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.release.xcconfig"; path = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.release.xcconfig"; sourceTree = ""; };
+ 8D1107310486CEB800E47090 /* ExampleProject-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "ExampleProject-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; };
+ 8F8027E1C1EF4E856A4C7C4B /* Pods-ExampleProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.debug.xcconfig"; path = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.debug.xcconfig"; sourceTree = ""; };
+ 9072FE03CBFB4BA1B3D674EF /* AppDelegate+CleverTapPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = "AppDelegate+CleverTapPlugin.m"; path = "clevertap-cordova/AppDelegate+CleverTapPlugin.m"; sourceTree = ""; };
+ 936745733A0B4FACA19668BC /* CleverTapPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CleverTapPlugin.h; path = "clevertap-cordova/CleverTapPlugin.h"; sourceTree = ""; };
+ 96D13DA9D5D94C098C714621 /* CleverTapPlugin.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CleverTapPlugin.m; path = "clevertap-cordova/CleverTapPlugin.m"; sourceTree = ""; };
+ A155B6ECBE7FA5665DB46E27 /* libPods-ExampleProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ExampleProject.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ BE1F5508A0C346F68965CBE2 /* AppDelegate+CleverTapPlugin.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "AppDelegate+CleverTapPlugin.h"; path = "clevertap-cordova/AppDelegate+CleverTapPlugin.h"; sourceTree = ""; };
EB87FDF31871DA8E0020F90C /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../../www; sourceTree = ""; };
EB87FDF41871DAF40020F90C /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ../../config.xml; sourceTree = ""; };
ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = ""; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = ExampleProject/config.xml; sourceTree = ""; };
- FA1E1E296A52A30137B44167 /* Pods-ExampleProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ExampleProject.debug.xcconfig"; path = "Target Support Files/Pods-ExampleProject/Pods-ExampleProject.debug.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -79,36 +96,13 @@
buildActionMask = 2147483647;
files = (
301BF552109A68D80062928A /* libCordova.a in Frameworks */,
- F5C587BEDEEFB99395C0C57D /* libPods-ExampleProject.a in Frameworks */,
+ 8869C715A9AFB9105187968D /* libPods-ExampleProject.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 080E96DDFE201D6D7F000001 /* Classes */ = {
- isa = PBXGroup;
- children = (
- 302D95EE14D2391D003F00A1 /* MainViewController.h */,
- 302D95EF14D2391D003F00A1 /* MainViewController.m */,
- 302D95F014D2391D003F00A1 /* MainViewController.xib */,
- 1D3623240D0F684500981E51 /* AppDelegate.h */,
- 1D3623250D0F684500981E51 /* AppDelegate.m */,
- );
- name = Classes;
- path = ExampleProject/Classes;
- sourceTree = SOURCE_ROOT;
- };
- 0971A1313E1931542696B3D4 /* Pods */ = {
- isa = PBXGroup;
- children = (
- FA1E1E296A52A30137B44167 /* Pods-ExampleProject.debug.xcconfig */,
- 34095DC61A85023B420313D0 /* Pods-ExampleProject.release.xcconfig */,
- );
- name = Pods;
- path = Pods;
- sourceTree = "";
- };
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
@@ -121,38 +115,42 @@
isa = PBXGroup;
children = (
EB87FDF41871DAF40020F90C /* config.xml */,
+ 3047A50E1AB8057F00498E2A /* config */,
EB87FDF31871DA8E0020F90C /* www */,
EB87FDF11871DA420020F90C /* Staging */,
301BF52D109A57CC0062928A /* CordovaLib.xcodeproj */,
- 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* ExampleProject */,
307C750510C5A3420062BCA9 /* Plugins */,
- 29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
- 0971A1313E1931542696B3D4 /* Pods */,
+ 536D318C185AA9CF6B12F65E /* Pods */,
);
name = CustomTemplate;
sourceTree = "";
};
- 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ 29B97315FDCFA39411CA2CEA /* ExampleProject */ = {
isa = PBXGroup;
children = (
+ 8D1107310486CEB800E47090 /* ExampleProject-Info.plist */,
32CA4F630368D1EE00C91783 /* ExampleProject-Prefix.pch */,
- 29B97316FDCFA39411CA2CEA /* main.m */,
+ 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */,
+ 0207DA571B56EA530066E2B4 /* Assets.xcassets */,
ED33DF2A687741AEAF9F8254 /* Bridging-Header.h */,
+ 302D95EE14D2391D003F00A1 /* MainViewController.h */,
+ 302D95EF14D2391D003F00A1 /* MainViewController.m */,
+ 302D95F014D2391D003F00A1 /* MainViewController.xib */,
+ 1D3623240D0F684500981E51 /* AppDelegate.h */,
+ 1D3623250D0F684500981E51 /* AppDelegate.m */,
+ 29B97316FDCFA39411CA2CEA /* main.m */,
);
- name = "Other Sources";
+ name = ExampleProject;
path = ExampleProject;
sourceTree = "";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
- 0207DA571B56EA530066E2B4 /* Images.xcassets */,
- 3047A50E1AB8057F00498E2A /* config */,
- 8D1107310486CEB800E47090 /* ExampleProject-Info.plist */,
- 6AFF5BF81D6E424B00AB3073 /* CDVLaunchScreen.storyboard */,
);
name = Resources;
path = ExampleProject/Resources;
@@ -161,7 +159,7 @@
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
- 6EDEC84873A4FB62AB153BED /* libPods-ExampleProject.a */,
+ A155B6ECBE7FA5665DB46E27 /* libPods-ExampleProject.a */,
);
name = Frameworks;
sourceTree = "";
@@ -188,15 +186,25 @@
307C750510C5A3420062BCA9 /* Plugins */ = {
isa = PBXGroup;
children = (
- C8520E2D94124E4C9E379DF9 /* AppDelegate+CleverTapPlugin.m */,
- C60E37BF58D944AEB25A6BC3 /* CleverTapPlugin.m */,
- 96822B858E1C4257A69E8942 /* AppDelegate+CleverTapPlugin.h */,
- 36C68E7C744A4B49ADA24C00 /* CleverTapPlugin.h */,
+ 9072FE03CBFB4BA1B3D674EF /* AppDelegate+CleverTapPlugin.m */,
+ 96D13DA9D5D94C098C714621 /* CleverTapPlugin.m */,
+ BE1F5508A0C346F68965CBE2 /* AppDelegate+CleverTapPlugin.h */,
+ 936745733A0B4FACA19668BC /* CleverTapPlugin.h */,
);
name = Plugins;
path = ExampleProject/Plugins;
sourceTree = SOURCE_ROOT;
};
+ 536D318C185AA9CF6B12F65E /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 8F8027E1C1EF4E856A4C7C4B /* Pods-ExampleProject.debug.xcconfig */,
+ 8BA5915B2658EAE4EF9242FE /* Pods-ExampleProject.release.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
EB87FDF11871DA420020F90C /* Staging */ = {
isa = PBXGroup;
children = (
@@ -213,12 +221,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "ExampleProject" */;
buildPhases = (
- 7F1A6C3AB510EE7B5BAA379D /* [CP] Check Pods Manifest.lock */,
- 304B58A110DAC018002A0835 /* Copy www directory */,
+ 0F6AD5DD9B2AD417C23B3A15 /* [CP] Check Pods Manifest.lock */,
+ 857339E32710CC9700A1C74C /* Copy Staging Resources */,
1D60588D0D05DD3D006BFB54 /* Resources */,
1D60588E0D05DD3D006BFB54 /* Sources */,
1D60588F0D05DD3D006BFB54 /* Frameworks */,
- EE1DE85F4E80EC58910804B9 /* [CP] Copy Pods Resources */,
+ C9C0AE388FD885C43F4686F6 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -236,6 +244,7 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
+ BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1130;
TargetAttributes = {
1D6058900D05DD3D006BFB54 = {
@@ -290,7 +299,7 @@
buildActionMask = 2147483647;
files = (
302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */,
- 0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */,
+ 0207DA581B56EA530066E2B4 /* Assets.xcassets in Resources */,
6AFF5BF91D6E424B00AB3073 /* CDVLaunchScreen.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -298,22 +307,7 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 304B58A110DAC018002A0835 /* Copy www directory */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Copy www directory";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"$SRCROOT/ExampleProject/Scripts/copy-www-build-step.sh\"";
- showEnvVarsInLog = 0;
- };
- 7F1A6C3AB510EE7B5BAA379D /* [CP] Check Pods Manifest.lock */ = {
+ 0F6AD5DD9B2AD417C23B3A15 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -335,7 +329,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- EE1DE85F4E80EC58910804B9 /* [CP] Copy Pods Resources */ = {
+ C9C0AE388FD885C43F4686F6 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -362,8 +356,8 @@
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
1D3623260D0F684500981E51 /* AppDelegate.m in Sources */,
302D95F114D2391D003F00A1 /* MainViewController.m in Sources */,
- AD72400BD15B4D16A8BD05A9 /* AppDelegate+CleverTapPlugin.m in Sources */,
- F443F68E20C643D0B20FDCBD /* CleverTapPlugin.m in Sources */,
+ 79E34FAD932141AAAED80323 /* AppDelegate+CleverTapPlugin.m in Sources */,
+ D6D7091FE62E4E71A2ECFB0C /* CleverTapPlugin.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -398,6 +392,7 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.example;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTS_MACCATALYST = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_WORKSPACE = NO;
};
@@ -421,6 +416,7 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.clevertap.example;
PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTS_MACCATALYST = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_WORKSPACE = NO;
};
@@ -445,6 +441,7 @@
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -452,6 +449,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_THUMB_SUPPORT = NO;
@@ -462,6 +460,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MERGED_BINARY_TYPE = automatic;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SKIP_INSTALL = NO;
@@ -488,12 +487,14 @@
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_THUMB_SUPPORT = NO;
@@ -504,6 +505,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ MERGED_BINARY_TYPE = automatic;
SDKROOT = iphoneos;
SKIP_INSTALL = NO;
WK_WEB_VIEW_ONLY = 1;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/Contents.json b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..2ce78c1b
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,241 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "icon-20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "icon-20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "icon-29.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "icon-29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "icon-29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "icon-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "icon-60@2x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "icon.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "icon@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "icon-60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "icon-60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "icon-20.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "icon-20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "icon-29.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "icon-29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "icon-40.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "icon-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "icon-50.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "icon-50@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "icon-72.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "icon-72@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "icon-76.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "icon-76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "icon-83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "icon-1024.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "24x24",
+ "idiom" : "watch",
+ "filename" : "icon-24@2x.png",
+ "scale" : "2x",
+ "role" : "notificationCenter",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "27.5x27.5",
+ "idiom" : "watch",
+ "filename" : "icon-27.5@2x.png",
+ "scale" : "2x",
+ "role" : "notificationCenter",
+ "subtype" : "42mm"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "watch",
+ "filename" : "icon-29@2x.png",
+ "role" : "companionSettings",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "watch",
+ "filename" : "icon-29@3x.png",
+ "role" : "companionSettings",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "watch",
+ "filename" : "icon-40@2x.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "44x44",
+ "idiom" : "watch",
+ "filename" : "icon-44@2x.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "40mm"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "watch",
+ "filename" : "icon-50@2x.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "44mm"
+ },
+ {
+ "size" : "86x86",
+ "idiom" : "watch",
+ "filename" : "icon-86@2x.png",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "98x98",
+ "idiom" : "watch",
+ "filename" : "icon-98@2x.png",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "42mm"
+ },
+ {
+ "size" : "108x108",
+ "idiom" : "watch",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "44mm"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "watch-marketing",
+ "filename" : "icon-1024.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-1024.png
new file mode 100644
index 00000000..1b9cbb91
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20.png
new file mode 100644
index 00000000..5788eed9
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
new file mode 100644
index 00000000..4feefdf8
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
new file mode 100644
index 00000000..69ce592c
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-24@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-24@2x.png
new file mode 100644
index 00000000..f0babf9d
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-24@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-27.5@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-27.5@2x.png
new file mode 100644
index 00000000..78f21bb3
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-27.5@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29.png
new file mode 100644
index 00000000..5dff98e9
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
new file mode 100644
index 00000000..34b39085
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
new file mode 100644
index 00000000..c63fd776
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40.png
new file mode 100644
index 00000000..4feefdf8
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
new file mode 100644
index 00000000..32897363
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-44@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-44@2x.png
new file mode 100644
index 00000000..01c5af72
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-44@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50.png
new file mode 100644
index 00000000..81f93f16
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png
new file mode 100644
index 00000000..a980efe1
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
new file mode 100644
index 00000000..1e794a48
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
new file mode 100644
index 00000000..db10c553
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72.png
new file mode 100644
index 00000000..097f5b40
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png
new file mode 100644
index 00000000..e3d49a2f
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76.png
new file mode 100644
index 00000000..aa6810c3
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
new file mode 100644
index 00000000..da3a050f
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
new file mode 100644
index 00000000..039a02ae
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-86@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-86@2x.png
new file mode 100644
index 00000000..f32a034a
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-86@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-98@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-98@2x.png
new file mode 100644
index 00000000..85ec9e36
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon-98@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon.png
new file mode 100644
index 00000000..bbdba9ee
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon@2x.png b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon@2x.png
new file mode 100644
index 00000000..41e6be4a
Binary files /dev/null and b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/AppIcon.appiconset/icon@2x.png differ
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/BackgroundColor.colorset/Contents.json b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/BackgroundColor.colorset/Contents.json
new file mode 100644
index 00000000..38ce5e7c
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/BackgroundColor.colorset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "colors": [
+ {
+ "idiom": "universal",
+ "color": {
+ "platform": "ios",
+ "reference": "systemBackgroundColor"
+ }
+ }
+ ],
+ "info": {
+ "author": "Xcode",
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/Contents.json b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/Contents.json
new file mode 100644
index 00000000..da4a164c
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/LaunchStoryboard.imageset/Contents.json b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/LaunchStoryboard.imageset/Contents.json
new file mode 100644
index 00000000..c0ac4835
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Assets.xcassets/LaunchStoryboard.imageset/Contents.json
@@ -0,0 +1,872 @@
+{
+ "images": [
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x"
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "universal",
+ "scale": "3x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x"
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "ipad",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "1x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "2x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "width-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "height-class": "compact"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "height-class": "compact",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x"
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "dark"
+ }
+ ]
+ },
+ {
+ "idiom": "iphone",
+ "scale": "3x",
+ "appearances": [
+ {
+ "appearance": "luminosity",
+ "value": "light"
+ }
+ ]
+ }
+ ],
+ "info": {
+ "author": "Xcode",
+ "version": 1
+ }
+}
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/ExampleProject-Info.plist b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/ExampleProject-Info.plist
index dd71dba2..dcf0f904 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/ExampleProject-Info.plist
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/ExampleProject-Info.plist
@@ -51,8 +51,10 @@
CleverTapAccountID
- TEST-R78-ZZK-955Z
+ TEST-R55-999-486Z
CleverTapToken
- TEST-311-ba2
+ TEST-ccc-552
+ CleverTapRegion
+ sk1
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.h b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.h
index c59d2d78..2cf1c17f 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.h
@@ -372,6 +372,16 @@ static NSString * const CTHandleOpenURLNotification = @"CTHandleOpenURLNotificat
*/
- (void)markReadInboxMessageForId:(CDVInvokedUrlCommand *)command;
+/**
+ This method Mark bulk messages as Read for Given Message Ids
+ */
+- (void)markReadInboxMessagesForIds:(CDVInvokedUrlCommand *)command;
+
+/**
+ Dismisses Appinbox
+ */
+- (void)dismissInbox:(CDVInvokedUrlCommand *)command;
+
/**
This method Marks Inbox Notification Viewed for Given Message Id
*/
@@ -448,6 +458,51 @@ static NSString * const CTHandleOpenURLNotification = @"CTHandleOpenURLNotificat
*/
- (void)getLastFetchTimeStampInMillis: (CDVInvokedUrlCommand *)command;
+# pragma mark - Product experiences
+
+/**
+ Uploads variables to the server. Requires Development/Debug build/configuration.
+*/
+- (void)syncVariables: (CDVInvokedUrlCommand *)command;
+
+/**
+Uploads variables to the server.
+@param {boolean} isProduction Provide `true` if variables must be sync in Productuon build/configuration.
+*/
+- (void)syncVariablesinProd: (CDVInvokedUrlCommand *)command;
+
+/**
+Forces variables to update from the server.
+*/
+- (void)fetchVariables:(CDVInvokedUrlCommand *)command;
+
+/**
+Create variables.
+@param {object} variables The JSON Object specifying the varibles to be created.
+*/
+- (void)defineVariables: (CDVInvokedUrlCommand *)command;
+
+/**
+Get a variable or a group for the specified name.
+@param {string} name - name.
+*/
+- (void)getVariable:(CDVInvokedUrlCommand *)command;
+
+/**
+Get all variables via a JSON object.
+*/
+- (void)getVariables:(CDVInvokedUrlCommand *)command;
+
+ /**
+Adds a callback to be invoked when variables are initialised with server values. Will be called each time new values are fetched.
+*/
+- (void)onVariablesChanged:(CDVInvokedUrlCommand *)command;
+
+/**
+Called when the value of the variable changes.
+*/
+- (void)onValueChanged:(CDVInvokedUrlCommand *)command;
+
/**
This method fetches String Value for a given key
*/
@@ -473,5 +528,7 @@ static NSString * const CTHandleOpenURLNotification = @"CTHandleOpenURLNotificat
*/
- (void)reset;
+- (void)setLibrary: (CDVInvokedUrlCommand *)command;
+
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.m b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.m
index 7b2b3538..5d56169c 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/Plugins/clevertap-cordova/CleverTapPlugin.m
@@ -25,13 +25,20 @@
#import "CleverTapPushNotificationDelegate.h"
#import "CleverTapInAppNotificationDelegate.h"
#import "CleverTap+InAppNotifications.h"
+#import "CleverTap+CTVar.h"
+#import "CTVar.h"
+#import "CTLocalInApp.h"
+#import "Clevertap+PushPermission.h"
-#import
+#if __has_include()
+#import
+#endif
static CleverTap *clevertap;
static NSURL *launchDeepLink;
static NSDictionary *launchNotification;
static NSDateFormatter *dateFormatter;
+static NSMutableDictionary *allVariables;
@interface CleverTapPlugin () {
}
@@ -666,7 +673,8 @@ - (void)getEventHistory:(CDVInvokedUrlCommand *)command {
- (void)getLocation:(CDVInvokedUrlCommand *)command {
- [CleverTap getLocationWithSuccess:^(CLLocationCoordinate2D loc){
+#if __has_include()
+ [CTLocationManager getLocationWithSuccess:^(CLLocationCoordinate2D loc){
CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:@{@"lat":@(loc.latitude), @"lon":@(loc.longitude)}];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
@@ -674,6 +682,12 @@ - (void)getLocation:(CDVInvokedUrlCommand *)command {
CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:error];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
+#else
+ NSString *error = @"Please install the pod CleverTapLocation or intregrate the CleverTapLocation project manually to use the getLocation method. For more details, please refer to the link: https://github.com/CleverTap/clevertap-ios-sdk/blob/location-api/docs/CleverTapLocation.md";
+ NSLog(@"%@", error);
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:error];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+#endif
}
- (void)setLocation:(CDVInvokedUrlCommand *)command {
@@ -1101,6 +1115,24 @@ - (void)markReadInboxMessageForId:(CDVInvokedUrlCommand *)command {
}];
}
+/**
+ Mark Messages as Read in bulk
+ */
+- (void)markReadInboxMessagesForIds:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSString *messageIds = [command argumentAtIndex:0];
+ [clevertap markReadInboxMessagesForIDs: messageIds];
+ }];
+}
+
+/**
+ Dismisses Appinbox
+ */
+- (void)dismissInbox:(CDVInvokedUrlCommand *)command {
+ [clevertap dismissAppInbox];
+}
+
/**
Record Inbox Notification Viewed for MessageID
*/
@@ -1140,17 +1172,23 @@ - (void)messageButtonTappedWithCustomExtras:(NSDictionary *_Nullable)customExtra
}
}
-- (void)messageDidSelect:(CleverTapInboxMessage *_Nonnull)message{
+- (void)messageDidSelect:(CleverTapInboxMessage *_Nonnull)message atIndex:(int)index withButtonIndex:(int)buttonIndex{
- NSString *jsonString = [self _dictToJson:message.json];
+ NSMutableDictionary *jsonObject = [NSMutableDictionary new];
+ if ([message json] != nil) {
+ jsonObject[@"data"] = [NSMutableDictionary dictionaryWithDictionary:[message json]];
+ } else {
+ jsonObject[@"data"] = [NSMutableDictionary new];
+ }
+ jsonObject[@"contentPageIndex"] = @(index);
+ jsonObject[@"buttonIndex"] = @(buttonIndex);
- if (jsonString != nil) {
- NSString *js = [NSString stringWithFormat:@"cordova.fireDocumentEvent('onCleverTapInboxItemClick', %@);", jsonString];
+ if (jsonObject != nil) {
+ NSString *js = [NSString stringWithFormat:@"cordova.fireDocumentEvent('onCleverTapInboxItemClick', %@);", jsonObject];
[self.commandDelegate evalJs:js];
}
}
-
#pragma mark - Native Display
/**
@@ -1348,6 +1386,13 @@ - (void)reset {
}];
}
+- (void)setLibrary: (CDVInvokedUrlCommand *)command {
+ NSString *libName = [command argumentAtIndex:0];
+ int libVersion = [[command argumentAtIndex:1]intValue];
+ [clevertap setLibrary:libName];
+ [clevertap setCustomSdkVersion:libName version:libVersion];
+}
+
#pragma mark Product Config Delegate
@@ -1369,6 +1414,262 @@ - (void)ctProductConfigInitialized {
[self.commandDelegate evalJs:js];
}
+#pragma mark Product Experience
+
+- (void)syncVariables: (CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ [clevertap syncVariables];
+ }];
+}
+
+- (void)syncVariablesinProd: (CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ BOOL isProduction = [[command argumentAtIndex:0] boolValue];
+ [clevertap syncVariables:isProduction];
+ }];
+}
+
+- (void)fetchVariables:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ [clevertap fetchVariables:^(BOOL success){
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:(BOOL)success];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ }];
+}
+
+- (void)defineVariables: (CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSDictionary *variables = [command argumentAtIndex:0];
+ if (!allVariables){
+ allVariables = [NSMutableDictionary new];
+ }
+
+ if(variables == nil){
+ return;
+ }
+ [variables enumerateKeysAndObjectsUsingBlock:^(NSString* _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) {
+ CTVar *var = [self createVarForName:key andValue:value];
+
+ if (var) {
+ allVariables[key] = var;
+ }
+ }];
+ }];
+}
+
+- (void)getVariable:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSString *name = [command argumentAtIndex:0];
+ CTVar *var = allVariables[name];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:var.value];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)getVariables:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSMutableDictionary *varValues = [self getVariableValues];
+
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:varValues];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void)onVariablesChanged:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ [clevertap onVariablesChanged:^{
+ NSMutableDictionary *varValues = [self getVariableValues];
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:varValues];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ }];
+}
+
+- (void)onValueChanged:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSString *name = [command argumentAtIndex:0];
+ CTVar *var = allVariables[name];
+ if (var) {
+ [var onValueChanged:^{
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:var.value];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ }
+ }];
+}
+
+#pragma mark Push primer
+
+- (CTLocalInApp*)_localInAppConfigFromReadableMap: (NSDictionary *)json {
+ CTLocalInApp *inAppBuilder;
+ CTLocalInAppType inAppType = HALF_INTERSTITIAL;
+ //Required parameters
+ NSString *titleText = nil, *messageText = nil, *followDeviceOrientation = nil, *positiveBtnText = nil, *negativeBtnText = nil;
+ //Additional parameters
+ NSString *fallbackToSettings = nil, *backgroundColor = nil, *btnBorderColor = nil, *titleTextColor = nil, *messageTextColor = nil, *btnTextColor = nil, *imageUrl = nil, *btnBackgroundColor = nil, *btnBorderRadius = nil;
+
+ if ([json[@"inAppType"] isEqual: @"half-interstitial"]){
+ inAppType = HALF_INTERSTITIAL;
+ }
+ else {
+ inAppType = ALERT;
+ }
+ if (json[@"titleText"]) {
+ titleText = [json valueForKey:@"titleText"];
+ }
+ if (json[@"messageText"]) {
+ messageText = [json valueForKey:@"messageText"];
+ }
+ if (json[@"followDeviceOrientation"]) {
+ followDeviceOrientation = [json valueForKey:@"followDeviceOrientation"];
+ }
+ if (json[@"positiveBtnText"]) {
+ positiveBtnText = [json valueForKey:@"positiveBtnText"];
+ }
+
+ if (json[@"negativeBtnText"]) {
+ negativeBtnText = [json valueForKey:@"negativeBtnText"];
+ }
+
+ //creates the builder instance with all the required parameters
+ inAppBuilder = [[CTLocalInApp alloc] initWithInAppType:inAppType
+ titleText:titleText
+ messageText:messageText
+ followDeviceOrientation:followDeviceOrientation
+ positiveBtnText:positiveBtnText
+ negativeBtnText:negativeBtnText];
+
+ //adds optional parameters to the builder instance
+ if (json[@"fallbackToSettings"]) {
+ fallbackToSettings = [json valueForKey:@"fallbackToSettings"];
+ [inAppBuilder setFallbackToSettings:fallbackToSettings];
+ }
+ if (json[@"backgroundColor"]) {
+ backgroundColor = [json valueForKey:@"backgroundColor"];
+ [inAppBuilder setBackgroundColor:backgroundColor];
+ }
+ if (json[@"btnBorderColor"]) {
+ btnBorderColor = [json valueForKey:@"btnBorderColor"];
+ [inAppBuilder setBtnBorderColor:btnBorderColor];
+ }
+ if (json[@"titleTextColor"]) {
+ titleTextColor = [json valueForKey:@"titleTextColor"];
+ [inAppBuilder setTitleTextColor:titleTextColor];
+ }
+ if (json[@"messageTextColor"]) {
+ messageTextColor = [json valueForKey:@"messageTextColor"];
+ [inAppBuilder setMessageTextColor:messageTextColor];
+ }
+ if (json[@"btnTextColor"]) {
+ btnTextColor = [json valueForKey:@"btnTextColor"];
+ [inAppBuilder setBtnTextColor:btnTextColor];
+ }
+ if (json[@"imageUrl"]) {
+ imageUrl = [json valueForKey:@"imageUrl"];
+ [inAppBuilder setImageUrl:imageUrl];
+ }
+ if (json[@"btnBackgroundColor"]) {
+ btnBackgroundColor = [json valueForKey:@"btnBackgroundColor"];
+ [inAppBuilder setBtnBackgroundColor:btnBackgroundColor];
+ }
+ if (json[@"btnBorderRadius"]) {
+ btnBorderRadius = [json valueForKey:@"btnBorderRadius"];
+ [inAppBuilder setBtnBorderRadius:btnBorderRadius];
+ }
+ return inAppBuilder;
+}
+
+- (void)promptForPushPermission: (CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ BOOL showFallbackSettings = [[command argumentAtIndex:0] boolValue];
+ [clevertap promptForPushPermission:showFallbackSettings];
+ }];
+}
+
+- (void)promptPushPrimer: (CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ NSDictionary *json = [command argumentAtIndex:0];
+ if(json == nil){
+ return;
+ }
+ CTLocalInApp *localInAppBuilder = [self _localInAppConfigFromReadableMap:json];
+ [clevertap promptPushPrimer:localInAppBuilder.getLocalInAppSettings];
+ }];
+}
+
+- (void)isPushPermissionGranted:(CDVInvokedUrlCommand *)command {
+
+ [self.commandDelegate runInBackground:^{
+ if (@available(iOS 10.0, *)) {
+ [clevertap getNotificationPermissionStatusWithCompletionHandler:^(UNAuthorizationStatus status) {
+ BOOL result = (status == UNAuthorizationStatusAuthorized);
+ NSLog(@"[CleverTap isPushPermissionGranted: %i]", result);
+ CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ } else {
+ // Fallback on earlier versions
+ NSLog(@"Push Notification is available from iOS v10.0 or later");
+ }
+ }];
+}
+
+#pragma mark - CleverTapPushPermissionDelegate
+
+- (void)onPushPermissionResponse:(BOOL)accepted {
+
+ NSMutableDictionary *json = [NSMutableDictionary new];
+ json[@"accepted"] = [NSNumber numberWithBool:accepted];
+
+ NSString *js = [NSString stringWithFormat:@"cordova.fireDocumentEvent('onCleverTapPushPermissionResponseReceived', %@);", json];
+ [self.commandDelegate evalJs:js];
+}
+
+#pragma mark Helper methods
+
+- (CTVar *)createVarForName:(NSString *)name andValue:(id)value {
+
+ if ([value isKindOfClass:[NSString class]]) {
+ return [clevertap defineVar:name withString:value];
+ }
+ if ([value isKindOfClass:[NSDictionary class]]) {
+ return [clevertap defineVar:name withDictionary:value];
+ }
+ if ([value isKindOfClass:[NSNumber class]]) {
+ if ([self isBoolNumber:value]) {
+ return [clevertap defineVar:name withBool:value];
+ }
+ return [clevertap defineVar:name withNumber:value];
+ }
+ return nil;
+}
+
+- (BOOL)isBoolNumber:(NSNumber *)number {
+ CFTypeID boolID = CFBooleanGetTypeID();
+ CFTypeID numID = CFGetTypeID(CFBridgingRetain(number));
+ return (numID == boolID);
+}
+
+- (NSMutableDictionary *)getVariableValues {
+ NSMutableDictionary *varValues = [NSMutableDictionary dictionary];
+ [allVariables enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, CTVar* _Nonnull var, BOOL * _Nonnull stop) {
+ varValues[key] = var.value;
+ }];
+ return varValues;
+}
+
- (CleverTapInboxStyleConfig*)_dictToInboxStyleConfig: (NSDictionary *)dict {
CleverTapInboxStyleConfig *_config = [CleverTapInboxStyleConfig new];
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/config.xml b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/config.xml
index d12fee62..b7460537 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/config.xml
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/config.xml
@@ -46,18 +46,12 @@
-
-
-
-
-
-
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/main.m b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/main.m
index 67c28c79..a6bff5b6 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/main.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/ExampleProject/main.m
@@ -16,20 +16,15 @@ Licensed to the Apache Software Foundation (ASF) under one
specific language governing permissions and limitations
under the License.
*/
-//
-// main.m
-// ExampleProject
-//
-// Created by ___FULLUSERNAME___ on ___DATE___.
-// Copyright ___ORGANIZATIONNAME___ ___YEAR___. All rights reserved.
-//
#import
+#import "AppDelegate.h"
-int main(int argc, char* argv[])
-{
+int main(int argc, char *argv[]) {
+ NSString *appDelegateClassName;
@autoreleasepool {
- int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
- return retVal;
+ // Setup code that might create autoreleased objects goes here.
+ appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Podfile b/Samples/Cordova/ExampleProject/platforms/ios/Podfile
index 46206fc7..9f6e943a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Podfile
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Podfile
@@ -1,8 +1,9 @@
# DO NOT MODIFY -- auto-generated by Apache Cordova
-
+source 'https://github.com/CleverTap/clevertap-ios-sdk.git'
+source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
target 'ExampleProject' do
project 'ExampleProject.xcodeproj'
- pod 'CleverTap-iOS-SDK', '4.2.0'
+ pod 'CleverTap-iOS-SDK', '5.1.2'
end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Podfile.lock b/Samples/Cordova/ExampleProject/platforms/ios/Podfile.lock
index b144a082..fc60a0a1 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Podfile.lock
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Podfile.lock
@@ -1,22 +1,22 @@
PODS:
- - CleverTap-iOS-SDK (4.2.0):
+ - CleverTap-iOS-SDK (5.1.2):
- SDWebImage (~> 5.11)
- - SDWebImage (5.15.0):
- - SDWebImage/Core (= 5.15.0)
- - SDWebImage/Core (5.15.0)
+ - SDWebImage (5.17.0):
+ - SDWebImage/Core (= 5.17.0)
+ - SDWebImage/Core (5.17.0)
DEPENDENCIES:
- - CleverTap-iOS-SDK (= 4.2.0)
+ - CleverTap-iOS-SDK (= 5.1.2)
SPEC REPOS:
- trunk:
+ https://github.com/CocoaPods/Specs.git:
- CleverTap-iOS-SDK
- SDWebImage
SPEC CHECKSUMS:
- CleverTap-iOS-SDK: 124ee0f4bd90c5ffa213b2da05f81496d7339015
- SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
+ CleverTap-iOS-SDK: 1731f365b7822458c346fb812bd0f0edbf076856
+ SDWebImage: 750adf017a315a280c60fde706ab1e552a3ae4e9
-PODFILE CHECKSUM: 9f7ec524782dc2155236da4b7d8dc2188d607019
+PODFILE CHECKSUM: 838d8d904fc779a1bc0bea04c3377f1d39ea9144
COCOAPODS: 1.11.2
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.h
index 91f38adc..51a702d3 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.h
@@ -2,6 +2,24 @@
extern NSString *const kCTApiDomain;
extern NSString *const kCTNotifViewedApiDomain;
+extern NSString *const kHANDSHAKE_URL;
+extern NSString *CT_KIND_INT;
+extern NSString *CT_KIND_FLOAT;
+extern NSString *CT_KIND_STRING;
+extern NSString *CT_KIND_BOOLEAN;
+extern NSString *CT_KIND_DICTIONARY;
+extern NSString *CLEVERTAP_DEFAULTS_VARIABLES_KEY;
+extern NSString *CLEVERTAP_DEFAULTS_VARS_JSON_KEY;
+
+extern NSString *CT_PE_DEFINE_VARS_ENDPOINT;
+extern NSString *CT_PE_VARS_PAYLOAD_TYPE;
+extern NSString *CT_PE_VARS_PAYLOAD_KEY;
+extern NSString *CT_PE_VAR_TYPE;
+extern NSString *CT_PE_NUMBER_TYPE;
+extern NSString *CT_PE_BOOL_TYPE;
+extern NSString *CT_PE_DEFAULT_VALUE;
+
+extern NSString *CLTAP_PROFILE_IDENTITY_KEY;
#define CleverTapLogInfo(level, fmt, ...) if(level >= 0) { NSLog((@"%@" fmt), @"[CleverTap]: ", ##__VA_ARGS__); }
#define CleverTapLogDebug(level, fmt, ...) if(level > 0) { NSLog((@"%@" fmt), @"[CleverTap]: ", ##__VA_ARGS__); }
@@ -10,6 +28,13 @@ extern NSString *const kCTNotifViewedApiDomain;
#define CleverTapLogStaticDebug(fmt, ...) if([CTLogger getDebugLevel] > 0) { NSLog((@"%@" fmt), @"[CleverTap]: ", ##__VA_ARGS__); }
#define CleverTapLogStaticInternal(fmt, ...) if([CTLogger getDebugLevel] > 1) { NSLog((@"%@" fmt), @"[CleverTap]: ", ##__VA_ARGS__); }
+
+
+#define CT_TRY @try {
+#define CT_END_TRY }\
+@catch (NSException *e) {\
+[CTLogger logInternalError:e]; }
+
#define CLTAP_REQUEST_TIME_OUT_INTERVAL 10
#define CLTAP_ACCOUNT_ID_LABEL @"CleverTapAccountID"
#define CLTAP_TOKEN_LABEL @"CleverTapToken"
@@ -63,6 +88,7 @@ extern NSString *const kCTNotifViewedApiDomain;
#define CLTAP_PRODUCT_CONFIG_JSON_RESPONSE_KEY @"pc_notifs"
#define CLTAP_PREFS_INAPP_KEY @"inapp_notifs"
#define CLTAP_GEOFENCES_JSON_RESPONSE_KEY @"geofences"
+#define CLTAP_PE_VARS_RESPONSE_KEY @"vars"
#define CLTAP_DISCARDED_EVENT_JSON_KEY @"d_e"
#define CLTAP_INAPP_CLOSE_IV_WIDTH 40
#define CLTAP_NOTIFICATION_ID_TAG @"wzrk_id"
@@ -124,4 +150,6 @@ extern NSString *const kCTNotifViewedApiDomain;
#define CLTAP_PROFILE_IDENTIFIER_KEYS @[@"Identity", @"Email"] // LEGACY KEYS
#define CLTAP_ALL_PROFILE_IDENTIFIER_KEYS @[@"Identity", @"Email", @"Phone"]
+#define CLTAP_DEFINE_VARS_URL @"/defineVars"
+
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.m
index e01145d7..869d64a8 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTConstants.m
@@ -2,3 +2,23 @@
NSString *const kCTApiDomain = @"clevertap-prod.com";
NSString *const kCTNotifViewedApiDomain = @"spiky.clevertap-prod.com";
+NSString *const kHANDSHAKE_URL = @"https://clevertap-prod.com/hello";
+
+NSString *CT_KIND_INT = @"integer";
+NSString *CT_KIND_FLOAT = @"float";
+NSString *CT_KIND_STRING = @"string";
+NSString *CT_KIND_BOOLEAN = @"bool";
+NSString *CT_KIND_DICTIONARY = @"group";
+NSString *CLEVERTAP_DEFAULTS_VARIABLES_KEY = @"__clevertap_variables";
+NSString *CLEVERTAP_DEFAULTS_VARS_JSON_KEY = @"__clevertap_variables_json";
+
+NSString *CT_PE_DEFINE_VARS_ENDPOINT = @"defineVars";
+
+NSString *CT_PE_VARS_PAYLOAD_TYPE = @"varsPayload";
+NSString *CT_PE_VARS_PAYLOAD_KEY = @"vars";
+NSString *CT_PE_VAR_TYPE = @"type";
+NSString *CT_PE_NUMBER_TYPE = @"number";
+NSString *CT_PE_BOOL_TYPE = @"boolean";
+NSString *CT_PE_DEFAULT_VALUE = @"defaultValue";
+
+NSString *CLTAP_PROFILE_IDENTITY_KEY = @"Identity";
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.h
index cf4d9f6f..ebcfc766 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.h
@@ -25,15 +25,12 @@
@property (atomic, readwrite) NSString *library;
@property (assign, readonly) BOOL wifi;
@property (strong, readonly) NSMutableArray* validationErrors;
-@property (strong, readonly) NSString *signedCallSDKVersion;
- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config andCleverTapID:(NSString *)cleverTapID;
- (void)forceUpdateDeviceID:(NSString *)newDeviceID;
- (void)forceNewDeviceID;
- (void)forceUpdateCustomDeviceID:(NSString *)cleverTapID;
- (BOOL)isErrorDeviceID;
-- (void)setDirectCallSDKVersion: (NSString *)version;
- (void)incrementLocalInAppCount;
- (int)getLocalInAppCount;
-- (void)setSignedCallSDKVersion: (NSString *)version;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.m
index 67205939..988db20a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDeviceInfo.m
@@ -40,7 +40,6 @@
static NSString *_radio;
static NSString *_deviceWidth;
static NSString *_deviceHeight;
-static NSString *_signedCallSDKVersion;
#if !CLEVERTAP_NO_REACHABILITY_SUPPORT
SCNetworkReachabilityRef _reachability;
@@ -472,14 +471,6 @@ - (NSString *)getCurrentRadioAccessTechnology {
}
#endif
-- (void)setSignedCallSDKVersion: (NSString *)version {
- _signedCallSDKVersion = version;
-}
-
-- (NSString *)signedCallSDKVersion {
- return _signedCallSDKVersion;
-}
-
- (void)incrementLocalInAppCount {
self.localInAppCount = self.localInAppCount + 1;
[CTPreferences putInt:self.localInAppCount forKey:kCLTAP_LOCAL_INAPP_COUNT];
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.h
new file mode 100644
index 00000000..40800956
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.h
@@ -0,0 +1,31 @@
+//
+// CTDomainFactory.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 19/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CleverTapInstanceConfig.h"
+#if CLEVERTAP_SSL_PINNING
+#import "CTPinnedNSURLSessionDelegate.h"
+#endif
+
+
+@interface CTDomainFactory : NSObject
+@property (nonatomic, strong, nullable) NSString *redirectDomain;
+@property (nonatomic, strong, nullable) NSString *explictEndpointDomain;
+@property (nonatomic, strong, nullable) NSString *redirectNotifViewedDomain;
+@property (nonatomic, strong, nullable) NSString *explictNotifViewedEndpointDomain;
+
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig* _Nonnull)config;
+- (void)persistRedirectDomain;
+- (void)persistRedirectNotifViewedDomain;
+- (void)clearRedirectDomain;
+
+#if CLEVERTAP_SSL_PINNING
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig* _Nonnull)config pinnedNSURLSessionDelegate: (CTPinnedNSURLSessionDelegate* _Nonnull)pinnedNSURLSessionDelegate sslCertNames:(NSArray* _Nonnull)sslCertNames;
+#endif
+@end
+
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.m
new file mode 100644
index 00000000..64a3615f
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.m
@@ -0,0 +1,137 @@
+//
+// CTDomainFactory.m
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 19/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "CTDomainFactory.h"
+#import "CTPreferences.h"
+#import "CTConstants.h"
+#import "CleverTapInstanceConfigPrivate.h"
+
+
+NSString *const REDIRECT_DOMAIN_KEY = @"CLTAP_REDIRECT_DOMAIN_KEY";
+NSString *const REDIRECT_NOTIF_VIEWED_DOMAIN_KEY = @"CLTAP_REDIRECT_NOTIF_VIEWED_DOMAIN_KEY";
+
+@interface CTDomainFactory ()
+@property (nonatomic, strong) CleverTapInstanceConfig *config;
+
+#if CLEVERTAP_SSL_PINNING
+@property(nonatomic, strong) CTPinnedNSURLSessionDelegate *urlSessionDelegate;
+@property (nonatomic, strong) NSArray *sslCertNames;
+#endif
+@end
+
+@implementation CTDomainFactory
+
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig* _Nonnull)config {
+ self = [super init];
+ if (self) {
+ self.config = config;
+ self.redirectDomain = [self loadRedirectDomain];
+ self.redirectNotifViewedDomain = [self loadRedirectNotifViewedDomain];
+ }
+ return self;
+}
+
+#if CLEVERTAP_SSL_PINNING
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig* _Nonnull)config pinnedNSURLSessionDelegate: (CTPinnedNSURLSessionDelegate* _Nonnull)pinnedNSURLSessionDelegate sslCertNames:(NSArray* _Nonnull)sslCertNames{
+ self = [super init];
+ if (self) {
+ self.config = config;
+ self.urlSessionDelegate = pinnedNSURLSessionDelegate;
+ self.sslCertNames = sslCertNames;
+ self.redirectDomain = [self loadRedirectDomain];
+ self.redirectNotifViewedDomain = [self loadRedirectNotifViewedDomain];
+ }
+ return self;
+}
+#endif
+
+- (void)clearRedirectDomain {
+ self.redirectDomain = nil;
+ self.redirectNotifViewedDomain = nil;
+ [self persistRedirectDomain]; // if nil persist will remove
+ self.redirectDomain = [self loadRedirectDomain]; // reload explicit domain if we have one else will be nil
+ self.redirectNotifViewedDomain = [self loadRedirectNotifViewedDomain]; // reload explicit notification viewe domain if we have one else will be nil
+}
+
+- (NSString *)loadRedirectDomain {
+ NSString *region = self.config.accountRegion;
+ if (region) {
+ region = [region stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
+ if (region.length > 0) {
+ self.explictEndpointDomain = [NSString stringWithFormat:@"%@.%@", region, kCTApiDomain];
+ return self.explictEndpointDomain;
+ }
+ }
+ NSString *proxyDomain = self.config.proxyDomain;
+ if (proxyDomain) {
+ proxyDomain = [proxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
+ if (proxyDomain.length > 0) {
+ self.explictEndpointDomain = proxyDomain;
+ return self.explictEndpointDomain;
+ }
+ }
+ NSString *domain = nil;
+ if (self.config.isDefaultInstance) {
+ domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_DOMAIN_KEY config: self.config] withResetValue:[CTPreferences getStringForKey:REDIRECT_DOMAIN_KEY withResetValue:nil]];
+ } else {
+ domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_DOMAIN_KEY config: self.config] withResetValue:nil];
+ }
+ return domain;
+}
+
+- (NSString *)loadRedirectNotifViewedDomain {
+ NSString *region = self.config.accountRegion;
+ if (region) {
+ region = [region stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
+ if (region.length > 0) {
+ self.explictNotifViewedEndpointDomain = [NSString stringWithFormat:@"%@-%@", region, kCTNotifViewedApiDomain];
+ return self.explictNotifViewedEndpointDomain;
+ }
+ }
+ NSString *spikyProxyDomain = self.config.spikyProxyDomain;
+ if (spikyProxyDomain) {
+ spikyProxyDomain = [spikyProxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
+ if (spikyProxyDomain.length > 0) {
+ self.explictNotifViewedEndpointDomain = spikyProxyDomain;
+ return self.explictNotifViewedEndpointDomain;
+ }
+ }
+ NSString *domain = nil;
+ if (self.config.isDefaultInstance) {
+ domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config] withResetValue:[CTPreferences getStringForKey:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY withResetValue:nil]];
+ } else {
+ domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config] withResetValue:nil];
+ }
+ return domain;
+}
+
+- (void)persistRedirectDomain {
+ if (self.redirectDomain != nil) {
+ [CTPreferences putString:self.redirectDomain forKey:[CTPreferences storageKeyWithSuffix:REDIRECT_DOMAIN_KEY config: self.config]];
+#if CLEVERTAP_SSL_PINNING
+ [self.urlSessionDelegate pinSSLCerts:self.sslCertNames forDomains:@[kCTApiDomain, self.redirectDomain]];
+#endif
+ } else {
+ [CTPreferences removeObjectForKey:REDIRECT_DOMAIN_KEY];
+ [CTPreferences removeObjectForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_DOMAIN_KEY config: self.config]];
+ }
+}
+
+- (void)persistRedirectNotifViewedDomain {
+ if (self.redirectNotifViewedDomain != nil) {
+ [CTPreferences putString:self.redirectNotifViewedDomain forKey:[CTPreferences storageKeyWithSuffix:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config]];
+#if CLEVERTAP_SSL_PINNING
+ [self.urlSessionDelegate pinSSLCerts:self.sslCertNames forDomains:@[kCTNotifViewedApiDomain, self.redirectNotifViewedDomain]];
+#endif
+ } else {
+ [CTPreferences removeObjectForKey:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY];
+ [CTPreferences removeObjectForKey:[CTPreferences storageKeyWithSuffix:REDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config]];
+ }
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocalDataStore.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocalDataStore.m
index 135ef93a..69b73fce 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocalDataStore.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocalDataStore.m
@@ -409,6 +409,9 @@ - (NSDictionary*)syncWithRemoteData:(NSDictionary *)responseData {
return nil;
}
}
+ else {
+ return nil;
+ }
} @catch (NSException *e) {
CleverTapLogInternal(self.config.logLevel, @"%@: Failed to process data sync from upstream: %@", self, e.debugDescription);
return nil;
@@ -574,7 +577,7 @@ - (void)_removeProfileValueForKey:(NSString *)key fromUpstream:(BOOL)fromUpstrea
@try {
@synchronized (localProfileForSession) {
// DO NOT REMOVE IDENTITY
- if ([key isEqualToString:@"Identity"]) {
+ if ([key isEqualToString:CLTAP_PROFILE_IDENTITY_KEY]) {
return;
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.h
deleted file mode 100644
index 4c9b1cc5..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#import
-#import
-
-@interface CTLocationManager : NSObject
-
-#if defined(CLEVERTAP_LOCATION)
-+ (void)getLocationWithSuccess:(void (^)(CLLocationCoordinate2D location))success andError:(void (^)(NSString *reason))error;
-#endif
-
-@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.m
deleted file mode 100644
index 5f89a2a3..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.m
+++ /dev/null
@@ -1,206 +0,0 @@
-#import "CTLocationManager.h"
-
-#define DEFAULT_LOCATION_ACCURACY kCLLocationAccuracyHundredMeters
-
-typedef void (^CleverTapLocationSuccessBlock)(CLLocationCoordinate2D);
-typedef void (^CleverTapLocationErrorBlock)(NSString *);
-
-@interface CleverTapLocationRequest : NSObject
-@property (nonatomic, copy) CleverTapLocationSuccessBlock successBlock;
-@property (nonatomic, copy) CleverTapLocationErrorBlock errorBlock;
-@end
-
-@implementation CleverTapLocationRequest
-@end
-
-#if defined(CLEVERTAP_LOCATION)
-NSString *const kLocationTimeoutError = @"Location Request Timed Out: Have You Set NSLocationWhenInUseUsageDescription in Your Info.plist?";
-NSString *const kLocationServicesNotEnabled = @"Location Services Not Enabled";
-NSString *const kLocationPermissionDenied = @"Location Permission Denied";
-NSString *const kLocationNetworkError = @"Unable To Get Location: Network Failure";
-NSString *const kLocationUnavailable = @"Unable To Get Location";
-static const double kLocationTimeout = 30.0;
-
-static CLLocationManager *locationManager;
-
-static NSMutableArray *pendingRequests;
-
-static NSObject *requestsLockObject;
-#endif
-
-@implementation CTLocationManager
-
-#if defined(CLEVERTAP_LOCATION)
-/**
- NOTE: If NSLocationWhenInUseUsageDescription is not set in the app's Info.plist, calls to the CLLocationManager instance will fail silently. Rely on the location timeout to stop updating and return an error in this case.
- */
-
-+ (void)getLocationWithSuccess:(void (^)(CLLocationCoordinate2D location))success andError:(void (^)(NSString *reason))error {
- if (![CLLocationManager locationServicesEnabled]) {
- if (error) {
- error(kLocationServicesNotEnabled);
- };
- return;
- }
-
- CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
-
- if (status == kCLAuthorizationStatusDenied || status == kCLAuthorizationStatusRestricted) {
- if (error) {
- error(kLocationPermissionDenied);
- }
- return;
- }
-
- if (!locationManager) {
- locationManager = [CLLocationManager new];
- locationManager.desiredAccuracy = DEFAULT_LOCATION_ACCURACY;
- }
-
- // request the user location permission (iOS8+)
- if (status == kCLAuthorizationStatusNotDetermined) {
- if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
- [locationManager requestWhenInUseAuthorization];
- }
- }
-
- if (!requestsLockObject) {
- requestsLockObject = [NSObject new];
- }
-
- // keep an array of requests made while we are waiting for the location manager
- if (!pendingRequests) {
- pendingRequests = [NSMutableArray new];
- }
-
- // construct and add a new request
- CleverTapLocationRequest *request = [CleverTapLocationRequest new];
- request.successBlock = success;
- request.errorBlock = error;
-
- @synchronized (requestsLockObject) {
- [pendingRequests addObject:request];
- }
-
- locationManager.delegate = (id)self;
- if (locationManager && [locationManager respondsToSelector:@selector(startUpdatingLocation)]) {
- [locationManager performSelector:@selector(startUpdatingLocation)];
- [self scheduleLocationTimeout];
- } else if(locationManager && [locationManager respondsToSelector:@selector(requestLocation)]) {
- [locationManager performSelector:@selector(requestLocation)];
- }
-}
-
-
-#pragma mark - CLLocationManagerDelegate
-
-+ (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
-
- CLLocation *newLocation = [locations lastObject];
-
- // test the age of the location measurement to determine if the measurement is cached
- // don't rely on cached measurements
-
- NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
- if (locationAge > 5.0) {
- return;
- }
-
- // test that the horizontal accuracy does not indicate an invalid measurement
- if (newLocation.horizontalAccuracy < 0) {
- return;
- }
-
- if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
- if (CLLocationCoordinate2DIsValid(newLocation.coordinate)) {
- [self handleSuccess:newLocation.coordinate];
- }
- }
-
- // otherwise no-op; rely on the location timeout to stop updating
-}
-
-+ (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
-
- NSString *reason;
-
- switch (error.code) {
- case kCLErrorDenied:
- reason = kLocationPermissionDenied;
- break;
- case kCLErrorNetwork:
- reason = kLocationNetworkError;
- break;
- case kCLErrorLocationUnknown: //deliberate fall through here
- default:
- reason = kLocationUnavailable;
- break;
- }
- [self handleError:reason];
-}
-
-+ (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
- if (status == kCLAuthorizationStatusDenied || status == kCLAuthorizationStatusRestricted) {
- [self handleLocationPermissionDenied];
- }
-}
-
-
-#pragma mark - Helpers
-
-+ (void)scheduleLocationTimeout {
- [self cancelLocationTimeout];
- [self performSelector:@selector(handleLocationTimeout)
- withObject:nil
- afterDelay:kLocationTimeout];
-}
-
-
-+ (void)cancelLocationTimeout {
- [NSObject cancelPreviousPerformRequestsWithTarget:self
- selector:@selector(handleLocationTimeout) object:nil];
-}
-
-+ (void)handleLocationTimeout {
- [self stopUpdatingLocation];
- [self handleError:kLocationTimeoutError];
-}
-
-+ (void)handleSuccess:(CLLocationCoordinate2D)location {
- [self stopUpdatingLocation];
-
- @synchronized (requestsLockObject) {
- for (CleverTapLocationRequest *request in pendingRequests) {
- if (request.successBlock) {
- request.successBlock(location);
- }
- }
- [pendingRequests removeAllObjects];
- }
-}
-
-+ (void)handleError:(NSString *)error {
- @synchronized (requestsLockObject) {
- for (CleverTapLocationRequest *request in pendingRequests) {
- if (request.errorBlock) {
- request.errorBlock(error);
- }
- }
- [pendingRequests removeAllObjects];
- }
-}
-
-+ (void)handleLocationPermissionDenied {
- [self stopUpdatingLocation];
- [self handleError:kLocationPermissionDenied];
- locationManager = nil;
-}
-
-+ (void)stopUpdatingLocation {
- [locationManager stopUpdatingLocation];
- locationManager.delegate = nil;
- [self cancelLocationTimeout];
-}
-#endif
-
-@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.h
index 5cc2b120..b8a8160b 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.h
@@ -4,5 +4,5 @@
+ (void)setDebugLevel:(int)level;
+ (int)getDebugLevel;
-
++ (void)logInternalError:(NSException *)e;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.m
index 29ee6547..74f8a713 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTLogger.m
@@ -1,4 +1,5 @@
#import "CTLogger.h"
+#import "CTConstants.h"
@implementation CTLogger
@@ -12,4 +13,8 @@ + (int)getDebugLevel {
return _debugLevel;
}
++ (void)logInternalError:(NSException *)e {
+ CleverTapLogDebug(_debugLevel, @"%@: Caught exception in code: %@\n%@", self, e, [e callStackSymbols]);
+}
+
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.h
index ac649af8..2b0691be 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.h
@@ -16,6 +16,6 @@
+ (instancetype _Nullable)sharedInstance;
- (void)setCredentialsWithAccountID:(NSString * _Nonnull)accountID token:(NSString * _Nonnull)token region:(NSString * _Nullable)region;
- (void)setCredentialsWithAccountID:(NSString * _Nonnull)accountID token:(NSString * _Nonnull)token proxyDomain:(NSString * _Nonnull)proxyDomain;
-- (void)setCredentialsWithAccountID:(NSString * _Nonnull)accountID token:(NSString * _Nonnull)token proxyDomain:(NSString * _Nonnull)proxyDomain spikyProxyDomain:(NSString * _Nonnull)spikyProxyDomain;
+- (void)setCredentialsWithAccountID:(NSString * _Nonnull)accountID token:(NSString * _Nonnull)token proxyDomain:(NSString * _Nonnull)proxyDomain spikyProxyDomain:(NSString * _Nullable)spikyProxyDomain;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.m
index f03620fe..3564d03a 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPlistInfo.m
@@ -106,7 +106,7 @@ - (void)setCredentialsWithAccountID:(NSString *)accountID token:(NSString *)toke
_proxyDomain = proxyDomain;
}
-- (void)setCredentialsWithAccountID:(NSString *)accountID token:(NSString *)token proxyDomain:(NSString *)proxyDomain spikyProxyDomain:(NSString *)spikyProxyDomain {
+- (void)setCredentialsWithAccountID:(NSString * _Nonnull)accountID token:(NSString * _Nonnull)token proxyDomain:(NSString * _Nonnull)proxyDomain spikyProxyDomain:(NSString * _Nullable)spikyProxyDomain {
_accountId = accountID;
_accountToken = token;
_proxyDomain = proxyDomain;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.h
index 308f26b1..2e49042b 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.h
@@ -7,7 +7,7 @@
+ (void)putInt:(long)resetValue forKey:(NSString *_Nonnull)key;
-+ (NSString *_Nonnull)getStringForKey:(NSString *_Nonnull)key withResetValue:(NSString *_Nullable)resetValue;
++ (NSString *_Nullable)getStringForKey:(NSString *_Nonnull)key withResetValue:(NSString *_Nullable)resetValue;
+ (void)putString:(NSString *_Nonnull)resetValue forKey:(NSString *_Nonnull)key;
@@ -17,12 +17,14 @@
+ (void)removeObjectForKey:(NSString *_Nonnull)key;
-+ (id _Nonnull)unarchiveFromFile:(NSString *_Nonnull)filename ofType:(Class _Nonnull)cls removeFile:(BOOL)remove;
++ (id _Nullable)unarchiveFromFile:(NSString *_Nonnull)filename ofType:(Class _Nonnull)cls removeFile:(BOOL)remove;
-+ (id _Nonnull)unarchiveFromFile:(NSString *_Nonnull)filename ofTypes:(nonnull NSSet *)classes removeFile:(BOOL)remove;
++ (id _Nullable)unarchiveFromFile:(NSString *_Nonnull)filename ofTypes:(nonnull NSSet *)classes removeFile:(BOOL)remove;
+ (BOOL)archiveObject:(id _Nonnull)object forFileName:(NSString *_Nonnull)fileName;
-+ (NSString *)storageKeyWithSuffix: (NSString *)suffix config: (CleverTapInstanceConfig*)config;
++ (NSString *_Nonnull)storageKeyWithSuffix: (NSString *_Nonnull)suffix config: (CleverTapInstanceConfig *_Nonnull)config;
+
++ (NSString *_Nonnull)filePathfromFileName:(NSString *_Nonnull)filename;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.m
index daac0856..1e27d4e5 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTPreferences.m
@@ -25,7 +25,7 @@ + (void)putInt:(long)resetValue forKey:(NSString *)key {
[defaults synchronize];
}
-+ (NSString *)getStringForKey:(NSString *)key withResetValue:(NSString *)resetValue {
++ (NSString *_Nullable)getStringForKey:(NSString *_Nonnull)key withResetValue:(NSString *_Nullable)resetValue {
key = [NSString stringWithFormat:@"%@%@", PREF_PREFIX, key];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id value = [defaults objectForKey:key];
@@ -92,7 +92,7 @@ + (void)logUnarchiveError:(NSError *)error filePath:(NSString *)filePath removeF
}
}
-+ (id)unarchiveFromFile:(NSString *)filename ofTypes:(nonnull NSSet *)classes removeFile:(BOOL)remove {
++ (id _Nullable)unarchiveFromFile:(NSString *_Nonnull)filename ofTypes:(nonnull NSSet *)classes removeFile:(BOOL)remove {
id data = nil;
NSError *error = nil;
NSString *filePath = [self filePathfromFileName:filename];
@@ -119,7 +119,7 @@ + (id)unarchiveFromFile:(NSString *)filename ofTypes:(nonnull NSSet *)cla
return data;
}
-+ (id)unarchiveFromFile:(NSString *)filename ofType:(Class)cls removeFile:(BOOL)remove {
++ (id _Nullable)unarchiveFromFile:(NSString *_Nonnull)filename ofType:(Class _Nonnull)cls removeFile:(BOOL)remove{
id data = nil;
NSError *error = nil;
@@ -161,7 +161,7 @@ + (BOOL)archiveObject:(id)object forFileName:(NSString *)filename {
if (@available(iOS 11.0, tvOS 11.0, *)) {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object requiringSecureCoding:NO error:&archiveError];
- [data writeToFile:filePath options:NSDataWritingAtomic error:&writeError];
+ success = [data writeToFile:filePath options:NSDataWritingAtomic error:&writeError];
if (archiveError) {
CleverTapLogStaticInternal(@"%@ failed to archive data at %@: %@", self, filePath, archiveError);
}
@@ -177,7 +177,7 @@ + (BOOL)archiveObject:(id)object forFileName:(NSString *)filename {
return success;
}
-+ (NSString *)storageKeyWithSuffix: (NSString *)suffix config: (CleverTapInstanceConfig*)config {
++ (NSString * _Nonnull)storageKeyWithSuffix: (NSString * _Nonnull)suffix config: (CleverTapInstanceConfig* _Nonnull)config {
return [NSString stringWithFormat:@"%@:%@", config.accountId, suffix];
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.h
new file mode 100644
index 00000000..b03f0b27
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.h
@@ -0,0 +1,27 @@
+//
+// CTRequest.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 09/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CleverTapInstanceConfig.h"
+
+typedef void (^CTNetworkResponseBlock)(NSData * _Nullable data, NSURLResponse *_Nullable response);
+typedef void (^CTNetworkResponseErrorBlock)(NSError * _Nullable error);
+
+@interface CTRequest : NSObject
+
+- (CTRequest *_Nonnull)initWithHttpMethod:(NSString *_Nonnull)httpMethod config:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url;
+
+- (void)onResponse:(CTNetworkResponseBlock _Nonnull)responseBlock;
+- (void)onError:(CTNetworkResponseErrorBlock _Nonnull)errorBlock;
+
+@property (nonatomic, strong, nonnull) NSMutableURLRequest *urlRequest;
+@property (nonatomic, strong, nonnull) CTNetworkResponseBlock responseBlock;
+@property (nonatomic, strong, nullable) CTNetworkResponseErrorBlock errorBlock;
+
+@end
+
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.m
new file mode 100644
index 00000000..b8734910
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequest.m
@@ -0,0 +1,66 @@
+//
+// CTRequest.m
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 09/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "CTRequest.h"
+#import "CTConstants.h"
+#import "CTUtils.h"
+
+NSString *const ACCOUNT_ID_HEADER = @"X-CleverTap-Account-Id";
+NSString *const ACCOUNT_TOKEN_HEADER = @"X-CleverTap-Token";
+
+@interface CTRequest()
+
+@property (nonatomic, strong, nullable) id params;
+@property (nonatomic, strong) NSString *httpMethod;
+@property (nonatomic, strong) CleverTapInstanceConfig *config;
+@property (nonatomic, strong) NSString *url;
+
+
+@end
+
+@implementation CTRequest
+
+- (CTRequest *_Nonnull)initWithHttpMethod:(NSString *_Nonnull)httpMethod config:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url {
+ self = [super init];
+ if (self) {
+ _httpMethod = httpMethod;
+ _params = params;
+ _config = config;
+ _url = url;
+ _urlRequest = [self createURLRequest];
+ }
+ return self;
+}
+
+- (NSMutableURLRequest *)createURLRequest {
+ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:_url]];
+ NSString *accountId = self.config.accountId;
+ NSString *accountToken = self.config.accountToken;
+ if (accountId) {
+ [request setValue:accountId forHTTPHeaderField:ACCOUNT_ID_HEADER];
+ }
+ if (accountToken) {
+ [request setValue:accountToken forHTTPHeaderField:ACCOUNT_TOKEN_HEADER];
+ }
+ if ([_httpMethod isEqualToString:@"POST"] && _params > 0) {
+ NSString *jsonBody = [CTUtils jsonObjectToString:_params];
+ request.HTTPBody = [jsonBody dataUsingEncoding:NSUTF8StringEncoding];
+ request.HTTPMethod = @"POST";
+ }
+ return request;
+}
+
+- (void)onResponse:(CTNetworkResponseBlock _Nonnull)responseBlock {
+ _responseBlock = responseBlock;
+}
+
+- (void)onError:(CTNetworkResponseErrorBlock _Nonnull)errorBlock {
+ _errorBlock = errorBlock;
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.h
new file mode 100644
index 00000000..9586ba7b
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.h
@@ -0,0 +1,20 @@
+//
+// CTRequestFactory.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 09/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CTRequest.h"
+#import "CleverTapInstanceConfig.h"
+
+@interface CTRequestFactory : NSObject
+
++ (CTRequest *_Nonnull)helloRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config;
++ (CTRequest *_Nonnull)eventRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url;
++ (CTRequest *_Nonnull)syncVarsRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url;
+@end
+
+
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.m
new file mode 100644
index 00000000..5c2923c5
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.m
@@ -0,0 +1,26 @@
+//
+// CTRequestFactory.m
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 09/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "CTRequestFactory.h"
+#import "CTConstants.h"
+
+@implementation CTRequestFactory
+
++ (CTRequest *_Nonnull)helloRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config {
+ return [[CTRequest alloc]initWithHttpMethod:@"GET" config:config params:nil url:kHANDSHAKE_URL];
+}
+
++ (CTRequest *_Nonnull)eventRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url {
+ return [[CTRequest alloc]initWithHttpMethod:@"POST" config:config params: params url:url];
+}
+
++ (CTRequest *_Nonnull)syncVarsRequestWithConfig:(CleverTapInstanceConfig *_Nonnull)config params:(id _Nullable)params url:(NSString *_Nonnull)url {
+ return [[CTRequest alloc]initWithHttpMethod:@"POST" config:config params: params url:url];
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.h
new file mode 100644
index 00000000..62c66ee3
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.h
@@ -0,0 +1,23 @@
+//
+// CTRequestSender.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 11/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CTRequest.h"
+#if CLEVERTAP_SSL_PINNING
+#import "CTPinnedNSURLSessionDelegate.h"
+#endif
+
+@interface CTRequestSender : NSObject
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig *_Nonnull)config redirectDomain:(NSString* _Nonnull)redirectDomain;
+- (void)send:(CTRequest *_Nonnull)ctRequest;
+
+#if CLEVERTAP_SSL_PINNING
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig *_Nonnull)config redirectDomain:(NSString* _Nonnull)redirectDomain pinnedNSURLSessionDelegate: (CTPinnedNSURLSessionDelegate* _Nonnull)pinnedNSURLSessionDelegate sslCertNames:(NSArray* _Nonnull)sslCertNames;
+#endif
+@end
+
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.m
new file mode 100644
index 00000000..352eb9bd
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.m
@@ -0,0 +1,99 @@
+//
+// CTRequestSender.m
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 11/01/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "CTRequestSender.h"
+#import "CTConstants.h"
+
+#if CLEVERTAP_SSL_PINNING
+#import "CTPinnedNSURLSessionDelegate.h"
+#endif
+
+@interface CTRequestSender ()
+@property (nonatomic, strong) CleverTapInstanceConfig *config;
+@property (nonatomic, strong) NSURLSession *urlSession;
+@property (nonatomic, strong) NSString *redirectDomain;
+@property (nonatomic, assign, readonly) BOOL sslPinningEnabled;
+
+#if CLEVERTAP_SSL_PINNING
+@property(nonatomic, strong) CTPinnedNSURLSessionDelegate *urlSessionDelegate;
+@property (nonatomic, strong) NSArray *sslCertNames;
+#endif
+@end
+
+@implementation CTRequestSender
+
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig *_Nonnull)config redirectDomain:(NSString* _Nonnull)redirectDomain {
+
+ if ((self = [super init])) {
+ self.config = config;
+ self.redirectDomain = redirectDomain;
+ [self setUpUrlSession];
+
+ }
+ return self;
+}
+
+#if CLEVERTAP_SSL_PINNING
+- (instancetype _Nonnull)initWithConfig:(CleverTapInstanceConfig *_Nonnull)config redirectDomain:(NSString* _Nonnull)redirectDomain pinnedNSURLSessionDelegate: (CTPinnedNSURLSessionDelegate* _Nonnull)pinnedNSURLSessionDelegate sslCertNames:(NSArray* _Nonnull)sslCertNames {
+ if ((self = [super init])) {
+ self.config = config;
+ self.urlSessionDelegate = pinnedNSURLSessionDelegate;
+ self.sslCertNames = sslCertNames;
+ self.redirectDomain = redirectDomain;
+ [self setUpUrlSession];
+
+ }
+ return self;
+}
+#endif
+
+- (void)setUpUrlSession {
+ if (!_urlSession) {
+ NSURLSessionConfiguration *sc = [NSURLSessionConfiguration defaultSessionConfiguration];
+ [sc setHTTPAdditionalHeaders:@{
+ @"Content-Type" : @"application/json; charset=utf-8"
+ }];
+
+ sc.timeoutIntervalForRequest = CLTAP_REQUEST_TIME_OUT_INTERVAL;
+ sc.timeoutIntervalForResource = CLTAP_REQUEST_TIME_OUT_INTERVAL;
+ [sc setHTTPShouldSetCookies:NO];
+ [sc setRequestCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
+
+#if CLEVERTAP_SSL_PINNING
+ _sslPinningEnabled = YES;
+ self.urlSessionDelegate = [[CTPinnedNSURLSessionDelegate alloc] initWithConfig:self.config];
+ NSMutableArray *domains = [NSMutableArray arrayWithObjects:kCTApiDomain, nil];
+ if (self.redirectDomain && ![self.redirectDomain isEqualToString:kCTApiDomain]) {
+ [domains addObject:self.redirectDomain];
+ }
+ // WITH SSL PINNING ENABLED AND REGION NOT SPECIFIED BY THE USER, WE WILL DEFAULT TO EU1 AND PIN THE CERT TO EU1
+ else if (!self.redirectDomain) {
+ [domains addObject:[NSString stringWithFormat:@"eu1.%@", kCTApiDomain]];
+ }
+ [self.urlSessionDelegate pinSSLCerts:_sslCertNames forDomains:domains];
+ self.urlSession = [NSURLSession sessionWithConfiguration:sc delegate:self.urlSessionDelegate delegateQueue:nil];
+#else
+ _sslPinningEnabled = NO;
+ _urlSession = [NSURLSession sessionWithConfiguration:sc];
+#endif
+ }
+}
+
+- (void)send:(CTRequest *_Nonnull)ctRequest {
+ NSURLSessionDataTask *task = [_urlSession
+ dataTaskWithRequest:ctRequest.urlRequest
+ completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+ if (error) {
+ ctRequest.errorBlock(error);
+ }
+ ctRequest.responseBlock(data, response);
+ }];
+ [task resume];
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.h
index 7257855a..126ec336 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.h
@@ -1,11 +1,10 @@
#import
@interface CTUtils : NSObject
-
-+ (NSString *)dictionaryToJsonString:(NSDictionary *)dict;
+ (NSString *)urlEncodeString:(NSString*)s;
+ (BOOL)doesString:(NSString *)s startWith:(NSString *)prefix;
+ (NSString *)deviceTokenStringFromData:(NSData *)tokenData;
+ (double)toTwoPlaces:(double)x;
-
++ (BOOL)isNullOrEmpty:(id)obj;
++ (NSString *)jsonObjectToString:(id)object;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.m
index 3ce9ba22..590de0da 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTUtils.m
@@ -2,34 +2,9 @@
@implementation CTUtils
-+ (NSString *)dictionaryToJsonString:(NSDictionary *)dict {
- if (dict == nil) return nil;
-
- NSData *jsonData;
- @try {
- NSError *error;
- NSMutableDictionary *_cleaned = [NSMutableDictionary new];
-
- for (NSString *key in dict) {
- id value = dict[key];
- if ([value isKindOfClass:[NSDate class]]) {
- continue;
- }
- _cleaned[key] = value;
- }
-
- jsonData = [NSJSONSerialization dataWithJSONObject:_cleaned
- options:0
- error:&error];
-
- return jsonData != nil ? [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] : nil;
-
- } @catch (NSException *e) {
- return nil;
- }
-}
-
+ (NSString *)urlEncodeString:(NSString*)s {
+
+ if (!s) return nil;
NSMutableString *output = [NSMutableString string];
const unsigned char *source = (const unsigned char *) [s UTF8String];
int sourceLen = (int) strlen((const char *) source);
@@ -80,4 +55,34 @@ + (double)toTwoPlaces:(double)x {
return result;
}
++ (BOOL)isNullOrEmpty:(id)obj
+{
+ // Need to check for NSString to support RubyMotion.
+ // Ruby String respondsToSelector(count) is true for count: in RubyMotion
+ return obj == nil
+ || ([obj respondsToSelector:@selector(length)] && [obj length] == 0)
+ || ([obj respondsToSelector:@selector(count)]
+ && ![obj isKindOfClass:[NSString class]] && [obj count] == 0);
+}
+
++ (NSString *)jsonObjectToString:(id)object {
+ if ([object isKindOfClass:[NSString class]]) {
+ return object;
+ }
+ @try {
+ NSError *error;
+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
+ options:0
+ error:&error];
+ if (error) {
+ return @"";
+ }
+ NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+ return jsonString;
+ }
+ @catch (NSException *exception) {
+ return @"";
+ }
+}
+
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTValidator.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTValidator.m
index 79eee78c..314ede39 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTValidator.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CTValidator.m
@@ -229,7 +229,7 @@ + (CTValidationResult *)cleanObjectValue:(NSObject *)o context:(CTValidatorConte
*/
+ (BOOL)isRestrictedEventName:(NSString *)name {
NSArray *restrictedNames = @[@"Notification Sent", @"Notification Viewed", @"Notification Clicked",
- @"UTM Visited", @"App Launched", @"Stayed", @"App Uninstalled", @"wzrk_d", @"wzrk_fetch", CLTAP_GEOFENCE_ENTERED_EVENT_NAME, CLTAP_GEOFENCE_EXITED_EVENT_NAME];
+ @"UTM Visited", @"App Launched", @"Stayed", @"App Uninstalled", @"wzrk_d", @"wzrk_fetch", @"SCCampaignOptOut", CLTAP_GEOFENCE_ENTERED_EVENT_NAME, CLTAP_GEOFENCE_EXITED_EVENT_NAME];
for (NSString *x in restrictedNames)
if ([name.lowercaseString isEqualToString:x.lowercaseString]) {
// The event name is restricted
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+CTVar.h
new file mode 100644
index 00000000..acc9d89f
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+CTVar.h
@@ -0,0 +1,58 @@
+//
+// CleverTap+CTVar.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 18/02/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CleverTap.h"
+@class CTVar;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CleverTap (Vars)
+
+- (CTVar *)defineVar:(NSString *)name
+NS_SWIFT_NAME(defineVar(name:));
+- (CTVar *)defineVar:(NSString *)name withInt:(int)defaultValue
+NS_SWIFT_NAME(defineVar(name:integer:));
+- (CTVar *)defineVar:(NSString *)name withFloat:(float)defaultValue
+NS_SWIFT_NAME(defineVar(name:float:));
+- (CTVar *)defineVar:(NSString *)name withDouble:(double)defaultValue
+NS_SWIFT_NAME(defineVar(name:double:));
+- (CTVar *)defineVar:(NSString *)name withCGFloat:(CGFloat)cgFloatValue
+NS_SWIFT_NAME(defineVar(name:cgFloat:));
+- (CTVar *)defineVar:(NSString *)name withShort:(short)defaultValue
+NS_SWIFT_NAME(defineVar(name:short:));
+- (CTVar *)defineVar:(NSString *)name withBool:(BOOL)defaultValue
+NS_SWIFT_NAME(defineVar(name:boolean:));
+- (CTVar *)defineVar:(NSString *)name withString:(nullable NSString *)defaultValue
+NS_SWIFT_NAME(defineVar(name:string:));
+- (CTVar *)defineVar:(NSString *)name withNumber:(nullable NSNumber *)defaultValue
+NS_SWIFT_NAME(defineVar(name:number:));
+- (CTVar *)defineVar:(NSString *)name withInteger:(NSInteger)defaultValue
+NS_SWIFT_NAME(defineVar(name:NSInteger:));
+- (CTVar *)defineVar:(NSString *)name withLong:(long)defaultValue
+NS_SWIFT_NAME(defineVar(name:long:));
+- (CTVar *)defineVar:(NSString *)name withLongLong:(long long)defaultValue
+NS_SWIFT_NAME(defineVar(name:longLong:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedChar:(unsigned char)defaultValue
+NS_SWIFT_NAME(defineVar(name:unsignedChar:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedInt:(unsigned int)defaultValue
+NS_SWIFT_NAME(defineVar(name:unsignedInt:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedInteger:(NSUInteger)defaultValue
+NS_SWIFT_NAME(defineVar(name:unsignedInteger:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedLong:(unsigned long)defaultValue
+NS_SWIFT_NAME(defineVar(name:unsignedLong:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedLongLong:(unsigned long long)defaultValue
+NS_SWIFT_NAME(defineVar(name:unsignedLongLong:));
+- (CTVar *)defineVar:(NSString *)name withUnsignedShort:(unsigned short)defaultValue
+NS_SWIFT_NAME(defineVar(name:UnsignedShort:));
+- (CTVar *)defineVar:(NSString *)name withDictionary:(nullable NSDictionary *)defaultValue
+NS_SWIFT_NAME(defineVar(name:dictionary:));
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+FeatureFlags.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+FeatureFlags.h
index c1b1597d..cf25a192 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+FeatureFlags.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+FeatureFlags.h
@@ -1,19 +1,24 @@
#import
#import "CleverTap.h"
+__attribute__((deprecated("This protocol has been deprecated and will be removed in the future versions of this SDK.")))
@protocol CleverTapFeatureFlagsDelegate
@optional
-- (void)ctFeatureFlagsUpdated;
+- (void)ctFeatureFlagsUpdated
+__attribute__((deprecated("This protocol method has been deprecated and will be removed in the future versions of this SDK.")));
@end
@interface CleverTap (FeatureFlags)
-@property (atomic, strong, readonly, nonnull) CleverTapFeatureFlags *featureFlags;
+@property (atomic, strong, readonly, nonnull) CleverTapFeatureFlags *featureFlags
+__attribute__((deprecated("This property has been deprecated and will be removed in the future versions of this SDK.")));;
@end
@interface CleverTapFeatureFlags : NSObject
-@property (nonatomic, weak) id _Nullable delegate;
+@property (nonatomic, weak) id _Nullable delegate
+__attribute__((deprecated("This property has been deprecated and will be removed in the future versions of this SDK.")));;
-- (BOOL)get:(NSString* _Nonnull)key withDefaultValue:(BOOL)defaultValue;
+- (BOOL)get:(NSString* _Nonnull)key withDefaultValue:(BOOL)defaultValue
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+Inbox.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+Inbox.h
index 10da6a14..9674c1e2 100755
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+Inbox.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+Inbox.h
@@ -203,6 +203,15 @@ typedef void (^CleverTapInboxUpdatedBlock)(void);
- (void)markReadInboxMessageForID:(NSString * _Nonnull)messageId;
+/*!
+ @method
+
+ @abstract
+ This method marks the `CleverTapInboxMessage` object as read for given 'Message Ids` as Collection.
+ */
+
+- (void)markReadInboxMessagesForIDs:(NSArray *_Nonnull)messageIds;
+
/*!
@method
@@ -242,5 +251,12 @@ typedef void (^CleverTapInboxUpdatedBlock)(void);
*/
- (void)recordInboxNotificationClickedEventForID:(NSString * _Nonnull)messageId;
+/*!
+ @method
+
+ @abstract
+ This method dismisses the inbox controller
+ */
+- (void)dismissAppInbox;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+ProductConfig.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+ProductConfig.h
index bab09bcc..b60e476b 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+ProductConfig.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap+ProductConfig.h
@@ -1,11 +1,15 @@
#import
#import "CleverTap.h"
+__attribute__((deprecated("This protocol has been deprecated and will be removed in the future versions of this SDK.")))
@protocol CleverTapProductConfigDelegate
@optional
-- (void)ctProductConfigFetched;
-- (void)ctProductConfigActivated;
-- (void)ctProductConfigInitialized;
+- (void)ctProductConfigFetched
+__attribute__((deprecated("This protocol method has been deprecated and will be removed in the future versions of this SDK.")));
+- (void)ctProductConfigActivated
+__attribute__((deprecated("This protocol method has been deprecated and will be removed in the future versions of this SDK.")));
+- (void)ctProductConfigInitialized
+__attribute__((deprecated("This protocol method has been deprecated and will be removed in the future versions of this SDK.")));
@end
@interface CleverTap(ProductConfig)
@@ -32,7 +36,8 @@
@interface CleverTapProductConfig : NSObject
-@property (nonatomic, weak) id _Nullable delegate;
+@property (nonatomic, weak) id _Nullable delegate
+__attribute__((deprecated("This property has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -41,7 +46,8 @@
Fetches product configs, adhering to the default minimum fetch interval.
*/
-- (void)fetch;
+- (void)fetch
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -50,7 +56,8 @@
Fetches product configs, adhering to the specified minimum fetch interval in seconds.
*/
-- (void)fetchWithMinimumInterval:(NSTimeInterval)minimumInterval;
+- (void)fetchWithMinimumInterval:(NSTimeInterval)minimumInterval
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -59,7 +66,8 @@
Sets the minimum interval between successive fetch calls.
*/
-- (void)setMinimumFetchInterval:(NSTimeInterval)minimumFetchInterval;
+- (void)setMinimumFetchInterval:(NSTimeInterval)minimumFetchInterval
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -68,7 +76,8 @@
Activates Fetched Config data to the Active Config, so that the fetched key value pairs take effect.
*/
-- (void)activate;
+- (void)activate
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -77,7 +86,8 @@
Fetches and then activates the fetched product configs.
*/
-- (void)fetchAndActivate;
+- (void)fetchAndActivate
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -86,7 +96,8 @@
Sets default configs using the given Dictionary
*/
-- (void)setDefaults:(NSDictionary *_Nullable)defaults;
+- (void)setDefaults:(NSDictionary *_Nullable)defaults
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -95,7 +106,8 @@
Sets default configs using the given plist
*/
-- (void)setDefaultsFromPlistFileName:(NSString *_Nullable)fileName;
+- (void)setDefaultsFromPlistFileName:(NSString *_Nullable)fileName
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -104,7 +116,8 @@
Returns the config value of the given key
*/
-- (CleverTapConfigValue *_Nullable)get:(NSString* _Nonnull)key;
+- (CleverTapConfigValue *_Nullable)get:(NSString* _Nonnull)key
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -113,7 +126,8 @@
Returns the last fetch timestamp
*/
-- (NSDate *_Nullable)getLastFetchTimeStamp;
+- (NSDate *_Nullable)getLastFetchTimeStamp
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
/*!
@method
@@ -122,7 +136,8 @@
Deletes all activated, fetched and defaults configs and resets all Product Config settings.
*/
-- (void)reset;
+- (void)reset
+__attribute__((deprecated("This method has been deprecated and will be removed in the future versions of this SDK.")));
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.h
index f824a8ed..4f00cab7 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.h
@@ -31,6 +31,7 @@
@class CleverTapInstanceConfig;
@class CleverTapFeatureFlags;
@class CleverTapProductConfig;
+#import "CTVar.h"
#pragma clang diagnostic push
#pragma ide diagnostic ignored "OCUnusedMethodInspection"
@@ -354,25 +355,6 @@ typedef NS_ENUM(int, CTSignedCallEvent) {
*/
extern NSString * _Nonnull const CleverTapGeofencesDidUpdateNotification;
-
-/*!
- @method
-
- @abstract
- Get the device location if available. Calling this will prompt the user location permissions dialog.
-
- Please be sure to include the NSLocationWhenInUseUsageDescription key in your Info.plist. See https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW26
-
- Uses desired accuracy of kCLLocationAccuracyHundredMeters.
-
- If you need background location updates or finer accuracy please implement your own location handling. Please see https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html for more info.
-
- @discussion
- Optional. You can use location to pass it to CleverTap via the setLocation API
- for, among other things, more fine-grained geo-targeting and segmentation purposes. To enable, build the SDK with the preprocessor macro CLEVERTAP_LOCATION.
- */
-+ (void)getLocationWithSuccess:(void (^ _Nonnull)(CLLocationCoordinate2D location))success andError:(void (^_Nullable)(NSString * _Nullable reason))error;
-
/*!
@method
@@ -1216,6 +1198,17 @@ extern NSString * _Nonnull const CleverTapProfileDidInitializeNotification;
*/
- (void)setLibrary:(NSString * _Nonnull)name;
+/*!
+ @method
+
+ @abstract
+ Set the Library name and version for Auxiliary SDKs
+
+ @discussion
+ Call this to method to set library name and version in the Auxiliary SDK
+ */
+- (void)setCustomSdkVersion:(NSString * _Nonnull)name version:(int)version;
+
/*!
@method
@@ -1263,7 +1256,7 @@ extern NSString * _Nonnull const CleverTapProfileDidInitializeNotification;
#if defined(CLEVERTAP_HOST_WATCHOS)
/** HostWatchOS
*/
-- (BOOL)handleMessage:(NSDictionary *)message forWatchSession:(WCSession *)session API_AVAILABLE(ios(9.0));
+- (BOOL)handleMessage:(NSDictionary *_Nonnull)message forWatchSession:(WCSession *_Nonnull)session API_AVAILABLE(ios(9.0));
#endif
/*!
@@ -1276,16 +1269,6 @@ extern NSString * _Nonnull const CleverTapProfileDidInitializeNotification;
*/
- (void)recordSignedCallEvent:(int)eventRawValue forCallDetails:(NSDictionary *_Nonnull)calldetails;
-/*!
- @method
-
- @abstract
- Record Signed Call SDK version.
-
- @param version Signed call SDK version
- */
-- (void)setSignedCallVersion:(NSString* _Nullable)version;
-
/*!
@method
@@ -1317,6 +1300,85 @@ extern NSString * _Nonnull const CleverTapProfileDidInitializeNotification;
*/
+ (BOOL)isValidCleverTapId:(NSString *_Nullable)cleverTapID;
+#pragma mark Product Experiences - Vars
+
+/*!
+ @method
+
+ @abstract
+ Adds a callback to be invoked when variables are initialised with server values. Will be called each time new values are fetched.
+
+ @param block a callback to add.
+ */
+- (void)onVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull )block;
+
+/*!
+ @method
+
+ @abstract
+ Adds a callback to be invoked only once when variables are initialised with server values.
+
+ @param block a callback to add.
+ */
+- (void)onceVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull )block;
+
+/*!
+ @method
+
+ @abstract
+ Uploads variables to the server. Requires Development/Debug build/configuration.
+ */
+- (void)syncVariables;
+
+/*!
+ @method
+
+ @abstract
+ Uploads variables to the server.
+
+ @param isProduction Provide `true` if variables must be sync in Productuon build/configuration.
+ */
+- (void)syncVariables:(BOOL)isProduction;
+
+/*!
+ @method
+
+ @abstract
+ Forces variables to update from the server.
+
+ @discussion
+ Forces variables to update from the server. If variables have changed, the appropriate callbacks will fire. Use sparingly as if the app is updated, you'll have to deal with potentially inconsistent state or user experience.
+ The provided callback has a boolean flag whether the update was successful or not. The callback fires regardless
+ of whether the variables have changed.
+
+ @param block a callback with a boolean flag whether the update was successful.
+ */
+- (void)fetchVariables:(CleverTapFetchVariablesBlock _Nullable)block;
+
+/*!
+ @method
+
+ @abstract
+ Get an instance of a variable or a group.
+
+ @param name The name of the variable or the group.
+
+ @return
+ The instance of the variable or the group, or nil if not created yet.
+
+ */
+- (CTVar * _Nullable)getVariable:(NSString * _Nonnull)name;
+
+/*!
+ @method
+
+ @abstract
+ Get a copy of the current value of a variable or a group.
+
+ @param name The name of the variable or the group.
+ */
+- (id _Nullable)getVariableValue:(NSString * _Nonnull)name;
+
@end
#pragma clang diagnostic pop
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.m
index 370bb1b6..ef3b5411 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTap.m
@@ -44,10 +44,9 @@
#import "CleverTap+InAppNotifications.h"
#import "CTLocalInApp.h"
#import "CleverTap+PushPermission.h"
+#import "CleverTapJSInterfacePrivate.h"
#endif
-#import "CTLocationManager.h"
-
#if !CLEVERTAP_NO_INBOX_SUPPORT
#import "CTInboxController.h"
#import "CleverTap+Inbox.h"
@@ -72,11 +71,22 @@
#import "CleverTapProductConfigPrivate.h"
#import "CTProductConfigController.h"
+#import "CTVarCache.h"
+#import "CTVariables.h"
+#import "CleverTap+CTVar.h"
+
+#import "CTRequestFactory.h"
+#import "CTRequestSender.h"
+#import "CTDomainFactory.h"
#import "CleverTap+SCDomain.h"
+
+#import "NSDictionary+Extensions.h"
+
#import
static const void *const kQueueKey = &kQueueKey;
static const void *const kNotificationQueueKey = &kNotificationQueueKey;
+static NSMutableDictionary *auxiliarySdkVersions;
static NSRecursiveLock *instanceLock;
static const int kMaxBatchSize = 49;
@@ -84,8 +94,6 @@
NSString *const kQUEUE_NAME_EVENTS = @"events";
NSString *const kQUEUE_NAME_NOTIFICATIONS = @"notifications";
-NSString *const kHANDSHAKE_URL = @"https://eu1.clevertap-prod.com/hello";
-
NSString *const kREDIRECT_DOMAIN_KEY = @"CLTAP_REDIRECT_DOMAIN_KEY";
NSString *const kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY = @"CLTAP_REDIRECT_NOTIF_VIEWED_DOMAIN_KEY";
NSString *const kMUTED_TS_KEY = @"CLTAP_MUTED_TS_KEY";
@@ -94,8 +102,6 @@
NSString *const kREDIRECT_NOTIF_VIEWED_HEADER = @"X-WZRK-SPIKY-RD";
NSString *const kMUTE_HEADER = @"X-WZRK-MUTE";
-NSString *const kACCOUNT_ID_HEADER = @"X-CleverTap-Account-Id";
-NSString *const kACCOUNT_TOKEN_HEADER = @"X-CleverTap-Token";
NSString *const kI_KEY = @"CLTAP_I_KEY";
NSString *const kJ_KEY = @"CLTAP_J_KEY";
@@ -201,10 +207,8 @@ @interface CleverTap () {
@property (nonatomic, strong) NSMutableArray *profileQueue;
@property (nonatomic, strong) NSMutableArray *notificationsQueue;
@property (nonatomic, strong) NSURLSession *urlSession;
-@property (nonatomic, strong) NSString *redirectDomain;
-@property (nonatomic, strong) NSString *explictEndpointDomain;
-@property (nonatomic, strong) NSString *redirectNotifViewedDomain;
-@property (nonatomic, strong) NSString *explictNotifViewedEndpointDomain;
+@property (nonatomic, strong) CTDomainFactory *domainFactory;
+@property (nonatomic, strong) CTRequestSender *requestSender;
@property (nonatomic, assign) NSTimeInterval lastMutedTs;
@property (nonatomic, assign) int sendQueueFails;
@@ -238,7 +242,7 @@ @interface CleverTap () {
@property (atomic, weak) id urlDelegate;
@property (atomic, weak) id pushNotificationDelegate;
@property (atomic, weak) id inAppNotificationDelegate;
-@property (atomic, weak) id domainDelegate;
+@property (nonatomic, weak) id domainDelegate;
#if !CLEVERTAP_NO_INAPP_SUPPORT
@property (atomic, weak) id pushPermissionDelegate;
#endif
@@ -250,6 +254,8 @@ @interface CleverTap () {
@property (atomic, assign) BOOL geofenceLocation;
@property (nonatomic, strong) NSString *gfSDKVersion;
+@property (nonatomic, strong) CTVariables *variables;
+
- (instancetype)init __unavailable;
@end
@@ -684,6 +690,9 @@ - (instancetype)initWithConfig:(CleverTapInstanceConfig*)config andCleverTapID:(
[self _initProductConfig];
+ // Initialise Variables
+ self.variables = [[CTVariables alloc] initWithConfig:self.config deviceInfo:self.deviceInfo];
+
[self notifyUserProfileInitialized];
}
@@ -802,42 +811,17 @@ - (void)initNetworking {
} else {
self.lastMutedTs = [CTPreferences getIntForKey:[CTPreferences storageKeyWithSuffix:kLAST_TS_KEY config: self.config] withResetValue:0];
}
- self.redirectDomain = [self loadRedirectDomain];
- self.redirectNotifViewedDomain = [self loadRedirectNotifViewedDomain];
- [self setUpUrlSession];
- [self doHandshakeAsync];
-}
-- (void)setUpUrlSession {
- if (!self.urlSession) {
- NSURLSessionConfiguration *sc = [NSURLSessionConfiguration defaultSessionConfiguration];
- [sc setHTTPAdditionalHeaders:@{
- @"Content-Type" : @"application/json; charset=utf-8"
- }];
-
- sc.timeoutIntervalForRequest = CLTAP_REQUEST_TIME_OUT_INTERVAL;
- sc.timeoutIntervalForResource = CLTAP_REQUEST_TIME_OUT_INTERVAL;
- [sc setHTTPShouldSetCookies:NO];
- [sc setRequestCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
-
#if CLEVERTAP_SSL_PINNING
- _sslPinningEnabled = YES;
- self.urlSessionDelegate = [[CTPinnedNSURLSessionDelegate alloc] initWithConfig:self.config];
- NSMutableArray *domains = [NSMutableArray arrayWithObjects:kCTApiDomain, nil];
- if (self.redirectDomain && ![self.redirectDomain isEqualToString:kCTApiDomain]) {
- [domains addObject:self.redirectDomain];
- }
- // WITH SSL PINNING ENABLED AND REGION NOT SPECIFIED BY THE USER, WE WILL DEFAULT TO EU1 AND PIN THE CERT TO EU1
- else if (!self.redirectDomain) {
- [domains addObject:[NSString stringWithFormat:@"eu1.%@", kCTApiDomain]];
- }
- [self.urlSessionDelegate pinSSLCerts:sslCertNames forDomains:domains];
- self.urlSession = [NSURLSession sessionWithConfiguration:sc delegate:self.urlSessionDelegate delegateQueue:nil];
+ self.urlSessionDelegate = [[CTPinnedNSURLSessionDelegate alloc] initWithConfig:self.config];
+ self.domainFactory = [[CTDomainFactory alloc]initWithConfig:self.config pinnedNSURLSessionDelegate: self.urlSessionDelegate sslCertNames: sslCertNames];
+ self.requestSender = [[CTRequestSender alloc]initWithConfig:self.config redirectDomain:self.domainFactory.redirectDomain pinnedNSURLSessionDelegate: self.urlSessionDelegate sslCertNames: sslCertNames];
#else
- _sslPinningEnabled = NO;
- self.urlSession = [NSURLSession sessionWithConfiguration:sc];
+ self.domainFactory = [[CTDomainFactory alloc]initWithConfig:self.config];
+
+ self.requestSender = [[CTRequestSender alloc]initWithConfig:self.config redirectDomain:self.domainFactory.redirectDomain];
#endif
- }
+ [self doHandshakeAsyncWithCompletion:nil];
}
- (void)setUserSetLocation:(CLLocationCoordinate2D)location {
@@ -859,116 +843,36 @@ - (CLLocationCoordinate2D)userSetLocation {
# pragma mark - Handshake Handling
-- (void)clearRedirectDomain {
- self.redirectDomain = nil;
- self.redirectNotifViewedDomain = nil;
- [self persistRedirectDomain]; // if nil persist will remove
- self.redirectDomain = [self loadRedirectDomain]; // reload explicit domain if we have one else will be nil
- self.redirectNotifViewedDomain = [self loadRedirectNotifViewedDomain]; // reload explicit notification viewe domain if we have one else will be nil
-}
-
-- (NSString *)loadRedirectDomain {
- NSString *region = self.config.accountRegion;
- if (region) {
- region = [region stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
- if (region.length > 0) {
- self.explictEndpointDomain = [NSString stringWithFormat:@"%@.%@", region, kCTApiDomain];
- return self.explictEndpointDomain;
- }
- }
- NSString *proxyDomain = self.config.proxyDomain;
- if (proxyDomain) {
- proxyDomain = [proxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
- if (proxyDomain.length > 0) {
- self.explictEndpointDomain = proxyDomain;
- return self.explictEndpointDomain;
- }
- }
- NSString *domain = nil;
- if (self.config.isDefaultInstance) {
- domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_DOMAIN_KEY config: self.config] withResetValue:[CTPreferences getStringForKey:kREDIRECT_DOMAIN_KEY withResetValue:nil]];
- } else {
- domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_DOMAIN_KEY config: self.config] withResetValue:nil];
- }
- return domain;
-}
-
-- (NSString *)loadRedirectNotifViewedDomain {
- NSString *region = self.config.accountRegion;
- if (region) {
- region = [region stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
- if (region.length > 0) {
- self.explictNotifViewedEndpointDomain = [NSString stringWithFormat:@"%@-%@", region, kCTNotifViewedApiDomain];
- return self.explictNotifViewedEndpointDomain;
- }
- }
- NSString *spikyProxyDomain = self.config.spikyProxyDomain;
- if (spikyProxyDomain) {
- spikyProxyDomain = [spikyProxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].lowercaseString;
- if (spikyProxyDomain.length > 0) {
- self.explictNotifViewedEndpointDomain = spikyProxyDomain;
- return self.explictNotifViewedEndpointDomain;
- }
- }
- NSString *domain = nil;
- if (self.config.isDefaultInstance) {
- domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config] withResetValue:[CTPreferences getStringForKey:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY withResetValue:nil]];
- } else {
- domain = [CTPreferences getStringForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config] withResetValue:nil];
- }
- return domain;
-}
-
-- (void)persistRedirectDomain {
- if (self.redirectDomain != nil) {
- [CTPreferences putString:self.redirectDomain forKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_DOMAIN_KEY config: self.config]];
-#if CLEVERTAP_SSL_PINNING
- [self.urlSessionDelegate pinSSLCerts:sslCertNames forDomains:@[kCTApiDomain, self.redirectDomain]];
-#endif
- } else {
- [CTPreferences removeObjectForKey:kREDIRECT_DOMAIN_KEY];
- [CTPreferences removeObjectForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_DOMAIN_KEY config: self.config]];
- }
-}
-
-- (void)persistRedirectNotifViewedDomain {
- if (self.redirectNotifViewedDomain != nil) {
- [CTPreferences putString:self.redirectNotifViewedDomain forKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config]];
-#if CLEVERTAP_SSL_PINNING
- [self.urlSessionDelegate pinSSLCerts:sslCertNames forDomains:@[kCTNotifViewedApiDomain, self.redirectNotifViewedDomain]];
-#endif
- } else {
- [CTPreferences removeObjectForKey:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY];
- [CTPreferences removeObjectForKey:[CTPreferences storageKeyWithSuffix:kREDIRECT_NOTIF_VIEWED_DOMAIN_KEY config: self.config]];
- }
-}
- (void)persistMutedTs {
self.lastMutedTs = [NSDate new].timeIntervalSince1970;
[CTPreferences putInt:self.lastMutedTs forKey:[CTPreferences storageKeyWithSuffix:kMUTED_TS_KEY config: self.config]];
}
- (BOOL)needHandshake {
- if ([self isMuted] || self.explictEndpointDomain) {
+ if ([self isMuted] || self.domainFactory.explictEndpointDomain) {
return NO;
}
- return self.redirectDomain == nil;
+ return self.domainFactory.redirectDomain == nil;
}
-- (void)doHandshakeAsync {
+- (void)doHandshakeAsyncWithCompletion:(void (^ _Nullable )(void))taskBlock {
[self runSerialAsync:^{
if (![self needHandshake]) {
- //self.redirectDomain contains value
+ //self.domainFactory.redirectDomain contains value
[self onDomainAvailable];
+ if (taskBlock) {
+ taskBlock();
+ }
return;
}
CleverTapLogInternal(self.config.logLevel, @"%@: starting handshake with %@", self, kHANDSHAKE_URL);
- NSMutableURLRequest *request = [self createURLRequestFromURL:[[NSURL alloc] initWithString:kHANDSHAKE_URL]];
- request.HTTPMethod = @"GET";
+
// Need to simulate a synchronous request
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
- NSURLSessionDataTask *task = [self.urlSession
- dataTaskWithRequest:request
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+
+ CTRequest *ctRequest = [CTRequestFactory helloRequestWithConfig:self.config];
+ [ctRequest onResponse:^(NSData * _Nullable data, NSURLResponse * _Nullable response) {
+
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode == 200) {
@@ -981,9 +885,17 @@ - (void)doHandshakeAsync {
} else {
[self onDomainUnavailable];
}
+ if (taskBlock) {
+ taskBlock();
+ }
+
+ dispatch_semaphore_signal(semaphore);
+ }];
+ [ctRequest onError:^(NSError * _Nullable error) {
+ [self onDomainUnavailable];
dispatch_semaphore_signal(semaphore);
}];
- [task resume];
+ [self.requestSender send:ctRequest];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
}];
}
@@ -994,12 +906,12 @@ - (BOOL)updateStateFromResponseHeadersShouldRedirectForNotif:(NSDictionary *)hea
@try {
NSString *redirectNotifViewedDomain = headers[kREDIRECT_NOTIF_VIEWED_HEADER];
if (redirectNotifViewedDomain != nil) {
- NSString *currentDomain = self.redirectNotifViewedDomain;
- self.redirectNotifViewedDomain = redirectNotifViewedDomain;
- if (![self.redirectNotifViewedDomain isEqualToString:currentDomain]) {
+ NSString *currentDomain = self.domainFactory.redirectNotifViewedDomain;
+ self.domainFactory.redirectNotifViewedDomain = redirectNotifViewedDomain;
+ if (![self.domainFactory.redirectNotifViewedDomain isEqualToString:currentDomain]) {
shouldRedirect = YES;
- self.redirectNotifViewedDomain = redirectNotifViewedDomain;
- [self persistRedirectNotifViewedDomain];
+ self.domainFactory.redirectNotifViewedDomain = redirectNotifViewedDomain;
+ [self.domainFactory persistRedirectNotifViewedDomain];
}
}
NSString *mutedString = headers[kMUTE_HEADER];
@@ -1020,12 +932,12 @@ - (BOOL)updateStateFromResponseHeadersShouldRedirect:(NSDictionary *)headers {
@try {
NSString *redirectDomain = headers[kREDIRECT_HEADER];
if (redirectDomain != nil) {
- NSString *currentDomain = self.redirectDomain;
- self.redirectDomain = redirectDomain;
- if (![self.redirectDomain isEqualToString:currentDomain]) {
+ NSString *currentDomain = self.domainFactory.redirectDomain;
+ self.domainFactory.redirectDomain = redirectDomain;
+ if (![self.domainFactory.redirectDomain isEqualToString:currentDomain]) {
shouldRedirect = YES;
- self.redirectDomain = redirectDomain;
- [self persistRedirectDomain];
+ self.domainFactory.redirectDomain = redirectDomain;
+ [self.domainFactory persistRedirectDomain];
//domain changed
[self onDomainAvailable];
}
@@ -1060,7 +972,7 @@ - (void)handleSendQueueSuccess {
- (void)handleSendQueueFail {
self.sendQueueFails += 1;
if (self.sendQueueFails > 5) {
- [self clearRedirectDomain];
+ [self.domainFactory clearRedirectDomain];
self.sendQueueFails = 0;
}
}
@@ -1068,28 +980,15 @@ - (void)handleSendQueueFail {
#pragma mark - Queue/Dispatch helpers
-- (NSMutableURLRequest *)createURLRequestFromURL:(NSURL *)url {
- NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
- NSString *accountId = self.config.accountId;
- NSString *accountToken = self.config.accountToken;
- if (accountId) {
- [request setValue:accountId forHTTPHeaderField:kACCOUNT_ID_HEADER];
- }
- if (accountToken) {
- [request setValue:accountToken forHTTPHeaderField:kACCOUNT_TOKEN_HEADER];
- }
- return request;
-}
-
- (NSString *)endpointForQueue: (NSMutableArray *)queue {
- if (!self.redirectDomain) return nil;
+ if (!self.domainFactory.redirectDomain) return nil;
NSString *accountId = self.config.accountId;
NSString *sdkRevision = self.deviceInfo.sdkVersion;
NSString *endpointDomain;
if (queue == _notificationsQueue) {
- endpointDomain = self.redirectNotifViewedDomain;
+ endpointDomain = self.domainFactory.redirectNotifViewedDomain;
} else {
- endpointDomain = self.redirectDomain;
+ endpointDomain = self.domainFactory.redirectDomain;
}
NSString *endpointUrl = [[NSString alloc] initWithFormat:@"https://%@/a1?os=iOS&t=%@&z=%@", endpointDomain, sdkRevision, accountId];
currentRequestTimestamp = (int) [[[NSDate alloc] init] timeIntervalSince1970];
@@ -1176,8 +1075,6 @@ - (NSArray *)insertHeader:(NSDictionary *)header inBatch:(NSArray *)batch {
- (NSDictionary *)generateAppFields {
NSMutableDictionary *evtData = [NSMutableDictionary new];
- evtData[@"scv"] = self.deviceInfo.signedCallSDKVersion;
-
evtData[@"Version"] = self.deviceInfo.appVersion;
evtData[@"Build"] = self.deviceInfo.appBuild;
@@ -1233,6 +1130,12 @@ - (NSDictionary *)generateAppFields {
evtData[@"lib"] = self.deviceInfo.library;
}
+ if (auxiliarySdkVersions && auxiliarySdkVersions.count > 0) {
+ [auxiliarySdkVersions enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) {
+ [evtData setObject:value forKey:key];
+ }];
+ }
+
#if CLEVERTAP_SSL_PINNING
evtData[@"sslpin"] = @YES;
#endif
@@ -1249,27 +1152,11 @@ - (NSDictionary *)generateAppFields {
// Add Local in-app count to event data.
evtData[@"LIAMC"] = @([self.deviceInfo getLocalInAppCount]);
- return evtData;
-}
-
-- (NSString *)jsonObjectToString:(id)object {
- if ([object isKindOfClass:[NSString class]]) {
- return object;
- }
- @try {
- NSError *error;
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
- options:0
- error:&error];
- if (error) {
- return @"";
- }
- NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- return jsonString;
- }
- @catch (NSException *exception) {
- return @"";
+ if (self.config.wv_init) {
+ evtData[@"wv_init"] = @(YES);
}
+
+ return evtData;
}
- (id)convertDataToPrimitive:(id)event {
@@ -1385,7 +1272,7 @@ - (void)applicationDidEnterBackground:(NSNotification *)notification {
- (void)applicationWillEnterForeground:(NSNotificationCenter *)notification {
if ([self needHandshake]) {
- [self doHandshakeAsync];
+ [self doHandshakeAsyncWithCompletion:nil];
}
}
@@ -1437,15 +1324,32 @@ - (void)_appEnteredForeground {
- (void)_appEnteredBackground {
self.isAppForeground = NO;
- if (![self isMuted]) {
- [self persistQueues];
- }
- [self runSerialAsync:^{
+
+ UIApplication *application = [[self class]getSharedApplication];
+ UIBackgroundTaskIdentifier __block backgroundTask;
+
+ void (^finishTaskHandler)(void) = ^(){
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ [application endBackgroundTask:backgroundTask];
+ backgroundTask = UIBackgroundTaskInvalid;
+ });
+ };
+ // Start background task to make sure it runs when the app is in background.
+ backgroundTask = [application beginBackgroundTaskWithExpirationHandler:finishTaskHandler];
+
+ @try {
+ [self persistOrClearQueues];
[self updateSessionTime:(long) [[NSDate date] timeIntervalSince1970]];
- }];
+ finishTaskHandler();
+ }
+ @catch (NSException *exception) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Exception caught: %@", self, [exception reason]);
+ finishTaskHandler();
+ }
}
- (void)recordAppLaunched:(NSString *)caller {
+
if ([[self class] runningInsideAppExtension]) return;
if (self.appLaunchProcessed) {
@@ -1453,6 +1357,9 @@ - (void)recordAppLaunched:(NSString *)caller {
return;
}
+ // Load Vars from cache before App Launched
+ [self.variables.varCache loadDiffs];
+
self.appLaunchProcessed = YES;
if (self.config.disableAppLaunchedEvent) {
@@ -2019,7 +1926,7 @@ - (void)displayNotification:(CTInAppNotification*)notification {
switch (notification.inAppType) {
case CTInAppTypeHTML:
- jsInterface = [[CleverTapJSInterface alloc] initWithConfig:self.config];
+ jsInterface = [[CleverTapJSInterface alloc] initWithConfigForInApps:self.config];
controller = [[CTInAppHTMLViewController alloc] initWithNotification:notification jsInterface:jsInterface];
break;
case CTInAppTypeInterstitial:
@@ -2703,7 +2610,7 @@ - (void)processEvent:(NSDictionary *)event withType:(CleverTapEventType)eventTyp
}
}
- CleverTapLogDebug(self.config.logLevel, @"%@: New event processed: %@", self, [self jsonObjectToString:mutableEvent]);
+ CleverTapLogDebug(self.config.logLevel, @"%@: New event processed: %@", self, [CTUtils jsonObjectToString:mutableEvent]);
if (eventType == CleverTapEventTypeFetch) {
[self flushQueue];
@@ -2726,7 +2633,7 @@ - (void)scheduleQueueFlush {
- (void)flushQueue {
if ([self needHandshake]) {
[self runSerialAsync:^{
- [self doHandshakeAsync];
+ [self doHandshakeAsyncWithCompletion:nil];
}];
}
[self runSerialAsync:^{
@@ -2802,17 +2709,22 @@ - (void)clearNotificationsQueue {
self.notificationsQueue = [NSMutableArray array];
}
+- (void)persistOrClearQueues {
+ if ([self isMuted]) {
+ [self clearQueues];
+ } else {
+ [self persistProfileQueue];
+ [self persistEventsQueue];
+ [self persistNotificationsQueue];
+ }
+}
+
- (void)persistQueues {
[self runSerialAsync:^{
- if ([self isMuted]) {
- [self clearQueues];
- } else {
- [self persistProfileQueue];
- [self persistEventsQueue];
- [self persistNotificationsQueue];
- }
+ [self persistOrClearQueues];
}];
}
+
- (void)persistEventsQueue {
NSString *fileName = [self eventsFileName];
NSMutableArray *eventsCopy;
@@ -2890,7 +2802,7 @@ - (void)sendQueue:(NSMutableArray *)queue {
CleverTapLogInternal(self.config.logLevel, @"%@: Pending events batch contains: %d items", self, (int) [batch count]);
@try {
- NSString *jsonBody = [self jsonObjectToString:batchWithHeader];
+ NSString *jsonBody = [CTUtils jsonObjectToString:batchWithHeader];
CleverTapLogDebug(self.config.logLevel, @"%@: Sending %@ to servers at %@", self, jsonBody, endpoint);
@@ -2901,10 +2813,6 @@ - (void)sendQueue:(NSMutableArray *)queue {
return;
}
- NSMutableURLRequest *request = [self createURLRequestFromURL:[[NSURL alloc] initWithString:endpoint]];
- request.HTTPBody = [jsonBody dataUsingEncoding:NSUTF8StringEncoding];
- request.HTTPMethod = @"POST";
-
__block BOOL success = NO;
__block NSData *responseData;
@@ -2912,15 +2820,11 @@ - (void)sendQueue:(NSMutableArray *)queue {
// Need to simulate a synchronous request
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
- NSURLSessionDataTask *postDataTask = [self.urlSession
- dataTaskWithRequest:request
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+
+ CTRequest *ctRequest = [CTRequestFactory eventRequestWithConfig:self.config params:batchWithHeader url:endpoint];
+ [ctRequest onResponse:^(NSData * _Nullable data, NSURLResponse * _Nullable response) {
responseData = data;
- if (error) {
- CleverTapLogDebug(self.config.logLevel, @"%@: Network error while sending queue, will retry: %@", self, error.localizedDescription);
- }
-
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
@@ -2940,7 +2844,14 @@ - (void)sendQueue:(NSMutableArray *)queue {
dispatch_semaphore_signal(semaphore);
}];
- [postDataTask resume];
+ [ctRequest onError:^(NSError * _Nullable error) {
+ if (error) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Network error while sending queue, will retry: %@", self, error.localizedDescription);
+ }
+ [[self variables] handleVariablesError];
+ dispatch_semaphore_signal(semaphore);
+ }];
+ [self.requestSender send:ctRequest];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
if (!success) {
@@ -3134,6 +3045,12 @@ - (void)parseResponse:(NSData *)responseData {
}
#endif
+ // Handle and Cache PE Variables
+ NSDictionary *varsResponse = jsonResp[CLTAP_PE_VARS_RESPONSE_KEY];
+ if (varsResponse) {
+ [[self variables] handleVariablesResponse: jsonResp[CLTAP_PE_VARS_RESPONSE_KEY]];
+ }
+
// Handle events/profiles sync data
@try {
NSDictionary *evpr = jsonResp[@"evpr"];
@@ -3312,7 +3229,7 @@ - (void)_onUserLogin:(NSDictionary *)properties withCleverTapID:(NSString *)clev
return;
}
// stringify the profile dict to use as a concurrent dupe key
- NSString *profileToString = [CTUtils dictionaryToJsonString:properties];
+ NSString *profileToString = [properties toJsonString];
// as processing happens async block concurrent onUserLogin requests with the same profile, as our cache is set async
if ([self isProcessingLoginUserWithIdentifier:profileToString]) {
@@ -3378,6 +3295,8 @@ - (void) _asyncSwitchUser:(NSDictionary *)properties withCachedGuid:(NSString *)
[self _resetProductConfig];
+ [self _resetVars];
+
// push data on reset profile
[self recordAppLaunched:action];
if (properties) {
@@ -3991,6 +3910,13 @@ - (void)setLibrary:(NSString *)name {
self.deviceInfo.library = name;
}
+- (void)setCustomSdkVersion:(NSString *)name version:(int)version {
+ if (!auxiliarySdkVersions) {
+ auxiliarySdkVersions = [NSMutableDictionary new];
+ }
+ auxiliarySdkVersions[name] = @(version);
+}
+
+ (void)setDebugLevel:(int)level {
[CTLogger setDebugLevel:level];
if (_defaultInstanceConfig) {
@@ -4029,13 +3955,14 @@ + (void)setCredentialsWithAccountID:(NSString *)accountID token:(NSString *)toke
+ (void)setCredentialsWithAccountID:(NSString *)accountID token:(NSString *)token proxyDomain:(NSString *)proxyDomain spikyProxyDomain:(NSString *)spikyProxyDomain {
[self _setCredentialsWithAccountID:accountID token:token proxyDomain:proxyDomain];
+ NSString *finalSpikyProxyDomain;
if (spikyProxyDomain != nil && ![spikyProxyDomain isEqualToString:@""]) {
- spikyProxyDomain = [spikyProxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
- if (spikyProxyDomain.length <= 0) {
- spikyProxyDomain = nil;
+ finalSpikyProxyDomain = [spikyProxyDomain stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+ if (finalSpikyProxyDomain.length <= 0) {
+ finalSpikyProxyDomain = nil;
}
}
- [_plistInfo setCredentialsWithAccountID:accountID token:token proxyDomain:proxyDomain spikyProxyDomain:spikyProxyDomain];
+ [_plistInfo setCredentialsWithAccountID:accountID token:token proxyDomain:proxyDomain spikyProxyDomain:finalSpikyProxyDomain];
}
+ (void)enablePersonalization {
@@ -4078,14 +4005,6 @@ - (BOOL)geofenceLocation {
return _geofenceLocation;
}
-+ (void)getLocationWithSuccess:(void (^)(CLLocationCoordinate2D location))success andError:(void (^)(NSString *reason))error; {
-#if defined(CLEVERTAP_LOCATION)
- [CTLocationManager getLocationWithSuccess:success andError:error];
-#else
- CleverTapLogStaticInfo(@"To Enable CleverTap Location services/apis please build the SDK with the CLEVERTAP_LOCATION macro");
-#endif
-}
-
#pragma clang diagnostic pop
@@ -4204,7 +4123,7 @@ - (CleverTapUTMDetail *)getUTMDetails {
}
#if defined(CLEVERTAP_HOST_WATCHOS)
-- (BOOL)handleMessage:(NSDictionary *)message forWatchSession:(WCSession *)session {
+- (BOOL)handleMessage:(NSDictionary *_Nonnull)message forWatchSession:(WCSession *_Nonnull)session {
NSString *type = [message objectForKey:@"clevertap_type"];
BOOL handled = (type != nil);
@@ -4354,6 +4273,18 @@ - (void)markReadInboxMessageForID:(NSString *)messageId{
[self.inboxController markReadMessageWithId:messageId];
}
+- (void)markReadInboxMessagesForIDs:(NSArray *_Nonnull)messageIds{
+ if (![self _isInboxInitialized]) {
+ return;
+ }
+ if (messageIds != nil && [messageIds count] > 0) {
+ [self.inboxController markReadMessagesWithId:messageIds];
+ }
+ else {
+ CleverTapLogStaticDebug(@"App Inbox Message IDs array is null or empty");
+ }
+}
+
- (void)registerInboxUpdatedBlock:(CleverTapInboxUpdatedBlock)block {
if (!_inboxUpdateBlocks) {
_inboxUpdateBlocks = [NSMutableArray new];
@@ -4372,6 +4303,19 @@ - (CleverTapInboxViewController * _Nullable)newInboxViewControllerWithConfig:(Cl
return [[CleverTapInboxViewController alloc] initWithMessages:messages config:config delegate:delegate analyticsDelegate:self];
}
+- (void)dismissAppInbox {
+ [[self class] runSyncMainQueue:^{
+ UIApplication *application = [[self class] getSharedApplication];
+ UIWindow *window = [[application delegate] window];
+ UIViewController *presentedViewcontoller = [[window rootViewController] presentedViewController];
+ if ([presentedViewcontoller isKindOfClass:[UINavigationController class]]) {
+ UINavigationController *navigationController = (UINavigationController *)[[window rootViewController] presentedViewController];
+ if ([navigationController.topViewController isKindOfClass:[CleverTapInboxViewController class]]) {
+ [[window rootViewController] dismissViewControllerAnimated:YES completion:nil];
+ }
+ }
+ }];
+}
#pragma mark Private
@@ -4525,7 +4469,7 @@ - (BOOL)didHandleInboxMessageTestFromPushNotificaton:(NSDictionary*)notification
NSMutableDictionary *message = [NSMutableDictionary dictionary];
[message setObject:nowEpoch forKey:@"_id"];
[message setObject:[NSNumber numberWithLong:expireTime] forKey:@"wzrk_ttl"];
- [message addEntriesFromDictionary:msg];
+ [message addEntriesFromDictionary:msg ?: @{}];
NSMutableArray *inboxMsg = [NSMutableArray new];
[inboxMsg addObject:message];
@@ -4805,6 +4749,13 @@ - (void)_resetProductConfig {
}
}
+// run off main
+- (void)_resetVars {
+ /// Clear content for current user
+ /// Content for new user will be loaded in `recordAppLaunched:` using `CTVarCache.loadDiffs`
+ [[self variables] clearUserContent];
+}
+
- (NSDictionary *)_setProductConfig:(NSDictionary *)arp {
if (arp) {
NSMutableDictionary *configOptions = [NSMutableDictionary new];
@@ -4937,10 +4888,6 @@ - (void)recordSignedCallEvent:(int)eventRawValue forCallDetails:(NSDictionary *)
#endif
}
-- (void)setSignedCallVersion:(NSString *)version {
- [self.deviceInfo setSignedCallSDKVersion: version];
-}
-
- (void)setDomainDelegate:(id)delegate {
if ([[self class] runningInsideAppExtension]){
CleverTapLogDebug(self.config.logLevel, @"%@: setDomainDelegate is a no-op in an app extension.", self);
@@ -4970,8 +4917,8 @@ - (void)onDomainUnavailable {
//Updates the format of the domain - from `in1.clevertap-prod.com` to region.auth.domain (i.e. in1.auth.clevertap-prod.com)
- (NSString *)getDomainString {
- if (self.redirectDomain != nil) {
- NSArray *listItems = [self.redirectDomain componentsSeparatedByString:@"."];
+ if (self.domainFactory.redirectDomain != nil) {
+ NSArray *listItems = [self.domainFactory.redirectDomain componentsSeparatedByString:@"."];
NSString *domainItem = [listItems[0] stringByAppendingString:@".auth"];
for (int i = 1; i < listItems.count; i++ ) {
NSString *dotString = [@"." stringByAppendingString: listItems[i]];
@@ -5129,4 +5076,214 @@ + (BOOL)isValidCleverTapId:(NSString *_Nullable)cleverTapID {
return [CTValidator isValidCleverTapId:cleverTapID];
}
+#pragma mark - Product Experiences
+
+- (void)onVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull )block {
+ [[self variables] onVariablesChanged:block];
+}
+
+- (void)onceVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull )block {
+ [[self variables] onceVariablesChanged:block];
+}
+
+- (void)syncVariables {
+ [self syncVariables:NO];
+}
+
+- (void)syncVariablesEnsureHandshake {
+ if ([self needHandshake]) {
+ [self runSerialAsync:^{
+ [self doHandshakeAsyncWithCompletion:^{
+ [self _syncVars];
+ }];
+ }];
+ }
+ else {
+ [self runSerialAsync:^{
+ [self _syncVars];
+ }];
+ }
+}
+
+- (void)syncVariables:(BOOL)isProduction {
+ if (isProduction) {
+#if DEBUG
+ CleverTapLogInfo(_config.logLevel, @"%@: Calling syncVariables: with isProduction:YES from Debug configuration/build. Use syncVariables in this case", self);
+#else
+ CleverTapLogInfo(_config.logLevel, @"%@: Calling syncVariables: with isProduction:YES from Release configuration/build. Do not release this build and use with caution", self);
+#endif
+ [self syncVariablesEnsureHandshake];
+ } else {
+#if DEBUG
+ [self syncVariablesEnsureHandshake];
+#else
+ CleverTapLogInfo(_config.logLevel, @"%@: syncVariables can only be called from Debug configurations/builds", self);
+#endif
+ }
+}
+
+- (void)_syncVars {
+ NSDictionary *meta = [self batchHeader];
+ NSDictionary *varsPayload = [[self variables] varsPayload];
+ NSArray *payload = @[meta,varsPayload];
+
+ dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
+
+ NSString *url = [NSString stringWithFormat:@"https://%@/%@",self.domainFactory.redirectDomain, CT_PE_DEFINE_VARS_ENDPOINT];
+ CTRequest *ctRequest = [CTRequestFactory syncVarsRequestWithConfig:self.config params:payload url:url];
+
+ [ctRequest onResponse:^(NSData * _Nullable data, NSURLResponse * _Nullable response) {
+ if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
+ if (httpResponse.statusCode == 200) {
+ CleverTapLogDebug(self->_config.logLevel, @"%@: Vars synced successfully", self);
+ }
+ else if (httpResponse.statusCode == 401) {
+ CleverTapLogDebug(self->_config.logLevel, @"%@: Unauthorized access from a non-test profile. Please mark this profile as a test profile from the CleverTap dashboard.", self);
+ }
+ }
+ CT_TRY
+ id jsonResp = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+ if (jsonResp[@"error"]) {
+ CleverTapLogDebug(self->_config.logLevel, @"%@: Error while syncing vars: %@", self, jsonResp[@"error"]);
+ }
+ CT_END_TRY
+ dispatch_semaphore_signal(semaphore);
+ }];
+ [ctRequest onError:^(NSError * _Nullable error) {
+ CleverTapLogDebug(self->_config.logLevel, @"%@: error syncing vars: %@", self, error.debugDescription);
+ dispatch_semaphore_signal(semaphore);
+ }];
+ [self.requestSender send:ctRequest];
+ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
+}
+
+- (void)fetchVariables:(CleverTapFetchVariablesBlock)block {
+ [[self variables] setFetchVariablesBlock:block];
+ [self queueEvent:@{@"evtName": CLTAP_WZRK_FETCH_EVENT, @"evtData" : @{@"t": @4}} withType:CleverTapEventTypeFetch];
+}
+
+- (CTVar * _Nullable)getVariable:(NSString * _Nonnull)name {
+ CTVar *var = [[self.variables varCache] getVariable:name];
+ if (!var) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Variable with name: %@ not found.", self, name);
+ }
+ return var;
+}
+
+- (id _Nullable)getVariableValue:(NSString * _Nonnull)name {
+ return [[self.variables varCache] getMergedValue:name];
+}
+
+#pragma mark - PE Vars
+
+- (CTVar *)defineVar:(NSString *)name {
+ return [self.variables define:name with:nil kind:nil];
+}
+
+- (CTVar *)defineVar:(NSString *)name withInt:(int)defaultValue {
+ return [self.variables define:name with:[NSNumber numberWithInt:defaultValue] kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withFloat:(float)defaultValue {
+ return [self.variables define:name with:[NSNumber numberWithFloat:defaultValue] kind:CT_KIND_FLOAT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withDouble:(double)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithDouble:defaultValue]
+ kind:CT_KIND_FLOAT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withCGFloat:(CGFloat)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithDouble:defaultValue]
+ kind:CT_KIND_FLOAT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withShort:(short)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithShort:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withChar:(char)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithChar:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withBool:(BOOL)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithBool:defaultValue]
+ kind:CT_KIND_BOOLEAN];
+}
+
+- (CTVar *)defineVar:(NSString *)name withInteger:(NSInteger)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithInteger:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withLong:(long)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithLong:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withLongLong:(long long)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithLongLong:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedChar:(unsigned char)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedChar:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedInt:(unsigned int)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedInt:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedInteger:(NSUInteger)defaultValue
+{
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedInteger:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedLong:(unsigned long)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedLong:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedLongLong:(unsigned long long)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedLongLong:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withUnsignedShort:(unsigned short)defaultValue {
+ return [self.variables define:name
+ with:[NSNumber numberWithUnsignedShort:defaultValue]
+ kind:CT_KIND_INT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withString:(NSString *)defaultValue {
+ return [self.variables define:name with:defaultValue kind:CT_KIND_STRING];
+}
+
+- (CTVar *)defineVar:(NSString *)name withNumber:(NSNumber *)defaultValue {
+ return [self.variables define:name with:defaultValue kind:CT_KIND_FLOAT];
+}
+
+- (CTVar *)defineVar:(NSString *)name withDictionary:(NSDictionary *)defaultValue {
+ return [self.variables define:name with:defaultValue kind:CT_KIND_DICTIONARY];
+}
+
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapBuildInfo.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapBuildInfo.h
index ef2f044d..5abb90be 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapBuildInfo.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapBuildInfo.h
@@ -1,3 +1 @@
-
-#define WR_SDK_REVISION @"40200"
-
+#define WR_SDK_REVISION @"50102"
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfig.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfig.m
index 8b152e26..72bac34e 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfig.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfig.m
@@ -24,6 +24,7 @@ - (void)encodeWithCoder:(NSCoder *)coder
[coder encodeObject: _queueLabel forKey:@"queueLabel"];
[coder encodeBool: _isCreatedPostAppLaunched forKey:@"isCreatedPostAppLaunched"];
[coder encodeBool: _beta forKey:@"beta"];
+ [coder encodeBool: _wv_init forKey:@"wv_init"];
}
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
@@ -45,6 +46,7 @@ - (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
_queueLabel = [coder decodeObjectForKey:@"queueLabel"];
_isCreatedPostAppLaunched = [coder decodeBoolForKey:@"isCreatedPostAppLaunched"];
_beta = [coder decodeBoolForKey:@"beta"];
+ _wv_init = [coder decodeBoolForKey:@"wv_init"];
}
return self;
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfigPrivate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfigPrivate.h
index 46698a4f..4d60db85 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfigPrivate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfigPrivate.h
@@ -7,6 +7,9 @@
@property (nonatomic, assign) BOOL isCreatedPostAppLaunched;
@property (nonatomic, assign) BOOL beta;
+// SET ONLY WHEN THE USER INITIALISES A WEBVIEW WITH CT JS INTERFACE
+@property (nonatomic, assign) BOOL wv_init;
+
- (instancetype _Nonnull)initWithAccountId:(NSString * _Nonnull)accountId
accountToken:(NSString * _Nonnull)accountToken
accountRegion:(NSString * _Nullable)accountRegion
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterface.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterface.m
index 5d32f950..31f847a2 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterface.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterface.m
@@ -2,16 +2,25 @@
#import "CleverTap.h"
#import "CleverTapInstanceConfig.h"
#import "CleverTapInstanceConfigPrivate.h"
+#import "CleverTapJSInterfacePrivate.h"
@interface CleverTapJSInterface (){}
@property (nonatomic, strong) CleverTapInstanceConfig *config;
-
@end
@implementation CleverTapJSInterface
- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config {
+ if (self = [super init]) {
+ _config = config;
+ _wv_init = YES;
+ [self initUserContentController];
+ }
+ return self;
+}
+
+- (instancetype)initWithConfigForInApps:(CleverTapInstanceConfig *)config {
if (self = [super init]) {
_config = config;
[self initUserContentController];
@@ -33,6 +42,9 @@ - (void)userContentController:(nonnull WKUserContentController *)userContentCont
cleverTap = [CleverTap instanceWithConfig:self.config];
}
if (cleverTap) {
+ if (_wv_init) {
+ cleverTap.config.wv_init = YES;
+ }
[self handleMessageFromWebview:message.body forInstance:cleverTap];
}
}
@@ -41,7 +53,7 @@ - (void)userContentController:(nonnull WKUserContentController *)userContentCont
- (void)handleMessageFromWebview:(NSDictionary *)message forInstance:(CleverTap *)cleverTap {
NSString *action = [message objectForKey:@"action"];
if ([action isEqual:@"recordEventWithProps"]) {
- [cleverTap recordEvent: message[@"event"] withProps: message[@"props"]];
+ [cleverTap recordEvent: message[@"event"] withProps: message[@"properties"]];
} else if ([action isEqual: @"profilePush"]) {
[cleverTap profilePush: message[@"properties"]];
} else if ([action isEqual: @"profileSetMultiValues"]) {
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterfacePrivate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterfacePrivate.h
new file mode 100644
index 00000000..d3881561
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterfacePrivate.h
@@ -0,0 +1,8 @@
+#import
+
+@interface CleverTapJSInterface () {}
+- (instancetype)initWithConfigForInApps:(CleverTapInstanceConfig *)config;
+
+// SET ONLY WHEN THE USER INITIALISES A WEBVIEW WITH CT JS INTERFACE
+@property (nonatomic, assign) BOOL wv_init;
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.h
index 5c560ba4..c4d8a832 100755
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.h
@@ -29,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)deleteMessageWithId:(NSString *)messageId;
- (void)deleteMessagesWithId:(NSArray *_Nonnull)messageIds;
- (void)markReadMessageWithId:(NSString *)messageId;
+- (void)markReadMessagesWithId:(NSArray *_Nonnull)messageIds;
@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.m
index aad25225..aa0652db 100755
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/controllers/CTInboxController.m
@@ -103,9 +103,19 @@ - (void)deleteMessageWithId:(NSString *)messageId {
- (void)deleteMessagesWithId:(NSArray *_Nonnull)messageIds {
NSMutableArray *toDeleteInboxMessages = [NSMutableArray new];
for (NSString *ids in messageIds) {
- CTMessageMO *msg = [self _messageForId:ids];
- [toDeleteInboxMessages addObject:msg];
+ if (ids != nil && ![ids isEqualToString:@""]){
+ CTMessageMO *msg = [self _messageForId:ids];
+ if (msg) {
+ [toDeleteInboxMessages addObject:msg];
+ }
+ else {
+ CleverTapLogStaticDebug(@"Cannot delete App Inbox Message because Message ID %@ is invalid.", ids)
+ }
+ }
+ else {
+ CleverTapLogStaticDebug(@"Cannot delete App Inbox Message because Message ID is null or not a string.");
}
+ }
if ([toDeleteInboxMessages count] > 0) {
[self _deleteMessages:toDeleteInboxMessages];
}
@@ -122,6 +132,27 @@ - (void)markReadMessageWithId:(NSString *)messageId {
}];
}
+- (void)markReadMessagesWithId:(NSArray *_Nonnull)messageIds {
+ [privateContext performBlock:^{
+ for (NSString *ids in messageIds) {
+ if (ids != nil && ![ids isEqualToString:@""]){
+ CTMessageMO *message = [self _messageForId:ids];
+ if (message) {
+ [message setValue:@YES forKey:@"isRead"];
+ }
+ else {
+ CleverTapLogStaticDebug(@"Cannot mark App Inbox Message as read because Message ID %@ is invalid.", ids);
+ }
+ }
+ else {
+ CleverTapLogStaticDebug(@"Cannot mark App Inbox Message as read because Message ID is null or not a string.");
+ }
+ }
+ [self _save];
+ [self notifyUpdate];
+ }];
+}
+
- (NSDictionary *)messageForId:(NSString *)messageId {
if (!self.isInitialized) return nil;
CTMessageMO *msg = [self _messageForId:messageId];
@@ -149,7 +180,7 @@ - (NSInteger)unreadCount {
BOOL hasMessages = ([[self.user.entity propertiesByName] objectForKey:@"messages"] != nil);
if (!hasMessages) return nil;
-
+
for (CTMessageMO *msg in self.user.messages) {
int ttl = (int)msg.expires;
if (ttl > 0 && now >= ttl) {
@@ -204,7 +235,7 @@ - (CTMessageMO *)_messageForId:(NSString *)messageId {
BOOL hasMessages = ([[self.user.entity propertiesByName] objectForKey:@"messages"] != nil);
if (!hasMessages) return nil;
-
+
NSOrderedSet *results = [self.user.messages filteredOrderedSetUsingPredicate:[NSPredicate predicateWithFormat:@"id == %@", messageId]];
BOOL existing = results && [results count] > 0;
return existing ? results[0] : nil;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.h
index 6a04c364..b97b1a6a 100755
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.h
@@ -6,7 +6,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface CTUserMO (CoreDataProperties)
-+ (instancetype)fetchOrCreateFromJSON:(NSDictionary *)json forContext:(NSManagedObjectContext *)context;
++ (instancetype _Nullable)fetchOrCreateFromJSON:(NSDictionary *)json forContext:(NSManagedObjectContext *)context;
- (BOOL)updateMessages:(NSArray *)messages forContext:(NSManagedObjectContext *)context;
@property (nullable, nonatomic, copy) NSString *accountId;
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.m
index d17d0896..ee0accc5 100755
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/Inbox/models/CTUserMO+CoreDataProperties.m
@@ -17,13 +17,13 @@ - (void)removeMessages:(NSOrderedSet *)values;
@implementation CTUserMO (CoreDataProperties)
-+ (instancetype)fetchOrCreateFromJSON:(NSDictionary *)json forContext:(NSManagedObjectContext *)context {
++ (instancetype _Nullable)fetchOrCreateFromJSON:(NSDictionary *)json forContext:(NSManagedObjectContext *)context {
CTUserMO *_user;
@try {
NSString *identifier = json[@"identifier"];
if (!identifier) {
- CleverTapLogStaticInternal(@"CTUserMO fetchOrCreate for: %@ requires an identifier returning nil", json);
+ CleverTapLogStaticInternal(@"CTUserMO fetchOrCreate for: %@ requires an identifier. Returning nil", json);
return nil;
}
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.h
new file mode 100644
index 00000000..bc82a659
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.h
@@ -0,0 +1,160 @@
+//
+// LeanplumCT.h
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 22.05.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CleverTap.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXPORT NSString *const LP_PURCHASE_EVENT;
+FOUNDATION_EXPORT NSString *const LP_STATE_PREFIX;
+FOUNDATION_EXPORT NSString *const LP_VALUE_PARAM_NAME;
+FOUNDATION_EXPORT NSString *const LP_INFO_PARAM_NAME;
+FOUNDATION_EXPORT NSString *const LP_CHARGED_EVENT_PARAM_NAME;
+FOUNDATION_EXPORT NSString *const LP_CURRENCY_CODE_PARAM_NAME;
+
+@interface LeanplumCT : NSObject
+
+@property (class) CleverTap *instance;
+
+/**
+ * @{
+ * Advances to a particular state in your application. The string can be
+ * any value of your choosing, and will show up in the dashboard.
+ * A state is a section of your app that the user is currently in.
+ * @param state The name of the state.
+ */
++ (void)advanceTo:(nullable NSString *)state
+NS_SWIFT_NAME(advance(state:));
+
+/**
+ * Advances to a particular state in your application. The string can be
+ * any value of your choosing, and will show up in the dashboard.
+ * A state is a section of your app that the user is currently in.
+ * @param state The name of the state.
+ * @param info Anything else you want to log with the state. For example, if the state
+ * is watchVideo, info could be the video ID.
+ */
++ (void)advanceTo:(nullable NSString *)state
+ withInfo:(nullable NSString *)info
+NS_SWIFT_NAME(advance(state:info:));
+
+/**
+ * Advances to a particular state in your application. The string can be
+ * any value of your choosing, and will show up in the dashboard.
+ * A state is a section of your app that the user is currently in.
+ * You can specify up to 200 types of parameters per app across all events and state.
+ * The parameter keys must be strings, and values either strings or numbers.
+ * @param state The name of the state.
+ * @param params A dictionary with custom parameters.
+ */
++ (void)advanceTo:(nullable NSString *)state
+ withParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(advance(state:params:));
+
+/**
+ * Advances to a particular state in your application. The string can be
+ * any value of your choosing, and will show up in the dashboard.
+ * A state is a section of your app that the user is currently in.
+ * You can specify up to 200 types of parameters per app across all events and state.
+ * The parameter keys must be strings, and values either strings or numbers.
+ * @param state The name of the state. (nullable)
+ * @param info Anything else you want to log with the state. For example, if the state
+ * is watchVideo, info could be the video ID.
+ * @param params A dictionary with custom parameters.
+ */
++ (void)advanceTo:(nullable NSString *)state
+ withInfo:(nullable NSString *)info
+ andParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(advance(state:info:params:));
+
+/**
+ * Sets additional user attributes after the session has started.
+ * Variables retrieved by start won't be targeted based on these attributes, but
+ * they will count for the current session for reporting purposes.
+ * Only those attributes given in the dictionary will be updated. All other
+ * attributes will be preserved.
+ */
++ (void)setUserAttributes:(NSDictionary *)attributes;
+
+/**
+ * Updates a user ID after session start.
+ */
++ (void)setUserId:(NSString *)userId
+NS_SWIFT_NAME(setUserId(_:));
+
+/**
+ * Updates a user ID after session start with a dictionary of user attributes.
+ */
++ (void)setUserId:(NSString *)userId withUserAttributes:(NSDictionary *)attributes
+NS_SWIFT_NAME(setUserId(_:attributes:));
+
+/**
+ * Sets the traffic source info for the current user.
+ * Keys in info must be one of: publisherId, publisherName, publisherSubPublisher,
+ * publisherSubSite, publisherSubCampaign, publisherSubAdGroup, publisherSubAd.
+ */
++ (void)setTrafficSourceInfo:(NSDictionary *)info
+NS_SWIFT_NAME(setTrafficSource(info:));
+
+/**
+ * Manually track purchase event with currency code in your application. It is advised to use
+ * trackInAppPurchases to automatically track IAPs.
+ */
++ (void)trackPurchase:(NSString *)event
+ withValue:(double)value
+ andCurrencyCode:(nullable NSString *)currencyCode
+ andParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(track(event:value:currencyCode:params:));
+/**@}*/
+
+/**
+ * @{
+ * Logs a particular event in your application. The string can be
+ * any value of your choosing, and will show up in the dashboard.
+ * To track a purchase, use LP_PURCHASE_EVENT.
+ */
++ (void)track:(NSString *)event;
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+NS_SWIFT_NAME(track(_:value:));
+
++ (void)track:(NSString *)event
+ withInfo:(nullable NSString *)info
+NS_SWIFT_NAME(track(_:info:));
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+ andInfo:(nullable NSString *)info
+NS_SWIFT_NAME(track(_:value:info:));
+
+// See above for the explanation of params.
++ (void)track:(NSString *)event withParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(track(_:params:));
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+andParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(track(_:value:params:));
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+ andInfo:(nullable NSString *)info
+andParameters:(nullable NSDictionary *)params
+NS_SWIFT_NAME(track(_:value:info:params:));
+/**@}*/
+
+/**
+ * Sets the log level of the CleverTap SDK.
+ */
++ (void)setLogLevel:(CleverTapLogLevel)level;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.m
new file mode 100644
index 00000000..007d4ca7
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.m
@@ -0,0 +1,206 @@
+//
+// LeanplumCT.m
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 22.05.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "LeanplumCT.h"
+#import "CTConstants.h"
+#import "CleverTapInstanceConfig.h"
+#import "NSDictionary+Extensions.h"
+
+NSString *const LP_PURCHASE_EVENT = @"Purchase";
+NSString *const LP_STATE_PREFIX = @"state_";
+NSString *const LP_VALUE_PARAM_NAME = @"value";
+NSString *const LP_INFO_PARAM_NAME = @"info";
+NSString *const LP_CHARGED_EVENT_PARAM_NAME = @"event";
+NSString *const LP_CURRENCY_CODE_PARAM_NAME = @"currencyCode";
+
+@implementation LeanplumCT
+
+static CleverTap * _instance;
++ (CleverTap *)instance {
+ if (!_instance) {
+ _instance = [CleverTap sharedInstance];
+ }
+ return _instance;
+}
+
++ (void)setInstance:(CleverTap *)instance {
+ _instance = instance;
+}
+
++ (void)advanceTo:(nullable NSString *)state {
+ [self advanceTo:state withInfo:nil];
+}
+
++ (void)advanceTo:(nullable NSString *)state
+ withInfo:(nullable NSString *)info {
+ [self advanceTo:state withInfo:info andParameters:nil];
+}
+
++ (void)advanceTo:(nullable NSString *)state
+ withParameters:(nullable NSDictionary *)params {
+ [self advanceTo:state withInfo:nil andParameters:params];
+}
+
++ (void)advanceTo:(nullable NSString *)state
+ withInfo:(nullable NSString *)info
+ andParameters:(nullable NSDictionary *)params {
+ if (!state) {
+ return;
+ }
+
+ NSString *eventName = [NSString stringWithFormat:@"%@%@", LP_STATE_PREFIX, state];
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.advance will call track with %@ and %@.", self, eventName, params);
+ [self track:eventName withValue:0.0 andInfo:info andParameters:params];
+}
+
++ (void)setUserAttributes:(NSDictionary *)attributes {
+ NSDictionary *profileAttributes = [[self transformArrayValuesInDictionary:attributes] dictionaryRemovingNullValues];
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.setUserAttributes will call profilePush with %@.", self, profileAttributes);
+ [[self instance] profilePush:profileAttributes];
+
+ for (NSString* key in attributes) {
+ id value = attributes[key];
+ if (!value || [value isEqual:[NSNull null]]) {
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.setUserAttributes will call profileRemoveValue forKey: %@.", self, key);
+ [[self instance] profileRemoveValueForKey:key];
+ }
+ }
+}
+
++ (void)setUserId:(NSString *)userId {
+ [self setUserId:userId withUserAttributes:@{}];
+}
+
++ (void)setUserId:(NSString *)userId withUserAttributes:(NSDictionary *)attributes {
+ if (userId) {
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.setUserId will call onUserLogin with %@: %@.", self, CLTAP_PROFILE_IDENTITY_KEY, userId);
+ [[self instance] onUserLogin:@{ CLTAP_PROFILE_IDENTITY_KEY: userId }];
+ }
+
+ if (attributes && [attributes count] > 0) {
+ [self setUserAttributes:attributes];
+ }
+}
+
++ (void)setTrafficSourceInfo:(NSDictionary *)info {
+ NSString* source = info[@"publisherName"];
+ NSString* medium = info[@"publisherSubPublisher"];
+ NSString* campaign = info[@"publisherSubCampaign"];
+
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.setTrafficSourceInfo will call pushInstallReferrerSource \
+ with %@, %@ and %@.", self, source, medium, campaign);
+ [[self instance] pushInstallReferrerSource:source medium:medium campaign:campaign];
+}
+
++ (void)trackPurchase:(NSString *)event
+ withValue:(double)value
+ andCurrencyCode:(nullable NSString *)currencyCode
+ andParameters:(nullable NSDictionary *)params {
+ if (!event) {
+ return;
+ }
+
+ NSMutableDictionary *details = [[self transformArrayValuesInDictionary:params] mutableCopy];
+ [details setObject:event forKey:LP_CHARGED_EVENT_PARAM_NAME];
+ [details setObject:@(value) forKey:LP_VALUE_PARAM_NAME];
+
+ if (currencyCode) {
+ [details setObject:currencyCode forKey:LP_CURRENCY_CODE_PARAM_NAME];
+ }
+ NSArray *items = @[];
+
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.trackPurchase will call will call recordChargedEvent \
+ with %@ and %@.", self, details, items);
+ [[self instance] recordChargedEventWithDetails:details andItems:items];
+}
+
++ (void)track:(NSString *)event {
+ [self track:event withValue:0.0 andInfo:nil andParameters:nil];
+}
+
++ (void)track:(NSString *)event
+ withValue:(double)value {
+ [self track:event withValue:value andInfo:nil andParameters:nil];
+}
+
++ (void)track:(NSString *)event
+ withInfo:(nullable NSString *)info {
+ [self track:event withValue:0.0 andInfo:info andParameters:nil];
+}
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+ andInfo:(nullable NSString *)info {
+ [self track:event withValue:value andInfo:info andParameters:nil];
+}
+
++ (void)track:(NSString *)event withParameters:(nullable NSDictionary *)params {
+ [self track:event withValue:0.0 andInfo:nil andParameters:params];
+}
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+andParameters:(nullable NSDictionary *)params {
+ [self track:event withValue:value andInfo:nil andParameters:params];
+}
+
++ (void)track:(NSString *)event
+ withValue:(double)value
+ andInfo:(nullable NSString *)info
+andParameters:(nullable NSDictionary *)params {
+ if (!event) {
+ return;
+ }
+
+ NSMutableDictionary *eventParams = [[self transformArrayValuesInDictionary:params] mutableCopy];
+ [eventParams setObject:@(value) forKey:LP_VALUE_PARAM_NAME];
+
+ if (info) {
+ [eventParams setObject:info forKey:LP_INFO_PARAM_NAME];
+ }
+
+ CleverTapLogDebug(self.instance.config.logLevel,
+ @"%@: LeanplumCT.track will call recordEvent \
+ with %@ and %@.", self, event, eventParams);
+ [[self instance] recordEvent:event withProps:eventParams];
+}
+
++ (void)setLogLevel:(CleverTapLogLevel)level {
+ [CleverTap setDebugLevel:level];
+ [[[self instance] config] setLogLevel:level];
+}
+
+/**
+ * Transforms NSArray values to NSString in format @"[component0, component1]".
+ * @param dictionary The dictionary which values to transform.
+ */
++ (NSDictionary *)transformArrayValuesInDictionary:(NSDictionary *)dictionary {
+ return [dictionary dictionaryWithTransformUsingBlock:^id _Nonnull(id _Nonnull value) {
+ if ([value isKindOfClass:[NSArray class]]) {
+ NSArray *array = (NSArray *)value;
+ NSArray *filteredArray =
+ [array filteredArrayUsingPredicate:
+ [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
+ return evaluatedObject && ![evaluatedObject isEqual:[NSNull null]];
+ }]];
+ NSArray *stringArray = [filteredArray valueForKey:@"description"];
+ NSString *joinedString = [stringArray componentsJoinedByString:@","];
+ NSString *result = [NSString stringWithFormat:@"[%@]", joinedString];
+ return result;
+ }
+ return value;
+ }];
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.h
new file mode 100644
index 00000000..9d427fe5
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.h
@@ -0,0 +1,38 @@
+//
+// NSDictionary+Extensions.h
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 5.06.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSDictionary (Extensions)
+
+/**
+ * Uses NSJSONSerialization. NSDate values will be removed from the result.
+ * @return the NSString JSON representation using UTF8 encoding.
+ */
+- (NSString *)toJsonString;
+
+/**
+ * Executes the block on each dictionary value and returns a new NSDictionary.
+ * Does not deep copy the current dictionary. If the value is mutable and modified in the block,
+ * this will modify the current dictionary value.
+ * @param block the block to execute on each value.
+ * @return new NSDictionary with the transformed values.
+ */
+- (NSDictionary *)dictionaryWithTransformUsingBlock:(id(^)(id))block;
+
+/**
+ * Removes `NSNull` values and returns a new dictionary. Current dictionary is unmodified.
+ * @return new NSDictionary without `NSNull` values.
+ */
+- (NSDictionary *)dictionaryRemovingNullValues;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.m
new file mode 100644
index 00000000..473bd65e
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.m
@@ -0,0 +1,60 @@
+//
+// NSDictionary+Extensions.m
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 5.06.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "NSDictionary+Extensions.h"
+
+@implementation NSDictionary (Extensions)
+
+- (NSString *)toJsonString {
+ if (self == nil) return nil;
+
+ NSData *jsonData;
+ @try {
+ NSError *error;
+ NSMutableDictionary *_cleaned = [NSMutableDictionary new];
+
+ for (NSString *key in self) {
+ id value = self[key];
+ if ([value isKindOfClass:[NSDate class]]) {
+ continue;
+ }
+ _cleaned[key] = value;
+ }
+
+ jsonData = [NSJSONSerialization dataWithJSONObject:_cleaned
+ options:0
+ error:&error];
+
+ return jsonData != nil ? [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] : nil;
+
+ } @catch (NSException *e) {
+ return nil;
+ }
+}
+
+- (NSDictionary *)dictionaryWithTransformUsingBlock:(id(^)(id))block {
+ NSMutableDictionary *result = [NSMutableDictionary dictionary];
+
+ [self enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
+ // If the value is mutable and modified in the block,
+ // this will modify the original dictionary value
+ id transformedValue = block(value);
+ result[key] = transformedValue;
+ }];
+
+ return [result copy];
+}
+
+- (NSDictionary *)dictionaryRemovingNullValues {
+ NSSet *keys = [self keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop){
+ return obj && ![obj isEqual:[NSNull null]];
+ }];
+ return [self dictionaryWithValuesForKeys:[keys allObjects]];
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductConfig/controllers/CTProductConfigController.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductConfig/controllers/CTProductConfigController.m
index bfde4a3c..e1870d66 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductConfig/controllers/CTProductConfigController.m
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductConfig/controllers/CTProductConfigController.m
@@ -1,7 +1,6 @@
#import "CTProductConfigController.h"
#import "CTConstants.h"
#import "CTPreferences.h"
-#import "CTPreferences.h"
#import "CleverTapInstanceConfig.h"
#import "CleverTapProductConfigPrivate.h"
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar-Internal.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar-Internal.h
new file mode 100644
index 00000000..10954bc5
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar-Internal.h
@@ -0,0 +1,31 @@
+#import "CTVar.h"
+@class CTVarCache;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CTVar ()
+
+- (instancetype)initWithName:(NSString *)name
+ withDefaultValue:(NSObject *)defaultValue
+ withKind:(NSString *)kind
+ varCache:(CTVarCache *)cache;
+
+@property (readonly, strong) CTVarCache *varCache;
+@property (readonly, strong) NSString *name;
+@property (readonly, strong) NSArray *nameComponents;
+@property (readonly) BOOL hadStarted;
+@property (readonly, strong) NSString *kind;
+@property (readonly, strong) NSMutableArray *valueChangedBlocks;
+@property (nonatomic, unsafe_unretained, nullable) id delegate;
+@property (readonly) BOOL hasChanged;
+
+- (void)update;
+- (void)cacheComputedValues;
+- (void)triggerValueChanged;
+
++ (BOOL)printedCallbackWarning;
++ (void)setPrintedCallbackWarning:(BOOL)newPrintedCallbackWarning;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.h
new file mode 100644
index 00000000..8c347875
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.h
@@ -0,0 +1,108 @@
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^CleverTapVariablesChangedBlock)(void);
+typedef void (^CleverTapFetchVariablesBlock)(BOOL success);
+
+@class CTVar;
+/**
+ * Receives callbacks for {@link CTVar}
+ */
+NS_SWIFT_NAME(VarDelegate)
+@protocol CTVarDelegate
+@optional
+/**
+ * Called when the value of the variable changes.
+ */
+- (void)valueDidChange:(CTVar *)variable;
+@end
+
+/**
+ * A variable is any part of your application that can change from an experiment.
+ * Check out {@link Macros the macros} for defining variables more easily.
+ */
+NS_SWIFT_NAME(Var)
+@interface CTVar : NSObject
+
+@property (readonly, strong, nullable) NSString *stringValue;
+@property (readonly, strong, nullable) NSNumber *numberValue;
+@property (readonly, strong, nullable) id value;
+@property (readonly, strong, nullable) id defaultValue;
+
+/**
+ * @{
+ * Defines a {@link LPVar}
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ * Returns the name of the variable.
+ */
+- (NSString *)name;
+
+/**
+ * Returns the components of the variable's name.
+ */
+- (NSArray *)nameComponents;
+
+/**
+ * Returns the default value of a variable.
+ */
+- (nullable id)defaultValue;
+
+/**
+ * Returns the kind of the variable.
+ */
+- (NSString *)kind;
+
+/**
+ * Returns whether the variable has changed since the last time the app was run.
+ */
+- (BOOL)hasChanged;
+
+/**
+ * Called when the value of the variable changes.
+ */
+- (void)onValueChanged:(CleverTapVariablesChangedBlock)block;
+
+/**
+ * Sets the delegate of the variable in order to use
+ * {@link CTVarDelegate::valueDidChange:}
+ */
+- (void)setDelegate:(nullable id )delegate;
+
+- (void)clearState;
+
+/**
+ * @{
+ * Accessess the value(s) of the variable
+ */
+- (id)objectForKey:(nullable NSString *)key;
+- (id)objectAtIndex:(NSUInteger )index;
+- (id)objectForKeyPath:(nullable id)firstComponent, ... NS_REQUIRES_NIL_TERMINATION;
+- (id)objectForKeyPathComponents:(nullable NSArray *)pathComponents;
+
+- (nullable NSNumber *)numberValue;
+- (nullable NSString *)stringValue;
+- (int)intValue;
+- (double)doubleValue;
+- (CGFloat)cgFloatValue;
+- (float)floatValue;
+- (short)shortValue;
+- (BOOL)boolValue;
+- (char)charValue;
+- (long)longValue;
+- (long long)longLongValue;
+- (NSInteger)integerValue;
+- (unsigned char)unsignedCharValue;
+- (unsigned short)unsignedShortValue;
+- (unsigned int)unsignedIntValue;
+- (NSUInteger)unsignedIntegerValue;
+- (unsigned long)unsignedLongValue;
+- (unsigned long long)unsignedLongLongValue;
+/**@}*/
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.m
new file mode 100644
index 00000000..53499d53
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.m
@@ -0,0 +1,224 @@
+#import "CTVar-Internal.h"
+#import "CTVarCache.h"
+#import "CTConstants.h"
+
+static BOOL LPVAR_PRINTED_CALLBACK_WARNING = NO;
+
+@interface CTVar (PrivateProperties)
+@property (nonatomic, strong) CTVarCache *varCache;
+@property (nonatomic, strong) NSString *name;
+@property (nonatomic, strong) NSArray *nameComponents;
+@property (nonatomic, strong) NSString *stringValue;
+@property (nonatomic, strong) NSNumber *numberValue;
+@property (nonatomic) BOOL hadStarted;
+@property (nonatomic, strong) id value;
+@property (nonatomic, strong) id defaultValue;
+@property (nonatomic, strong) NSString *kind;
+@property (nonatomic, strong) NSMutableArray *valueChangedBlocks;
+@property (nonatomic) BOOL hasChanged;
+@end
+
+@implementation CTVar
+
+- (instancetype)initWithName:(NSString *)name withDefaultValue:(NSNumber *)defaultValue
+ withKind:(NSString *)kind varCache:(CTVarCache *)cache
+{
+ self = [super init];
+ if (self) {
+ CT_TRY
+ _name = name;
+ self.varCache = cache;
+ _nameComponents = [self.varCache getNameComponents:name];
+ _defaultValue = defaultValue;
+ _value = defaultValue;
+ _kind = kind;
+ [self cacheComputedValues];
+
+ [self.varCache registerVariable:self];
+
+ [self update];
+ CT_END_TRY
+ }
+ return self;
+}
+
+// Manually @synthesize since CTVar provides custom getters/setters
+// Properties are defined as readonly in CTVar-Internal
+// and readwrite in PrivateProperties category
+@synthesize stringValue = _stringValue;
+@synthesize numberValue = _numberValue;
+@synthesize varCache = _varCache;
+
+- (CTVarCache *)varCache {
+ return _varCache;
+}
+
+- (void)setVarCache:(CTVarCache *)varCache {
+ _varCache = varCache;
+}
+
+#pragma mark Updates
+
+- (void) cacheComputedValues {
+ // Cache computed values.
+ if ([_value isKindOfClass:NSString.class]) {
+ _stringValue = (NSString *) _value;
+ _numberValue = [NSNumber numberWithDouble:[_stringValue doubleValue]];
+ } else if ([_value isKindOfClass:NSNumber.class]) {
+ _stringValue = [NSString stringWithFormat:@"%@", _value];
+ _numberValue = (NSNumber *) _value;
+ } else {
+ _stringValue = nil;
+ _numberValue = nil;
+ }
+}
+
+- (void)update {
+ NSObject *oldValue = _value;
+ _value = [self.varCache getMergedValueFromComponentArray:_nameComponents];
+
+ if ([_value isEqual:oldValue] && _hadStarted) {
+ return;
+ }
+ [self cacheComputedValues];
+
+ if (![_value isEqual:oldValue]) {
+ _hasChanged = YES;
+ }
+
+ if ([[self varCache] hasVarsRequestCompleted]) {
+ [self triggerValueChanged];
+ _hadStarted = YES;
+ }
+}
+
+#pragma mark Callbacks
+
+- (void)triggerValueChanged {
+ if (self.delegate &&
+ [self.delegate respondsToSelector:@selector(valueDidChange:)]) {
+ [self.delegate valueDidChange:self];
+ }
+
+ for (CleverTapVariablesChangedBlock block in _valueChangedBlocks.copy) {
+ block();
+ }
+}
+
+- (void)onValueChanged:(CleverTapVariablesChangedBlock)block {
+ if (!block) {
+ CleverTapLogStaticDebug(@"Nil block parameter provided while calling [CTVar onValueChanged].");
+ return;
+ }
+
+ CT_TRY
+ if (!_valueChangedBlocks) {
+ _valueChangedBlocks = [NSMutableArray array];
+ }
+ [_valueChangedBlocks addObject:[block copy]];
+ if ([[self varCache] hasVarsRequestCompleted]) {
+ [self triggerValueChanged];
+ }
+ CT_END_TRY
+}
+
+- (void)setDelegate:(id)delegate {
+ CT_TRY
+ _delegate = delegate;
+ if ([[self varCache] hasVarsRequestCompleted]) {
+ [self triggerValueChanged];
+ }
+ CT_END_TRY
+}
+
+#pragma mark Dictionary handling
+
+- (id) objectForKey:(NSString *)key {
+ return [self objectForKeyPath:key, nil];
+}
+
+- (id) objectAtIndex:(NSUInteger)index {
+ return [self objectForKeyPath:@(index), nil];
+}
+
+- (id) objectForKeyPath:(id)firstComponent, ... {
+ CT_TRY
+ [self warnIfNotStarted];
+ NSMutableArray *components = [_nameComponents mutableCopy];
+ va_list args;
+ va_start(args, firstComponent);
+ for (id component = firstComponent;
+ component != nil; component = va_arg(args, id)) {
+ [components addObject:component];
+ }
+ va_end(args);
+ return [self.varCache getMergedValueFromComponentArray:components];
+ CT_END_TRY
+ return nil;
+}
+
+- (id)objectForKeyPathComponents:(NSArray *)pathComponents {
+ CT_TRY
+ [self warnIfNotStarted];
+ NSMutableArray *components = [_nameComponents mutableCopy];
+ [components addObjectsFromArray:pathComponents];
+ return [self.varCache getMergedValueFromComponentArray:components];
+ CT_END_TRY
+ return nil;
+}
+
+#pragma mark Value accessors
+
+- (NSNumber *)numberValue {
+ [self warnIfNotStarted];
+ return _numberValue;
+}
+
+- (NSString *)stringValue {
+ [self warnIfNotStarted];
+ return _stringValue;
+}
+
+- (int)intValue { return [[self numberValue] intValue]; }
+- (double)doubleValue { return [[self numberValue] doubleValue];}
+- (float)floatValue { return [[self numberValue] floatValue]; }
+- (CGFloat)cgFloatValue { return [[self numberValue] doubleValue]; }
+- (short)shortValue { return [[self numberValue] shortValue];}
+- (BOOL)boolValue { return [[self numberValue] boolValue]; }
+- (char)charValue { return [[self numberValue] charValue]; }
+- (long)longValue { return [[self numberValue] longValue]; }
+- (long long)longLongValue { return [[self numberValue] longLongValue]; }
+- (NSInteger)integerValue { return [[self numberValue] integerValue]; }
+- (unsigned char)unsignedCharValue { return [[self numberValue] unsignedCharValue]; }
+- (unsigned short)unsignedShortValue { return [[self numberValue] unsignedShortValue]; }
+- (unsigned int)unsignedIntValue { return [[self numberValue] unsignedIntValue]; }
+- (NSUInteger)unsignedIntegerValue { return [[self numberValue] unsignedIntegerValue]; }
+- (unsigned long)unsignedLongValue { return [[self numberValue] unsignedLongValue]; }
+- (unsigned long long)unsignedLongLongValue { return [[self numberValue] unsignedLongLongValue]; }
+
+#pragma mark Utils
+
++ (BOOL)printedCallbackWarning {
+ return LPVAR_PRINTED_CALLBACK_WARNING;
+}
+
++ (void)setPrintedCallbackWarning:(BOOL)newPrintedCallbackWarning {
+ LPVAR_PRINTED_CALLBACK_WARNING = newPrintedCallbackWarning;
+}
+
+- (void)warnIfNotStarted {
+ if (!self.varCache.hasVarsRequestCompleted && ![CTVar printedCallbackWarning]) {
+ CleverTapLogDebug(self.varCache.config.logLevel, @"%@: CleverTap hasn't finished retrieving values from the server. You "
+ @"should use a callback to make sure the value for '%@' is ready. Otherwise, your "
+ @"app may not use the most up-to-date value.", self, self.name);
+
+ [CTVar setPrintedCallbackWarning:YES];
+ }
+}
+
+- (void)clearState {
+ _hadStarted = NO;
+ _hasChanged = NO;
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.h
new file mode 100644
index 00000000..9a8a7996
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.h
@@ -0,0 +1,35 @@
+#import
+#import "CTVar-Internal.h"
+#import "CleverTapInstanceConfig.h"
+#import "CTDeviceInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^CacheUpdateBlock)(void);
+
+NS_SWIFT_NAME(VarCache)
+@interface CTVarCache : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config deviceInfo: (CTDeviceInfo*)deviceInfo;
+
+@property (nonatomic, strong, readonly) CleverTapInstanceConfig *config;
+@property (strong, nonatomic) NSMutableDictionary *vars;
+@property (assign, nonatomic) BOOL hasVarsRequestCompleted;
+
+- (nullable NSDictionary *)diffs;
+- (void)loadDiffs;
+- (void)applyVariableDiffs:(nullable NSDictionary *)diffs_;
+
+- (void)registerVariable:(CTVar *)var;
+- (nullable CTVar *)getVariable:(NSString *)name;
+- (id)getMergedValue:(NSString *)name;
+
+- (NSArray *)getNameComponents:(NSString *)name;
+- (nullable id)getMergedValueFromComponentArray:(NSArray *) components;
+- (void)clearUserContent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.m
new file mode 100644
index 00000000..959ccc9f
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.m
@@ -0,0 +1,264 @@
+#import "CTVarCache.h"
+#import "CTUtils.h"
+#import "CTConstants.h"
+#import "CTPreferences.h"
+#import "ContentMerger.h"
+
+@interface CTVarCache()
+@property (strong, nonatomic) NSMutableDictionary *valuesFromClient;
+@property (strong, nonatomic) id merged;
+@property (strong, nonatomic) NSDictionary *diffs;
+
+@property (strong, nonatomic) CacheUpdateBlock updateBlock;
+@property (nonatomic, strong) CleverTapInstanceConfig *config;
+@property (nonatomic, strong) CTDeviceInfo *deviceInfo;
+@end
+
+@implementation CTVarCache
+
+- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config deviceInfo: (CTDeviceInfo*)deviceInfo {
+ if ((self = [super init])) {
+ self.config = config;
+ self.deviceInfo = deviceInfo;
+ [self initialize];
+ }
+ return self;
+}
+
+- (void)initialize {
+ self.vars = [NSMutableDictionary dictionary];
+ self.diffs = [NSMutableDictionary dictionary];
+ self.valuesFromClient = [NSMutableDictionary dictionary];
+ self.hasVarsRequestCompleted = NO;
+}
+
+- (NSArray *)getNameComponents:(NSString *)name {
+ NSArray *nameComponents = [name componentsSeparatedByString:@"."];
+ return nameComponents;
+}
+
+- (id)traverse:(id)collection withKey:(id)key autoInsert:(BOOL)autoInsert {
+ id result = nil;
+ if ([collection respondsToSelector:@selector(objectForKey:)]) {
+ result = [collection objectForKey:key];
+ if (autoInsert && !result && [key isKindOfClass:NSString.class]) {
+ result = [NSMutableDictionary dictionary];
+ [collection setObject:result forKey:key];
+ }
+ }
+
+ if ([result isKindOfClass:[NSNull class]]) {
+ return nil;
+ }
+
+ return result;
+}
+
+// Updates a JSON structure of variable values
+- (void)updateValues:(NSString *)name
+ nameComponents:(NSArray *)nameComponents
+ value:(id)value
+ values:(NSMutableDictionary *)values
+{
+ if (value) {
+ id valuesPtr = values;
+ for (int i = 0; i < nameComponents.count - 1; i++) {
+ valuesPtr = [self traverse:valuesPtr withKey:nameComponents[i] autoInsert:YES];
+ }
+
+ // Make the value mutable. That way, if we add a dictionary variable,
+ // we can still add subvariables.
+ if ([value isKindOfClass:NSDictionary.class] &&
+ [value class] != [NSMutableDictionary class]) {
+ value = [NSMutableDictionary dictionaryWithDictionary:value];
+ }
+
+ // Do not override variable dictionary values. If value is dictionary and
+ // already registered variable value is a dictionary, merge them.
+ // If values are not dictionaries, check if value from another variable will be overridden and log it.
+ id currentValue = valuesPtr[nameComponents.lastObject];
+ if (currentValue && [currentValue isKindOfClass:NSDictionary.class] && [value isKindOfClass:NSMutableDictionary.class]) {
+ // Merge all entries from both dictionaries. NSMutableDictionary addEntriesFromDictionary: will not work for nested dictionaries.
+ value = [ContentMerger mergeWithVars:value diff:currentValue];
+ } else if (currentValue && ![currentValue isEqual:value]) {
+ CleverTapLogInfo(self.config.logLevel, @"%@: Variable with name: %@ will override value: %@, with new value: %@.", self, name, currentValue, value);
+ }
+
+ [valuesPtr setObject:value forKey:nameComponents.lastObject];
+ }
+}
+
+// Merge default variable value with VarCache.merged value
+// This is neccessary if variable was registered after VarCache.applyVariableDiffs
+- (void)mergeVariable:(CTVar * _Nonnull)var {
+ if (!self.merged || ![self.merged isKindOfClass:[NSMutableDictionary class]]) {
+ return;
+ }
+
+ NSString *firstComponent = var.nameComponents.firstObject;
+ id defaultValue = [self.valuesFromClient objectForKey:firstComponent];
+ id mergedValue = [self.merged objectForKey:firstComponent];
+
+ BOOL shouldMerge = (!defaultValue && mergedValue) ||
+ (defaultValue && ![defaultValue isEqual:mergedValue]);
+ if (shouldMerge) {
+ id newValue = [ContentMerger mergeWithVars:defaultValue diff:mergedValue];
+ if (newValue == nil) {
+ return;
+ }
+ [self.merged setObject:newValue forKey:firstComponent];
+
+ NSMutableString *name = [[NSMutableString alloc] initWithString:firstComponent];
+ for (int i = 1; i < var.nameComponents.count; i++)
+ {
+ CTVar *existingVar = self.vars[name];
+ if (existingVar) {
+ [existingVar update];
+ break;
+ }
+ [name appendFormat:@".%@", var.nameComponents[i]];
+ }
+ }
+}
+
+- (void)registerVariable:(CTVar *)var {
+ [self.vars setObject:var forKey:var.name];
+
+ [self updateValues:var.name
+ nameComponents:var.nameComponents
+ value:var.defaultValue
+ values:self.valuesFromClient];
+
+ [self mergeVariable:var];
+}
+
+- (CTVar *)getVariable:(NSString *)name {
+ return [self.vars objectForKey:name];
+}
+
+- (id)getMergedValue:(NSString *)name {
+ NSArray *components = [self getNameComponents:name];
+ id value = [self getMergedValueFromComponentArray:components];
+ if ([value conformsToProtocol:@protocol(NSCopying)] && [value respondsToSelector:@selector(copyWithZone:)]) {
+ if ([value respondsToSelector:@selector(mutableCopyWithZone:)]) {
+ return [value mutableCopy];
+ }
+ return [value copy];
+ }
+
+ return value;
+}
+
+- (id)getValueFromComponentArray:(NSArray *) components fromDict:(NSDictionary *)values {
+ id mergedPtr = values;
+ for (id component in components) {
+ mergedPtr = [self traverse:mergedPtr withKey:component autoInsert:NO];
+ }
+ return mergedPtr;
+}
+
+- (id)getMergedValueFromComponentArray:(NSArray *)components {
+ return [self getValueFromComponentArray:components fromDict:self.merged ? self.merged : self.valuesFromClient];
+}
+
+- (void)loadDiffs {
+ @try {
+ NSString *fileName = [self dataArchiveFileName];
+ NSString *filePath = [CTPreferences filePathfromFileName:fileName];
+ NSData *diffsData = [NSData dataWithContentsOfFile:filePath];
+ if (!diffsData) {
+ [self applyVariableDiffs:@{}];
+ return;
+ }
+ NSKeyedUnarchiver *unarchiver;
+ if (@available(iOS 12.0, *)) {
+ NSError *error = nil;
+ unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:diffsData error:&error];
+ if (error != nil) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Error while loading variables: %@", self, error.localizedDescription);
+ return;
+ }
+ unarchiver.requiresSecureCoding = NO;
+ } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:diffsData];
+#pragma clang diagnostic pop
+ }
+ NSDictionary *diffs = (NSDictionary *) [unarchiver decodeObjectForKey:CLEVERTAP_DEFAULTS_VARIABLES_KEY];
+
+ [self applyVariableDiffs:diffs];
+ } @catch (NSException *exception) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Error while loading variables: %@", self, exception.debugDescription);
+ }
+}
+
+- (void)saveDiffs {
+ // Stores the variables on the device in case we don't have a connection.
+ // Restores next time when the app is opened.
+ // Diffs need to be locked incase other thread changes the diffs
+ @synchronized (self.diffs) {
+ NSMutableData *diffsData = [[NSMutableData alloc] init];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:diffsData];
+#pragma clang diagnostic pop
+ [archiver encodeObject:self.diffs forKey:CLEVERTAP_DEFAULTS_VARIABLES_KEY];
+ [archiver finishEncoding];
+
+ NSError *writeError = nil;
+ NSString *fileName = [self dataArchiveFileName];
+ NSString *filePath = [CTPreferences filePathfromFileName:fileName];
+ [diffsData writeToFile:filePath options:NSDataWritingAtomic error:&writeError];
+ if (writeError) {
+ CleverTapLogStaticInternal(@"%@ failed to write data at %@: %@", self, filePath, writeError);
+ }
+ }
+}
+
+- (NSString*)dataArchiveFileName {
+ return [NSString stringWithFormat:@"clevertap-%@-%@-pe-vars.plist", _config.accountId, _deviceInfo.deviceId];
+}
+
+- (void)applyVariableDiffs:(NSDictionary *)diffs_ {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Applying Variables: %@", self, diffs_);
+ @synchronized (self.vars) {
+ // Prevent overriding variables if API returns null
+ // If no variables are defined, API returns {}
+ if (diffs_ != nil && ![diffs_ isEqual:[NSNull null]]) {
+ self.diffs = diffs_;
+
+ // We need to lock it in case multiple threads will be accessing this.
+ @synchronized (self.diffs) {
+ self.merged = [ContentMerger mergeWithVars:self.valuesFromClient diff:self.diffs];
+ }
+
+ // Update variables with new values.
+ // Have to extract the keys because a dictionary variable may add a new sub-variable,
+ // modifying the variable dictionary.
+ for (NSString *name in [self.vars allKeys]) {
+ [self.vars[name] update];
+ }
+ } else {
+ CleverTapLogDebug(self.config.logLevel, @"%@: No variables received from the server", self);
+ }
+
+ // Do NOT save diffs when loading from cache
+ // Load diffs is called before vars request has been sent
+ if (self.hasVarsRequestCompleted) {
+ [self saveDiffs];
+ }
+ }
+}
+
+- (void)clearUserContent {
+ // Disable callbacks and wait until fetch is finished
+ [self setHasVarsRequestCompleted:NO];
+ // Clear Var state to allow callback invocation when server values are downloaded
+ [self.vars enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
+ CTVar *var = (CTVar *)obj;
+ [var clearState];
+ }];
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.h
new file mode 100644
index 00000000..251d23fa
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.h
@@ -0,0 +1,40 @@
+//
+// CTVariables.h
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 12.03.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+#import "CTVarCache.h"
+#import "CleverTapInstanceConfig.h"
+#import "CTDeviceInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CTVariables : NSObject
+
+@property(strong, nonatomic) CTVarCache *varCache;
+@property(strong, nonatomic, nullable) CleverTapFetchVariablesBlock fetchVariablesBlock;
+
+- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config deviceInfo: (CTDeviceInfo *)deviceInfo;
+
+- (CTVar *)define:(NSString *)name
+ with:(nullable NSObject *)defaultValue
+ kind:(nullable NSString *)kind
+NS_SWIFT_NAME(define(name:value:kind:));
+
+- (void)handleVariablesResponse:(NSDictionary *)varsResponse;
+- (void)handleVariablesError;
+- (void)triggerFetchVariables:(BOOL)success;
+- (void)onVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull)block;
+- (void)onceVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull)block;
+- (NSDictionary*)flatten:(NSDictionary*)map varName:(NSString*)varName;
+- (NSDictionary*)varsPayload;
+- (NSDictionary*)unflatten:(NSDictionary*)result;
+- (void)clearUserContent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.m
new file mode 100644
index 00000000..fc607283
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.m
@@ -0,0 +1,255 @@
+//
+// CTVariables.m
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 12.03.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "CTVariables.h"
+#import "CTConstants.h"
+#import "CTUtils.h"
+
+@interface CTVariables()
+@property (nonatomic, strong) CleverTapInstanceConfig *config;
+@property (nonatomic, strong) CTDeviceInfo *deviceInfo;
+
+@property(strong, nonatomic) NSMutableArray *variablesChangedBlocks;
+@property(strong, nonatomic) NSMutableArray *onceVariablesChangedBlocks;
+
+@end
+
+@implementation CTVariables
+
+- (instancetype)initWithConfig:(CleverTapInstanceConfig *)config deviceInfo: (CTDeviceInfo*)deviceInfo {
+ if ((self = [super init])) {
+ self.varCache = [[CTVarCache alloc] initWithConfig:config deviceInfo:deviceInfo];
+ }
+ return self;
+}
+
+#pragma mark Define Var
+- (CTVar *)define:(NSString *)name with:(NSObject *)defaultValue kind:(NSString *)kind {
+ if ([CTUtils isNullOrEmpty:name]) {
+ CleverTapLogDebug(_config.logLevel, @"%@: Empty name provided as parameter while defining a variable.", self);
+ return nil;
+ }
+
+ if ([name hasPrefix:@"."] || [name hasSuffix:@"."]) {
+ CleverTapLogDebug(_config.logLevel, @"%@: Variable name starts or ends with a `.` which is not allowed.", self);
+ return nil;
+ }
+
+ @synchronized (self.varCache.vars) {
+ CT_TRY
+ CTVar *existing = [self.varCache getVariable:name];
+ if (existing) {
+ return existing;
+ }
+ CT_END_TRY
+ CTVar *var = [[CTVar alloc] initWithName:name
+ withDefaultValue:defaultValue
+ withKind:kind
+ varCache:self.varCache];
+ return var;
+ }
+}
+
+#pragma mark Handle Response
+- (void)handleVariablesResponse:(NSDictionary *)varsResponse {
+ if (varsResponse) {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Handle Variables Response with: %@", self, varsResponse);
+ [[self varCache] setHasVarsRequestCompleted:YES];
+ NSDictionary *values = [self unflatten:varsResponse];
+ [[self varCache] applyVariableDiffs:values];
+ [self triggerVariablesChanged];
+ [self triggerFetchVariables:YES];
+ }
+}
+
+- (void)handleVariablesError {
+ CleverTapLogDebug(self.config.logLevel, @"%@: Handle Variables Error", self);
+ if (![[self varCache] hasVarsRequestCompleted]) {
+ [[self varCache] setHasVarsRequestCompleted:YES];
+ // Ensure variables are loaded from cache. Triggers individual Vars update.
+ [[self varCache] loadDiffs];
+ [self triggerVariablesChanged];
+ }
+
+ if (self.fetchVariablesBlock) {
+ [self triggerFetchVariables:NO];
+ }
+}
+
+- (void)clearUserContent {
+ [self.varCache clearUserContent];
+}
+
+#pragma mark Triggers
+- (void)triggerFetchVariables:(BOOL)success {
+ if (self.fetchVariablesBlock) {
+ CleverTapFetchVariablesBlock block = [self.fetchVariablesBlock copy];
+ if (![NSThread isMainThread]) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ block(success);
+ });
+ } else {
+ block(success);
+ }
+ // The callback will be overridden by subsequent fetch call,
+ // if the first one has not completed yet.
+ // Callback cannot be attached to an individual fetch request, only to the queue batch.
+ self.fetchVariablesBlock = nil;
+ }
+}
+
+- (void)triggerVariablesChanged {
+ if (![NSThread isMainThread]) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self triggerVariablesChanged];
+ });
+ return;
+ }
+
+ for (CleverTapVariablesChangedBlock block in self.variablesChangedBlocks.copy) {
+ block();
+ }
+
+ NSArray *onceBlocksCopy;
+ @synchronized (self.onceVariablesChangedBlocks) {
+ onceBlocksCopy = self.onceVariablesChangedBlocks.copy;
+ [self.onceVariablesChangedBlocks removeAllObjects];
+ }
+ for (CleverTapVariablesChangedBlock block in onceBlocksCopy) {
+ block();
+ }
+}
+
+- (void)onVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull)block {
+ if (!block) {
+ CleverTapLogStaticDebug(@"Nil block parameter provided while calling [CleverTap onVariablesChanged].");
+ return;
+ }
+
+ CT_TRY
+ if (!self.variablesChangedBlocks) {
+ self.variablesChangedBlocks = [NSMutableArray array];
+ }
+ [self.variablesChangedBlocks addObject:[block copy]];
+ CT_END_TRY
+
+ if ([self.varCache hasVarsRequestCompleted]) {
+ block();
+ }
+}
+
+- (void)onceVariablesChanged:(CleverTapVariablesChangedBlock _Nonnull)block {
+ if (!block) {
+ CleverTapLogStaticDebug(@"Nil block parameter provided while calling [CleverTap onceVariablesChanged].");
+ return;
+ }
+
+ if ([self.varCache hasVarsRequestCompleted]) {
+ block();
+ } else {
+ CT_TRY
+ static dispatch_once_t onceBlocksToken;
+ dispatch_once(&onceBlocksToken, ^{
+ self.onceVariablesChangedBlocks = [NSMutableArray array];
+ });
+ @synchronized (self.onceVariablesChangedBlocks) {
+ [self.onceVariablesChangedBlocks addObject:[block copy]];
+ }
+ CT_END_TRY
+ }
+}
+
+#pragma mark Vars Payload
+- (NSDictionary*)varsPayload {
+ NSMutableDictionary *payload = [NSMutableDictionary dictionary];
+ payload[@"type"] = CT_PE_VARS_PAYLOAD_TYPE;
+
+ NSMutableDictionary *allVars = [NSMutableDictionary dictionary];
+
+ [self.varCache.vars
+ enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, CTVar * _Nonnull variable, BOOL * _Nonnull stop) {
+
+ NSMutableDictionary *varData = [NSMutableDictionary dictionary];
+
+ if ([variable.defaultValue isKindOfClass:[NSDictionary class]]) {
+ NSDictionary *flattenedMap = [self flatten:variable.defaultValue varName:variable.name];
+ [allVars addEntriesFromDictionary:flattenedMap];
+ }
+ else {
+ if ([variable.kind isEqualToString:CT_KIND_INT] || [variable.kind isEqualToString:CT_KIND_FLOAT]) {
+ varData[CT_PE_VAR_TYPE] = CT_PE_NUMBER_TYPE;
+ }
+ else if ([variable.kind isEqualToString:CT_KIND_BOOLEAN]) {
+ varData[CT_PE_VAR_TYPE] = CT_PE_BOOL_TYPE;
+ }
+ else {
+ varData[CT_PE_VAR_TYPE] = variable.kind;
+ }
+ varData[CT_PE_DEFAULT_VALUE] = variable.defaultValue;
+ allVars[key] = varData;
+ }
+ }];
+ payload[CT_PE_VARS_PAYLOAD_KEY] = allVars;
+
+ return payload;
+}
+
+- (NSDictionary*)flatten:(NSDictionary*)map varName:(NSString*)varName {
+ NSMutableDictionary *varsPayload = [NSMutableDictionary dictionary];
+
+ [map enumerateKeysAndObjectsUsingBlock:^(NSString* _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) {
+ if ([value isKindOfClass:[NSString class]] ||
+ [value isKindOfClass:[NSNumber class]]) {
+ NSString *flatKey = [NSString stringWithFormat:@"%@.%@", varName, key];
+ varsPayload[flatKey] = @{ CT_PE_DEFAULT_VALUE: value };
+ } else if ([value isKindOfClass:[NSDictionary class]]) {
+ NSString *flatKey = [NSString stringWithFormat:@"%@.%@", varName, key];
+ NSDictionary* flattenedMap = [self flatten:value varName:flatKey];
+ [varsPayload addEntriesFromDictionary:flattenedMap];
+ }
+ }];
+
+ return varsPayload;
+}
+
+- (NSDictionary*)unflatten:(NSDictionary*)flatDictionary {
+ if (!flatDictionary) {
+ return nil;
+ }
+
+ NSMutableDictionary *unflattenVars = [NSMutableDictionary dictionary];
+ [flatDictionary enumerateKeysAndObjectsUsingBlock:^(NSString* _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) {
+ if ([key containsString:@"."]) {
+ NSArray *components = [self.varCache getNameComponents:key];
+ NSMutableDictionary *currentMap = unflattenVars;
+ NSString *lastComponent = [components lastObject];
+
+ for (int i = 0; i < components.count - 1; i++) {
+ NSString *component = components[i];
+ if (!currentMap[component]) {
+ NSMutableDictionary *nestedMap = [NSMutableDictionary dictionary];
+ currentMap[component] = nestedMap;
+ currentMap = nestedMap;
+ }
+ else {
+ currentMap = ((NSMutableDictionary*)currentMap[component]);
+ }
+ }
+ if ([currentMap isKindOfClass:[NSMutableDictionary class]]) {
+ currentMap[lastComponent] = value;
+ }
+ }
+ else {
+ unflattenVars[key] = value;
+ }
+ }];
+
+ return unflattenVars;
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.h
new file mode 100644
index 00000000..92077a76
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.h
@@ -0,0 +1,13 @@
+//
+// ContentMerger.h
+// CleverTapSDK
+//
+// Created by Akash Malhotra on 17/02/23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import
+
+@interface ContentMerger : NSObject
++ (id)mergeWithVars:(id)vars diff:(id)diff;
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.m b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.m
new file mode 100644
index 00000000..9a391b5e
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.m
@@ -0,0 +1,60 @@
+//
+// ContentMerger.m
+// CleverTapSDK
+//
+// Created by Nikola Zagorchev on 12.03.23.
+// Copyright © 2023 CleverTap. All rights reserved.
+//
+
+#import "ContentMerger.h"
+
+@implementation ContentMerger
+
++ (id)mergeWithVars:(id)vars diff:(id)diff {
+ if (!diff) {
+ return vars;
+ }
+
+ // Return the modified value if it is a `primitive`
+ if ([diff isKindOfClass:[NSNumber class]] ||
+ [diff isKindOfClass:[NSString class]] ||
+ [diff isKindOfClass:[NSNull class]]) {
+ return diff;
+ }
+ if ([vars isKindOfClass:[NSNumber class]] ||
+ [vars isKindOfClass:[NSString class]] ||
+ [vars isKindOfClass:[NSNull class]]) {
+ return diff;
+ }
+
+ // Return nil if neither vars nor diff is dictionary.
+ // Use isKindOfClass: to check first. Note that (NSDictionary *) cast will succeed if object is NSArray*.
+ if (![vars isKindOfClass:[NSDictionary class]] && ![diff isKindOfClass:[NSDictionary class]]) {
+ return nil;
+ }
+
+ if (![vars isKindOfClass:[NSDictionary class]]) {
+ // diff is dictionary
+ return diff;
+ }
+
+ // vars is dictionary
+ NSMutableDictionary *merged = [NSMutableDictionary dictionaryWithDictionary:vars];
+ if (![diff isKindOfClass:[NSDictionary class]]) {
+ return merged;
+ }
+
+ // vars and diff are dictionary
+ NSDictionary *diffDict = (NSDictionary *)diff;
+ [diffDict enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
+ id defaultValue = merged[key];
+ id mergedValue = [self mergeWithVars:defaultValue diff:value];
+ if (mergedValue) {
+ merged[key] = mergedValue;
+ }
+ }];
+
+ return merged;
+}
+
+@end
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CTLocalInApp.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CTLocalInApp.h
deleted file mode 120000
index 8137851f..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CTLocalInApp.h
+++ /dev/null
@@ -1 +0,0 @@
-../InApps/CTLocalInApp.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+DisplayUnit.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+DisplayUnit.h
deleted file mode 120000
index 824f1d3d..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+DisplayUnit.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+DisplayUnit.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+FeatureFlags.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+FeatureFlags.h
deleted file mode 120000
index 08fe3ae6..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+FeatureFlags.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+FeatureFlags.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+InAppNotifications.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+InAppNotifications.h
deleted file mode 120000
index a54857ef..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+InAppNotifications.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+InAppNotifications.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+Inbox.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+Inbox.h
deleted file mode 120000
index 92e24140..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+Inbox.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+Inbox.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+ProductConfig.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+ProductConfig.h
deleted file mode 120000
index 03e7172e..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+ProductConfig.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+ProductConfig.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+PushPermission.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+PushPermission.h
deleted file mode 120000
index 404aebb5..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+PushPermission.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+PushPermission.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SCDomain.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SCDomain.h
deleted file mode 120000
index c0cfdb8a..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SCDomain.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+SCDomain.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SSLPinning.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SSLPinning.h
deleted file mode 120000
index 4abe21cd..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SSLPinning.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap+SSLPinning.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap.h
deleted file mode 120000
index 7beaf92a..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTap.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapBuildInfo.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapBuildInfo.h
deleted file mode 120000
index bb4a07f8..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapBuildInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapBuildInfo.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapEventDetail.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapEventDetail.h
deleted file mode 120000
index 3bb7bef3..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapEventDetail.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapEventDetail.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInAppNotificationDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInAppNotificationDelegate.h
deleted file mode 120000
index dc6fc15a..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInAppNotificationDelegate.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapInAppNotificationDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInstanceConfig.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInstanceConfig.h
deleted file mode 120000
index d70da98d..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInstanceConfig.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapInstanceConfig.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapJSInterface.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapJSInterface.h
deleted file mode 120000
index ddd02437..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapJSInterface.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapJSInterface.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapPushNotificationDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapPushNotificationDelegate.h
deleted file mode 120000
index 3a2996f0..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapPushNotificationDelegate.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapPushNotificationDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapSyncDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapSyncDelegate.h
deleted file mode 120000
index d814f1f5..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapSyncDelegate.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapSyncDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapTrackedViewController.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapTrackedViewController.h
deleted file mode 120000
index a6fb5881..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapTrackedViewController.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapTrackedViewController.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapURLDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapURLDelegate.h
deleted file mode 120000
index e9218f23..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapURLDelegate.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapURLDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapUTMDetail.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapUTMDetail.h
deleted file mode 120000
index 4a907f17..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapUTMDetail.h
+++ /dev/null
@@ -1 +0,0 @@
-../CleverTapUTMDetail.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/README.md b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/README.md
index fe514d6e..1c560a99 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/README.md
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/CleverTap-iOS-SDK/README.md
@@ -67,6 +67,10 @@ CleverTap Geofence SDK provides Geofencing capabilities to CleverTap iOS SDK. To
CleverTap iOS SDK supports Push Primer for push notification runtime permission, refer [Push Primer doc](/docs/PushPrimer.md) for more details.
+## Remote Config Variables
+
+CleverTap iOS SDK supports creating remote config variables, refer [Remote Config Variables](/docs/Variables.md) for more details and usage examples.
+
## 𝌡 Example Usage
* A [demo application](/ObjCStarter) showing the integration of our SDK in Objective-C language.
* A [demo application](/SwiftStarter) showing the integration of our SDK in Swift language.
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTDomainFactory.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTDomainFactory.h
new file mode 120000
index 00000000..9727b705
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTDomainFactory.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CTDomainFactory.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocalInApp.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocalInApp.h
index a04f794c..5777405e 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocalInApp.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocalInApp.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CTLocalInApp.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/InApps/CTLocalInApp.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocationManager.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocationManager.h
deleted file mode 120000
index 720dee15..00000000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTLocationManager.h
+++ /dev/null
@@ -1 +0,0 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/CTLocationManager.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequest.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequest.h
new file mode 120000
index 00000000..7c858e33
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequest.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CTRequest.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestFactory.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestFactory.h
new file mode 120000
index 00000000..995dd2ee
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestFactory.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CTRequestFactory.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestSender.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestSender.h
new file mode 120000
index 00000000..3d20e154
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTRequestSender.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CTRequestSender.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar-Internal.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar-Internal.h
new file mode 120000
index 00000000..dcf07563
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar-Internal.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar-Internal.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar.h
new file mode 120000
index 00000000..40a17cd3
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVar.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVarCache.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVarCache.h
new file mode 120000
index 00000000..5799e710
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVarCache.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVarCache.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVariables.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVariables.h
new file mode 120000
index 00000000..0dfc5160
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CTVariables.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVariables.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+CTVar.h
new file mode 120000
index 00000000..3b49adc8
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+CTVar.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+CTVar.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+DisplayUnit.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+DisplayUnit.h
index c40041f9..f9a7a739 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+DisplayUnit.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+DisplayUnit.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+DisplayUnit.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+DisplayUnit.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+FeatureFlags.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+FeatureFlags.h
index 6f864b7e..dffcde36 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+FeatureFlags.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+FeatureFlags.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+FeatureFlags.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+FeatureFlags.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+InAppNotifications.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+InAppNotifications.h
index 8a0b8f95..5a2d8d91 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+InAppNotifications.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+InAppNotifications.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+InAppNotifications.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+InAppNotifications.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+Inbox.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+Inbox.h
index c2fe0bd4..e2a9b00d 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+Inbox.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+Inbox.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+Inbox.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+Inbox.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+ProductConfig.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+ProductConfig.h
index 64de2b23..cca2274d 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+ProductConfig.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+ProductConfig.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+ProductConfig.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+ProductConfig.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+PushPermission.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+PushPermission.h
index 8cc3aaa3..21da6ebb 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+PushPermission.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+PushPermission.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+PushPermission.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+PushPermission.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SCDomain.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SCDomain.h
index ba2258c7..cdf99f72 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SCDomain.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SCDomain.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SCDomain.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+SCDomain.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SSLPinning.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SSLPinning.h
index 107de97b..fc482ef7 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SSLPinning.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap+SSLPinning.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap+SSLPinning.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+SSLPinning.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap.h
index bb4635f9..5a33affb 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTap.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTap.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapBuildInfo.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapBuildInfo.h
index 49207ff1..ce429a78 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapBuildInfo.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapBuildInfo.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapBuildInfo.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapBuildInfo.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapEventDetail.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapEventDetail.h
index e2ddfd9f..3e81c19d 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapEventDetail.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapEventDetail.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapEventDetail.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapEventDetail.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInAppNotificationDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInAppNotificationDelegate.h
index 097caac9..62971bb1 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInAppNotificationDelegate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInAppNotificationDelegate.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInAppNotificationDelegate.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapInAppNotificationDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInstanceConfig.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInstanceConfig.h
index ef4724d9..7ec1a715 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInstanceConfig.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapInstanceConfig.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapInstanceConfig.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapInstanceConfig.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterface.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterface.h
index 9075e36d..eaa4359d 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterface.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterface.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapJSInterface.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterface.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterfacePrivate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterfacePrivate.h
new file mode 120000
index 00000000..ee2e9d59
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapJSInterfacePrivate.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapJSInterfacePrivate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapPushNotificationDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapPushNotificationDelegate.h
index 008fefb7..3a3ade7e 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapPushNotificationDelegate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapPushNotificationDelegate.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapPushNotificationDelegate.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapPushNotificationDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapSyncDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapSyncDelegate.h
index b205ec76..33350954 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapSyncDelegate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapSyncDelegate.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapSyncDelegate.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapSyncDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapTrackedViewController.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapTrackedViewController.h
index b680213a..e2014f43 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapTrackedViewController.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapTrackedViewController.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapTrackedViewController.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapTrackedViewController.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapURLDelegate.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapURLDelegate.h
index 38371b32..f378f9ad 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapURLDelegate.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapURLDelegate.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapURLDelegate.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapURLDelegate.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapUTMDetail.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapUTMDetail.h
index 62c7bda9..ab3bfa87 120000
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapUTMDetail.h
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/CleverTapUTMDetail.h
@@ -1 +1 @@
-../../../CleverTap-iOS-SDK/CleverTapSDK/include/CleverTapUTMDetail.h
\ No newline at end of file
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTapUTMDetail.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/ContentMerger.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/ContentMerger.h
new file mode 120000
index 00000000..a1f7030e
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/ContentMerger.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/ContentMerger.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/LeanplumCT.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/LeanplumCT.h
new file mode 120000
index 00000000..59725db1
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/LeanplumCT.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/NSDictionary+Extensions.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/NSDictionary+Extensions.h
new file mode 120000
index 00000000..a8efaa9f
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/CleverTap-iOS-SDK/NSDictionary+Extensions.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/NSDictionary+Extensions.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/SDWebImage/SDImageFramePool.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/SDWebImage/SDImageFramePool.h
new file mode 120000
index 00000000..67e3c5f6
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Private/SDWebImage/SDImageFramePool.h
@@ -0,0 +1 @@
+../../../SDWebImage/SDWebImage/Private/SDImageFramePool.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CTVar.h
new file mode 120000
index 00000000..40a17cd3
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CTVar.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/ProductExperiences/CTVar.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CleverTap+CTVar.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CleverTap+CTVar.h
new file mode 120000
index 00000000..3b49adc8
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/CleverTap+CTVar.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/CleverTap+CTVar.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/LeanplumCT.h b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/LeanplumCT.h
new file mode 120000
index 00000000..59725db1
--- /dev/null
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Headers/Public/CleverTap-iOS-SDK/LeanplumCT.h
@@ -0,0 +1 @@
+../../../CleverTap-iOS-SDK/CleverTapSDK/LeanplumCT.h
\ No newline at end of file
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Manifest.lock b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Manifest.lock
index b144a082..fc60a0a1 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Manifest.lock
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Manifest.lock
@@ -1,22 +1,22 @@
PODS:
- - CleverTap-iOS-SDK (4.2.0):
+ - CleverTap-iOS-SDK (5.1.2):
- SDWebImage (~> 5.11)
- - SDWebImage (5.15.0):
- - SDWebImage/Core (= 5.15.0)
- - SDWebImage/Core (5.15.0)
+ - SDWebImage (5.17.0):
+ - SDWebImage/Core (= 5.17.0)
+ - SDWebImage/Core (5.17.0)
DEPENDENCIES:
- - CleverTap-iOS-SDK (= 4.2.0)
+ - CleverTap-iOS-SDK (= 5.1.2)
SPEC REPOS:
- trunk:
+ https://github.com/CocoaPods/Specs.git:
- CleverTap-iOS-SDK
- SDWebImage
SPEC CHECKSUMS:
- CleverTap-iOS-SDK: 124ee0f4bd90c5ffa213b2da05f81496d7339015
- SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
+ CleverTap-iOS-SDK: 1731f365b7822458c346fb812bd0f0edbf076856
+ SDWebImage: 750adf017a315a280c60fde706ab1e552a3ae4e9
-PODFILE CHECKSUM: 9f7ec524782dc2155236da4b7d8dc2188d607019
+PODFILE CHECKSUM: 838d8d904fc779a1bc0bea04c3377f1d39ea9144
COCOAPODS: 1.11.2
diff --git a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj
index 41eafddc..36ca03a9 100644
--- a/Samples/Cordova/ExampleProject/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Samples/Cordova/ExampleProject/platforms/ios/Pods/Pods.xcodeproj/project.pbxproj
@@ -7,819 +7,865 @@
objects = {
/* Begin PBXBuildFile section */
- 005CDED4269B81C6C62D678B2DEC1023 /* CleverTapFeatureFlags.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D56E91B262BDD2AB866F8D8221D353 /* CleverTapFeatureFlags.m */; };
- 011E7CD433AE612A45D4FC3C75AB736D /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A14E1B6BC96E56AE1BD9A84E8FAEAD8 /* UIImage+ExtendedCacheData.m */; };
- 0133ECA108614477E3D99F872AFB2BD4 /* CTCarouselMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA0104B1645FCE465F8C23B26FB8D294 /* CTCarouselMessageCell~port.xib */; };
- 01A50E4F7B34BA271C90CDEB1877ACBB /* CTNotificationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = AC8BBA70E2E95FDB4BA0944100C1D446 /* CTNotificationButton.m */; };
- 0367BF66057DAA9C7CF47ACFF55250D2 /* CTInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E976ADF3D4855F86CC2BF8428AAC9744 /* CTInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 03FAB1A7C3CFCA27BB3E18241261429D /* CTHalfInterstitialViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = E82A6563EA932B6CDA2A5F6D83190218 /* CTHalfInterstitialViewController~ipad.xib */; };
- 04774B163CB17DC8AEB6AEDC2EFD07C0 /* CTInterstitialImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7A628076EB2E1DDEC3AD2B96B29F2126 /* CTInterstitialImageViewController~iphoneport.xib */; };
- 04B5604605A463ECD9A070CD7AFF49A8 /* CleverTapJSInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE932A8C1BD6F8610BEEE61BF1E7E3E /* CleverTapJSInterface.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 05C9AC8D49156A12B17BDCB53B676F4D /* CTMessageMO.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F04FC081BF0DB766AA8492D755A9E38 /* CTMessageMO.m */; };
- 0810E7EE2FF3B640AD433A4B9E17DDB0 /* CTHalfInterstitialImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = C8CC5FD7542D7CE13085C9CD0413547E /* CTHalfInterstitialImageViewController~iphoneland.xib */; };
- 082E7F8982968CC118462BFCFABA2C00 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0921D607B54D097A3AE18105C5E152EB /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 091E8BFCFD9ECF0F6F3EBB6B2BA9CF2E /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB5856B3BFB7FBD78D8E03DCE916265 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 0931CD48CDFD4D68D95FFCE33FBA7AB4 /* CTInAppDisplayViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 506885A984C628CD5FAF8C550EE150C1 /* CTInAppDisplayViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 097E7223EF23D4FA3993A466A0264925 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C45D9043521F22120A7C1BDE55F27D /* UIImage+ForceDecode.m */; };
- 09910885C763E95B8757FB2602BE808B /* CTProfileBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CDE3260E53973DACE1DD5C2E8A90F56 /* CTProfileBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 09D70AE545B4EB3AE8B0C8D0CD58C2EE /* CTCoverViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FC98D47A0C7E48C307516B8566F540DC /* CTCoverViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 0A6E5C8734BA08D138E0340BAE50BED9 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 86A12E75A297D84531417AC7B582D496 /* UIView+WebCacheOperation.m */; };
- 0C0111E8ACDF329158C54AAAD553CFC3 /* CTEventBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A7C0ABEBF9B60257002286A5A4F9EFA /* CTEventBuilder.m */; };
- 0DD9426E12CBF548EF7206C31CF07C5A /* CTProductConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 13135DDF65FF9179653F83CEFC608B57 /* CTProductConfigController.m */; };
- 0E19823CC670437E29F2C3AA8660BF41 /* CTSwipeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 06A72E01CEE4935C082F4A84A7450C7F /* CTSwipeView.m */; };
- 0E6DC1F552D15D0D3B79A3D2A644BEF5 /* CTValidationResultStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F776E448D1B1C56F6FC0D145271F503 /* CTValidationResultStack.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 102BFDD2A44708F5919509D96A54BAC9 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 5046ABCA583A9E2F4DA976003F3ACB43 /* SDImageAPNGCoder.m */; };
- 105DF1C10EBBB6DE95D73177AD04A78A /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 810AB2078A12297C90E2F3E972F1F6D5 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 10AAE590D869C4E996846792246B07C4 /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 76F350D38B0C254210F7E2CE1C75366B /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 10E4F271C54292E687D05BC3CF80FA3A /* CleverTapTrackedViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F2C5A1BF3384B7C6932508CC801E85FC /* CleverTapTrackedViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 11430ABE26456323CABB5DC8B87B8DC9 /* ct_default_video.png in Resources */ = {isa = PBXBuildFile; fileRef = CD4126EE58EA885BC479666CB3445BC3 /* ct_default_video.png */; };
- 11D6E13ABB1F372D613D0CA09B3963AA /* CTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 89B7A084DA540E3C81AB5848ACF2AB34 /* CTUtils.m */; };
- 12B24026745EA0CFF2B2BF01B78A19CA /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 02AE8425368F9EAF709FB94566FB00DA /* UIImageView+HighlightedWebCache.m */; };
- 132C9AE9434ED95CEB38DE927C00E333 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 51340ED429D80618086CFFE176D39C55 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 133C16566C1CB17D22C24E38BD2E9CB3 /* CTInAppDisplayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29C3E943E0FB635C67D74D3BE4077041 /* CTInAppDisplayViewController.m */; };
- 13418E39D0F7BDAA9CC00D85BB106F4C /* CTUriHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CE47ACF5C39780F7B58F6C1A8EB4763 /* CTUriHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 13F6377DA6B53D05D86DC213E17A2E67 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E1410A2C00AC668EAF25B299A2AF9B85 /* SDWebImagePrefetcher.m */; };
- 13FC0FC4C219FC3EB438173171E5714A /* CTCarouselImageMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = E1E86C8B89C471B4B2ABC5E0D5A8A6AC /* CTCarouselImageMessageCell~port.xib */; };
- 14BD1B25E9682C3342BDDC7DD0864B41 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D888DE65D42078ECEF9CE4821F85E01 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 151148EEC1A3D072C7A7657489DF4962 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D4ECDCFD33424F162907BC3F828D98 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 159413A33EA1D16E3D6C31DA4A2ADDCF /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 98F13508A29E678B97ADC29B892300A9 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 1790DF45D480EA89CB6FDD2C2D80BA9A /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = FF51E4B5C462C948E2B00EA02D8852BC /* UIImage+MemoryCacheCost.m */; };
- 17C8DDE9D0A5C9D6074ADAFC1E8C91B4 /* CTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 145617DEF6E1987B40FF2807C0A747B4 /* CTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 17FA95893B36E18EBC5DE742E4276A23 /* CTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C44979E07A186F9374A6DE6139F73AAD /* CTUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 18788A9177E52678E575B4F7BAC02832 /* CTIdentityRepoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 35E0E473D94991D3023A7862B658B6C3 /* CTIdentityRepoFactory.m */; };
- 19BCDFD2245F9226D722FAB64B4582FD /* CTCoverViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9945501E0365FC997B20049C64EA4E88 /* CTCoverViewController~iphoneland.xib */; };
- 1A12EC2DB5473F8384D83E9DFD4D1643 /* CleverTap+SSLPinning.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ABE41468656CD53C58027665AC967BC /* CleverTap+SSLPinning.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 1B93935D1D478494B420A1DD69BCBDBC /* CTPlistInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D8319B3ABEE67199B9C53AAA7E4D2C8 /* CTPlistInfo.m */; };
- 2026B59703D56460239610577E7E34A6 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AEC614EA871320A2EE1021421EF9A8F /* SDImageCodersManager.m */; };
- 2119D166688AD5C26027028481A1B158 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A915A0FF4A83C350C24ACCD31658F3A9 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2261169FCE209D01515E229BBE70D929 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E97F9E705E445B8D70BB3A85BE02C4 /* SDAssociatedObject.m */; };
- 22E11141F4E8D0B0C4B87A39B12EF106 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF1D56FF26ED67B5DBEB3984242C583 /* SDAnimatedImageView+WebCache.m */; };
- 2321232D23BFBF7069A10A50785BD075 /* CTLoginInfoProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D33BDAFD571BD7B8CB0494A8AE011B /* CTLoginInfoProvider.m */; };
- 2739748E1493B04DA245AB967A9F3E11 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = B8DBB11FA7CB9D4340893CF701EABAEF /* SDImageGraphics.m */; };
- 27BA673FD66732E9C2C8351E1D0FFDEE /* CTHalfInterstitialImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 122A4A2A6431D70B6C28CD22CED19024 /* CTHalfInterstitialImageViewController~ipad.xib */; };
- 27BE25690942BD858E60D998A014EB32 /* CTLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D6918B0BB591EBD8C33645D4641F7F8E /* CTLocationManager.m */; };
- 28CDCC25EF629DDEA4F4391BE57BC113 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B57355733C9179A4100DF8E06430ABA /* SDWebImage.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2AAFC8DF727D5A9200E4998640EBF0A8 /* CTInAppNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = FBC28DA290D2949C9F9DAEFA027089C9 /* CTInAppNotification.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2AC4FBEB8709A4305C94225CE03FEE1C /* CTInAppUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F533489CA7EB2498456C16023FAFCFEF /* CTInAppUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2BE7CC3BB43A8E3FD6E3986B13B8E5AE /* CleverTap-iOS-SDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2347F10D864FD03D80C0CF0719230162 /* CleverTap-iOS-SDK-dummy.m */; };
- 2BFD40843C7CAF5C29E5024CEF65D7D7 /* CTLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 985DA9E246CF3DD086492BF78060EC44 /* CTLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2C1E0AD61526DD821AB622734F254952 /* CTInterstitialImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2F77FDCD5E3AC390C73F70C2410BDD5F /* CTInterstitialImageViewController~ipadland.xib */; };
- 2C51BEEB2E27D4790AEB85D58DA866D7 /* CTBaseHeaderFooterViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 669173AD593C28F43CFDA6C2DC808B2A /* CTBaseHeaderFooterViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2CE10803F7EF7653674C58CF1CC70285 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = A46DFEF103DBD055CFE37D69064D9616 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 2D7ACD1BBBC4831C017A2FC70EBF7D95 /* CTKnownProfileFields.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F3BAE8E64AB824642C525D1E190EE0 /* CTKnownProfileFields.m */; };
- 305002EF4E084EA95FB9569BDF0CC0CC /* CTInboxSimpleMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5953C0ADF560E64DD159D8F198362993 /* CTInboxSimpleMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3147F6455C4F4AAF72997C1B155D6AD9 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E3FDD985EEB50BA51CA09763A782BB4 /* SDImageIOCoder.m */; };
- 321BA13855602C7516A115534D182E51 /* CTCoverViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 574F35A1A27E02D43233CEE2EDA73094 /* CTCoverViewController~ipadland.xib */; };
- 3324C6BF382971E978AC2B74D2DC1939 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FBF52036CD383B558A63419864C8240C /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 33C2A13A0D807063195BC09DD107D286 /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F3D47270216FD284A388DFF4DE9C56B /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 34852294FE1AC10A8DF4174ACC24F164 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = A077996AAE18318A5E592ADE7EB6B517 /* SDWebImageDefine.m */; };
- 34C2FBBDD6F84720095FB656D8D34C74 /* CTCertificatePinning.h in Headers */ = {isa = PBXBuildFile; fileRef = CD88FA18A4C75C7555580BB68DD2E474 /* CTCertificatePinning.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3696997DE1170F3D8DD3CB6C4FD5CB51 /* CTInAppFCManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 00977057B0A51B848086499302224B72 /* CTInAppFCManager.m */; };
- 377F3EF762F4705AD0992CBCF4A8E357 /* CleverTapDisplayUnitContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 86866E88CE96911DC543630F464CB471 /* CleverTapDisplayUnitContent.m */; };
- 37AD0DBA6826AD77E8B15698A008B270 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = E596FAC6EE4112F4DF1BE215186B0F9C /* SDWebImageCacheSerializer.m */; };
- 37BA6494EBA8078FF619C0A9A47664D6 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = C74704433D2A2BFB8FA5832C59912D62 /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 38ABE7901CC2B96E01DB895292559923 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 015702D9209383ABECC2F014EF176A39 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 38C72D89C3E2E93CCFC240586E834672 /* CleverTapUTMDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB6777553FFD129A1D3D985F5EB85E9 /* CleverTapUTMDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 394E3E20F6D66D0F66B98ECF48845E7F /* CTAlertViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D039F17DCF6EC1C3233A9ABF3617859 /* CTAlertViewController.m */; };
- 39D1B3C61ADC6B65A26CC2D8C57979BC /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D643CE43B3EC5A054BC61EDDA110E38B /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3A03F0F5024DCF23C009341B4B1CBDF1 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F1336788EA894A86B97FD32BC6DFB2 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3A9D5239C51946B1D80DAE0612AF9CE3 /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7919F9A07E64A2BD59B842EE96FF7630 /* SDDiskCache.m */; };
- 3AD6B5FC9FBF47D2815FAC88AEB09AE6 /* CTInterstitialImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 839B3BEFF668F85036F42A09633B5AB6 /* CTInterstitialImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3B26AC051F933D8B6C7490779555887B /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = EF100CCC38AFB29E96AA44FDE2641B0B /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3B94A8CA5F89719584453941D438F7F2 /* ct_default_audio.png in Resources */ = {isa = PBXBuildFile; fileRef = 5B3E7718F77A937296DB0624DE38CAB0 /* ct_default_audio.png */; };
- 3C409B4A3D911BA544CB16903794E358 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B4CCEA7B9AB8179243AA7BCF8F1843F0 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3CAE5C63F4EFA4CE2E84A1D94D6CF626 /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = DB94804330549717181057300B7F6498 /* SDInternalMacros.m */; };
- 3CCC15BACC8F11081A0B08B56F727412 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ABCFB0D9B6A824DA652BB608CD41863 /* SDWebImageCacheKeyFilter.m */; };
- 3D3AFA98759F4A3137A133DE5E172A14 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = AE73A51DB637DE91619FDD0DF9F419F7 /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 3D54532FCF02815965A4CB61BC18731A /* CTInterstitialViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3355083555001F5475FA0FF1F2C47ADF /* CTInterstitialViewController~iphoneland.xib */; };
- 3ED6AAFF90D5AB684EE8AA094CCB7A6E /* ct_volume_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 0DC37245253918181A8654CCEBC82D30 /* ct_volume_off.png */; };
- 4070170F97B26578C54578937D6103F8 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 746819FC279E5153C310209871F890B1 /* SDWebImageDownloaderConfig.m */; };
- 42AFEE0589918ABDD9E6BF3C68286423 /* CTInboxSimpleMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EC79B2DDFF9810898AC8C8652B0CCF9D /* CTInboxSimpleMessageCell.m */; };
- 433672A81111C00FCC24AEE99652DFD7 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = E0025D4100845ADE4C3E74DC53D622E1 /* SDGraphicsImageRenderer.m */; };
- 439CA8EE8B52A15C9E934D5D5838DB5B /* CTFlexibleIdentityRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = 13884828E45BD240D93462184FE5DFE3 /* CTFlexibleIdentityRepo.m */; };
- 442A3ED55E08338002C7E06FBD3C412F /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E8350B2002BB786078CE37E7708D08E /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 45CBFD5C8E520409185A3E6F28F6F678 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F57416F3E2C663F3F3C0F8D24B6C359 /* SDMemoryCache.m */; };
- 4616046D339260897AA1367059A68EFD /* CleverTapInboxMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 106D6A992CCFF8251E10EAA0AF9DE8C8 /* CleverTapInboxMessage.m */; };
- 46AA08991E5E2B877666408E628F830C /* CleverTap.m in Sources */ = {isa = PBXBuildFile; fileRef = FE345882B6F962FFAECA8400DBEDB8E9 /* CleverTap.m */; };
- 46AF2F06EE85CE28B933C85FE84EB66F /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 24475BB0DC666C02D5B6D5CF4B3BCF9F /* UIColor+SDHexString.m */; };
- 481ED20AA13F7B42BCBA63DD269CC7ED /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF61764DECEEFF4DF9B3DB3F2FBB7DF0 /* SDImageCachesManager.m */; };
- 485F8F7F76A14326AEC4DB09D8C584FD /* CTPlistInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DCB73F49A70C4883484C3C0057A061 /* CTPlistInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 489199278855BAB5EA879D755481FFBB /* CTUserMO.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FD9F0672E9BE622CDAE944295DBAF86 /* CTUserMO.m */; };
- 49CD09716EB767B676F58E4A36108DA4 /* CTCarouselImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0460AEA43738FC0A6BC7B925687EC2DA /* CTCarouselImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4A58E1F94456C10A0A10C7F61E022EF4 /* CTCoverImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 20676949C3F408F2513D14585D050C43 /* CTCoverImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4AC27F91CF6CEF69DF25D394104D6AEB /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = C98DC5F1ED12F6D7F1489BA091C2680E /* SDWebImageIndicator.m */; };
- 4B58CBD67FBD622830342CFD35C52F90 /* CTPinnedNSURLSessionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CEA0AE86662D5C6ADF880963697AE6 /* CTPinnedNSURLSessionDelegate.m */; };
- 4BF8924FBA54B5213B8885960F46CC05 /* CTCarouselImageMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 13FB82659B37E2BDE9A8512467362D24 /* CTCarouselImageMessageCell.m */; };
- 4C822CE57C5E073D24CD1EFDC916F7BC /* CTInAppFCManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AF34EB8844737AB2B131CF2B93EDDFFC /* CTInAppFCManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4D112C05D2652DBB71474FF96EE671AC /* CleverTapProductConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C60C2689B971C64C4467358A5DF8F52 /* CleverTapProductConfig.m */; };
- 4E39A6F22856E4B347760BA19FC9511E /* CTIdentityRepoFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = EC8365F948FC4A7D0D595ED5C9CC10A4 /* CTIdentityRepoFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4E48C9B79DEC54C00E4537B431B83A22 /* CTProductConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9061233A283F25428E131229D097643A /* CTProductConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4E48F2018B377D003408D9141BA30523 /* CTInterstitialViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 68DB8874E175D1C669FF5DC9E11DF942 /* CTInterstitialViewController~ipad.xib */; };
- 4E49257E42794F1F9B341F10FCF17CF0 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 066F4570FFF1C2F268D37EAC046FAE46 /* SDImageGIFCoder.m */; };
- 4EC16AB9695AA2FA5FF6A7170834AFA2 /* CTDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B6B0152B7B7EDE22C2AA23481CCE693 /* CTDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 4F01B04071B3572C3FFF6297F8BD231B /* CTInAppNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 67244003DBBB806BE9E337D9F3704816 /* CTInAppNotification.m */; };
- 4FF817F949C80475B43DE719847DFA3B /* CTMessageMO+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A321A0B66A4C350B3BCB28CE536FEC4 /* CTMessageMO+CoreDataProperties.m */; };
- 505251EFABD311A066F70858A1E8E24B /* CTInboxIconMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8BC7C21E8D8252D5C308E3E678C65F0C /* CTInboxIconMessageCell~port.xib */; };
- 530DE90E0A99FF03FDBAD84091771C8F /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C9B9032EFD98FE57E90584B9DAA8289 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 5327EA4C727582A559291D1A86123C65 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A91F72EA20CFAB8860E455B57D684CB4 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 53B0D92433829418B14BD6E01626F6C3 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = E5CD5A312CF73AAEF2992E927C3D7AB6 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 53E2694AE3C51893A7F2EA89F050AC08 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C242DBB319B050770DF72E679427AFA /* SDWebImageError.m */; };
- 53FD81B2C5E5A10426866CEACBD8E8A6 /* CTFooterViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AC86ED680E7D9D0507D35341011AD6C4 /* CTFooterViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 551F0DA5457ABF8ABDFFE2E78D126824 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 16097C7F6514F1081519CE4944E32E70 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 55DA5C989C828A2980CFB72D32795B65 /* CTInboxIconMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42CE513BA7738FAF5E48199B3A94801B /* CTInboxIconMessageCell~land.xib */; };
- 56CA0E4FB9B0C569011909C0258D5737 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E0ABB2B74C7B86C1313D20D72877318 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 58E219F430B011353632696D93B14D87 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F610A1116D03C974539810DFE0B11D1 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 58F509FB51A7791C4823D38290A8919F /* CleverTapEventDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E11A327EC315983FAA38A8A7B7E0479 /* CleverTapEventDetail.m */; };
- 5A025D37DE986F7871083EB4C1650D12 /* CTPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 119ED479841230E7547357661F9CC740 /* CTPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 5B9D674EE860A2C700EBC705BCDB5C6D /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = DFFDEDE53EDB6A617BDE61990D0F58A0 /* SDAnimatedImageView.m */; };
- 5BBB0C40E4042E4AD72C02632410D9C3 /* CTInboxSimpleMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = 695DE06747201EBB1B0938214D18667E /* CTInboxSimpleMessageCell~port.xib */; };
- 5D9BE78B2601A77D7C8A19C065726DFD /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 85A87D21F33A8CB6456E42A48F586276 /* SDWebImageDownloaderOperation.m */; };
- 5DA9BD54E019A4DD5341E39E94396DCB /* CTDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6A826124FEFDBFE2CEA02ACD7E1B47 /* CTDeviceInfo.m */; };
- 5DF2BF40C639D7300C1894A50C8FFB49 /* CTInboxMessageActionView.h in Headers */ = {isa = PBXBuildFile; fileRef = FFB7A7727BD01FC0C7DB6B4605CD6A34 /* CTInboxMessageActionView.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 5EA1C709340C9B624FACAAACD96659CE /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D3BB4A10F6FEFC7B88D4774FDC95644 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 5EE1F67A6B35CE18D9A0F91C2EFBDF0D /* CTFooterViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 001CD11C6DBA31CC5C6C17DF1E598C2F /* CTFooterViewController~iphoneland.xib */; };
- 60E51187089AE7C240184FF514FDAF66 /* CTCarouselMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E08F10F2BC4A009DEAC6EFA85855A79C /* CTCarouselMessageCell.m */; };
- 61093E3BDD67C95E80BA2CD1DA2CB1FE /* CleverTapProductConfigPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = AE5009351D59DDA739F20E23F66DAC08 /* CleverTapProductConfigPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 62A78505705699EC977E31B2D553918A /* CTAlertViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 30393578A859C72471B61413FA794A2E /* CTAlertViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 6472A665A3855664BFF3525A19B00593 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = D30E57ED6E0D7C3DEA42DADADDCAAE2B /* SDWebImageOptionsProcessor.m */; };
- 64D53A1558B6F15EB66E08004A637F2A /* ic_pause@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EEED3A83D290E3DBB00927D6EA94C61D /* ic_pause@2x.png */; };
- 65BD6054F9099A3FF7A9205390A08B06 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = EA5CA0104656A1A9763EB85238DE649F /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 66593B799BD4FD47CE11539A412BC7AC /* CTInboxBaseMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 944EB67D9B36E082D7786C76971921D1 /* CTInboxBaseMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 66C8E8E8257CF535B772DBEFFB0B408E /* ct_default_portrait_image.png in Resources */ = {isa = PBXBuildFile; fileRef = CD8B4D648262E2A7056432B0892C9BB0 /* ct_default_portrait_image.png */; };
- 67DB19E2AC0E55B71AB2968779434B2A /* CTUriHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B69E867C28CB2003F341BABE4F09747 /* CTUriHelper.m */; };
- 6810992D3ADA7047F2782755BB19319A /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ACF4B9D4BDA654D22EC52C4AAB4C574 /* SDAnimatedImage.m */; };
- 6893222FD082322CFF8EDE3878DC3301 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = F2F11EF6692F98BAF5BEFDFDEB57A4CB /* UIImage+Transform.m */; };
- 68A4CA9881F732EFC6364456D4C52F28 /* CleverTapInstanceConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB275E090F899F1ADE75280F7AACC83 /* CleverTapInstanceConfig.m */; };
- 6913F3F61272921B9C24628B779410A7 /* CleverTapConfigValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 81FBE933CE7AF8E701525948436E15FD /* CleverTapConfigValue.m */; };
- 697F8D118A068002AF63F3EBCC5E8CD6 /* CTCoverViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = B030A516E775005559E47796D5A29D6B /* CTCoverViewController~iphoneport.xib */; };
- 6BA2EF6416256037E65C78C6C7194784 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8C35246B78E9E1E1BED09C8C2F5522 /* SDAnimatedImagePlayer.m */; };
- 6BB2A281F9A399BC46D1E5F818B2E889 /* CTCoverImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3FC2BB0130BEAE2D5A7CEB4EDFC73D45 /* CTCoverImageViewController~ipad.xib */; };
- 6C43654D32837794C9CC762B7EB6CF56 /* CTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 93A5DBECA299C2A050495326C865A719 /* CTUIUtils.m */; };
- 6D86E2BF4BADEDC1E3E00BF572B2C27B /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 024B3B7633A7E77942EAC77961C330B3 /* NSImage+Compatibility.m */; };
- 6D93676E8CC51D593D7E9E51A0ADC2BC /* CleverTapInboxViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED1FAB598D03F264D52245F1AC50C10 /* CleverTapInboxViewController.m */; };
- 6EF462643C5AB20E95D69063B36D94C3 /* CleverTapInstanceConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE0A703C6059424FC07B079FDF31C41 /* CleverTapInstanceConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 70BA7A91239CF7A6842E106C5C42EFFC /* CTHalfInterstitialImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 904F0809DDBDD45452F46CE7DF8D931D /* CTHalfInterstitialImageViewController.m */; };
- 721F50767DE03C790886661FE55E2FED /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 04FD1108A33776E813B0A3FAE12269C8 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 72838CB739BAB0571986CA1107BB2E02 /* CTUserMO+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 3044E0A40F903962407D6CE836CA25D1 /* CTUserMO+CoreDataProperties.m */; };
- 73E930AC7544156A2DFEB3B78DC2883C /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = EB7C3FAF9A4F3A4625DDA49824488AF1 /* SDImageLoader.m */; };
- 741587458DA9CE48600E1EC92563210C /* ic_pause@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = B690B9F84A31E9F854FF89C3D705D0DC /* ic_pause@1x.png */; };
- 7431A1A02F47D3BA779304CF4C34DA00 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = FE5D961825AC94A63D2DCED77E9DC6E7 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 747852107AFCACB3DAF77201E5EF5D17 /* CleverTapBuildInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C1680AAA74DE1A0B177AD8C9FB8869 /* CleverTapBuildInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 74D39F285A5BD53FB1512FE4788DAD7E /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4727100A928328776F720D1D23037FB2 /* SDImageAssetManager.m */; };
- 758D1816BFB3F8503FD5EA4C772ADE6C /* CTFeatureFlagsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AEF3B70819065A7D19945BD96049F84 /* CTFeatureFlagsController.m */; };
- 75C18F34E90640F549F522814F382C09 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 70FE796A747457D7FE31038774F14D69 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 769524215C10FD07A06C0E9F6330E02F /* ic_play@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = BABEA7103F1003968ABDB3DF764238CC /* ic_play@3x.png */; };
- 776484F7ADE029F09D9EC67AF1D48348 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 85A7A9B6200470118549E81DE56FB0B2 /* SDImageCoderHelper.m */; };
- 77A67DCEED6897F90035A8B12404972A /* CTInterstitialImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA3E0F69C4929916311ECE94BA0AD547 /* CTInterstitialImageViewController~iphoneland.xib */; };
- 79B2EA32E36BBE5C6D8A96E94471A10D /* CTLegacyIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C499D8DF5F7C1EEADE6640FC5DC95B /* CTLegacyIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7A127AB38B019D16BE4EBD6B91A31B0D /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CEDCAAE2DED819B7EF2362453BD84D /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7A817F14567BD3F59F774F20EE0C70AE /* CTLocalInApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 70FD6DEC3A1DB47CE299F4C86AB3B42D /* CTLocalInApp.m */; };
- 7ADC48DA8653E23CF33BF76326D2029C /* CTMessageMO.h in Headers */ = {isa = PBXBuildFile; fileRef = FA519E2D3056E7FF8BFD2EDDFBA96F0D /* CTMessageMO.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7B1E870BA2D33992CF4797D67E8FB52E /* CTInboxBaseMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6B506E7EB9C6801EC9C3A36EB27F2D /* CTInboxBaseMessageCell.m */; };
- 7B8CD1F84DE471808E72440F8B34D8AE /* CTImageInAppViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FDD77F6E7D15A400B43A24A44D6C577 /* CTImageInAppViewController.m */; };
- 7B9C6A2E2A83FB42C9E803EC60D0882C /* CleverTap+FeatureFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = F1F4C780744FADA7A04D6B2B5DFF9149 /* CleverTap+FeatureFlags.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7C1AD8656852D3DB507D37DB76607D74 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F730725CEACF1ACCAEFDBFE191F983B0 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7C870B11DD0FF324ADB89447EA7F2942 /* CTDisplayUnitController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4C976AFC10EC48CA8139A81D5C11E01 /* CTDisplayUnitController.m */; };
- 7DA415DFD94BD89BC862ABCE152C27DA /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A6F2F4646F47D8932E0D70223446B7B /* SDWebImageTransition.m */; };
- 7E71820988BF8358F6BCC00D4DA1C13A /* CTBaseHeaderFooterViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C30ABEF34BE8C94244E6988AA930DA2F /* CTBaseHeaderFooterViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7E9538B53CED5E6996A5F16DAA074682 /* CTCoverViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A3438026E12106F44F01403432CFF22B /* CTCoverViewController.m */; };
- 7ED4EBB4F360B8A99231A5F6DC7A025E /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA01F4A78F48C8EC956593EA48BC1C5 /* SDWebImageManager.m */; };
- 7EE251E4B92ABB7AC1009FED60F51F8B /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A494003781D15E46C7C9C5303FF3909 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 7F5AE16F8A723EA58D0AF1D57791E005 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BB235C5DC09791050F33C45042CBB7A /* SDWebImageDownloaderDecryptor.m */; };
- 7F5E3062F024B0FCE550507581034E2E /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = D62697E5CD8268785798C23669C1224E /* SDImageTransformer.m */; };
- 829D01532228F3AF709E7C8FC81B67D2 /* CTLocalDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 6089E0CC8E5CDE81ADB3E9995BAF3CA6 /* CTLocalDataStore.m */; };
- 82B4303C6B953C6A439827EC61B6772D /* CTValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9B9F9007EDBD8F51DFF63D0E646C33 /* CTValidator.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 82E0382D42B21CFC2DD61240064E5AE3 /* CleverTap+InAppNotifications.h in Headers */ = {isa = PBXBuildFile; fileRef = A4B3ED3132AD0331B5BA77C3B125CBB4 /* CleverTap+InAppNotifications.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 83015DCC070F8B5426906065EB8CDFC2 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = E69562FCF9E76BDE9B738180B7DEEF69 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 836E25AACCFA35F70E1F203593077CB7 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C2197F809548184A018851967EB483A /* SDImageAWebPCoder.m */; };
- 83915109F77D9D59761EA06BEBF2FC88 /* CTCarouselImageMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EEFFA5289F069FFC19F8EAA8819B6D /* CTCarouselImageMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 83FE0CD28BB57B99D2D4FEEC5A2F6B98 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 544872F3D43A607F07F20E57ECE8DDE8 /* SDDisplayLink.m */; };
- 84D01359793F57DBE9EAF023AD74EBD8 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B009E769BD71FA9044E3F54AD16E160C /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 85F4726FCEC0D668B3AFDB8AAD2CA62E /* CTValidationResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 38A65425915044808FCE3067CC9A24B0 /* CTValidationResult.m */; };
- 870D3B600F8E3860DBE2D56FBE45930B /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9912E98C14E90D196DA77E07B76723 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 873079839917F7DC6628226530D0FCAF /* CTUserMO+CoreDataProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB4A110AD3840CDDFB1EACAD39F6FFD /* CTUserMO+CoreDataProperties.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 87586B34FEB88664FA4E667758F5A511 /* UIView+CTToast.h in Headers */ = {isa = PBXBuildFile; fileRef = C2200CC9B31A0AA14B84B49BA76F4632 /* UIView+CTToast.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 87D79028AB0BF5FC91D4A124A53DDF39 /* CleverTapSyncDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED3EF9F43B16534AD490195D29AE6ED /* CleverTapSyncDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 88146BBB36338C7AA26808448B576A5D /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 90A4753BB9D2D9F51791019C111E1974 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 894555CC7ABD52EC6D717A244F90EAC5 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 63504EE310ED0E0DFF19CAD89CE47C4A /* SDWebImageCompat.m */; };
- 897984BAC52E2AD10CA947D3201E5569 /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DE5E75481568A2B32AE367997CFFAC7 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 8CD6CDCDD5BCEDEE6AB4DD76446AD808 /* CTSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE6982D765FC929E83F5AA0B9C1C12B /* CTSwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 9018C94AD4264974B5DB02ADE8FB18BE /* CTInterstitialImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F004A06E523AFEE3F1859942220996DB /* CTInterstitialImageViewController~ipad.xib */; };
- 9051FF0A1FB6CFB7BAF277CC7B96561C /* CleverTapFeatureFlagsPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D3871DA8784E9C9EB3AB8E0B268D240 /* CleverTapFeatureFlagsPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 90DB71E44A4A08960A9EF2B4C8A0157C /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = BD1FAA1BC6547C6AA995CA092E834279 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 90F75A1DEA7B529FD16C99F50ECCA4FF /* CleverTapTrackedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 033174CF8C10356EA929AA2A2F63A470 /* CleverTapTrackedViewController.m */; };
- 916CDB696A29D9E7BA876F5C7378E1B4 /* CTAVPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F593F0C6D158D3DA2AE624960878FEF /* CTAVPlayerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 91E51B661AF42E6CE0A44456739367C5 /* CTHeaderViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4E9BAA64C409096D8915CBF2D11B496D /* CTHeaderViewController~iphoneland.xib */; };
- 9288D30DE210E2730F8F0714E1BB7BF9 /* CTHeaderViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = C2DA1B452DDA131358935AEE8C933F24 /* CTHeaderViewController~ipad.xib */; };
- 9291A78989CEA64D91C2A92EFEB8D8DF /* CTVideoThumbnailGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = F54EEF4EBA5C908306A8BBA7497F338E /* CTVideoThumbnailGenerator.m */; };
- 934754BBC303E9737FBE537BD8213C23 /* CleverTapInboxViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9B50932D61BE49387712ACFA36D272C2 /* CleverTapInboxViewController.xib */; };
- 93763B966D6DB496865AAD07257AB526 /* CleverTapDisplayUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C8F687A9D2990315DEA8A801F99DEC6 /* CleverTapDisplayUnit.m */; };
- 93E9B626EA3A81DC359F779F706B5936 /* CTUserMO.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C09E0FEBAC195465D9ADE7FE7A92825 /* CTUserMO.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 942BFFD2ACFC348C1CDC8628BB8B175C /* CTHeaderViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 988515B25BD9E8D28BFB99AAF8B9523A /* CTHeaderViewController~iphoneport.xib */; };
- 94A99C64223F2CEF1B3E71BCFBC24067 /* CTInterstitialViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0DB2BE441B8E9D912D6EF29A5C7CA1A0 /* CTInterstitialViewController~ipadland.xib */; };
- 94D9084B595F5050674EB8C6915D3724 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = EB67F91C6EA0821C9C8A0A18D44B1DF3 /* NSBezierPath+SDRoundedCorners.m */; };
- 9563B53EB336D7043A74F0E9733F5097 /* CleverTap+Inbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 27A6FF119000AC9D0EAD078858B59760 /* CleverTap+Inbox.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 9581968FC1068A6768C06F9DE5BD6DDC /* CTCoverImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1A05B46DC2F050F6987B79997328D216 /* CTCoverImageViewController~iphoneport.xib */; };
- 9719691D631D35BDA3B2DCC64C4B1BFC /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 0289C1CE681412D099FD995B244D9DAB /* SDImageFrame.m */; };
- 97785513542462CDC82F88CED798A398 /* CTInboxUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 25B6CDEE094F880F63E761DCD3CF6D72 /* CTInboxUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 99804E217E834D8EEA6CA8C36D82CE4A /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0B99BF2FA75FC8BB442E62E0C38C7D /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 99BA6F1929CD0BF2287649D14432D8E8 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E14AE69271E5AF7EAD14172603EBA07C /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 99DEDD06EB4B63F3663802BCCD9599E1 /* CTHalfInterstitialViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 45A0D707EADB2664B26BE1F29DF15B0C /* CTHalfInterstitialViewController~iphoneland.xib */; };
- 9BE2B069934ECD54F915B6754382E36A /* CTInAppUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6254F565321707DE4C5C85773DFEB98E /* CTInAppUtils.m */; };
- 9C106059A503917ACEEFB4E09E568CB3 /* CTFooterViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = E97C1D8FE96CC38F3834CA682AE8C2A7 /* CTFooterViewController~ipadland.xib */; };
- 9C7D5782F0CD76EA2BB548EF0D0D7B64 /* CTCarouselMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 30112E19287E77647E2EFAC046A1F00F /* CTCarouselMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 9E3C76A3D017041F2AEECF08DDAE2F06 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 352C85867DA59C648DED2E777E3A5A07 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 9E5A9046C952858D256E69DF83A66463 /* CleverTap+SCDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 1904AFD42176A06DF30D894F2DE4BC13 /* CleverTap+SCDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
- 9E9A3C9AA004FC043ACCBAEF7B01D5EF /* CTHalfInterstitialImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 723C1B2E94575B053C89788AC0C96D81 /* CTHalfInterstitialImageViewController~ipadland.xib */; };
- 9EF93D72DBCDE9FEAA8726742B7E4760 /* CTCarouselImageMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63EF50442898251B0DF413DF8E078D0E /* CTCarouselImageMessageCell~land.xib */; };
- 9F470A8226B4B0840CBD436C5DCF4B61 /* CTHalfInterstitialViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 420106F31480C2F9FEF39E9263318661 /* CTHalfInterstitialViewController~iphoneport.xib */; };
- 9F687D87E3A010BDEFC6C3FE3867A1C3 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA7216F106C2008F8F27D6B3952CD07 /* SDImageCache.m */; };
- A02D754C1D91F03CBDFD041E9DD8B195 /* CTSwipeView.h in Headers */ = {isa = PBXBuildFile; fileRef = A625274681FC0C6ED2D1F234C4242D96 /* CTSwipeView.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A0A11D5C3481B1ED66831E3373DD9164 /* CTPinnedNSURLSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B47255C79FDBA4494F1FFEE7A53442 /* CTPinnedNSURLSessionDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A15F466EFA681ABB36C77708CAB5463A /* CTLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D13384AD2FEB16BE536B63612705C56B /* CTLogger.m */; };
- A1695FF19D9C2D8E7997E5DBC46526A7 /* CTEventBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD91DE2026B38642D3A1F6EBB816017 /* CTEventBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A1AE19D9AFA292114E8AD5FE495BB26B /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C061BA06720B813A0EFDCAC2769DBAB /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A2EC9DFDC74D3048A462D16D4A4AA9F4 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A727AC487F509F17E9A49152D5DA8ED0 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A30D8DCDC963F9ACDA41B49EECF62CF0 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE794CC220D1CAE29FCD9E5FFF15DB7 /* UIImage+GIF.m */; };
- A3D9602845C33DB21E063AA09D798C76 /* CTInboxIconMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AC4EF2CBFDE0A70BCA25525D5056A4E4 /* CTInboxIconMessageCell.m */; };
- A4C8CD921D40C7CB33D9BE98C89573BE /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 277F88B4B092203525E7B5017AA77C07 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A6583B5A5EEADCC638F972542951B14A /* CleverTapEventDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EB5EB298FBFB1089E80CFF0FF8322 /* CleverTapEventDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A77D962C11876F26FBA4B96231D32A5A /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BDA0745D108411EE3D5412EEC1B5D8 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
- A7C0173C1561D684F8612E75E9A91DA4 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = AD990BCAAC5994523FA1F32A3EE4426E /* SDImageCacheConfig.m */; };
- A9251794D83F83A4F17C5051D3C04E44 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 720D2862C25FCC0FA7F210E5A531EAC7 /* SDWebImageDownloader.m */; };
- AA4E7FB7390EE115AA39BF71993F8838 /* CleverTap+ProductConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 922AC66290629750330762EF26ABC328 /* CleverTap+ProductConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
- AA5DF3E2927D38A23F1616E5B336BA4D /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E0318D0477B7511F2C52012E58B724E8 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };
- AB03E8E5BDA88C07184C6EAA4FE85500 /* CTIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7B36DC74428213BA270533C9DEE3E3 /* CTIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- AC05B5719716441912D9F2FD62070E13 /* CleverTapUTMDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 248954A7E01024145753167DB9D2C678 /* CleverTapUTMDetail.m */; };
- AE86D5FDB92916F82417952DE911243B /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = A56BD3B3C80A362ABEAB62ADCAF27365 /* SDImageCoder.m */; };
- B0C90A76586C7BCACA1BB381552323D0 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A92115ED235E1A875EE46AA6978A7D92 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B1AE2489FE5FF4CA50CFE9FFCF5008BC /* CTVideoThumbnailGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 49427581ECF5C10C58702465FEFE51B6 /* CTVideoThumbnailGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B1F7CF28B30C986D7E2F11D80DA158B8 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 224D29D66442C01D3B2E680504619C73 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B3139A61D767A7F99D88C8DEF2FA3F03 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1283E8174B8DBD2CA14BAA8F5B25BC68 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B32DB6C2FE03E29813400A23A7851A1C /* CTValidationResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A1AF65418FE77B2BE1D118E253E9BC84 /* CTValidationResult.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B34DBE269AE41CC41CD32BF114C6398F /* CTInboxMessageActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 72235C82281462B9DA224177C6C079CB /* CTInboxMessageActionView.m */; };
- B3D69B492C4D47CA5E4404538EE74D38 /* CTFooterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 242AB57CF992B95C1EDBD53C051B4DD2 /* CTFooterViewController.m */; };
- B46DBCC04BDD6FFF5506389A605FE1FF /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BD9A547C62FECAA5332C9009FEA392F7 /* SDImageLoadersManager.m */; };
- B4E6D5C2E631EB9D140AEB2E77C08794 /* UIView+CTToast.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9AF8983D11AFF26E8D5B7247E3BFB6 /* UIView+CTToast.m */; };
- B6573B6B630D7977BE6A9892506F66A9 /* CleverTapInAppNotificationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A603D557BEB6BB43E45C56310542F265 /* CleverTapInAppNotificationDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- B6FCDF99A8F506C6BF504FCB22A4BF82 /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = BB9C5DC5CC7B5364D54D6531BD109BED /* SDImageHEICCoder.m */; };
- B7689CEEB185F8E0B980BBC0B357CD18 /* CTInAppHTMLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2A996AE88DCC08122226D17D57548DD /* CTInAppHTMLViewController.m */; };
- B87956886FCE2C86D2BE9CE353C76603 /* CTHalfInterstitialImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 07A8CF7AA77FD3734DA065FAB66BF1E8 /* CTHalfInterstitialImageViewController~iphoneport.xib */; };
- B8D621A51AB5A315BC108CFA28877966 /* CTInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 67BE87CCFA63A9625862BC8BF3FFFBF3 /* CTInterstitialViewController.m */; };
- BAAA3E91B3D3B8EE5C3FC7880E0A8CCE /* CTValidationResultStack.m in Sources */ = {isa = PBXBuildFile; fileRef = A0519B1B3CE3CB1392ADF8F19A017255 /* CTValidationResultStack.m */; };
- BAB0472961E2F1CB07DB539404739D3D /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = C302AD11805BCA7D0694D6F4243C46A0 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; };
- BAF8554638FE87714E3748C3E2BBBA32 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CCDB41173AC767116D29B9EE3C08812 /* SDWebImageDownloaderResponseModifier.m */; };
- BC691FD6B15D441B7DCA7BD4DCDC0188 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A03C4A385534A0B4EEB006812E7F6F8 /* UIImage+Metadata.m */; };
- BCB664BEE0161456B893209FA717BCBC /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 79ABB71817CB46FFFB2DDF0FD4FD935B /* SDImageIOAnimatedCoder.m */; };
- BCD160DA107A76A51B3116D6E4BDE0EA /* CTDisplayUnitController.h in Headers */ = {isa = PBXBuildFile; fileRef = 06527721DFBDF9C95C1ACE1912F12F3C /* CTDisplayUnitController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- BEC816298EED9661927462C00D6DBA9B /* CTNotificationButton.h in Headers */ = {isa = PBXBuildFile; fileRef = EF7ECE3CC8E7B0401359A72B25073173 /* CTNotificationButton.h */; settings = {ATTRIBUTES = (Project, ); }; };
- BECBDD4C5DB27ADEFAEEB84AC19759C5 /* CleverTapInboxStyleConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B9FE5711A1F27FA0BCEF656B18EABC8 /* CleverTapInboxStyleConfig.m */; };
- BEEF8EA85B233CDF617AA611D9657B79 /* CleverTapJSInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F1E55B26CD9621341E2D71A1D4BB17 /* CleverTapJSInterface.m */; };
- C01053955B8AE96AFADAC43063396D33 /* CTInboxSimpleMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4A3DCFF4BC94D31AEA22C048A43470C5 /* CTInboxSimpleMessageCell~land.xib */; };
- C09E0E55132F34E0648707A3166D0519 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = DD64A75C7AE6643D5E75DA94744975D8 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C1F129C8DF2C7B1E0817EB64F727AF00 /* CTInterstitialImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE4DC1EAD6A3B6969BB2F97E6F297968 /* CTInterstitialImageViewController.m */; };
- C266CED7168DFF429D15BD1078D718C1 /* ic_play@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D7696581FC7ECF3FCA72356109C3589 /* ic_play@1x.png */; };
- C43B48A3651A3FEA3964D31076D6E0AC /* CleverTapInstanceConfigPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 18B3469E769F028C337D592C29A46BDF /* CleverTapInstanceConfigPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C4636F0AB20994AF98C8F7EF22C04623 /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 76C390DCF370788212F9E9D8FEE55C75 /* SDCallbackQueue.m */; };
- C473962B6770E318A7F13F85566AF67D /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F25D87FD5A9EAA359A3BB6EECDDD81 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C54B7CEF190DB74278231AE8360E7330 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = B91DD3377C64B65B4ADA4319EB97C604 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C55B4980E1D4F1FACE83B1951A4762FB /* CTHalfInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4521A3DE515D4807A308F610B49FA6F /* CTHalfInterstitialViewController.m */; };
- C60CE801D069CA8A00B01F68C5B1D260 /* CTCarouselImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E10B8976F63DB134390870DB4C3325 /* CTCarouselImageView.m */; };
- C6B6F9A1FAACCFB4BCF0DD1105635EE8 /* CleverTap+PushPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FC5F2B781F1E802ADAE536FFB6157E /* CleverTap+PushPermission.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C7101911975A6D1AE2CF80B208360E1D /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = F13429BCEC72E1E562AEE8C9D71837BE /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C71E8496654EFBD82B96F9991181D6E5 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 601EFBCD582B5BCABF13D902BF6337FC /* NSData+ImageContentType.m */; };
- C8D071806AD4E9957C7C9DFF5974DAC1 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = CDB7B37365F9AE79F92D0E1B8F54A63B /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Project, ); }; };
- C9376E67C5F9711413A9E0036E465EBC /* CTInterstitialViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 10E5E949286A2B3AD8FE0C33CD56398C /* CTInterstitialViewController~iphoneport.xib */; };
- C9BF91D9E6F434335A71EA173616F09D /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 605024568EE8982237697D4A5102F34F /* SDImageCachesManagerOperation.m */; };
- CA0317CD4DAF553531BC04A775969ACE /* CleverTapInboxViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FF0E3DD96B25BE58A09EC69203152B /* CleverTapInboxViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CA3E7C68A38CF532B0FF91C345AB4371 /* CTConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E6028FB67F540BBF33EA4934AA5B0B7 /* CTConstants.m */; };
- CA52B857F3CED0474A156D96069A231F /* CTImageInAppViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE2F943261F1A9F90F2BD363CDFFCCA /* CTImageInAppViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CB92F544B8FFC03DF9CE918EC41E04A7 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B3152A60BCAC1275A36E74E9F91953 /* NSButton+WebCache.m */; };
- CBD694B3E8D2F1D5D8AC18858AB8FD14 /* CTKnownProfileFields.h in Headers */ = {isa = PBXBuildFile; fileRef = F62FF4FF3AC36500D5B52494678D743F /* CTKnownProfileFields.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CC336030118E15D90E9D49E946C25973 /* CTInAppDisplayViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F774F349AF10A9DFF7BE6B167535C64F /* CTInAppDisplayViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CE8B1AC1D691FB49876F2D00A3C8E4EC /* CleverTap.h in Headers */ = {isa = PBXBuildFile; fileRef = 361D1D7F2C740F7F39F8E8A869443D76 /* CleverTap.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CF51A007D3D239F041461321BDBBAAD2 /* CTLocalInApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BE8FE013BCAB7FA6BEEF8600098678 /* CTLocalInApp.h */; settings = {ATTRIBUTES = (Project, ); }; };
- CFB9BC1EF2C792CABED2145FB4C71D04 /* CleverTapURLDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1215F8CF4716B38421FC25F0C59C18 /* CleverTapURLDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- D1E030725541D127E141D192EACCDCAF /* CTHalfInterstitialViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1EEA48BFB33AA05D5E490E3101D0C35 /* CTHalfInterstitialViewController~ipadland.xib */; };
- D1FB326B02C811CEB8DFADF08FE4278A /* CTHeaderViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0A69C6689C90631952B94B162423B6DB /* CTHeaderViewController~ipadland.xib */; };
- D2A12ED62AA40BFA72108AF1F1F75412 /* CTFlexibleIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D29F76DA161F9223DD1CD06482ACE33 /* CTFlexibleIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- D353BA4E5F707FE14148F3DDB87298F7 /* Inbox.xcdatamodeld in Resources */ = {isa = PBXBuildFile; fileRef = B0AC13536F9F6BCF61B8BC9180C62E1F /* Inbox.xcdatamodeld */; };
- D37B7F9D413A2D3DC712FE0903D86F70 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FD25DF43629CB59D5874ECBC0A37C73A /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- D4BC9709381D49C37C7E62C298EC50A1 /* CTCertificatePinning.m in Sources */ = {isa = PBXBuildFile; fileRef = 7076906FF402F1D71DF488DE94A948B5 /* CTCertificatePinning.m */; };
- D5401EEDC6B7EDBA068B5738E4DFF0FE /* CTPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C8D27F6E1B0515878FFB15126A1C5F /* CTPreferences.m */; };
- D6DA69CD20437B47C0E20720C2DC5823 /* CTHeaderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C245205003347F82BCB23E1C18B9C1 /* CTHeaderViewController.m */; };
- D76664C51AFBCFC248CB62087FF290FF /* CleverTapPushNotificationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 899C8CBBD29A02E70EF11E9A3E0EBC47 /* CleverTapPushNotificationDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
- D8E02DCEA367FADF3D8E98BE54BC9C4A /* CTInboxIconMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EF56D43E904382DBE1EDC7E7A50148CD /* CTInboxIconMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
- D9A2C96D791D14CA89A6E28194B63860 /* CTHalfInterstitialImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F694128D98CA3544E4D1EE3960E02D /* CTHalfInterstitialImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- DA2053312CC0ADE6DF5DAC8ED78AFFFD /* CTFooterViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 987CE7D5996C3B229063E4AB97057CA3 /* CTFooterViewController~ipad.xib */; };
- DB489A68FC326948A2884114880304A3 /* CleverTapInboxMessageContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C73AA8A4B4F8985CC57034ABC529C52 /* CleverTapInboxMessageContent.m */; };
- DBE6A5C3CBD37FBD34E46F2CE7A952DF /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE078B754147AD6AA8120C7EB3FAC1F /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Project, ); }; };
- DC7B836D000C75C33EADDFE1544303D7 /* CTInboxUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E66AE9E3E3F4E6864C6E10496F541F0 /* CTInboxUtils.m */; };
- DCE1C28964932E347D5C8A150B84AF3C /* CTHeaderViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A7E5F3E93A24CD627D8781121C5E8C /* CTHeaderViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- DCEAB850FF5F9E99204179CFB08EBD76 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 759330BA7552EDD8A8B2A96A9D232F76 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 00BEE2A32320779CE6C0012ED944C39F /* CleverTapInboxMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 568B638F3768B6CC8B852CE0BD936A57 /* CleverTapInboxMessage.m */; };
+ 0151B2F1BC0ED2DD8E355579FB401B28 /* CTInboxBaseMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 473BE269F72E327533C945145A6341FC /* CTInboxBaseMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 030DAD00F502FF388BA02FB2C9F88E0A /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1900708E4B3E2B7CC0949AEAE224E9C4 /* SDAnimatedImageView.m */; };
+ 0538439543563B3C9AB3C9ABD350FD71 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B1BD2A310E4036BEF412E83DEF25434 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 054FF90B007DCD51AE17D6BAF4E1E73F /* CTKnownProfileFields.m in Sources */ = {isa = PBXBuildFile; fileRef = FF3E6AA8E58BA28895FF0C894CB3D0BC /* CTKnownProfileFields.m */; };
+ 055CED4FC49D2B5267347A9ADF5D7930 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D56861E6126AA861F16F7B99F7A80C6 /* NSImage+Compatibility.m */; };
+ 062D7C9FF4145A767DB839679B804036 /* LeanplumCT.h in Headers */ = {isa = PBXBuildFile; fileRef = B9B1BF85AE56A05AD46EBE018F6C3738 /* LeanplumCT.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 0662D5D268EF8C349DD2487F15CE1F01 /* CTInterstitialImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = B214EAC435EE45FAAF12779FAD983D6E /* CTInterstitialImageViewController~ipad.xib */; };
+ 06AD7D6132B8C57D3C786D30C12552C8 /* CleverTapTrackedViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F80A00F4B22E8BBEE4EE65632E6A76 /* CleverTapTrackedViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 06E857D24C595CD030F0D1181527EFE3 /* CTUserMO.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED458B04C3A8C383519FF7BF38D88EA /* CTUserMO.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 06F77FC0B33A9B786CB4D244529C6266 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = D575F36C1E6EDD59F11D1422A48E55A0 /* SDWebImageTransition.m */; };
+ 0750A370B421E4FCB60E97243F713D03 /* CTHeaderViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = A19F4BF77B408E8B0A84040132B9FFB1 /* CTHeaderViewController~ipadland.xib */; };
+ 07DB2703CCE4EDF5D5C8EA8BBF326D9A /* CTHalfInterstitialImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92C3F7D4BBB4CD445655F3E37F835E08 /* CTHalfInterstitialImageViewController~ipad.xib */; };
+ 0B05498E2F1226A632D7BD28D001C754 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = A39DF340D84D623CE95198E813190AB8 /* SDWebImageError.m */; };
+ 0B12E577D16396B66961866FD4185D53 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 306844A6D0C42CEFEB9595DAF88EB845 /* SDAsyncBlockOperation.m */; };
+ 0B316DBA9484753332DB4CC192002847 /* CTCoverViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 042F805C908069D0280F6DF68E45D4A5 /* CTCoverViewController~iphoneport.xib */; };
+ 0B9731B9843AA7F647C1027FC4FD25C5 /* ic_play@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CC08AA7B4BEC8E1A401D00547C817C /* ic_play@2x.png */; };
+ 0BC4EB0F0A0A6DB408BD811DBA1B0ACB /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = BE56F4EAE8A387DB451273D184BD4612 /* SDInternalMacros.m */; };
+ 0C40BE92746D62384A5A5E67E69FE629 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B16D6EB0AD2B77DBCA9C30AE7D08F8B9 /* SDWebImage-dummy.m */; };
+ 0CF9E6A46A2E3A3D12B83216E1D39EEF /* CleverTapBuildInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6459433FB7E3DDB7E5A105A2140CAAB9 /* CleverTapBuildInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 0D40972305810E7E38A2E3B64B9BCDD4 /* CTInterstitialViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2BA54A89FEFCD1A6AA5341DEC39DF022 /* CTInterstitialViewController~iphoneland.xib */; };
+ 0DA46BC3D01D409CA23B4516725AC49B /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 69332F5DC51859E911C060D3A75A6A5A /* SDImageCoderHelper.m */; };
+ 0DC56C61C432EC5EA69581933C53398E /* CTCarouselImageMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0515607DBF0D6B125E8BFB82F835FADF /* CTCarouselImageMessageCell~land.xib */; };
+ 0E08784037E8DE78016A3DEED2219419 /* CleverTap-iOS-SDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AEDA5107977612DE1C70E29993551E3 /* CleverTap-iOS-SDK-dummy.m */; };
+ 0E6CBB4CA14A5C44EB528EDB7B9BFDDD /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = A161E7A48EFA8B5FEC7C634021047885 /* UIImage+Metadata.m */; };
+ 1015A85978E4676E29B1C0C0EE0AB9AE /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = A9AA6C8FB8C1E437FCCF5E2787DFC945 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 109777B8FAA0267BAC396337EE7875BE /* UIView+CTToast.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D39E12B60FF37A1606D6B12E704D217 /* UIView+CTToast.m */; };
+ 113F1DD23826819184D968119CA360B1 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD9C6B29E77B47E5D45CAC17B6309C1 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 129481A1AF3320D823F6083D3F20960D /* UIView+CTToast.h in Headers */ = {isa = PBXBuildFile; fileRef = A8494B03486B2A5CDF3892C72F7F4AD6 /* UIView+CTToast.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 135D390BD223E20BFB6B252C4634E1CD /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = C024FC688690447AF2969B0EFC3FFA9A /* SDGraphicsImageRenderer.m */; };
+ 136EF0F56896440CEDE30099A02381C3 /* CTInterstitialViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6483032B6BA4471D0B7ABD524E25A481 /* CTInterstitialViewController~ipadland.xib */; };
+ 13A7686FEC397FCD7083CF468A6811EF /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = BF13913B82C28C26838CCBE43584558B /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 13F18E32E316C78D5463758D3C5A5825 /* CTIdentityRepoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C4D9D04D86A48164F973D8418FD3FF4 /* CTIdentityRepoFactory.m */; };
+ 14475ABED6BD77D109B33D9A9CC5C2B1 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 242B076F0ED3FE11E21D15B9D8A1460B /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 14F93B57E812AC9E936095C7BFB0782A /* CTHalfInterstitialViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA17520E67D4436C04BB3165D482F662 /* CTHalfInterstitialViewController~ipadland.xib */; };
+ 1586E9639F414E5B80C269C6DD1A0FBB /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = BA387E0415476B8ADB9412FE403BFD2F /* SDmetamacros.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 15A1153AB12471677BD42377966B9887 /* CTInAppNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = C409A635B98C335D485227468101BBE8 /* CTInAppNotification.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 1821E7A40169BB9D38B32A4CEA4DFB6C /* CTVariables.m in Sources */ = {isa = PBXBuildFile; fileRef = 89A4A1D859679A14C7756799D2A64578 /* CTVariables.m */; };
+ 18D03D36D8CB733D462C5AE3887AF443 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A9FA4C69177025693373FF18DE32587C /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 197E32449C34D5951C8E10ACEBD30900 /* CTInboxUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A35A92AB1F119B15EB6D0BE116386C4 /* CTInboxUtils.m */; };
+ 1C1C3763D2A6212F14F062083EF06237 /* CTInterstitialViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0B61D1A1EB2DF262FCBA45698C1963DB /* CTInterstitialViewController~ipad.xib */; };
+ 1C577A3F421CF17C1847881ABBA7AC9B /* CTDomainFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7B344FE5E97521F739E0B25F71C615 /* CTDomainFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 1CAFA135F5F8621BF365D0F04CA663D7 /* CTCoverViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3BA9E7B5DB6C1BA1382A2BE8748132F2 /* CTCoverViewController~ipadland.xib */; };
+ 1E1017B6DF866CDABA0E3131784806F3 /* CTPlistInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C543885C348CDA7AB0BA6E9280EC8868 /* CTPlistInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 1E547796F6E9DBC08A2C5CCEBC6E3256 /* CTLocalInApp.m in Sources */ = {isa = PBXBuildFile; fileRef = E785843CED2BE08B30963C783922E0FB /* CTLocalInApp.m */; };
+ 1F2BC1A68A79937A1FB20F4AA63C1E6A /* CleverTapInAppNotificationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E22E04F6D0F53CE5B934800E64449F36 /* CleverTapInAppNotificationDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 1F34F2D7E6A52B3A79B00DBB7B80FAD6 /* CTInterstitialImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A4683B67574C68C295DE9E499716966 /* CTInterstitialImageViewController~iphoneport.xib */; };
+ 206C2BD364602D9EA805087A90107526 /* CTInAppUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E3E7DEDE5EEC38B76CEE7CCEBB137A /* CTInAppUtils.m */; };
+ 20F15470DF66295D26C705A546FAA175 /* CTInboxBaseMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 146821AB7C6A3EDA3EE4F449A8DCBFC9 /* CTInboxBaseMessageCell.m */; };
+ 210B668D7CC856EBE9E72453D8337CDB /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 27AA224BACACEDE0871836CDA0BEBD27 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 2371B04DF0A59E25FD54A486849A9985 /* CleverTapUTMDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = BF6459D485B109F3D921C9AF73F73CCA /* CleverTapUTMDetail.m */; };
+ 2527187B211C581966CDB5622791598D /* CTHeaderViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8A38B4B2F7F2FC0C9470E8D7C0A55E /* CTHeaderViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 258EC23C173181C46D557036B64C2391 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFF65ECD31D7F7C869B66A0E095BC50 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 25E2D32832A809284FF25BDA8782A64E /* CleverTap.h in Headers */ = {isa = PBXBuildFile; fileRef = 540FCBD78A583F628B0BE7A9230883A3 /* CleverTap.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 262ED3E9CDD38D9CD6BFBFC9FD8B07AB /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8CA1BDA8A39C4D281C5446829A79C7 /* UIView+WebCache.m */; };
+ 2645EEE7B8A657C2BD6136CE94272FD1 /* ct_volume_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 62736F7BD78DBD5F48E216D93FAC7F51 /* ct_volume_off.png */; };
+ 267BD5FBA4B05E1BDE2281498B322D65 /* CTHalfInterstitialViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = A2ED29FDDB9333449AFB73E3AFB35B18 /* CTHalfInterstitialViewController~iphoneland.xib */; };
+ 2687B0BF6E453E337EFD9AC11B148090 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADD533B9B6366DF20F5C07E77B5D95C /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 26FE6051F541AB351C6EB1DF69655ED0 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 77488CC23517C13CED61FF741AD63DFD /* SDImageAPNGCoder.m */; };
+ 280A211ADDA913D85CB4BAA0AFCA7420 /* SDImageFramePool.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDE4717AAD6ACCA05E5625340266D29 /* SDImageFramePool.m */; };
+ 283F8A6B3CC013284D12CEB2CBE814FE /* CTRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 82CCB4A1C98F8D633AE3AEE14C953C21 /* CTRequestFactory.m */; };
+ 295401B00D5C9A3166D345BA904737D7 /* CTInboxSimpleMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = E8696319C55D552EFC8E24716BAC9039 /* CTInboxSimpleMessageCell~land.xib */; };
+ 2A79E0A6D0F72DA562029163F2C39BDF /* CTLocalDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8274E6DFCE06CD2983D581CA84EE52AF /* CTLocalDataStore.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 2C683D2823A5C5F5E159F26A9854EE8E /* CTFooterViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14A00AD11775B0196583183CCB6514A1 /* CTFooterViewController~ipad.xib */; };
+ 2CD10463F208C7F62F3453337C4F4CAC /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D644879EDCC0724B9E9DCE584C27C4 /* UIImage+MemoryCacheCost.m */; };
+ 2E7ED8A74B6C570A146A5728A9D1FDB1 /* CTInAppNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = A19C8F469E737A7E50E3D8FFD84D0F9E /* CTInAppNotification.m */; };
+ 324EF1EC20A6F447216EBC7758601CFA /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 9134BB07DEE17A273B116DC22C5CE8ED /* SDAnimatedImageRep.m */; };
+ 3279A1ED7B54D61DE5F934959BCBB530 /* CTPlistInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C29ECAF0AF6C559DA5963DDD2584D7 /* CTPlistInfo.m */; };
+ 32C95400095E545E696DA6A3E9FCB931 /* CTInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFDC33AB9FA34FF10A8E5A89A09CBF /* CTInterstitialViewController.m */; };
+ 333BCB24773BF9C8BDDCD3D3606D9A4E /* ct_default_landscape_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 43A8601C1BA9E97614AC6C805239C8D4 /* ct_default_landscape_image.png */; };
+ 33854984E1ECCD1B2F115DF0883D075A /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E36E9E4CD9F24867C3C2D3249CB10DD /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 3538C8FC4D1AC0E0D2F10C9B3804F707 /* CTSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AE91870CD32DBB83DBFC0AB1CAD272 /* CTSwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 358C8DD37699D29EC27563C0E2C3CA68 /* CTLoginInfoProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4064B5D4AD7887681143A9C99A679B /* CTLoginInfoProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 35A395FEF138D55BB0EE01DEB48B014C /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF5DA4387044BA3EC3ACB6FF972757D /* SDImageCachesManager.m */; };
+ 3696A8D3141E9FA3B80C5B12B54FE0CF /* CTConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F7634FC060FC53D1C538F867C2D969A8 /* CTConstants.m */; };
+ 37E4943F79856504800534F5C9886BDD /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 072D3DDFA18BAD61219A856FCFB6093C /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 3881F35C836A1E1278F33AA5DA030E8E /* CTInboxSimpleMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C8039AA1446EB65F9F5A33711388381E /* CTInboxSimpleMessageCell.m */; };
+ 391433D736423ED6CAE09BD8755CA683 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = CF1A5B94C8BCE3FF16C610A5F0CD4A19 /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 39C4E71BC5090B2BC150A8C24F40F0AF /* CleverTap+DisplayUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = F1763BF58D06B7427273F32A2283E3E3 /* CleverTap+DisplayUnit.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 3B07ED662379558DCE3767203FE33178 /* CTUserMO.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F46974131649F95CD8D86CCBCA43A9 /* CTUserMO.m */; };
+ 3C6B526C9282F8D03764667EBA5F7933 /* Inbox.xcdatamodeld in Resources */ = {isa = PBXBuildFile; fileRef = 8926ACFFB0E29BD74DD31FDE2409CBEB /* Inbox.xcdatamodeld */; };
+ 3E0BDF295A2B6B65F790F6C20BA18A51 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE3DFF499F9E289FE74FDECBD78F922 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 3E710CF6B6D074C8038CF31C9ADEDF83 /* CTFeatureFlagsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC8D67EC96653F156D4384693FF73 /* CTFeatureFlagsController.m */; };
+ 3F103DCDD02A5B8234EF5FF910970DC4 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CC9B6D7E55DD737BC20C8C53404A038D /* SDMemoryCache.m */; };
+ 3F18E40308E27710DB373B9C981FD2F5 /* NSDictionary+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A01CA5CD32F5E9B61C36106C53F7AF1 /* NSDictionary+Extensions.m */; };
+ 3F31E65C6C8512CE86F6ED39FD75373A /* CTVar.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C7DB41726A02382E0B743DFDDE941F2 /* CTVar.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 3FC13CDFC31712E779FEF8E4642F2FEE /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 74A255198645FD62C60EA90913BFA9B7 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 4014496081E31CA0E75CD53DC0FCFA11 /* CTHalfInterstitialViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = EACDD7983C9F7256D282C4DAEF8B072C /* CTHalfInterstitialViewController~ipad.xib */; };
+ 405B45C66F847DCD1264DB687147594A /* CTInboxSimpleMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = A793776127A3B47D8D12E6B6010F8305 /* CTInboxSimpleMessageCell~port.xib */; };
+ 40612D032399986F82DF2260494D38A4 /* CTLocalDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D70E6841A5B320FEBA3E18726E2CD64 /* CTLocalDataStore.m */; };
+ 40E923CE4C56A578736813498C689364 /* CTFeatureFlagsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 303EF716D7AD65E33CD2B835FE050894 /* CTFeatureFlagsController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 413523C54F8219BBCDEEB2ECEE9AF60B /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DFC6E85A4210DE9B9F87084CDE2F85B /* SDImageHEICCoder.m */; };
+ 4298E89E1FF7FC5BDD4731A79F9BDE65 /* CTSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 62A10A17EF5C512486F214C415771E16 /* CTSwizzle.m */; };
+ 42E5BBA336AA8285F08C03F451ABD596 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9970C584C403F5B21B04B51E5BD9141A /* SDAnimatedImageView+WebCache.m */; };
+ 431F03F84A6451F2E999F11CF9D23513 /* CTUriHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = FEA5420B49A131AA9A5205CA57E6F073 /* CTUriHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 43BF441A48B46290B0A2CFD95AC82ABC /* CleverTapEventDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9D900235DBBAFF7B0F26C81A41B383 /* CleverTapEventDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 43CFFCE09E5DE6495BE22A0DB630F922 /* CTCoverViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A8FC159A8822520A38B5B002564A41 /* CTCoverViewController.m */; };
+ 43F1F70DACC2168F094B66F9DFE19F63 /* CleverTapInboxStyleConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = D8606FB02BA85C96058A4BCDD8D0CD32 /* CleverTapInboxStyleConfig.m */; };
+ 43F93BA8308FEDEB2C2B9AE248DE384B /* CTAlertViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EBB6985D2723C9E6779038254BDF1161 /* CTAlertViewController.m */; };
+ 441522D704BFE76F86F41AD065B218F2 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9F095EB0447D7CBCA289E561ADB8B8 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 44D6B40F8258E246AFEF7E6DC5EADD90 /* CTVideoThumbnailGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ABB378298D21D573C6A97BDEBEC474C /* CTVideoThumbnailGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 44EE09950230C46C1EC0183904FABDFC /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E9859CC4E41A7CE6FD4BA7173B1982E /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 44FF6E1E5BA0AC9F741552066F34D28D /* CTHalfInterstitialImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 00DCE02464D5B90FBEBC2FAEABC49E14 /* CTHalfInterstitialImageViewController.m */; };
+ 45B2B028EA36BBF623CBECD64AB6CBB5 /* CTHalfInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF6936C17771D67FA2F2AEEFC3FF355 /* CTHalfInterstitialViewController.m */; };
+ 45C4A6C4BE757DE181F47B6D6B4EE9CE /* CTInAppHTMLViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F105B5A3B1FBFF838F2C229A94C13D23 /* CTInAppHTMLViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 46CE3E179F6E7AAD37F4CCA75B6E61EF /* LeanplumCT.m in Sources */ = {isa = PBXBuildFile; fileRef = 0985F013F6DC9CD735AA7DD737F145A0 /* LeanplumCT.m */; };
+ 46DFD43973EA4DC38E33885A7837511F /* CTDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B3BE729F0ADD8A8B2EE9192205BBCA /* CTDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 46E5A70273CB4826C265FCE04E08CE99 /* CTCoverImageViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = FD9D4485B60922E08545942235FEBA72 /* CTCoverImageViewController~ipad.xib */; };
+ 476202BA7833E41818E2B509FA6B394D /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F1382CBA7D38B10646600BF7D8B135 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 47C8A6F0E492B9DC12E9C79869BB5C40 /* CTCarouselImageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34D731CDDCA2D8E3C6B7DCCFBC9B0546 /* CTCarouselImageView.xib */; };
+ 480B3D6EFCC7631150DCE87E744D08FC /* CTBaseHeaderFooterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E7F32C6348442E0E1840397E590C23F5 /* CTBaseHeaderFooterViewController.m */; };
+ 481B69EB1F5B57F7AA8F1770685D97B1 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA5B095E2FB7AA6951152FAB3E83B14 /* SDWebImageDownloaderOperation.m */; };
+ 4901E2BD6F661374C02D5A44FE492C5A /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 02311CE61069D208441E5B078A33FB22 /* SDWebImageDefine.m */; };
+ 4A39BBDED625C0418F5B9B24E28C1791 /* CTIdentityRepoFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C4DAA74B65C6F03D8CE73425C5A2328 /* CTIdentityRepoFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 4AB7091330FF83719CA4CE8333A64111 /* CTProductConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 847E606DDA0501FED4C32EA8E7804847 /* CTProductConfigController.m */; };
+ 4C90C485440E95E7CB652F3CF7D1AB11 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 35EEEE6B6E86E8340A44C76BCEF9BA17 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 4D12C09EF697B35B27CDD3C453DB3ED0 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 76268F21E7B57C723B2979FA32A74A23 /* SDImageCoder.m */; };
+ 4D3D27308361114A477D6FE0CF8AB34E /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = E289B7B73B4385A30E303118EC438207 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 4E9334747279A92760D5B7641B552420 /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2384129049A308CD42673162F103FA3 /* SDImageCachesManagerOperation.m */; };
+ 4FC5548B8EB3852712C26105B1DF1E35 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C89867FBC12FD83E74AB386E1799561 /* SDWebImageCacheSerializer.m */; };
+ 516C00946B53A1B8D038EFC364BE4926 /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 053C136B3BC99422F0649E5D9A803E1E /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 524DE64A225534173770A3637C7DDEF6 /* CTInboxMessageActionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4D8BD06F3A9589ABA1F8363DD7288A /* CTInboxMessageActionView.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 529948F715DF42A81ED9FEC9F097A68E /* CTInboxSimpleMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F153855870EB67B7CAF4D6056C53EA5 /* CTInboxSimpleMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 529E11DB49D20F6F197033D97DDAFE36 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B15E720C0279E0855D9DA4360415E0F4 /* SDFileAttributeHelper.m */; };
+ 5312B16F9B1F0A29AAF9E7F8E2B95ECF /* CTHalfInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A5BE04E1E85046672FBC8409E5807B6A /* CTHalfInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 53B69EB81A9CD35BDC268C96F18B7460 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9058F96D704819B2A0F6684B39B0C099 /* SDWebImageOperation.m */; };
+ 5422B2A45FA1F2CD6A0E7CA096A02014 /* CTUriHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E4DCBF7C07C7AC2A2E45215B402CBA /* CTUriHelper.m */; };
+ 545E92A970E59E1C3D723ECAAEB9D334 /* CTEventBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 388808CAD70F9737088E9B86D3F5BE2A /* CTEventBuilder.m */; };
+ 5562C5F2CC6EC70F5F82E5C4B847623E /* CTValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DD20275AD78AF66C00F374DCF48875D /* CTValidator.m */; };
+ 55D6EF9B6B1BF2EACBF498806CA9EE50 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B06FBB54D9B7EE80723DCAC355B68688 /* SDImageLoadersManager.m */; };
+ 573DE84D5AA003B6E28D2E202F5D4226 /* CTInterstitialImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDF6EBDB011A01BDEC0892C7C892A8D2 /* CTInterstitialImageViewController~iphoneland.xib */; };
+ 5A2868AFF20F7C2A55B3562E0F3DF488 /* CTLoginInfoProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D228E1C1BB933F5F7D931CBBEBE029E /* CTLoginInfoProvider.m */; };
+ 5B6655E256A273FA906EA2FA38EF2A55 /* CleverTap.m in Sources */ = {isa = PBXBuildFile; fileRef = 28CB0DEC3C288C1997C84C66EFBC6A38 /* CleverTap.m */; };
+ 5B6D849625A97A4BC849357D3A44237B /* CTInboxIconMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CFCAF6B6B89C1376A6B07B1945B1A795 /* CTInboxIconMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 5D962E49FA6A3E829B6948EF0322A0AF /* CleverTapJSInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A86153196CF9C1F723EB97D4A3DB8B /* CleverTapJSInterface.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 5E9EFDF390686FA5A58B77E7EF30CA38 /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B24EF3897EDEBDBED3E2C24BDC362C42 /* SDDiskCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 5EAFCBAE4CE10EF71CA256E6336B2108 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 474302FFBE03F657A06E481B4EA5B280 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 5EB8CB2AAF6CA659B58D3A736559306B /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED26E4A9F0A0D8C6019314BA10BC0A3 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 5F061ACD532175D871C17B4B6E6D4903 /* CTRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 640D44F41E9521CA59D255ED1C7BB301 /* CTRequest.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 609D4DD1983B6B394EFBB8F4E5854453 /* CleverTapEventDetail.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9F8F922FB769E9F3BDBA38BDFAB227 /* CleverTapEventDetail.m */; };
+ 61303710B87B190055A33B8281023338 /* CTVar.m in Sources */ = {isa = PBXBuildFile; fileRef = B9B69F82E86BC16B140603FDEB70EC7A /* CTVar.m */; };
+ 620698D032C192CCB6874A6647981702 /* CTSwipeView.h in Headers */ = {isa = PBXBuildFile; fileRef = EEDE444CFDF1DF731AB303A32A838503 /* CTSwipeView.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 62966FDBDC39A4CB16FD987F5FCB1999 /* CleverTapProductConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BC9ED9FC52EA1C2335A86C36D0153FB7 /* CleverTapProductConfig.m */; };
+ 636F9B282470CAA25EC8F3160C843934 /* CTCarouselImageMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4189F6DA156AF3AE1AAA33374F68E897 /* CTCarouselImageMessageCell~port.xib */; };
+ 645ACA6C10E570578FE59358E862FD36 /* CTRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF48B79E99B4A350CEC53C1BBF7698E /* CTRequest.m */; };
+ 64C8DD65D91C18809E4F9A7F789A41B2 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD9EFB37C5A07AD5B5727828379B6B0 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 660FFEFF13B1B084568521FBED6E4DC9 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = F4ACA7CEF35AE42ECAE3999491484DB4 /* SDWebImage.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 66269B65F63033D13A3BE501B5210D8C /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 26515B47DE93CD0684F895476CAACFEF /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 666F613CF61B5DB6B100BC86D99169BC /* CTVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4DEF8806EBCA11F17592C36CA51BF1 /* CTVariables.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6742148DF6270783826488F3B1B0EB3D /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 039AA853A697C076592ACA207CE2AF79 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 68C7CF4CEA62E4C1A626470BD6598AE1 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D1917471BC76E400854CC4B21A48685B /* SDImageIOAnimatedCoder.m */; };
+ 6AEC2DBBCDB6587E3FB7FD1F0A8134C0 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 68D0F76361672D5AE19AA7A3E1F17994 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6C05124CBF889F10D90D2B4A108C2BEF /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = B19E0B4BE29BFF5BC50A0801236C1C33 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6C27F1CCDBD1B40C796BB6EE179F01CF /* CTKnownProfileFields.h in Headers */ = {isa = PBXBuildFile; fileRef = 8841E719304AED7FA8CD67FE2F5359EC /* CTKnownProfileFields.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6CAA062EF917428559EE37635E8CF794 /* CTCarouselMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = EF3A3BF322621F36A6739CA93B8333DD /* CTCarouselMessageCell~port.xib */; };
+ 6D86B508A8F35E1E9A3DB85BE4391D96 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = F0554B65AC905E501684E293F224CCF8 /* NSData+ImageContentType.m */; };
+ 6E2EA86FFCA14D7C322D5D3477320315 /* CleverTap+PushPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = C21113C7ABE5D58C7B5D8A767AB87EDE /* CleverTap+PushPermission.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6E6EEB76DC9751CB43467F014FAE7B87 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 10DC85093C083DCA6376C8D57645F961 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 6F5BA8DCB88130D9136674325B91CF9B /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AE4CA16BD666E24B4AC075BA5B96D99 /* SDAnimatedImage.m */; };
+ 702F88BC7A6426F94A9B459D89B3BF2A /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AEB5505CF6F5BC0AEE9EE21CA9C15B55 /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 703E247672BC3832CAE1DA941AB05140 /* CTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 274B8FD25E60B1498C3FD0AC25857C7C /* CTUtils.m */; };
+ 705ED92FD46E97B317B19C43532C5B5D /* CTValidationResult.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D30C8B7D1C43AE1F39FD51D4B08273 /* CTValidationResult.m */; };
+ 712476BDE78647D3B260BEEA93041473 /* CTDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B987FA4234DB3F9FEC1F86D423CA7CDC /* CTDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 715A235A646E349D505A9EF44F4CDF88 /* CTInAppDisplayViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A72A36156A912C94BAA848695334EC41 /* CTInAppDisplayViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 722F58A7FA1E73D7A5154AC644FD2466 /* CleverTapSyncDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C02DAFB9B96E441E90EEAB2911DCD81 /* CleverTapSyncDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 72DC5CF7654590CFD378AD55858DB0BE /* CTValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E2A239FE561CD142A1ECC72B363ACBE /* CTValidator.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 7326617ECB05F45D4A60F5E59D8693AA /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 9223119A5F096C85DC8630F36CC41AB4 /* SDImageCacheConfig.m */; };
+ 736B8BD2377B9C74B4F1C01A0159D7F6 /* CTMessageMO.h in Headers */ = {isa = PBXBuildFile; fileRef = 80142AD22D875552DC2089615F2E9096 /* CTMessageMO.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 736FE4E60F76C558900705C39DE95F25 /* CleverTapTrackedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8B5B3AC14A2DD84A689A8C9148B05D /* CleverTapTrackedViewController.m */; };
+ 73B71B427CFDCF39E0563042F056E6AD /* CTCarouselImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 630B2A2DECD33C49CE25BCCF77D89D94 /* CTCarouselImageView.m */; };
+ 745851E2F440002A047A77909B87EEB0 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = C637E0C4C13DE3DF36894148A5AFCDEE /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 7484F49930B3947827D08BD3C1040F3B /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF798E5C12FFAAF4D51475D2CA07E55 /* SDAnimatedImagePlayer.m */; };
+ 75876B7C53AA1D9B3E292EF1B01C32CD /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF3B281972C2D56BD7AA58176D808A0 /* SDDiskCache.m */; };
+ 759C6B9A997D88D7054567D2CD1E0B7D /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC91F1D9F6E8E4C530871882C4F595 /* SDImageLoader.m */; };
+ 75A865D36BFE4A7BEAB53945E2C8E045 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB240153BB1C2FE15F57B45E2402E8B /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 7676FF2B8DCC27BE92F5FA7688B825A6 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 029DC6B5F4343D282DF5BF3646AA3460 /* SDImageCache.m */; };
+ 771A2F2330E2D8C05DFB7045C957FDCD /* CTDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 700DE0D541492FF6D1D3D7595D969F06 /* CTDismissButton.m */; };
+ 771CE79DB1987E9E13B9EDEB98F0311E /* CTSwipeView.m in Sources */ = {isa = PBXBuildFile; fileRef = E5420850D79BA65C8EA696A2E2B74D03 /* CTSwipeView.m */; };
+ 78A72CD4420434DFFC70C9F4D4E3397A /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = F64B36E4B224329BBC5FBF3F9F5C8759 /* SDImageTransformer.m */; };
+ 7995CAF0124A90B6D97A01454FC017F3 /* CTUserMO+CoreDataProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D6D2BC06B95F102A95219E63B3DCEE /* CTUserMO+CoreDataProperties.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 79AFC5D832CC0ED64ED86C50C7E6A008 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D4B48E4C210929E9589D1100AB941E /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 7C65C3EDF953B229F56CA70CEF6D4248 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F2D7FA485AF4AD67531F65470D828E95 /* UIImage+MultiFormat.m */; };
+ 7DFEB22D8A6C923AD3EAFD643A81F7B8 /* CTVarCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FFA9E8D85B6EEAA2DF70E6D722CAA667 /* CTVarCache.m */; };
+ 7E05780700B2B458CDB4875E0B07369B /* CTAlertViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DC36655B4D1581FDFB6B14F3C6D1E2 /* CTAlertViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 7F390C9AE194F1A165C8B0BD248EE0E3 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CD44EBCA750A1B13B076979CB06155F9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8038EF8B8E78E643607328EF4E232E79 /* CTMessageMO+CoreDataProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4DEF7EA2EEF7C84BA5F5382102FF77 /* CTMessageMO+CoreDataProperties.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 805CF9548D1328B9A26AE041B03525D9 /* CleverTapInstanceConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = B503F11D6CAF66334A97EB5FA745C44D /* CleverTapInstanceConfig.m */; };
+ 80C4E765700F5F214D8D7932D916BA87 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 50AC1B40BFD9F8DB29D69FE37DDD5A66 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 80EF1B18D239DE843B6944563EB94E42 /* ic_pause@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 73160AE1D1F3C62D3CFC44F9A9AFA032 /* ic_pause@2x.png */; };
+ 812A5A89F37B2A712A01CBB44EC03C8B /* CTCertificatePinning.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C2D48885392DDAB8C17092E4EAD9B2 /* CTCertificatePinning.m */; };
+ 812FC99E5B68A330676F25426C798455 /* ct_default_video.png in Resources */ = {isa = PBXBuildFile; fileRef = 18A60941084FFBED607414476B58A2E7 /* ct_default_video.png */; };
+ 817ADA06E286FF2F505028CBA396D02B /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C1216EF89AA18DD4217278825E018FD8 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 81DDB86172FDFC68B1610AC7DE57740C /* CTFooterViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17074DB3E29934B1BD5CEAB8646E86EB /* CTFooterViewController~iphoneland.xib */; };
+ 821DE5A140F7376590FB766DC1AD3175 /* CTInterstitialImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2C9CF2E2B827D09CAA7FBCFFDF6EDC /* CTInterstitialImageViewController.m */; };
+ 822F1836ABD5DC987348F2F8A2E5421A /* CTBaseHeaderFooterViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9F39AAC74118DCFDFC537921D37BF9 /* CTBaseHeaderFooterViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 830D815988C9F092F8611A4A91159C89 /* CTPinnedNSURLSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = B3A0A7FA1917A2F9BD266EA1B248D28A /* CTPinnedNSURLSessionDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 85341FF8594F27028117BF8D54034A2D /* CleverTapFeatureFlagsPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDAE7711879A5C3246459439F8D05BE /* CleverTapFeatureFlagsPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 857BFF9C85E55826E1BD7266F80AAC11 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D4CFD8D6B56BA8EC83D432EB9E29754 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 89BF6182BEC8C667EF4088EAE5D663AD /* CTInterstitialViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = AECC5FFB054750810D65324CD9C840ED /* CTInterstitialViewController~iphoneport.xib */; };
+ 8B1A4F5AF17EEAF769E0F87112938436 /* CTFooterViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9E1C1344106FB036B19AAE79D5FF8983 /* CTFooterViewController~ipadland.xib */; };
+ 8BF9069DE6978F226A50274D120942C1 /* CTCoverImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A01E8D306DD807DD70EE6C69EA745B42 /* CTCoverImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8C11758A0D911C09908DD2A4D8C9581A /* CleverTapJSInterfacePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C7701B9AEE68F00BE68BAB3888A54C72 /* CleverTapJSInterfacePrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8D2E36A5640DBBE8E0AADF287184D121 /* CleverTap+SSLPinning.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C29C3AA0CDD6D72DAE6C9465271799 /* CleverTap+SSLPinning.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8D31F5004FC3C35BDD4E2478B3436E49 /* CTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = FC375CFD124928065969D8C432D88146 /* CTUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8DDD2C7B0E3FA5E30F6322C53B956614 /* CTMessageMO+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = D83A587102725CFA2B87C79A9D77CFFA /* CTMessageMO+CoreDataProperties.m */; };
+ 8E4CE058E72A6D414FDFE724FDFFE21F /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 54533E358EC0BB8F88B8CE800B3155AC /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8E652D74E0510F14499415D19963ED31 /* CTCertificatePinning.h in Headers */ = {isa = PBXBuildFile; fileRef = 7105804B4EDFB9C3431CE93921E7D60D /* CTCertificatePinning.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8EEE9F469D292C4E10910F99C17B7B3D /* CTCoverImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6646ABB6FFA9E81CA56737DC14680B96 /* CTCoverImageViewController~iphoneland.xib */; };
+ 8F8E4E3BDE87AB2A9E19E58E8DF8995C /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 16D02024458EAB232BA12891AD0380B3 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 8F9CB9C429F21097A50C567A3F10B4DB /* CTInterstitialImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0E3DEF3A0F8263EB93C203B353DCFAC1 /* CTInterstitialImageViewController~ipadland.xib */; };
+ 8FB6DBB58C0CE88F882A5E62A418928D /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = F0EB98CB11EE21869F4611899195CC03 /* UIImage+Transform.m */; };
+ 8FE5F56DFA35C5B05EEC5FDACF5FCE8B /* CTInAppFCManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BDAE48AA1C47C34D3627DFF3BB9855 /* CTInAppFCManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 91C717BA899BC7F766408D6BF2AC098F /* CTCoverViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3FA008F1C8309BEFD138C22BB8B9F649 /* CTCoverViewController~iphoneland.xib */; };
+ 924723E6C4A0D0664F2DA11C767B4967 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D574AECCA07209855A039D16C68A64B /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9274E0A19E004219DD8117483C007E9E /* CleverTap+CTVar.h in Headers */ = {isa = PBXBuildFile; fileRef = F5FD179158AF237B12219C05D1F28770 /* CleverTap+CTVar.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 92BBD2D9F39CD902102C7C1CA583168E /* ic_pause@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = B26258BD72C158EDE1CC947EAE7C3253 /* ic_pause@1x.png */; };
+ 92C639585D267E345246567C59DDFCE8 /* CleverTapInstanceConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 789AECDB6BCEC4052AC168E08651DB40 /* CleverTapInstanceConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 93B1C5DD463CD1CF11E83A5036926EF8 /* CTHalfInterstitialViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92D3AC6F9BEF3101CD0789592594E2DD /* CTHalfInterstitialViewController~iphoneport.xib */; };
+ 93F69C59AAEE2FAA36886F1A945BFC59 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF0A0A3A4355D1B45BDDD11C05A7D64 /* SDWebImageCacheKeyFilter.m */; };
+ 95761C373BC1A3F593996F8111661DF2 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = B5709F67519EAD8895496BBD72FA11C7 /* SDImageGraphics.m */; };
+ 95CECB3F23A3F143F424FD5EC8C837C7 /* CTPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E09B0FC2D55EB382E67C58215EECDC6 /* CTPreferences.m */; };
+ 96E8796D194F972F1B9D09D9375B1E64 /* CleverTapUTMDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B641C4C300927F8E23F5FB9593879E /* CleverTapUTMDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 977F254B471D2BB7509D29C867614EDC /* ic_play@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 337056D0046D9B8DF1E7AE7E91938ACA /* ic_play@1x.png */; };
+ 97ECCF0144F12B405B2819B1EEA0DFC2 /* CTAVPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 151964BDD6348393DEAD244DF26EB2A3 /* CTAVPlayerViewController.m */; };
+ 98EA9F27C1EA4F4223730AB27E2D7385 /* CTLegacyIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA9AACA23F6CA2954A4476A7BE96B47 /* CTLegacyIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9A79A76CBB614E968AECC2B3302F30AF /* CTPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = E9A1A6516E49A693CDD84104BF69AB55 /* CTPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9B03233ACAD99B0BB7EF217E05E2A80C /* CTVar-Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 098C3FF5AE525ED63C5DD2E41B30B70D /* CTVar-Internal.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9C6082A79B7A329BEE48E265529661CB /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D0EE2622AD7768A669E399E39BC28E72 /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9E11BF4FDBDA51B1484A7EEE7EFA922E /* CTCarouselImageMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 04A9A894D36D94E0CCFBD33FB53D7BAC /* CTCarouselImageMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ 9E309DEF986B49089ACF9C686AC7AE59 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE3A8690D946A534AB9F0B67CFB1342 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A0EACE749CB50E1BAB3A8A12ABAFC890 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F24AEB669B41FB840FC3265994A7B6 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A14D29E8B4B8C51F52CD9F5544A78962 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A25DC0C542BAA80A8E2F78B2669DA04 /* NSButton+WebCache.m */; };
+ A1E15FC5DA8FD6B8F027801ED30AEE4A /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = D6BE7985F78AF20EB6D10ACCEE52B681 /* SDImageFrame.m */; };
+ A2FD151569340CDA55032E4FEA9207C2 /* CTInAppDisplayViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B6CF8DC46A0593542A32C1422AF63DA2 /* CTInAppDisplayViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A4D1E4FE505B3D2247B61AFFF22652D4 /* CTDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A86E5FDEFE99EDC2EFECFD36BBB923A /* CTDeviceInfo.m */; };
+ A5A0D1E9940AFC6D0901C08846C821BF /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = E2198D00B5BC5434ECCF179F99E0003C /* SDWebImageDownloader.m */; };
+ A6296F1EFAAE17936E3A7EEA4671A799 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D24A0C002E081DAC44AC5CFA0CD927 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A64624B1476619D64A7B575A8C7DDFD2 /* CTDomainFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 08EE07580B26497F4AB762EB97F9BE83 /* CTDomainFactory.m */; };
+ A66B7BCA4A4810A3568FDC9A129E6A1D /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8D2DB4FBD399283936E79054DABE66 /* UIColor+SDHexString.m */; };
+ A681734BAD5DDEDC452B5D3D3AFC81CC /* CTFooterViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8356190F1BBFC342C1D5C7369D99B19A /* CTFooterViewController~iphoneport.xib */; };
+ A68D6CFE5F029DA9DC6BFD7CB1B3B540 /* CTInAppHTMLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 736C5DE6A312E3F1994B1BA46B0AA20D /* CTInAppHTMLViewController.m */; };
+ A6FCC065E8F70D674AF31CC162E0574A /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B0304615B87F014C7A2F955472AAA872 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A75E62BE82532A5D14D5C75081DBCC8F /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A506B300096DCFD3B2B39405F54DA2E1 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A8766A8C9466EC9C9F64227EBF00E753 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = CD9461F3E4AD7B23AC099FECFD220030 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ A8DAE80B5FBB0D8B75AE0A8B11A84DBA /* CTProfileBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = EC269F7BBFC8824572FF8A98C3BC608D /* CTProfileBuilder.m */; };
+ A91667ED9740DB8C964E9A2B8B5C2C89 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B69B0DEB40C442AB2ADC07B34BC85B /* SDWebImageManager.m */; };
+ A94AC3A23E362991EECE644B96276B40 /* CTCoverViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F840FF1C673738137F970C64980B8AD /* CTCoverViewController~ipad.xib */; };
+ A99D50B4A78430D997B0CBA8D9B24807 /* CTCarouselImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 56F276190FFFDABDF3393EB5E50C6321 /* CTCarouselImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ AAC448D46DCF680244C92E01A0CE3B32 /* CleverTapFeatureFlags.m in Sources */ = {isa = PBXBuildFile; fileRef = 049115AFC648ED4EA10CA89F8318AB28 /* CleverTapFeatureFlags.m */; };
+ AC19DC97F48F393D0C870DA11010A1BD /* CleverTapProductConfigPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 14954B163FCFE6D39F8B5008413C1938 /* CleverTapProductConfigPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ ADEA19F26D883549E2C75E152332157A /* CTProfileBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE82619B3B0BB028ABC83B0FD8D52E9 /* CTProfileBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ ADF5EA23CAACC5BA9B5E657DF18FA770 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 71088BC74685C239ED7D1AB536A265A6 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ AE204FF833B93F7B6020FC4BE35DD532 /* CleverTapInboxViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A00DE791EE1ACCEE67F26E19133FD958 /* CleverTapInboxViewController.xib */; };
+ AE2226D90D76CB083CBBB796210CD2BB /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F231FDBE07DF2E8598B84AE6F42E67 /* UIButton+WebCache.m */; };
+ AF06E2ECDDB23634810F41285279A400 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F3643723A955854CE1093234859684 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ AF8AB2CDC7C835A8484A8065F8081A55 /* CleverTap+FeatureFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = AD3389FCCB97A8B643FE0B72D4910E9C /* CleverTap+FeatureFlags.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ AFA25A1DC0DCDDA040A263FF6CF5E5C1 /* CTCoverImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = B18A879294BF1D02F8318F5E67C6BCE5 /* CTCoverImageViewController~iphoneport.xib */; };
+ B174E305D959F4C2DA91BD770E0AA54B /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = D7C9505ADF1E9A64A18F43664702B882 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B272DE47E7E1AF5421B7EB2CE0782E50 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7813CB72482158D2DD680BEFDD9AF1FC /* SDImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B337976E837755E90DEFFD9AC3298DAD /* CTInboxController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4EB1BCD53E5C2EEF147ED812D0C967 /* CTInboxController.m */; };
+ B39E115163ADCA158508B98C03397402 /* ct_default_audio.png in Resources */ = {isa = PBXBuildFile; fileRef = 8758D25C574A6464BCC80D8AAA3B42CC /* ct_default_audio.png */; };
+ B3B7C538B6E2593F8947B0F36FCE6789 /* CTInAppFCManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4E0240BEABF8BE5DBA73F3EF75E89F /* CTInAppFCManager.m */; };
+ B51956F42EE25360394569477E71E33B /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A11EE5FA06CC91AD6CC0EA0DAD765AD /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B560936FA4238CB3913846DF603E7B98 /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 077D8FC4221F09FB2FF65552161F02D9 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B57EEA5F2945345F480557941F0D0A3F /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 07DD50F408FDA36B256D9C992D386256 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B687BA5F33B9F64E2AEB0EFBFBC77A74 /* CTAVPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F457C8F245828D2FB9C428C43743DA0 /* CTAVPlayerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B791AE397AF0BE4C40750DE519252B58 /* CTCoverImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2F0CCB6AB9EAC5621C7A4812CC7B741F /* CTCoverImageViewController~ipadland.xib */; };
+ B9656751C0B2274740DF590BF1852290 /* CleverTap+ProductConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C4B1B69335DDD69A4416BBCF44C29C /* CleverTap+ProductConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ B98A31A62C1C0EA6AD1F06A3D066EECA /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 14FEEA8125F157B2B695F2021FD28BEF /* SDWebImageDownloaderConfig.m */; };
+ BA5F4BC47953F6531BE4AF74E4E88FEF /* CTImageInAppViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC8EEF178D1406F1F0B64C3623767D62 /* CTImageInAppViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BA798218A36F991B7100D2176E2BE3E6 /* CTHeaderViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 654CEF2FF9342DCF99C2CA00FBF7FF60 /* CTHeaderViewController~iphoneland.xib */; };
+ BB304B77AB410115724DBD09030740EC /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 178165C3620183FC34A1C61B401522E0 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BB34BA48B87AD28E68EAD214759D11CC /* CTPinnedNSURLSessionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A722ECA0B946FDE37FB9EAC131884F82 /* CTPinnedNSURLSessionDelegate.m */; };
+ BBD3C597569CFD970F525166149E8077 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AE881B1848CC3A82B696124CF9F9196 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BCE0C3C40292E12AA7872244E23FBBE3 /* CTDisplayUnitController.h in Headers */ = {isa = PBXBuildFile; fileRef = 50297EC54776A6B825653AE3B69F0B1A /* CTDisplayUnitController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BCF51E69BD0C4EE650D2A4745CB8D977 /* ContentMerger.m in Sources */ = {isa = PBXBuildFile; fileRef = D3C029CEA4014722106EB5B25D844546 /* ContentMerger.m */; };
+ BDC659502BBA2D065237085C1D0E4AC4 /* CTInterstitialImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 15382C8DE76EA0E65686C1711F2FC80E /* CTInterstitialImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BE2866313E68B6536E8CD1CBB4AEAD33 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F93FB6C98B83B0779436D3FB5258689 /* SDWeakProxy.m */; };
+ BEEEC5D7D4D87EC865FE7C61F11B119A /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 755C72A35E5051DA700AED8E6BE7A38F /* SDDeviceHelper.m */; };
+ BEF6C73858CDC6437684359B15BF79A8 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 325B01B581855146EA7F62EA9083EE76 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BF75C9EA6AB64A9FD09B310308A73969 /* CTRequestSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CDAA579ECFEE112C1038377280BCCF /* CTRequestSender.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ BFECA8BD55997FD41C36076B7070574D /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7193DB664DE2D593DF3024BB2E5CE869 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C00738098B0316D8DE8D046EF7741DBA /* CleverTapPushNotificationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 32375B1CFB51BD51EFA8FFE263A283C8 /* CleverTapPushNotificationDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C0A618B08ADE9F3F42B2296A0EB6C936 /* CTRequestFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E22FD9FFE6ECABB54B00457ECFAA3835 /* CTRequestFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C0EBB857C0CE219DF86EC11740FB344C /* CTValidationResultStack.h in Headers */ = {isa = PBXBuildFile; fileRef = B7910B1C64189A8D0D8851CEF662549D /* CTValidationResultStack.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C1C54C41536332E28B6FE40E8A200582 /* CTInboxIconMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = E6B0ABD50999FA13A03E0D81914153D4 /* CTInboxIconMessageCell~land.xib */; };
+ C2187821BF3A766769C77EB83139A457 /* CTHalfInterstitialImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C23CD67F921F303A7EEE511A7100875 /* CTHalfInterstitialImageViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C254428715F5DE868E91C9CB3D7E4B61 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FFEF7A1EC3C534D688767B27AFD00FB /* UIImageView+WebCache.m */; };
+ C295E15EAA44297B701841991A9A844E /* CTFooterViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7502CECEC2440E4DD81DBA46D9201379 /* CTFooterViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C2AB1E9ABF89B913DAA6606B49A99A10 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F282951992DE86428E642BF031C0B8 /* SDImageCacheDefine.m */; };
+ C2AF1513206F5C665FC5D4C7350461C0 /* CTCoverViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DC096C2F42FD8E6E49CF512117B3BB41 /* CTCoverViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C4805990167E7924677730A844691221 /* CTHeaderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE960C042F15A01816F4F93DA9E1BA27 /* CTHeaderViewController.m */; };
+ C5D8D571544AEB12B0DA830C1171FFEB /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AA3523DA21F9568BED60C63AF2E8265 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C64DD3904EBFE9D7B3089F0767A7F571 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F1B4CF1FF90A8F4CF9240C24EFE569 /* SDImageIOCoder.m */; };
+ C675C32BD5D177C5EDFE6062A7943D11 /* CTEventBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F188562C55AF10922CE49A375732AD /* CTEventBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C793B2E1C0D0D43B68EC56ED3EFF82FF /* CTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 62AE043505F38506F90A81C9BD24088F /* CTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C8A529DD9AECA0511D80C8D96F63DD89 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = C29A03C2AFD4B0F5D8BF98023C6FF1DB /* SDWebImageOptionsProcessor.m */; };
+ C94504ECED3B417B2DAE0238494CFA4A /* CTImageInAppViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E5849BB1971C0E916A88560C4C7BC7D /* CTImageInAppViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ C95E9F06CFAAA2800E66689E7EDB4DC1 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC2E660550CD31850654E4D1D1930CB /* UIImage+GIF.m */; };
+ CA5866B60FCB3D12D952E4935C6B33D8 /* CTHeaderViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5348BA9393A2E2359BB7AEE6F72CD35D /* CTHeaderViewController~ipad.xib */; };
+ CA586B80A71C55E490F31407C1B237A5 /* CTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9005C3A85A2F01CD4DBB8C7C454E5848 /* CTUIUtils.m */; };
+ CB240398BBB8289E97AC93FDBF60887D /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7091F38357BEF7082868DB76FAE8898E /* SDWebImageDownloaderDecryptor.m */; };
+ CB51FC80B676EB93558B90AD1217D925 /* CTDisplayUnitController.m in Sources */ = {isa = PBXBuildFile; fileRef = D53EF57DD295B8D287FAF67C46C2A538 /* CTDisplayUnitController.m */; };
+ CC511B3DBE8CDE60607E7892DA8572F0 /* CTUIUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B187D652574E88A55CA55A8E8C3EF812 /* CTUIUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ CCE96698BA27787FDD20A297C0948CA7 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = C6E5DD3F3D838DF86363F7985A6951C4 /* SDDisplayLink.m */; };
+ CD17B11DE2F0FDD2CB4FDFEA73DCCA06 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 577945C4A36E5A326590B3E2CE3261D1 /* SDWebImageCompat.m */; };
+ CD8ECAD77E23980008149C61C2EAD249 /* CTCarouselMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = AE63C5E4788D3C82980131B21AECB899 /* CTCarouselMessageCell~land.xib */; };
+ CDF832D381251B812D9E3540977AC0CB /* CleverTapDisplayUnitContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 83B72672CFF90E84BE416ACB8A78A3CF /* CleverTapDisplayUnitContent.m */; };
+ CE33E388D9A7A117DBD6FBEAE016D6DD /* CleverTap+InAppNotifications.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F72BE1573DD68EF528B919FA972994B /* CleverTap+InAppNotifications.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ CE98BF2AD9DDB561A9F182BB984AEF4E /* ic_pause@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 56265E3EF3C54778C8E17FDCA7AEF211 /* ic_pause@3x.png */; };
+ CF6580BD4418487B47CC7B0B5227A74D /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 059FB3ED6C02F9C1C6843439DA6CC598 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ CFEB6A561EB131C5A74712A9643DBF90 /* CTImageInAppViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DB860DA3CD1868B7D764240D70EC96F /* CTImageInAppViewController.m */; };
+ D0751E3FDF0FA0A602152A9AEFD7FEBA /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D446813CE030CCE6CF411992B2A263 /* SDWebImageDownloaderResponseModifier.m */; };
+ D11B4AE6C6FB8558E1D493E23AC7FCFE /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC1DCE26164671BD35675BA6B45A5AD /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ D1D8DDC9C78A1B2F93A75ED7FB4581A2 /* CTIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F004D1418A6071434F554C1E0D71A1 /* CTIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ D226F01E7A4BDE041C30561F88AFC97B /* CTMessageMO.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5562928354B06BCDAE767BA3B43C27 /* CTMessageMO.m */; };
+ D251FA0095A9D50F938EBA6B9C409602 /* CTNotificationButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E6641952F300E5604649DFF6C8B427D /* CTNotificationButton.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ D417BEA908C874963837BF642192A41C /* CTCoverImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88EED7FE2B8CDF0BF33275065C84E390 /* CTCoverImageViewController.m */; };
+ D422E81D0FCD039FC61C70B53C1E2F54 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F18856EB43920E1377504E0E79A2410 /* SDImageAWebPCoder.m */; };
+ D46C9AC4B01B8941D227C30EB1513075 /* CTNotificationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 49E028464AA134E465C7DC4CB4B98DF4 /* CTNotificationButton.m */; };
+ D49EDBD2CBF6837B85479450CF5ADF23 /* CTHalfInterstitialImageViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1C92AAA703796848D77C8068C6ACB96A /* CTHalfInterstitialImageViewController~iphoneport.xib */; };
+ D4E41C6724B22D4A921C3037ADC792B0 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = A126E40197C1858FA6457DE6B54E59B6 /* UIImage+ExtendedCacheData.m */; };
+ D53D49F094B75EE95006055C7FBD8247 /* CTValidationResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 248C1EE517A4730DD9D44394EC6FBF42 /* CTValidationResult.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ D56DB08F1F71FDA1FDB1E49D49D07C09 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C5625DBC0E0D9A718B8A5684C4133F0 /* UIImageView+HighlightedWebCache.m */; };
+ D727EAA91B786ACC6DE7394BB0008F0B /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 62151ACF530E51374C39D364235AFA4D /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DA2F9D0C7106115B7DFEAE1090B9125E /* CleverTapInboxViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EB6FA72B18630E084FEED4B0D44D3B /* CleverTapInboxViewController.m */; };
+ DA7FA9E69BF1C060158DE3D0DA01D0E7 /* CTHeaderViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = 30CEC3B0B581886F8AE6FBA068DFDF4C /* CTHeaderViewController~iphoneport.xib */; };
+ DB343977D61E7C30BE64D1FCDE834218 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4631150502A4420731DFDEFBAE4900 /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DB6E9F134D7F87715468F30F6E3F6A11 /* CTInboxController.h in Headers */ = {isa = PBXBuildFile; fileRef = AA5942DD1227A4548F507E92FF8094FB /* CTInboxController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DB8AD2ADB6618A68C677E5B1A999C88C /* CTInboxMessageActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 087697AAF6B0D4B8DB52C4C882025713 /* CTInboxMessageActionView.m */; };
+ DC0081BD1C05D984DE0B61EE8F7B670B /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7378BA5267CAEEB070919189B66AC060 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DC67745F383858B61564CFFDF5BABA2B /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DBAE3C48569C3865DDDED3F61868882 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DCF812A58619784A1BF7E26A4CEFFD0C /* NSDictionary+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B321FC1147168F2D234C552FDCC19F /* NSDictionary+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; };
DDAD12CF785092BF4E3E3AA4037FCC90 /* Pods-ExampleProject-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC043161A0127E0690C5CA70DCA5EAC /* Pods-ExampleProject-dummy.m */; };
- DE04922F7E8833A826013CCCBB4019AF /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BDCA5A479CBEF9B892181A5D3815CFF2 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- DFA658B925C0032491A8A1EE57723B5F /* CTAVPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6129CCE4074C4684269F3E03785430AB /* CTAVPlayerViewController.m */; };
- E0B2DE75A3223D3468A67C3B91C9EA0B /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = F6C7586BB8EF3BE50BBB00BB8CFF52B5 /* SDImageCacheDefine.m */; };
- E0F45872C80F66A9B44061BACF6AC5A5 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E48469D3F9613046510073B7C379842 /* SDAsyncBlockOperation.m */; };
- E25E0821E78073B617F7EFFD9C0174EE /* CTBaseHeaderFooterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1793EF13406035CB7908922D224F7C94 /* CTBaseHeaderFooterViewController.m */; };
- E26AF8E4BEF23FB2440477A0C2225780 /* CTCarouselImageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 97E3F1FCE047B474B9F785B15E37781B /* CTCarouselImageView.xib */; };
- E271605B928F26FF8918896E66C198A4 /* CTFooterViewController~iphoneport.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC11B620445B5F2EDD7562B9F0D3ACCD /* CTFooterViewController~iphoneport.xib */; };
- E28C435245EC08C6D8E881F66B062A52 /* ct_default_landscape_image.png in Resources */ = {isa = PBXBuildFile; fileRef = E7851778CE612665F09AD9D2B9F2D9A3 /* ct_default_landscape_image.png */; };
- E3460E4E21A5B2DABFDEB61BA181EA56 /* CTCarouselMessageCell~land.xib in Resources */ = {isa = PBXBuildFile; fileRef = DBC32D282B692DE8B816809C00779D2E /* CTCarouselMessageCell~land.xib */; };
- E49CE449FD020D9D0D14FCA4829D3F15 /* CTCoverImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = F67B84360300584D6F809958C1B9A141 /* CTCoverImageViewController~ipadland.xib */; };
- E5B7B09B9B14CEDF89955F83CF5783B4 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = DB8D32DDEF5169BDA55A561A2652A25D /* SDWebImageDownloaderRequestModifier.m */; };
- E6251C1F7741F9E3B4C0BEF3729F8CE7 /* CTInAppHTMLViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 75B3CFC38824ABBC58BA8308B04C90A3 /* CTInAppHTMLViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- E625D1715493E43DFC0217C324EB1042 /* ic_pause@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1DE1ABA4124FC8B38FD6730F4AEF075E /* ic_pause@3x.png */; };
- E62620D70F2D5F7C21235310742AC057 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C48F24B861E6453ADBED947235E486A /* UIImageView+WebCache.m */; };
- E69F383946A40DF3AF6E22BE1D73CC6C /* CTMessageMO+CoreDataProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB79CE2027946922B384A82C109AC70 /* CTMessageMO+CoreDataProperties.h */; settings = {ATTRIBUTES = (Project, ); }; };
- E6B36C3465CE25372DB14A5EB0B1DC6A /* CTCoverViewController~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 365B2A2A19C53FD0DA42634DE2844C25 /* CTCoverViewController~ipad.xib */; };
- E7D6A26B2ED8C87BD37A0862C92F5448 /* CTHalfInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E082868493C6525D9DED98D66B6B617C /* CTHalfInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EA34B8A447C233839A392ACB5B621E23 /* ic_play@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 06A612B3DC0FBDE4A09916E453DC2911 /* ic_play@2x.png */; };
- EAB68564694A5D9F34E8FE92CBEF54A3 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A296FFEC70040B26528114F1BBC673F9 /* SDmetamacros.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EC4349F388AA240DAB6F1E53854C81B3 /* CleverTap+DisplayUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 615FBAC201C97BB559D8410362D37336 /* CleverTap+DisplayUnit.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EC89D097492D463517121FC42DB063CD /* CTProfileBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 25A554939917370879F458EEA747A354 /* CTProfileBuilder.m */; };
- EC8DA264C83FE4635DF8D05ECBDDF56B /* CTCoverImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A73649EFF82580D38E3F79F61D4F6870 /* CTCoverImageViewController.m */; };
- ECD517F0447F8039B27F44F236B78060 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C087878E088FE09B94BFCFB8E06540B /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EE5285664B91E8AE7C819878B0E89964 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = F8F21E1F65344857B4DDF90086E7FF86 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EE552CE31323D37E06EBAB41434E2FE4 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 033BD17E6BB04A6B7C86D7FDDE7A8F3E /* UIImage+MultiFormat.m */; };
- EE62227393F0EC1078858B6A606CD89E /* CTFeatureFlagsController.h in Headers */ = {isa = PBXBuildFile; fileRef = CC702A7E27F5806B3298D5C0A8B603AD /* CTFeatureFlagsController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EE8B017FE8C8EF34FC6A5E511CA6CB31 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EE98578BF7AE670C9CCE5F2A3031E6C /* UIButton+WebCache.m */; };
- EE9A250E34C0F78D11650E0673BFA26E /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 276E13A14ABF3CCD0E8EE8FAB928CCFB /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EEA69CB4827DA9EE565C2EEF76FF27FF /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = E1060D767592EFFBE89138EF9D81B83A /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EED1681DF2F8B860C4A5764AB2DB6A99 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C3A77652661EB8782FBB115D20F728D /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EEDB6DC7E3B72BD1988D1C6886CFB85C /* CTLocalDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = FA78454274A9CBEC1AD24CECBD3329D8 /* CTLocalDataStore.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EF1C89A06EA9DFDBC5074D04765B68B9 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 595DEA2D8B6FC68402BAD6DE0A0D80E8 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
- EF9303649BADED9A81EC71BBE3309055 /* CTLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A067903B414F581D6FF39779F05D6E36 /* CTLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F00ADE045B9F3D266EC8381C5F245A79 /* CTLoginInfoProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 66C5D9D96462BEF0B3A79581DBC220E1 /* CTLoginInfoProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F2177395C320C718DA537EB4708F0628 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 978762EA9EB02FDC6F4A9E3B2A6C378E /* SDWebImage-dummy.m */; };
- F2864E30EDEBB6B8680B32B4BDCAA9AE /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 201377F74FD421E0D078F83614DC2290 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F3C081ABD6E7FD78F32CD012FAA9626F /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 677EAC72DE72381FA70EE618BB368813 /* SDDeviceHelper.m */; };
- F3C0EE0D4710EB2B079BE91E1CF0E758 /* CTImageInAppViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 13840C00464674B4D0D8F62C4B58931D /* CTImageInAppViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F40499F8B292281F2DBBC341529CF265 /* CTUIUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BC21AF264405254C0FD43A3FB3CEA59E /* CTUIUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F455EBA0B074D9D7A7A52D650BC6DCC7 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E24FB26B59AFFBE5A6D7903FB586762 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F540CB788AB09FC569F0B20F7CD08CD5 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5603437C2A98B847A4C1473FFDE76873 /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F56A5F29EBA58A109DF8C1219CD7CB92 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C078D43EF7C4DBACEB842400EA730F2 /* SDFileAttributeHelper.m */; };
- F7BC47B34713D3B3C8F2FAEC1A553DBD /* CTDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3B8CF15CE29D891A2D268AD9F71535 /* CTDismissButton.m */; };
- F7C8C293D1262379B64ABCCB0F3D6D1B /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = B85CE196B1296602AA96E529922802AF /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F877E00BBBF9CB336DE8582458675070 /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE99AB43A5D54C7057634AB35C1AAF56 /* SDWeakProxy.m */; };
- F8B2588DF313AC34535E4B2C8EE23D18 /* CTInboxController.h in Headers */ = {isa = PBXBuildFile; fileRef = 687789D2ADA5C9C64F30310F8D40F493 /* CTInboxController.h */; settings = {ATTRIBUTES = (Project, ); }; };
- F8D0E87FD8560892DE5051384B5DC5A1 /* CTCoverImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 50B9320078941BA8E9A69BE89CF895D1 /* CTCoverImageViewController~iphoneland.xib */; };
- F979D1BCF2DE46B536C6DD7A4B0261BC /* CTLegacyIdentityRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = DDB0E517F0C66B8396AFBB1552DB2B10 /* CTLegacyIdentityRepo.m */; };
- F984A29339A850A46F66B1D021B22EC3 /* CTDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE6DB459E0B2A1C4B8BB2937E38554C /* CTDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };
- FA5B35DAE054CF9EBBDED47793BDC0F9 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2764DB09501BF607C50C960B9AAC2BA2 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Project, ); }; };
- FAFA50E44578B9AEDA80876553B21742 /* ct_volume_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 9BBC3F495C6E7F4FF85301A22CC95FE7 /* ct_volume_on.png */; };
- FB5D8DD484646F46D4CA2A2DE24CC36C /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DF7715A5FFF427F7B16A6D4B9C7383 /* UIView+WebCache.m */; };
- FD011254C4F5B0E14DC2636143FE7CA9 /* CTInboxController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FA5F8BA8699D1FD664A4BC847851C9 /* CTInboxController.m */; };
- FD14B03FD8EEB9A8EA0ECC14C0ACCDF2 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC633F22C334C8A987C40E4C26453B7 /* SDAnimatedImageRep.m */; };
- FDA9AE77C80EA1A6FBBC541653BD131D /* CTSwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = E7D1CB2FE64A8567237BCC54BD448FDB /* CTSwizzle.m */; };
- FE4F52007F68746CCF6C91A198D0B157 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4B859055BF3189D4047D9299187667 /* SDWebImageOperation.m */; };
- FEF582F895624BCD69B43D03FF7CB66E /* CTValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = F114C4C845E747C3BCF66320786C224E /* CTValidator.m */; };
+ DE2FD0D6650AFE6EF392EF4CDAC888F1 /* CleverTapInstanceConfigPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B3ED5E2F671148F4B209D044672C81 /* CleverTapInstanceConfigPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DED73BA52C961AA64B50F8E9C1939CBB /* CTHalfInterstitialImageViewController~ipadland.xib in Resources */ = {isa = PBXBuildFile; fileRef = 066E3D76D48EB8E67689D966B62B6E7C /* CTHalfInterstitialImageViewController~ipadland.xib */; };
+ DF48FA7A6C5CD0BF647AF45A35A3C3C5 /* CleverTapURLDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E7CF52089CEF3EE9BEEF11CC107111 /* CleverTapURLDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ DF8E1CC3389C2096E6D0EBC55F9A8090 /* CTLegacyIdentityRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = C6757DC6B82EF58DFF4CDFF8AF5DA9BA /* CTLegacyIdentityRepo.m */; };
+ E013CFAA886F3B46AA2399993250C69A /* CTInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F6F448E033D207C0B5A914F8F7D834F /* CTInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E0359EDB819DC2F93941BF25F459B5E9 /* CTVideoThumbnailGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = D996468B3DA9D6181BE7C3FF8FD55F53 /* CTVideoThumbnailGenerator.m */; };
+ E069A28587B4A9BF0B192E82DBF16252 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 425B49983F8E78C240B1EFC28FD67E27 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E06C5613374063CC3E4D3E6129A8DD43 /* ct_default_portrait_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 42D5F27B93C393ED561D183ADDC802E3 /* ct_default_portrait_image.png */; };
+ E0E7F8B6D98A7A9C5AEB9F9BFB0E49D8 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD6F4BF66E533E9218C46D90A16A088 /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E1C741CFD5A606101B9B488155CC25CF /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0238786F75BE955F1873B0229B4835 /* SDImageCodersManager.m */; };
+ E1D6D80DC8424D3A48E8223732A3CCB0 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B91ABC4FE767EF9B29524FE05FE3B05 /* SDWebImagePrefetcher.m */; };
+ E222B4DFC8B19F98E5BEDDE0482CFFAE /* CTCarouselMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C2AC280BB3BBA0A7099C7445ED2595 /* CTCarouselMessageCell.m */; };
+ E2A6E8C8E9A98358C9840956F28F1FAD /* CleverTapInboxViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 966D64D7B66169014F8898D7F50D10DA /* CleverTapInboxViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E2AA528A6FA010CDB77A141AE8E35A9A /* CTLocalInApp.h in Headers */ = {isa = PBXBuildFile; fileRef = E1CF7F5F94D918FB697889AB41DE050C /* CTLocalInApp.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E2C1345CC2929503C59B535E97F2F8FC /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F258962D6F652EAC9445860BACB57B7 /* SDAssociatedObject.m */; };
+ E3155A925477FCF6AF7387EC671B0CA6 /* ct_volume_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 08B5A743D439D09526196C2FCE48E865 /* ct_volume_on.png */; };
+ E39235F3F1F9DFBD26CCD4544B91BD48 /* CTFlexibleIdentityRepo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9443631DDD8A059339660AB9FEA1C118 /* CTFlexibleIdentityRepo.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E41534761B02F107F25508BC893A6982 /* CTFooterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B8FCB2F86FCE12E98D2C33044F83CAD /* CTFooterViewController.m */; };
+ E4DDEA1AF0257E8D7B44EE9E88F86C5C /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AE4DED403729CEB9D785359DECA70962 /* SDImageAssetManager.m */; };
+ E56A30043DC367B1ADEF7BFB9A90E86C /* CTLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FFEF3FC39B711E2848C8D727E441070A /* CTLogger.m */; };
+ E5C24F35DBDD8E55AD712BCC98CF3838 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F960235F3FB5DFAA27E4480B1EEA073 /* NSBezierPath+SDRoundedCorners.m */; };
+ E5D25BF964176E3A889CD95B71AAAA22 /* CleverTapDisplayUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4805ADA4EFD933AF935333AD27026F66 /* CleverTapDisplayUnit.m */; };
+ E600955FD8449DE34B4378675474AA65 /* ic_play@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8B3743F53459AA3B740D28D8A8E8AFC9 /* ic_play@3x.png */; };
+ E64A99FA30036977964E0C53F39EEE51 /* CTUserMO+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = E3A2F23654A3C2CD98DFB07D7588EBFE /* CTUserMO+CoreDataProperties.m */; };
+ E669D73AA2B36D232CA4315031BE8A6E /* CTLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7E735946579028399ADA1E9DAE22B2 /* CTLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E675AF5BB17A8B39EB210EC168B43D6F /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B755830D786D72BBDE8DB5E6B2D97E /* SDWebImageDownloaderRequestModifier.m */; };
+ E6A74A81B29AC364ED9F07FB1345AAA6 /* CleverTapInboxMessageContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 36B44ED1B2078097B1E43BA6AF848623 /* CleverTapInboxMessageContent.m */; };
+ E73B4C8BC090976E226F30641D2765EF /* CTVarCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CD6B8B51F20248A21C4E51CB16EFC84 /* CTVarCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ E8C1CA5EDECE5A481B088E91682A770A /* CTProductConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0089F8E773D817B5D8800B77B7D580 /* CTProductConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ EA4387C372A3F49C1B98B48FB9925681 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 60EDD094FFF87819FBFBF49862C158F2 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ EC5B2DB0279B362B08145A11566E84EA /* SDImageFramePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 063991F4AF198D65CBD2BB1C1BB704F4 /* SDImageFramePool.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ EC7C9B9733155C8055210CEEC8AEEAAF /* CleverTapJSInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 0295F8FF9B3B7B18E094424ABB7E69E2 /* CleverTapJSInterface.m */; };
+ ED76DF67B96EE905579A4FCD017B7D91 /* CleverTap+Inbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F8C86FC239374BB7616CDE3817B0B91 /* CleverTap+Inbox.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ EE6EACC46F7891CC8958CC29D177B240 /* CTCarouselImageMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C6D076D530B0AC88BB1B995ADE8214D /* CTCarouselImageMessageCell.m */; };
+ EE84B43665C587A7D5E0B9E57F6D9AE1 /* CTFlexibleIdentityRepo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE9EEF963884F0F8D15FBFC7EEDEF1D /* CTFlexibleIdentityRepo.m */; };
+ EEC445B96AA258E0B92AD02D12F33E2B /* CleverTap+SCDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7A34655DECA81F9433460ED57974CF /* CleverTap+SCDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ EF9A6678FE66400B84FC3DF29582ADC3 /* CTHalfInterstitialImageViewController~iphoneland.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA6660AAEBCAF9D8645A2FC707EE87FA /* CTHalfInterstitialImageViewController~iphoneland.xib */; };
+ F058BBC823E1938010F421584E138A23 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE7DA7AC55C09B46CCBD5219EB43E70 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ F1C373A0AECE21C5F89F22C1D8A2E582 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 82AAAB32EFF03DF50DE0F3BDE9E08B77 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ F3C26AE7C6B4D9432FD13ECFDEDB21BB /* CTInboxIconMessageCell~port.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD786A5A50AD9691BC5833F0FB72D171 /* CTInboxIconMessageCell~port.xib */; };
+ F663B4E075E7EAF64C9B6888FC56CB3B /* CTBaseHeaderFooterViewControllerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5706ED3C925D81E1BB354639B6BE0324 /* CTBaseHeaderFooterViewControllerPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ F6C4ED97DF1B6373417FF22877A2EB49 /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 899332218ABE7C9D64AEADC9C7F09D8B /* SDCallbackQueue.m */; };
+ F6CDE491C3AC21E01D2994A5060CEA4B /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = FF79524D110999253A4D7D3C3A21FE92 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ F7813A192E54C146609290CB8C85887C /* CTValidationResultStack.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D365959CFBAC3B28AA36A62B12732A5 /* CTValidationResultStack.m */; };
+ F81D9791487AE3AE4E5A1E451931D85F /* CTInboxUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B09F4F4A7C6E3636869E687C31D1953A /* CTInboxUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ F86885445C3E89124D8063595658A414 /* CTRequestSender.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E9430F203DCC56F1B6D7DC59C4EFA5 /* CTRequestSender.m */; };
+ F8ABF4A4D106037955D3B507A8F7649F /* CleverTapConfigValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 815017DE486E64617014A132A508D88A /* CleverTapConfigValue.m */; };
+ F96FAF823E8AE56110C6A6FF42FFF63D /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2864CE6DB619F350FFC82A4F3DCB82DC /* UIView+WebCacheOperation.m */; };
+ FADA72DF5793702B1801FA3C2407CE7F /* CTInAppDisplayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A45FF12EC2F124EEDC357886E36B47C /* CTInAppDisplayViewController.m */; };
+ FC60003C5E6663FE1619C0A36E765BFC /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = B2D99040AE6765218BD146A3AC55D4B9 /* SDWebImageIndicator.m */; };
+ FD496D6A310888B03BBB0E2ACBECF063 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6B433616E53A15A97E841EC4A96309 /* SDImageGIFCoder.m */; };
+ FE88BBEF4D42D76E7EBA9CEC1DD4087B /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CECD3EC3D75850660B3CDCDEDB848B5 /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ FED1D16AA345A5F0949F42EBD38C0051 /* CTCarouselMessageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFE8B9444318520DC477422A5CBB09F /* CTCarouselMessageCell.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ FF7ACEFFC7043EFB6AD870DDDEB630F1 /* CTInAppUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E9E25B9B521E3810217317B4C7B133A5 /* CTInAppUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ FF956A5272ABEB4FFD8E3B6E89553621 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 84CF436789724132021361D5B790596C /* UIImage+ForceDecode.m */; };
+ FFB4CD24B46B3303E8A5A75DAE4F0335 /* ContentMerger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE6FD4305EB45586703A25949DEC14D /* ContentMerger.h */; settings = {ATTRIBUTES = (Project, ); }; };
+ FFB4F122FD328CDFEDB623C98D8476B0 /* CTInboxIconMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E2A69C83C1935452CE8538201C1D6CBB /* CTInboxIconMessageCell.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 3162A30A830509A1824E59AB504789C6 /* PBXContainerItemProxy */ = {
+ 0134C881EECAB27587655E87AA33779C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429;
remoteInfo = SDWebImage;
};
- 556F6957C401B8584B522639A3E11426 /* PBXContainerItemProxy */ = {
+ 128EF83D6D0F4725E649106671C45126 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = E12536816B6C31D7AF55D161F6F97141;
- remoteInfo = "CleverTap-iOS-SDK";
+ remoteGlobalIDString = 3BDDCDFCA8633FC28798031462AD1410;
+ remoteInfo = "CleverTap-iOS-SDK-CleverTapSDK";
};
- A774AF7EC58571CC1DC711CD9333DD09 /* PBXContainerItemProxy */ = {
+ 3252185819F09CB6C9FDBB85A876A847 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429;
- remoteInfo = SDWebImage;
+ remoteGlobalIDString = E12536816B6C31D7AF55D161F6F97141;
+ remoteInfo = "CleverTap-iOS-SDK";
};
- BBB6BC61BB43F40A9EDA6EDA744E0B30 /* PBXContainerItemProxy */ = {
+ 62BB6D192270EF6CC714C6E9C3AEFC2B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 3BDDCDFCA8633FC28798031462AD1410;
- remoteInfo = "CleverTap-iOS-SDK-CleverTapSDK";
+ remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429;
+ remoteInfo = SDWebImage;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 001CD11C6DBA31CC5C6C17DF1E598C2F /* CTFooterViewController~iphoneland.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTFooterViewController~iphoneland.xib"; path = "CleverTapSDK/InApps/resources/CTFooterViewController~iphoneland.xib"; sourceTree = ""; };
- 00977057B0A51B848086499302224B72 /* CTInAppFCManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTInAppFCManager.m; path = CleverTapSDK/CTInAppFCManager.m; sourceTree = ""; };
- 015702D9209383ABECC2F014EF176A39 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; };
- 024B3B7633A7E77942EAC77961C330B3 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; };
- 0289C1CE681412D099FD995B244D9DAB /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; };
- 02AE8425368F9EAF709FB94566FB00DA /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; };
- 033174CF8C10356EA929AA2A2F63A470 /* CleverTapTrackedViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CleverTapTrackedViewController.m; path = CleverTapSDK/CleverTapTrackedViewController.m; sourceTree = ""; };
- 033BD17E6BB04A6B7C86D7FDDE7A8F3E /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; };
- 0460AEA43738FC0A6BC7B925687EC2DA /* CTCarouselImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTCarouselImageView.h; path = CleverTapSDK/Inbox/views/CTCarouselImageView.h; sourceTree = ""; };
- 04D4ECDCFD33424F162907BC3F828D98 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; };
- 04FD1108A33776E813B0A3FAE12269C8 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; };
- 06527721DFBDF9C95C1ACE1912F12F3C /* CTDisplayUnitController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTDisplayUnitController.h; path = CleverTapSDK/DisplayUnit/controllers/CTDisplayUnitController.h; sourceTree = ""; };
- 066F4570FFF1C2F268D37EAC046FAE46 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; };
- 06A612B3DC0FBDE4A09916E453DC2911 /* ic_play@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "ic_play@2x.png"; path = "CleverTapSDK/Inbox/resources/ic_play@2x.png"; sourceTree = ""; };
- 06A72E01CEE4935C082F4A84A7450C7F /* CTSwipeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTSwipeView.m; path = CleverTapSDK/Inbox/views/CTSwipeView.m; sourceTree = ""; };
- 06BDA0745D108411EE3D5412EEC1B5D8 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; };
- 07A8CF7AA77FD3734DA065FAB66BF1E8 /* CTHalfInterstitialImageViewController~iphoneport.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTHalfInterstitialImageViewController~iphoneport.xib"; path = "CleverTapSDK/InApps/resources/CTHalfInterstitialImageViewController~iphoneport.xib"; sourceTree = ""; };
- 0921D607B54D097A3AE18105C5E152EB /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; };
- 0A03C4A385534A0B4EEB006812E7F6F8 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; };
- 0A69C6689C90631952B94B162423B6DB /* CTHeaderViewController~ipadland.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTHeaderViewController~ipadland.xib"; path = "CleverTapSDK/InApps/resources/CTHeaderViewController~ipadland.xib"; sourceTree = ""; };
- 0AEF3B70819065A7D19945BD96049F84 /* CTFeatureFlagsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTFeatureFlagsController.m; path = CleverTapSDK/FeatureFlags/controllers/CTFeatureFlagsController.m; sourceTree = ""; };
- 0BE0A703C6059424FC07B079FDF31C41 /* CleverTapInstanceConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CleverTapInstanceConfig.h; path = CleverTapSDK/CleverTapInstanceConfig.h; sourceTree = ""; };
- 0C061BA06720B813A0EFDCAC2769DBAB /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; };
- 0CE47ACF5C39780F7B58F6C1A8EB4763 /* CTUriHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTUriHelper.h; path = CleverTapSDK/CTUriHelper.h; sourceTree = ""; };
- 0D3BB4A10F6FEFC7B88D4774FDC95644 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; };
- 0DB2BE441B8E9D912D6EF29A5C7CA1A0 /* CTInterstitialViewController~ipadland.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTInterstitialViewController~ipadland.xib"; path = "CleverTapSDK/InApps/resources/CTInterstitialViewController~ipadland.xib"; sourceTree = ""; };
- 0DC37245253918181A8654CCEBC82D30 /* ct_volume_off.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = ct_volume_off.png; path = CleverTapSDK/Inbox/resources/ct_volume_off.png; sourceTree = ""; };
- 0E11A327EC315983FAA38A8A7B7E0479 /* CleverTapEventDetail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CleverTapEventDetail.m; path = CleverTapSDK/CleverTapEventDetail.m; sourceTree = ""; };
- 0F776E448D1B1C56F6FC0D145271F503 /* CTValidationResultStack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTValidationResultStack.h; path = CleverTapSDK/CTValidationResultStack.h; sourceTree = ""; };
- 0FE078B754147AD6AA8120C7EB3FAC1F /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; };
- 106D6A992CCFF8251E10EAA0AF9DE8C8 /* CleverTapInboxMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CleverTapInboxMessage.m; path = CleverTapSDK/Inbox/models/CleverTapInboxMessage.m; sourceTree = ""; };
- 10E5E949286A2B3AD8FE0C33CD56398C /* CTInterstitialViewController~iphoneport.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTInterstitialViewController~iphoneport.xib"; path = "CleverTapSDK/InApps/resources/CTInterstitialViewController~iphoneport.xib"; sourceTree = ""; };
- 119ED479841230E7547357661F9CC740 /* CTPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTPreferences.h; path = CleverTapSDK/CTPreferences.h; sourceTree = ""; };
- 122A4A2A6431D70B6C28CD22CED19024 /* CTHalfInterstitialImageViewController~ipad.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTHalfInterstitialImageViewController~ipad.xib"; path = "CleverTapSDK/InApps/resources/CTHalfInterstitialImageViewController~ipad.xib"; sourceTree = ""; };
- 1283E8174B8DBD2CA14BAA8F5B25BC68 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; };
- 12F25D87FD5A9EAA359A3BB6EECDDD81 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; };
- 13135DDF65FF9179653F83CEFC608B57 /* CTProductConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTProductConfigController.m; path = CleverTapSDK/ProductConfig/controllers/CTProductConfigController.m; sourceTree = ""; };
- 13840C00464674B4D0D8F62C4B58931D /* CTImageInAppViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTImageInAppViewController.h; path = CleverTapSDK/InApps/CTImageInAppViewController.h; sourceTree = ""; };
- 13884828E45BD240D93462184FE5DFE3 /* CTFlexibleIdentityRepo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTFlexibleIdentityRepo.m; path = CleverTapSDK/CTFlexibleIdentityRepo.m; sourceTree = ""; };
- 13FB82659B37E2BDE9A8512467362D24 /* CTCarouselImageMessageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTCarouselImageMessageCell.m; path = CleverTapSDK/Inbox/cells/CTCarouselImageMessageCell.m; sourceTree = ""; };
- 145617DEF6E1987B40FF2807C0A747B4 /* CTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTConstants.h; path = CleverTapSDK/CTConstants.h; sourceTree = ""; };
- 16097C7F6514F1081519CE4944E32E70 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; };
- 1793EF13406035CB7908922D224F7C94 /* CTBaseHeaderFooterViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTBaseHeaderFooterViewController.m; path = CleverTapSDK/InApps/CTBaseHeaderFooterViewController.m; sourceTree = ""; };
- 18B3469E769F028C337D592C29A46BDF /* CleverTapInstanceConfigPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CleverTapInstanceConfigPrivate.h; path = CleverTapSDK/CleverTapInstanceConfigPrivate.h; sourceTree = ""; };
- 1904AFD42176A06DF30D894F2DE4BC13 /* CleverTap+SCDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CleverTap+SCDomain.h"; path = "CleverTapSDK/CleverTap+SCDomain.h"; sourceTree = ""; };
- 1A05B46DC2F050F6987B79997328D216 /* CTCoverImageViewController~iphoneport.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = "CTCoverImageViewController~iphoneport.xib"; path = "CleverTapSDK/InApps/resources/CTCoverImageViewController~iphoneport.xib"; sourceTree = ""; };
- 1A7C0ABEBF9B60257002286A5A4F9EFA /* CTEventBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTEventBuilder.m; path = CleverTapSDK/CTEventBuilder.m; sourceTree = ""; };
- 1ACF4B9D4BDA654D22EC52C4AAB4C574 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; };
- 1B69E867C28CB2003F341BABE4F09747 /* CTUriHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTUriHelper.m; path = CleverTapSDK/CTUriHelper.m; sourceTree = ""; };
- 1C09E0FEBAC195465D9ADE7FE7A92825 /* CTUserMO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTUserMO.h; path = CleverTapSDK/Inbox/models/CTUserMO.h; sourceTree = ""; };
- 1D888DE65D42078ECEF9CE4821F85E01 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; };
- 1DE1ABA4124FC8B38FD6730F4AEF075E /* ic_pause@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "ic_pause@3x.png"; path = "CleverTapSDK/Inbox/resources/ic_pause@3x.png"; sourceTree = ""; };
- 1DE5E75481568A2B32AE367997CFFAC7 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; };
- 1ED1FAB598D03F264D52245F1AC50C10 /* CleverTapInboxViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CleverTapInboxViewController.m; path = CleverTapSDK/Inbox/controllers/CleverTapInboxViewController.m; sourceTree = ""; };
- 1FC633F22C334C8A987C40E4C26453B7 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; };
- 201377F74FD421E0D078F83614DC2290 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; };
- 20676949C3F408F2513D14585D050C43 /* CTCoverImageViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTCoverImageViewController.h; path = CleverTapSDK/InApps/CTCoverImageViewController.h; sourceTree = ""; };
- 224D29D66442C01D3B2E680504619C73 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; };
- 22F694128D98CA3544E4D1EE3960E02D /* CTHalfInterstitialImageViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTHalfInterstitialImageViewController.h; path = CleverTapSDK/InApps/CTHalfInterstitialImageViewController.h; sourceTree = ""; };
- 2347F10D864FD03D80C0CF0719230162 /* CleverTap-iOS-SDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CleverTap-iOS-SDK-dummy.m"; sourceTree = ""; };
- 242AB57CF992B95C1EDBD53C051B4DD2 /* CTFooterViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTFooterViewController.m; path = CleverTapSDK/InApps/CTFooterViewController.m; sourceTree = ""; };
- 24475BB0DC666C02D5B6D5CF4B3BCF9F /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; };
- 248954A7E01024145753167DB9D2C678 /* CleverTapUTMDetail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CleverTapUTMDetail.m; path = CleverTapSDK/CleverTapUTMDetail.m; sourceTree = ""; };
- 25A554939917370879F458EEA747A354 /* CTProfileBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTProfileBuilder.m; path = CleverTapSDK/CTProfileBuilder.m; sourceTree = "