diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f614c1..43763af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +#### Version 9.1.0 +* [NEW] Added ability to dynamically capture data from other SDKs. For further details on this see [our readme](https://github.com/thunderheadone/one-sdk-ios/blob/master/docs/additional-features-guide.md#capture-data-from-other-sdks). +* [UPDATE] Xcode 13.2 compatible SDK. + #### Version 9.0.0 * [BREAKING] Removed the in-list optimization functionality from the SDK. * [NEW] Added ability to dynamically switch Workspace configuration while in Admin mode. You can now switch to other spaces easily by simply navigating to the Preview panel in Admin mode and pointing the SDK configuration to another space. diff --git a/README.md b/README.md index 63e5796..a2a6a7d 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - [Additional codeless integration considerations](#additional-codeless-integration-considerations) * [For Salesforce Interaction Studio integrations](#for-salesforce-interaction-studio-integrations) * [`ViewController`/`View` lifecycle overriding rules](#viewcontrollerview-lifecycle-overriding-rules) - * [Sending codeless Interactions based on the list of Interactions created under a Touchpoint](#sending-codeless-Interactions-based-on-the-list-of-Interactions-created-under-a-touchpoint) + * [Sending Interaction requests based on the Interaction map](#sending-interaction-requests-based-on-the-interaction-map) - [Additional features of Thunderhead SDK](docs/additional-features-guide.md) - [Troubleshooting guide](#troubleshooting-guide) - [Questions or need help](#questions-or-need-help) @@ -194,7 +194,7 @@ The framework listens to a number of `UIViewController` and `UIView` methods to If you use these methods in your code, please ensure to call super when implementing them. -### Sending codeless Interactions based on the list of Interactions created under a Touchpoint +### Sending Interaction requests based on the Interaction map In order to reduce the number of unnecessary Interaction requests sent automatically by the SDK, only codeless Interactions with explicit Interaction paths created under a Touchpoint and configured with at least one point are sent to Thunderhead ONE or Salesforce Interaction Studio. This configuration change has been introduced in version 5.3.0 of the iOS SDK. diff --git a/TROUBLESHOOTING-GUIDE.md b/TROUBLESHOOTING-GUIDE.md index 794f0ab..98718cb 100644 --- a/TROUBLESHOOTING-GUIDE.md +++ b/TROUBLESHOOTING-GUIDE.md @@ -4,6 +4,7 @@ The Thunderhead SDK for iOS Troubleshooting Guide for common implementation issu - [Installation and archiving troubleshooting](#installation-and-archiving-troubleshooting) * [No such module 'Thunderhead' Xcode compile error](#no-such-module--thunderhead--xcode-compile-error) + * [CocoaPods could not find compatible versions for pod "Thunderhead" error](#cocoapods-could-not-find-compatible-versions-for-pod--thunderhead--error) * [Resolve `Undefined symbols for architecture arm64` compile time error](#resolve--undefined-symbols-for-architecture-arm64--compile-time-error) * [Archive Error SPM - Found an unexpected Mach-O header code: 0x72613c21](#archive-error-spm---found-an-unexpected-mach-o-header-code--0x72613c21) - [How to resolve `WKWebView` tracking issues](#how-to-resolve-wkwebview-tracking-issues) @@ -22,6 +23,12 @@ When integrating the Thunderhead SDK manually into your app, you may encounter t To resolve this, navigate to **Build Settings**, ensure the **Framework Search Paths** contains the framework filepath. If the framework is placed in your project directory, simply set the framework search path to `$(SRCROOT)` and set it to recursive. +### CocoaPods could not find compatible versions for pod "Thunderhead" error + +After the Thunderhead SDK gets released to CocoaPods, there might be a delay of 2-4 hours or more before the Thunderhead pod actually goes live and becomes available to be installed through CocoaPods. Please, make sure the GitHub [SDK latest version](https://github.com/thunderheadone/one-sdk-ios/releases) matches the [CocoaPods version](https://cocoapods.org/pods/Thunderhead). + +If the latest Thunderhead SDK version is already available in [CocoaPods](https://cocoapods.org/pods/Thunderhead), but you still have issues integrating the latest Thunderhead pod into your project, please try running the [`pod update`](https://guides.cocoapods.org/using/pod-install-vs-update.html#pod-update) and `pod repo update` command in your project's directory in Terminal. + ### Resolve `Undefined symbols for architecture arm64` compile time error When integrating the Thunderhead SDK via [CocoaPods](https://github.com/thunderheadone/one-sdk-ios#cocoapods), you may encounter this compile time error. diff --git a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Info.plist b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Info.plist index 1006425..2ef50d7 100644 Binary files a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Info.plist and b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Info.plist differ diff --git a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Thunderhead b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Thunderhead index 9dbce33..700c08c 100644 Binary files a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Thunderhead and b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_armv7/Thunderhead.framework/Thunderhead differ diff --git a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Info.plist b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Info.plist index 4581e5f..592e5ec 100644 Binary files a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Info.plist and b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Info.plist differ diff --git a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Thunderhead b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Thunderhead index 2fd3088..d9eaab5 100644 Binary files a/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Thunderhead and b/Thunderhead.embeddedframework/Thunderhead.xcframework/ios-arm64_i386_x86_64-simulator/Thunderhead.framework/Thunderhead differ diff --git a/Thunderhead.embeddedframework/ThunderheadBundle.bundle/Info.plist b/Thunderhead.embeddedframework/ThunderheadBundle.bundle/Info.plist index b1c6a3b..efc112e 100644 Binary files a/Thunderhead.embeddedframework/ThunderheadBundle.bundle/Info.plist and b/Thunderhead.embeddedframework/ThunderheadBundle.bundle/Info.plist differ diff --git a/Thunderhead.podspec b/Thunderhead.podspec index ad5e3ad..5666827 100644 --- a/Thunderhead.podspec +++ b/Thunderhead.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "Thunderhead" - s.version = "9.0.0" + s.version = "9.1.0" s.summary = "The Thunderhead SDK for iOS, for integrating the ONE Engagement Hub or Interaction Studio into your iOS application." s.authors = { "Thunderhead ONE" => "onesupport@thunderhead.com"} s.homepage = "https://github.com/thunderheadone/one-sdk-ios" diff --git a/docs/additional-features-guide.md b/docs/additional-features-guide.md index 613d99e..7fa928e 100644 --- a/docs/additional-features-guide.md +++ b/docs/additional-features-guide.md @@ -17,7 +17,8 @@ + [Opt an end-user out of all city/country level tracking](#opt-an-end-user-out-of-all-citycountry-level-tracking) + [Opt an end-user in for all city/country level tracking](#opt-an-end-user-in-for-all-citycountry-level-tracking) * [Partial opt out/in example](#partial-opt-outin-example) -* [Enable in-list Optimizations](#enable-in-list-optimizations) +* [Capture data from other SDKs](#capture-data-from-other-sdks) + * [Capture data from other SDKs feature compatibility table](#capture-data-from-other-sdks-feature-compatibility-table) * [Disable `WKWebView` tracking](#disable-wkwebview-tracking) * [Late initialization and reconfiguration of the SDK](#late-initialization-and-reconfiguration-of-the-sdk) * [Manually set a specific Interaction path](#manually-set-a-specific-interaction-path) @@ -210,22 +211,62 @@ Objective-C: - When opted out, tracking will stop and locally queued data will be removed. - For instructions on how to completely remove a user's data from Thunderhead ONE or Salesforce Interaction Studio - see our [api documentation](https://thunderheadone.github.io/one-api/#operation/delete). -### Enable in-list Optimizations +### Capture data from other SDKs -In-list Optimizations are disabled by default. To enable in-list Optimizations, add the following to your app’s Info.plist file and set `DisableInListOptimization` to `false` (boolean value). +To capture data from other SDKs, add the method signatures to `Method Overrides` under `Thunderhead Config`. -![Thunderhead Config App's Info.plist file](https://github.com/thunderheadone/one-sdk-ios/raw/master/images/ThunderheadConfigInfoPlistEntry.png) +For example, given the class interface + +```objective-c +@interface THAnalytics : NSObject + ++ (void)trackEventWithName:(NSString *)eventName properties:(NSDictionary *)properties; + +- (void)logIdentityWithName:(NSString *)identityName parameters:(NSDictionary *)parameters; + +- (void)logIdentityWithName:(NSString *)identityName; + +@end +``` + +* To capture data from `class method` `trackEventWithName:properties:` +* To capture data from `instance method` `logIdentityWithName:parameters:` +* To capture data from `instance method` `logIdentityWithName:` + +from `THAnalytics` class, add the following to your app's Info.plist file + +![Thunderhead Config Method Overrides App's Info.plist file](https://github.com/thunderheadone/one-sdk-ios/raw/master/images/ThunderheadConfigMethodOverridesInfoPlistEntry.png) ```xml Thunderhead Config - - Swizzling Options - DisableInListOptimization - + Method Overrides + + THAnalytics+trackEventWithName:properties: + THAnalytics-logIdentityWithName:parameters: + THAnalytics-logIdentityWithName: + - -``` + ``` + +The SDK will capture the data when the configured methods are invoked. + +*Note:* +- The SDK will only send Codeless Interactions when the first argument (String) matches a configured interaction in the Interaction Map. For additional information, please refer [Sending Interaction requests based on the Interaction map](https://github.com/thunderheadone/one-sdk-ios#sending-interaction-requests-based-on-the-interaction-map). +- When capturing data from class methods, use `+` between `class name` and `method signature`. +- When capturing data from instance methods, use `-` between `class name` and `method signature`. +- Interaction paths with spaces are replaced with an underscore to ensure the Interaction path is valid in ONE. + +#### Capture data from other SDKs feature compatibility table + +The table below illustrates the compatibility of Capturing data from other SDKs based upon the programming language used. + +| App (Language) | Other SDK (Language) | Captures Data | +| -------------- | -------------------- | ------------- | +| Objective-C | Objective-C | YES | +| Objective-C | Swift | YES | +| Swift | Objective-C | YES | +| Swift | Swift | NO | ### Disable `WKWebView` tracking @@ -662,7 +703,7 @@ One.whitelistIdentityTransferLinks(["www.google.com","www.uber.com"]) // This example shows how to whitelist the main domain name // wikipedia.org and any subdomains. For example, // https://en.wikipedia.org, https://simple.wikipedia.org, etc. -One.whitelistIdentityTransferLinks(["*.wikipedia.org"] +One.whitelistIdentityTransferLinks(["*.wikipedia.org"]) ``` @@ -698,7 +739,7 @@ One.blacklistIdentityTransferLinks(["www.google.com","www.uber.com"]) // This example shows how to blacklist the main domain name // wikipedia.org and any subdomain. For example, // https://en.wikipedia.org, https://simple.wikipedia.org, etc. -One.blacklistIdentityTransferLinks(["*.wikipedia.org"] +One.blacklistIdentityTransferLinks(["*.wikipedia.org"]) ``` diff --git a/images/ThunderheadConfigMethodOverridesInfoPlistEntry.png b/images/ThunderheadConfigMethodOverridesInfoPlistEntry.png new file mode 100644 index 0000000..ecc0296 Binary files /dev/null and b/images/ThunderheadConfigMethodOverridesInfoPlistEntry.png differ