New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

countly-sdk-react-native-bridge

Package Overview
Dependencies
Maintainers
4
Versions
70
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

countly-sdk-react-native-bridge - npm Package Compare versions

Comparing version 23.10.0 to 23.12.0

Countly.d.ts

6

CHANGELOG.md

@@ -0,1 +1,7 @@

## 23.12.0
* Added TS type declerations to the SDK
* Updated the underlying Android SDK version to 23.12.0
* Updated the underlying iOS SDK version to 23.12.0
## 23.10.0

@@ -2,0 +8,0 @@ * Fixed a bug where segment provided to 'logException' was ignored in Android devices

287

Feedback.js
import * as L from './Logger.js';
const Feedback = {};
/**
* Get a list of available feedback widgets as an array of objects.
* @param {callback} [onFinished] - returns (retrievedWidgets, error). This parameter is optional.
* @return {Object} Object {error: String or Null, data: Array or null }
*/
async function getAvailableFeedbackWidgets(onFinished) {
if (!Feedback.state.isInitialized) {
const message = "'init' must be called before 'getAvailableFeedbackWidgets'";
L.e(`getAvailableFeedbackWidgets, ${message}`);
return { error: message, data: null };
class Feedback {
#state;
constructor(state) {
this.#state = state;
}
L.d('getAvailableFeedbackWidgets, getAvailableFeedbackWidgets');
let result = null;
let error = null;
try {
result = await Feedback.state.CountlyReactNative.getFeedbackWidgets();
} catch (e) {
error = e.message;
}
if (onFinished) {
onFinished(result, error);
}
return { error: error, data: result };
}
/**
* Present a chosen feedback widget
*
* @param {Object} feedbackWidget - feedback Widget with id, type and name
* @param {String} closeButtonText - text for cancel/close button
* @param {callback} [widgetShownCallback] - Callback to be executed when feedback widget is displayed. This parameter is optional.
* @param {callback} [widgetClosedCallback] - Callback to be executed when feedback widget is closed. This parameter is optional.
*
* @return {Object} Object {error: String or null}
*/
function presentFeedbackWidget(feedbackWidget, closeButtonText, widgetShownCallback, widgetClosedCallback) {
if (!Feedback.state.isInitialized) {
const message = "'init' must be called before 'presentFeedbackWidget'";
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
/**
* Get a list of available feedback widgets as an array of objects.
* @param {callback} [onFinished] - returns (retrievedWidgets, error). This parameter is optional.
* @return {object} object {error: String or null, data: Array or null }
*/
async getAvailableFeedbackWidgets(onFinished) {
if (!this.#state.isInitialized) {
const message = "'init' must be called before 'getAvailableFeedbackWidgets'";
L.e(`getAvailableFeedbackWidgets, ${message}`);
return { error: message, data: null };
}
L.d('getAvailableFeedbackWidgets, getAvailableFeedbackWidgets');
let result = null;
let error = null;
try {
result = await this.#state.CountlyReactNative.getFeedbackWidgets();
} catch (e) {
error = e.message;
}
if (onFinished) {
onFinished(result, error);
}
return { error: error, data: result };
}
let message = null;
if (!feedbackWidget) {
message = 'feedbackWidget should not be null or undefined';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (!feedbackWidget.id) {
message = 'FeedbackWidget id should not be null or empty';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (!feedbackWidget.type) {
message = 'FeedbackWidget type should not be null or empty';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (typeof closeButtonText !== 'string') {
closeButtonText = '';
L.w(`presentFeedbackWidget, unsupported data type of closeButtonText : [${typeof args}]`);
}
L.d(`presentFeedbackWidget, presentFeedbackWidget with widget:[${JSON.stringify(feedbackWidget)}]`);
if (widgetShownCallback) {
Feedback.state.widgetShownCallback = Feedback.state.eventEmitter.addListener(Feedback.state.widgetShownCallbackName, () => {
widgetShownCallback();
Feedback.state.widgetShownCallback.remove();
});
}
if (widgetClosedCallback) {
Feedback.state.widgetClosedCallback = Feedback.state.eventEmitter.addListener(Feedback.state.widgetClosedCallbackName, () => {
widgetClosedCallback();
Feedback.state.widgetClosedCallback.remove();
});
}
feedbackWidget.name = feedbackWidget.name || '';
closeButtonText = closeButtonText || '';
Feedback.state.CountlyReactNative.presentFeedbackWidget([feedbackWidget.id, feedbackWidget.type, feedbackWidget.name, closeButtonText]);
return { error: null };
}
/**
* Present a chosen feedback widget
*
* @param {object} feedbackWidget - feedback Widget with id, type and name
* @param {string} closeButtonText - text for cancel/close button
* @param {callback} [widgetShownCallback] - Callback to be executed when feedback widget is displayed. This parameter is optional.
* @param {callback} [widgetClosedCallback] - Callback to be executed when feedback widget is closed. This parameter is optional.
*
* @return {object} object {error: string or null}
*/
presentFeedbackWidget(feedbackWidget, closeButtonText, widgetShownCallback, widgetClosedCallback) {
if (!this.#state.isInitialized) {
const message = "'init' must be called before 'presentFeedbackWidget'";
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
let message = null;
if (!feedbackWidget) {
message = 'feedbackWidget should not be null or undefined';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (!feedbackWidget.id) {
message = 'FeedbackWidget id should not be null or empty';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (!feedbackWidget.type) {
message = 'FeedbackWidget type should not be null or empty';
L.e(`presentFeedbackWidget, ${message}`);
return { error: message };
}
if (typeof closeButtonText !== 'string') {
closeButtonText = '';
L.w(`presentFeedbackWidget, unsupported data type of closeButtonText : [${typeof args}]`);
}
/**
* Get a feedback widget's data as an Object.
* @param {Object} widgetInfo - widget to get data for. You should get this from 'getAvailableFeedbackWidgets' method.
* @param {callback} [onFinished] - returns (Object retrievedWidgetData, error). This parameter is optional.
* @return {Object} Object {error: String, data: Object or null}
*/
async function getFeedbackWidgetData(widgetInfo, onFinished) {
if (!Feedback.state.isInitialized) {
const message = "'initWithConfig' must be called before 'getFeedbackWidgetData'";
L.e(`getFeedbackWidgetData, ${message}`);
onFinished(null, message);
return { error: message, data: null };
L.d(`presentFeedbackWidget, presentFeedbackWidget with widget:[${JSON.stringify(feedbackWidget)}]`);
if (widgetShownCallback) {
this.#state.widgetShownCallback = this.#state.eventEmitter.addListener(this.#state.widgetShownCallbackName, () => {
widgetShownCallback();
this.#state.widgetShownCallback.remove();
});
}
if (widgetClosedCallback) {
this.#state.widgetClosedCallback = this.#state.eventEmitter.addListener(this.#state.widgetClosedCallbackName, () => {
widgetClosedCallback();
this.#state.widgetClosedCallback.remove();
});
}
feedbackWidget.name = feedbackWidget.name || '';
closeButtonText = closeButtonText || '';
this.#state.CountlyReactNative.presentFeedbackWidget([feedbackWidget.id, feedbackWidget.type, feedbackWidget.name, closeButtonText]);
return { error: null };
}
const widgetId = widgetInfo.id;
const widgetType = widgetInfo.type;
L.d(`getFeedbackWidgetData, Calling "getFeedbackWidgetData" with Type:[${widgetType}]`);
const args = [];
args.push(widgetId);
args.push(widgetType);
args.push(widgetInfo.name);
let result = null;
let error = null;
try {
result = await Feedback.state.CountlyReactNative.getFeedbackWidgetData(args);
} catch (e) {
error = e.message;
}
if (onFinished) {
onFinished(result, error);
}
return { error: error, data: result };
}
/**
* Report manually for a feedback widget.
* @param {Object} widgetInfo - the widget you are targeting. You should get this from 'getAvailableFeedbackWidgets' method.
* @param {Object} widgetData - data of that widget. You should get this from 'getFeedbackWidgetData' method.
* @param {Object} widgetResult - Information you want to report.
* @return {Object} Object {error: String}
*/
async function reportFeedbackWidgetManually(widgetInfo, widgetData, widgetResult) {
if (!Feedback.state.isInitialized) {
const message = "'initWithConfig' must be called before 'reportFeedbackWidgetManually'";
L.e(`reportFeedbackWidgetManually, ${message}`);
return { error: message };
/**
* Get a feedback widget's data as an object.
* @param {object} widgetInfo - widget to get data for. You should get this from 'getAvailableFeedbackWidgets' method.
* @param {callback} [onFinished] - returns (object retrievedWidgetData, error). This parameter is optional.
* @return {object} object {error: string, data: object or null}
*/
async getFeedbackWidgetData(widgetInfo, onFinished) {
if (!this.#state.isInitialized) {
const message = "'initWithConfig' must be called before 'getFeedbackWidgetData'";
L.e(`getFeedbackWidgetData, ${message}`);
return { error: message, data: null };
}
const widgetId = widgetInfo.id;
const widgetType = widgetInfo.type;
L.d(`getFeedbackWidgetData, Calling "getFeedbackWidgetData" with Type:[${widgetType}]`);
const args = [];
args.push(widgetId);
args.push(widgetType);
args.push(widgetInfo.name);
let result = null;
let error = null;
try {
result = await this.#state.CountlyReactNative.getFeedbackWidgetData(args);
} catch (e) {
error = e.message;
}
if (onFinished) {
onFinished(result, error);
}
return { error: error, data: result };
}
const widgetId = widgetInfo.id;
const widgetType = widgetInfo.type;
L.d(`reportFeedbackWidgetManually, Calling "reportFeedbackWidgetManually" with Type:[${widgetType}]`);
const widgetInfoList = [];
widgetInfoList.push(widgetId);
widgetInfoList.push(widgetType);
widgetInfoList.push(widgetInfo.name);
const args = [];
args.push(widgetInfoList);
args.push(widgetData);
args.push(widgetResult);
/**
* Report manually for a feedback widget.
* @param {object} widgetInfo - the widget you are targeting. You should get this from 'getAvailableFeedbackWidgets' method.
* @param {object} widgetData - data of that widget. You should get this from 'getFeedbackWidgetData' method.
* @param {object} widgetResult - Information you want to report.
* @return {object} object {error: string}
*/
async reportFeedbackWidgetManually(widgetInfo, widgetData, widgetResult) {
if (!this.#state.isInitialized) {
const message = "'initWithConfig' must be called before 'reportFeedbackWidgetManually'";
L.e(`reportFeedbackWidgetManually, ${message}`);
return { error: message };
}
const widgetId = widgetInfo.id;
const widgetType = widgetInfo.type;
L.d(`reportFeedbackWidgetManually, Calling "reportFeedbackWidgetManually" with Type:[${widgetType}]`);
const widgetInfoList = [];
widgetInfoList.push(widgetId);
widgetInfoList.push(widgetType);
widgetInfoList.push(widgetInfo.name);
let error = null;
try {
await Feedback.state.CountlyReactNative.reportFeedbackWidgetManually(args);
} catch (e) {
error = e.message;
const args = [];
args.push(widgetInfoList);
args.push(widgetData);
args.push(widgetResult);
let error = null;
try {
await this.#state.CountlyReactNative.reportFeedbackWidgetManually(args);
} catch (e) {
error = e.message;
}
return { error: error };
}
return { error: error };
}
Feedback.getAvailableFeedbackWidgets = getAvailableFeedbackWidgets;
Feedback.presentFeedbackWidget = presentFeedbackWidget;
Feedback.getFeedbackWidgetData = getFeedbackWidgetData;
Feedback.reportFeedbackWidgetManually = reportFeedbackWidgetManually;
export default Feedback;

@@ -0,625 +1,643 @@

## 23.12.0
* Added `disableLocation` initial config property to disable location tracking
* Added `addSegmentationToViewWithID:` in view interface for adding segmentation to an ongoing view
* Added `addSegmentationToViewWithName:` in view interface for adding segmentation to an ongoing view
* Fixed bug with "pauseViewWithID" call where it could go into a recursive loop
## 23.8.3
* Added `requestDropAgeHours` initial config property to set a time limit after which the requests would be removed if not sent to the server
* Added a call to enroll users to A/B tests when getting a remote config value: 'getValueAndEnroll'
* Added a call to enroll users to A/B tests when getting all remote config values: 'getAllValuesAndEnroll'
* Added app version in all API requests.
* Fixed sending '--' as carrier name due to platform changes from iOS version 16.4. This version and above will now not send any carrier information due to platform limitations.
* Mitigated an issue where users could not enroll to an A/B tests if enrollment request has failed
## 23.8.2
- Fixed rating feedback widget event key for widget closed event
* Fixed rating feedback widget event key for widget closed event
* Added `testingDownloadExperimentInformation:` in remote config interface
* Added `testingGetAllExperimentInfo:` in remote config interface
## 23.8.1
- Expanded feedback widget functionality. Added ability to use rating widgets.
- Added functionality to access tags for feedback widgets.
- Fixed SPM public header issues of `CountlyViewTracking.h`
* Expanded feedback widget functionality. Added ability to use rating widgets.
* Added functionality to access tags for feedback widgets.
* Fixed SPM public header issues of `CountlyViewTracking.h`
## 23.8.0
- Added `CountlyViewTracking:` interface with new view methods:
- `setGlobalViewSegmentation:`
- `updateGlobalViewSegmentation:`
- `startView:`
- `startView:segmentation`
- `startAutoStoppedView:`
- `startAutoStoppedView:segmentation`
- `stopViewWithName:`
- `stopViewWithName:segmentation`
- `stopViewWithID:`
- `stopViewWithID:segmentation`
- `pauseViewWithID:`
- `pauseViewWithID:`
- `stopAllViews:`
- Added `enableAllConsents` initial config property to give all consents at init time
- Added `giveAllConsents` method to give all consents
- Added `enableAutomaticViewTracking` config for automatic track views
- Added `automaticViewTrackingExclusionList` config for automatic view tracking exclusion list
- Added `globalViewSegmentation` config to add set global view segmentation.
- Added `enrollABOnRCDownload` config method to auto enroll users to AB tests when downloading RC values.
- Added `enableManualSessionControlHybridMode` config. With this mode 'updateSession' calls will automatically be handled by SDK for manual session handling.
- Deprecated `giveConsentForAllFeatures` method
- Deprecated `CLYAutoViewTracking` in config
- Deprecated existing view tracking methods and variables:
- `recordView:`
- `recordView:segmentation`
- `addExceptionForAutoViewTracking:`
- `removeExceptionForAutoViewTracking:`
- `isAutoViewTrackingActive`
* Added `CountlyViewTracking:` interface with new view methods:
* `setGlobalViewSegmentation:`
* `updateGlobalViewSegmentation:`
* `startView:`
* `startView:segmentation`
* `startAutoStoppedView:`
* `startAutoStoppedView:segmentation`
* `stopViewWithName:`
* `stopViewWithName:segmentation`
* `stopViewWithID:`
* `stopViewWithID:segmentation`
* `pauseViewWithID:`
* `pauseViewWithID:`
* `stopAllViews:`
* Added `enableAllConsents` initial config property to give all consents at init time
* Added `giveAllConsents` method to give all consents
* Added `enableAutomaticViewTracking` config for automatic track views
* Added `automaticViewTrackingExclusionList` config for automatic view tracking exclusion list
* Added `globalViewSegmentation` config to add set global view segmentation.
* Added `enrollABOnRCDownload` config method to auto enroll users to AB tests when downloading RC values.
* Added `enableManualSessionControlHybridMode` config. With this mode 'updateSession' calls will automatically be handled by SDK for manual session handling.
* Deprecated `giveConsentForAllFeatures` method
* Deprecated `CLYAutoViewTracking` in config
* Deprecated existing view tracking methods and variables:
* `recordView:`
* `recordView:segmentation`
* `addExceptionForAutoViewTracking:`
* `removeExceptionForAutoViewTracking:`
* `isAutoViewTrackingActive`
## 23.6.2
- Fixed bug where init time provided global Remote config download callbacks were ignored
- Remote config values are now not erased anymore when removing remote config consent
- Added remaining request count 'rr' parameter when sending queued request.
* Fixed bug where init time provided global Remote config download callbacks were ignored
* Remote config values are now not erased anymore when removing remote config consent
* Added remaining request count 'rr' parameter when sending queued request.
## 23.6.1
- Fixed SPM public header issues of `CountlyRCData.h` and `CountlyRemoteConfig.h`
* Fixed SPM public header issues of `CountlyRCData.h` and `CountlyRemoteConfig.h`
## 23.6.0
- !! Major breaking change !! Automatically downloaded remote config values will no longer be automatically enrolled in their AB tests.
- Added `CountlyRemoteConfig:` interface with new remote config methods:
- `getValue:`
- `getAllValues:`
- `registerDownloadCallback:`
- `removeDownloadCallback:`
- `downloadKeys:`
- `downloadSpecificKeys:completionHandler`
- `downloadOmittingKeys:completionHandler`
- `enrollIntoABTestsForKeys:`
- `exitABTestsForKeys:`
- `testingGetAllVariants:`
- `testingGetVariantsForKey:`
- `testingDownloadVariantInformation:variantName:completionHandler`
- `testingEnrollIntoVariant:`
- `clearAll:`
- Added `enableRemoteConfigAutomaticTriggers` config for automatic remote config download
- Added `enableRemoteConfigValueCaching` config for caching of remote config
- Added `remoteConfigRegisterGlobalCallback` config to register remote config global callbacks during init.
- Added `getRemoteConfigGlobalCallbacks` config to get a list of remote config global callbacks.
- Deprecated `enableRemoteConfig` initial config flag
- Deprecated `remoteConfigCompletionHandler` in config
- Deprecated existing remote config methods:
- `remoteConfigValueForKey:`
- `updateRemoteConfigWithCompletionHandler:`
- `updateRemoteConfigOnlyForKeys:completionHandler`
- `updateRemoteConfigExceptForKeys:completionHandler`
* !! Major breaking change !! Automatically downloaded remote config values will no longer be automatically enrolled in their AB tests.
* Added `CountlyRemoteConfig:` interface with new remote config methods:
* `getValue:`
* `getAllValues:`
* `registerDownloadCallback:`
* `removeDownloadCallback:`
* `downloadKeys:`
* `downloadSpecificKeys:completionHandler`
* `downloadOmittingKeys:completionHandler`
* `enrollIntoABTestsForKeys:`
* `exitABTestsForKeys:`
* `testingGetAllVariants:`
* `testingGetVariantsForKey:`
* `testingDownloadVariantInformation:variantName:completionHandler`
* `testingEnrollIntoVariant:`
* `clearAll:`
* Added `enableRemoteConfigAutomaticTriggers` config for automatic remote config download
* Added `enableRemoteConfigValueCaching` config for caching of remote config
* Added `remoteConfigRegisterGlobalCallback` config to register remote config global callbacks during init.
* Added `getRemoteConfigGlobalCallbacks` config to get a list of remote config global callbacks.
* Deprecated `enableRemoteConfig` initial config flag
* Deprecated `remoteConfigCompletionHandler` in config
* Deprecated existing remote config methods:
* `remoteConfigValueForKey:`
* `updateRemoteConfigWithCompletionHandler:`
* `updateRemoteConfigOnlyForKeys:completionHandler`
* `updateRemoteConfigExceptForKeys:completionHandler`
## 23.02.3
- Added back battery level reporting to crash reporting. Battery level is only reported if battery was enabled before.
- Added new methods for changing the device id: `changeDeviceIDWithMerge:`, `changeDeviceIDWithoutMerge:`.
- Fixed a bug where the app would crash if `city`, `countryCode` or `IP` in location was null.
- Deprecated existing method to change the device id: `setNewDeviceID:`
- Deprecated `attributionID` initial config flag
- Deprecated `recordAttributionID` method
* Added back battery level reporting to crash reporting. Battery level is only reported if battery was enabled before.
* Added new methods for changing the device id: `changeDeviceIDWithMerge:`, `changeDeviceIDWithoutMerge:`.
* Fixed a bug where the app would crash if `city`, `countryCode` or `IP` in location was null.
* Deprecated existing method to change the device id: `setNewDeviceID:`
* Deprecated `attributionID` initial config flag
* Deprecated `recordAttributionID` method
## 23.02.2
- Added server configuration functionality. This is an experimental feature.
- Not reporting battery level in the crash handler to prevent hanging
* Added server configuration functionality. This is an experimental feature.
* Not reporting battery level in the crash handler to prevent hanging
## 23.02.1
- Added previous event ID and sending it with custom events.
- Updated default `maxSegmentationValues` from 30 to 100
* Added previous event ID and sending it with custom events.
* Updated default `maxSegmentationValues` from 30 to 100
## 23.02.0
- Added event IDs
- Added current and previous view IDs to events
- Added sending pending events before sending user details on `save` call.
* Added event IDs
* Added current and previous view IDs to events
* Added sending pending events before sending user details on `save` call.
## 22.09.0
- Deleted previously deprecated `userLoggedIn:` and `userLoggedOut` methods
- Added new exception recording methods: `recordException:`, `recordException:isFatal:`, `recordException:isFatal:stackTrace:segmentation:`
- Deprecated existing exception recording methods: `recordHandledException:`, `recordHandledException:withStackTrace:`, `recordUnhandledException:withStackTrace:`
- Added `recordError:stackTrace:`, `recordError:isFatal:stackTrace:segmentation:` methods for Swift errors
* Deleted previously deprecated `userLoggedIn:` and `userLoggedOut` methods
* Added new exception recording methods: `recordException:`, `recordException:isFatal:`, `recordException:isFatal:stackTrace:segmentation:`
* Deprecated existing exception recording methods: `recordHandledException:`, `recordHandledException:withStackTrace:`, `recordUnhandledException:withStackTrace:`
* Added `recordError:stackTrace:`, `recordError:isFatal:stackTrace:segmentation:` methods for Swift errors
- Other various improvements
- Added device info to SDK initialization logs
* Other various improvements
* Added device info to SDK initialization logs
## 22.06.2
- Added direct requests support
- Fixed missing remote config consent in consents request
* Added direct requests support
* Fixed missing remote config consent in consents request
- Other various improvements
- Updated some pragma marks
* Other various improvements
* Updated some pragma marks
## 22.06.1
- Fixed user details consent issue on SDK start
- Updated feedback widget internal webview design and layout
* Fixed user details consent issue on SDK start
* Updated feedback widget internal webview design and layout
- Other various improvements
- Updated HeaderDocs, internal logs, inline notes and pragma marks
* Other various improvements
* Updated HeaderDocs, internal logs, inline notes and pragma marks
## 22.06.0
- Added `CountlyAutoViewTrackingName` protocol for supporting custom view titles with AutoViewTracking
- Added `setNewURLSessionConfiguration:` method to be able change URL session configuraion on the go (thanks @angelix)
- Added ability to save user details on SDK initialization
- Added device ID type to every request being sent
- Fixed missing remote config consent
- Fixed auto view tracking for iOS 13+ PageSheet modal presentations
- Deleted previously deprecated and inoperative methods and config flags
* Added `CountlyAutoViewTrackingName` protocol for supporting custom view titles with AutoViewTracking
* Added `setNewURLSessionConfiguration:` method to be able change URL session configuraion on the go (thanks @angelix)
* Added ability to save user details on SDK initialization
* Added device ID type to every request being sent
* Fixed missing remote config consent
* Fixed auto view tracking for iOS 13+ PageSheet modal presentations
* Deleted previously deprecated and inoperative methods and config flags
- Other various improvements
- Updated HeaderDocs, internal logs, inline notes and pragma marks
- Updated Countly project settings for Xcode 13.4.1 (13F100)
* Other various improvements
* Updated HeaderDocs, internal logs, inline notes and pragma marks
* Updated Countly project settings for Xcode 13.4.1 (13F100)
## 21.11.2
- Added direct and indirect attribution
- Added platform info to default segmentation of push action events
- Added `recordRatingWidgetWithID:rating:email:comment:userCanBeContacted:` method to be able to manually record rating widgets
- Added macOS version info to `Countly.xcodeproj` (thanks @ntadej)
- Updated sending consent changes to inlude all current consents state
- Excluded Countly-PL.podspec from SPM manifest (thanks @harrisg)
- Fixed possible SecTrustCopyExceptions leak
- Deprecated `presentFeedbackWidgetWithID:completionHandler:` method
* Added direct and indirect attribution
* Added platform info to default segmentation of push action events
* Added `recordRatingWidgetWithID:rating:email:comment:userCanBeContacted:` method to be able to manually record rating widgets
* Added macOS version info to `Countly.xcodeproj` (thanks @ntadej)
* Updated sending consent changes to inlude all current consents state
* Excluded Countly-PL.podspec from SPM manifest (thanks @harrisg)
* Fixed possible SecTrustCopyExceptions leak
* Deprecated `presentFeedbackWidgetWithID:completionHandler:` method
## 21.11.1
- Fixed a crash when some default user detail properties are set to `NSNull` (thanks @lhunath)
- Updated README.md for minimum supported deployment targets
* Fixed a crash when some default user detail properties are set to `NSNull` (thanks @lhunath)
* Updated README.md for minimum supported deployment targets
## 21.11.0
- Updated minimum supported OS versions as `iOS 10.0`, `tvOS 10.0`, `watchOS 4.0` and `macOS 10.14`
- Updated some deprecated API usage to get rid of warnings
- Added configurable internal limits `maxKeyLength`, `maxValueLength` and `maxSegmentationValues`
- Added `enableOrientationTracking` config for disabling automatic user interface orientation tracking
- Added `setNewHost:` method to be able change the host on the go
- Added `shouldIgnoreTrustCheck` config for self-signed certificates (thanks @centrinvest)
- Created additional `Countly-PL.podspec` for avoiding static framework issue on original `Countly.podspec` (thanks @multinerd)
- Implemented cancelling all consents when device ID is changed without a merge
- Implemented by-passing events consent for reserved internal events
- Discarded consent requirement for changing device ID
- Discarded auto metrics for Apple Watch
- Discarded `customHeaderFieldName` and `customHeaderFieldValue` config properties
- Discarded `setCustomHeaderFieldValue:` method
- Fixed missing nullability specifier on `CountlyCommon.h`
- Fixed missing info level logs on `CountlyFeedbackWidget` class
- Fixed missing info level logs on `CountlyUserDetails` class
- Deprecated `userLoggedIn:` and `userLoggedOut` methods
- Deprecated going back to default system device ID
* Updated minimum supported OS versions as `iOS 10.0`, `tvOS 10.0`, `watchOS 4.0` and `macOS 10.14`
* Updated some deprecated API usage to get rid of warnings
* Added configurable internal limits `maxKeyLength`, `maxValueLength` and `maxSegmentationValues`
* Added `enableOrientationTracking` config for disabling automatic user interface orientation tracking
* Added `setNewHost:` method to be able change the host on the go
* Added `shouldIgnoreTrustCheck` config for self-signed certificates (thanks @centrinvest)
* Created additional `Countly-PL.podspec` for avoiding static framework issue on original `Countly.podspec` (thanks @multinerd)
* Implemented cancelling all consents when device ID is changed without a merge
* Implemented by-passing events consent for reserved internal events
* Discarded consent requirement for changing device ID
* Discarded auto metrics for Apple Watch
* Discarded `customHeaderFieldName` and `customHeaderFieldValue` config properties
* Discarded `setCustomHeaderFieldValue:` method
* Fixed missing nullability specifier on `CountlyCommon.h`
* Fixed missing info level logs on `CountlyFeedbackWidget` class
* Fixed missing info level logs on `CountlyUserDetails` class
* Deprecated `userLoggedIn:` and `userLoggedOut` methods
* Deprecated going back to default system device ID
- Other various improvements
- Updated HeaderDocs, internal logs, inline notes and pragma marks
- Updated Countly project settings for Xcode 13.1
- Deleted previously deprecated methods and properties
- Refactored `connectionType` method
* Other various improvements
* Updated HeaderDocs, internal logs, inline notes and pragma marks
* Updated Countly project settings for Xcode 13.1
* Deleted previously deprecated methods and properties
* Refactored `connectionType` method
## 20.11.3
- Added optional appear and dismiss callbacks for feedback widget presenting
- Added manually displayed and recorded feedback widgets support
- Fixed HTTP method check for feedback widget requests
- Implemented immediately sending of queued events when a widget event is recorded
* Added optional appear and dismiss callbacks for feedback widget presenting
* Added manually displayed and recorded feedback widgets support
* Fixed HTTP method check for feedback widget requests
* Implemented immediately sending of queued events when a widget event is recorded
## 20.11.2
- Added configurable internal log levels
- Added internal logs for approximate received and sent data size for requests
- Added numbers and boolean value types for custom user details methods
- Added `clearCrashLogs` method for clearing custom crash logs (breadcrumbs)
- Added `navigationItem`'s title as a view title fallback for view tracking
- Added Mac Catalyst support
- Added selector precaution for `CountlyLoggerDelegate` method call
- Added precautions for nil values in custom user details methods
- Updated request successful check to consider response object
- Updated default `eventSendThreshold` as 100
- Fixed `UIApplicationState` usage for crashes occured on non-main thread
- Fixed clearing custom crash logs
- Fixed missing frameworks for `ns` subspec in `podspec` file
- Fixed CountlyLoggerDelegate methods optionality
- Fixed view tracking exception view checking
- Fixed adding and removing view tracking exceptions on tvOS
- Fixed cast warnings for an APM method internal log
* Added configurable internal log levels
* Added internal logs for approximate received and sent data size for requests
* Added numbers and boolean value types for custom user details methods
* Added `clearCrashLogs` method for clearing custom crash logs (breadcrumbs)
* Added `navigationItem`'s title as a view title fallback for view tracking
* Added Mac Catalyst support
* Added selector precaution for `CountlyLoggerDelegate` method call
* Added precautions for nil values in custom user details methods
* Updated request successful check to consider response object
* Updated default `eventSendThreshold` as 100
* Fixed `UIApplicationState` usage for crashes occured on non-main thread
* Fixed clearing custom crash logs
* Fixed missing frameworks for `ns` subspec in `podspec` file
* Fixed CountlyLoggerDelegate methods optionality
* Fixed view tracking exception view checking
* Fixed adding and removing view tracking exceptions on tvOS
* Fixed cast warnings for an APM method internal log
- Other various improvements
- Updated HeaderDocs, internal logs, inline notes and pragma marks
- Updated Countly project settings for Xcode 12.4
* Other various improvements
* Updated HeaderDocs, internal logs, inline notes and pragma marks
* Updated Countly project settings for Xcode 12.4
## 20.11.1
- Added `loggerDelegate` initial config property for receiving internal logs on production builds
- Fixed manual view tracking state clean up when view tracking consent is cancelled
- Updated `CountlyFeedbackWidget.h` as public header file in Xcode project file for Carthage
- Added nullability specifiers for block parameters
* Added `loggerDelegate` initial config property for receiving internal logs on production builds
* Fixed manual view tracking state clean up when view tracking consent is cancelled
* Updated `CountlyFeedbackWidget.h` as public header file in Xcode project file for Carthage
* Added nullability specifiers for block parameters
## 20.11.0
- Added Surveys and NPS feedback widgets
- Added Swift Package Manager support
- Added `replaceAllAppKeysInQueueWithCurrentAppKey` method to replace all app keys in queue with the current app key
- Added `removeDifferentAppKeysFromQueue` method to remove all different app keys from the queue
- Added `deviceIDType` method to be able to check device ID type
- Added precaution and warning for `nil` crash report case
- Added `consents` initial config property
- Added device type metric
- Updated dismiss button design
- Fixed web view autoresizing mask for legacy feedback widgets
- Fixed a missing `CoreLocation` framework import
- Fixed unnecessary recreation of `NSURLSession` instances
- Fixed dismiss button layout
- Changed interface orientation change event consent from `Events` to `UserDetails`
- Changed remote config consent from `Any` to `RemoteConfig`
- Marked `pushTestMode` initial config property as `_Nullable`
* Added Surveys and NPS feedback widgets
* Added Swift Package Manager support
* Added `replaceAllAppKeysInQueueWithCurrentAppKey` method to replace all app keys in queue with the current app key
* Added `removeDifferentAppKeysFromQueue` method to remove all different app keys from the queue
* Added `deviceIDType` method to be able to check device ID type
* Added precaution and warning for `nil` crash report case
* Added `consents` initial config property
* Added device type metric
* Updated dismiss button design
* Fixed web view autoresizing mask for legacy feedback widgets
* Fixed a missing `CoreLocation` framework import
* Fixed unnecessary recreation of `NSURLSession` instances
* Fixed dismiss button layout
* Changed interface orientation change event consent from `Events` to `UserDetails`
* Changed remote config consent from `Any` to `RemoteConfig`
* Marked `pushTestMode` initial config property as `_Nullable`
- Other various improvements
- Refactored picture upload data extraction
- Suppressed an internal log for interface orientation change
- Updated some constant key declarations for common use
- Updated HeaderDocs, internal logs, inline notes and pragma marks
* Other various improvements
* Refactored picture upload data extraction
* Suppressed an internal log for interface orientation change
* Updated some constant key declarations for common use
* Updated HeaderDocs, internal logs, inline notes and pragma marks
## 20.04.3
- Deprecated `recordLocation:`, `recordCity:andISOCountryCode:`, `recordIP:` methods
- Added new combined `recordLocation:city:ISOCountryCode:IP:` method for recording location related info
- Deprecated `enableAttribution` initial config flag
- Added `attributionID` initial config property
- Added `recordAttributionID:` method
- Discarded IDFA usage on optional attribution feature
- Discarded `COUNTLY_EXCLUDE_IDFA` preprocessor flag
- Updated `PLCrashReporter` subspec dependency version specifier as `~> 1`
* Deprecated `recordLocation:`, `recordCity:andISOCountryCode:`, `recordIP:` methods
* Added new combined `recordLocation:city:ISOCountryCode:IP:` method for recording location related info
* Deprecated `enableAttribution` initial config flag
* Added `attributionID` initial config property
* Added `recordAttributionID:` method
* Discarded IDFA usage on optional attribution feature
* Discarded `COUNTLY_EXCLUDE_IDFA` preprocessor flag
* Updated `PLCrashReporter` subspec dependency version specifier as `~> 1`
- Other various improvements
- Updated HeaderDocs, internal logs, inline notes and pragma marks
- Updated some initial config property modifiers as `copy`
- Treated empty string `city`, `ISOCountryCode` and `IP` values as `nil`
- Added warnings for the cases where `city` and `ISOCountryCode` code are not set as a pair
* Other various improvements
* Updated HeaderDocs, internal logs, inline notes and pragma marks
* Updated some initial config property modifiers as `copy`
* Treated empty string `city`, `ISOCountryCode` and `IP` values as `nil`
* Added warnings for the cases where `city` and `ISOCountryCode` code are not set as a pair
## 20.04.2
- Implemented overriding default metrics and adding custom ones
- Fixed advertising tracking enabled check
* Implemented overriding default metrics and adding custom ones
* Fixed advertising tracking enabled check
- Other various improvements
- Improved internal logs for pinned certificate check
- Refactored extra slash check using `hasSuffix:` method
- Renamed some app life cycle observing methods for clarity
* Other various improvements
* Improved internal logs for pinned certificate check
* Refactored extra slash check using `hasSuffix:` method
* Renamed some app life cycle observing methods for clarity
## 20.04.1
- Added Application Performance Monitoring (Phase 1)
- Manual network traces
- Manual custom traces
- Semi-automatic app start time trace
- Automatic app foreground time trace
- Automatic app background time trace
- Consent handling for Application Performance Monitoring
- Added `COUNTLY_EXCLUDE_PUSHNOTIFICATIONS` flag to disable push notifications altogether in order to avoid App Store Connect warnings (thanks @grundleborg)
- Fixed an incorrect internal logging on SDK start
- Fixed location consent order to avoid some legacy Countly Server issue with location info being unavailable even after giving consent
- Improved `UIApplicationWillTerminateNotification` behaviour
- Prevented recording empty string as `city`, `ISOCountryCode` and `IP` for location info
- Applied `alwaysUsePOST` flag to feedback widget check requests
- Applied `alwaysUsePOST` flag to remote config requests
* Added Application Performance Monitoring (Phase 1)
* Manual network traces
* Manual custom traces
* Semi-automatic app start time trace
* Automatic app foreground time trace
* Automatic app background time trace
* Consent handling for Application Performance Monitoring
* Added `COUNTLY_EXCLUDE_PUSHNOTIFICATIONS` flag to disable push notifications altogether in order to avoid App Store Connect warnings (thanks @grundleborg)
* Fixed an incorrect internal logging on SDK start
* Fixed location consent order to avoid some legacy Countly Server issue with location info being unavailable even after giving consent
* Improved `UIApplicationWillTerminateNotification` behaviour
* Prevented recording empty string as `city`, `ISOCountryCode` and `IP` for location info
* Applied `alwaysUsePOST` flag to feedback widget check requests
* Applied `alwaysUsePOST` flag to remote config requests
- Other various improvements
- Deleted some unnecessary imports
- Updated HeaderDocs, internal logs, inline notes and pragma marks
- Added missing frameworks to CocoaPods podspec
- Added ability to override SDK name and version for bridge SDKs
* Other various improvements
* Deleted some unnecessary imports
* Updated HeaderDocs, internal logs, inline notes and pragma marks
* Added missing frameworks to CocoaPods podspec
* Added ability to override SDK name and version for bridge SDKs
## 20.04
- Added crash reporting feature for tvOS
- Added crash reporting feature for macOS
- Added crash reporting feature for watchOS
- Added optional crash reporting dependency PLCrashReporter for iOS
- Added UI orientation tracking
- Added crash filtering with regex
- Updated dSYM uploader script for accepting custom dSYM paths
- Updated enableAppleWatch flag default value for independent watchOS apps
- Fixed push notification consent method for macOS targets
- Fixed not appearing rich push notification buttons for some cases
- Discarded OpenGL ES version info in crash reports
* Added crash reporting feature for tvOS
* Added crash reporting feature for macOS
* Added crash reporting feature for watchOS
* Added optional crash reporting dependency PLCrashReporter for iOS
* Added UI orientation tracking
* Added crash filtering with regex
* Updated dSYM uploader script for accepting custom dSYM paths
* Updated enableAppleWatch flag default value for independent watchOS apps
* Fixed push notification consent method for macOS targets
* Fixed not appearing rich push notification buttons for some cases
* Discarded OpenGL ES version info in crash reports
- Other various improvements
- Deleted an unnecessary UIKit import
- Added precaution for possible nil lines in backtrace
- Added precaution for possible nil OS name value
- Replaced scheduledTimerWithTimeInterval call with timerWithTimeInterval (thanks @mt-rpranata)
- Updated architerture method for crash reports
- Updated CocoaPods podspec for core subspec approach
- Updated feature, consent and push test mode specifiers as NSString typedefs
- Updated HeaderDocs, internal logs, inline notes and pragma marks
* Other various improvements
* Deleted an unnecessary UIKit import
* Added precaution for possible nil lines in backtrace
* Added precaution for possible nil OS name value
* Replaced scheduledTimerWithTimeInterval call with timerWithTimeInterval (thanks @mt-rpranata)
* Updated architerture method for crash reports
* Updated CocoaPods podspec for core subspec approach
* Updated feature, consent and push test mode specifiers as NSString typedefs
* Updated HeaderDocs, internal logs, inline notes and pragma marks
## 19.08
- Added temporary device ID mode
- Added support for Carthage
- Added custom URL session configuration support
- Added custom segmentation support on view tracking
- Added ability to change app key on the run
- Added ability to flush queues
- Added `pushTestMode` property and discarded `isTestDevice` property
- Fixed `WCSessionDelegate` interception
- Fixed title and message check in push notification payloads
- Fixed binary image name extraction for crash reports
- Fixed missing delegate forwarding for `userNotificationCenter:openSettingsForNotification:` method
- Fixed in-app alerts on iOS10+ devices when a silent notification with alert key arrives
- Discarded device ID persistency on Keychain
- Discarded OpenUDID device ID option
- Discarded IDFA device ID option
- Discarded zero IDFA fix
- Updated default device ID on tvOS as `identifierForVendor`
* Added temporary device ID mode
* Added support for Carthage
* Added custom URL session configuration support
* Added custom segmentation support on view tracking
* Added ability to change app key on the run
* Added ability to flush queues
* Added `pushTestMode` property and discarded `isTestDevice` property
* Fixed `WCSessionDelegate` interception
* Fixed title and message check in push notification payloads
* Fixed binary image name extraction for crash reports
* Fixed missing delegate forwarding for `userNotificationCenter:openSettingsForNotification:` method
* Fixed in-app alerts on iOS10+ devices when a silent notification with alert key arrives
* Discarded device ID persistency on Keychain
* Discarded OpenUDID device ID option
* Discarded IDFA device ID option
* Discarded zero IDFA fix
* Updated default device ID on tvOS as `identifierForVendor`
- Other various improvements
- Renamed `forceDeviceIDInitialization` flag as `resetStoredDeviceID`
- Added lightweight generics for segmentation parameters
- Added dSYM upload script to preserved paths in Podspec
- Updated dSYM upload script to support paths with spaces
- Changed request cache policy to `NSURLRequestReloadIgnoringLocalCacheData`
- Added battery level for watchOS 4.0+
- Added JSON validity check before converting objects
- Deleted unused `kCountlyCRKeyLoadAddress` constant
- Improved internal logging in binary images processing for crash reports
- Added persistency for generated `NSUUID`
- Added precaution to prevent invalid requests from being added to queue
- Discarded null check on request queue
- Discarded all APM related files
- Added length check for view tracking view name
- Added length check for view tracking exceptions
- Updated HeaderDocs, internal logs, inline notes and pragma marks
* Other various improvements
* Renamed `forceDeviceIDInitialization` flag as `resetStoredDeviceID`
* Added lightweight generics for segmentation parameters
* Added dSYM upload script to preserved paths in Podspec
* Updated dSYM upload script to support paths with spaces
* Changed request cache policy to `NSURLRequestReloadIgnoringLocalCacheData`
* Added battery level for watchOS 4.0+
* Added JSON validity check before converting objects
* Deleted unused `kCountlyCRKeyLoadAddress` constant
* Improved internal logging in binary images processing for crash reports
* Added persistency for generated `NSUUID`
* Added precaution to prevent invalid requests from being added to queue
* Discarded null check on request queue
* Discarded all APM related files
* Added length check for view tracking view name
* Added length check for view tracking exceptions
* Updated HeaderDocs, internal logs, inline notes and pragma marks
## 19.02
- Added push notification support for macOS
- Added provisional push notification permission support for iOS12
- Added remote config feature
- Added `recordPushNotificationToken` method to be used after device ID changes
- Added `clearPushNotificationToken` method to be used after device ID changes
- Discarded `Push Open` event and replaced it with `Push Action` event
- Fixed push notification token not being sent on some iOS12 devices
- Fixed device ID change request delaying issue by discarding delay altogether
- Fixed internal view controller presenting failure when root view controller is not ready yet
- Fixed `openURL` freeze caused by iOS
- Fixed wrong `kCountlyQSKeyLocationIP` key in location info requests
- Fixed missing app key in feedback widget requests
- Fixed feedback widget dismiss button position
* Added push notification support for macOS
* Added provisional push notification permission support for iOS12
* Added remote config feature
* Added `recordPushNotificationToken` method to be used after device ID changes
* Added `clearPushNotificationToken` method to be used after device ID changes
* Discarded `Push Open` event and replaced it with `Push Action` event
* Fixed push notification token not being sent on some iOS12 devices
* Fixed device ID change request delaying issue by discarding delay altogether
* Fixed internal view controller presenting failure when root view controller is not ready yet
* Fixed `openURL` freeze caused by iOS
* Fixed wrong `kCountlyQSKeyLocationIP` key in location info requests
* Fixed missing app key in feedback widget requests
* Fixed feedback widget dismiss button position
- Other various improvements
- Discarded separate UIWindow usage for presenting feedback widgets
- Added checksum to feedback widget requests
- Improved internal logging for request queue
* Other various improvements
* Discarded separate UIWindow usage for presenting feedback widgets
* Added checksum to feedback widget requests
* Improved internal logging for request queue
## 18.08
- Added feedback widgets support
- Added limit for number of custom crash logs (100 logs)
- Added limit for each custom crash log length (1000 chars)
- Added support for cancelling timed events
- Added support for recording fatal exceptions manually
- Added `userInfo` to crash report custom property
- Added delay before sending change device ID request (server requirement)
- Renamed `isAutoViewTrackingEnabled` as `isAutoViewTrackingActive`
- Fixed Xcode warnings for `askForNotificationPermission` method
- Fixed `UIAlertController` leak in push notification manager
- Fixed `crashSegmentation` availability for manually recorded crashes
- Fixed `openURL:` call thread as main thread
- Updated minimum supported `macOS` version as `10.10`
* Added feedback widgets support
* Added limit for number of custom crash logs (100 logs)
* Added limit for each custom crash log length (1000 chars)
* Added support for cancelling timed events
* Added support for recording fatal exceptions manually
* Added `userInfo` to crash report custom property
* Added delay before sending change device ID request (server requirement)
* Renamed `isAutoViewTrackingEnabled` as `isAutoViewTrackingActive`
* Fixed Xcode warnings for `askForNotificationPermission` method
* Fixed `UIAlertController` leak in push notification manager
* Fixed `crashSegmentation` availability for manually recorded crashes
* Fixed `openURL:` call thread as main thread
* Updated minimum supported `macOS` version as `10.10`
- Other various improvements
- Discarded separate `UIWindow` for presenting `UIAlertControllers`
- Refactored `buildUUID` and `executableName` as properties
- Refactored custom crash log array and date formatter
- Updated HeaderDocs, inline notes, pragma marks
* Other various improvements
* Discarded separate `UIWindow` for presenting `UIAlertControllers`
* Refactored `buildUUID` and `executableName` as properties
* Refactored custom crash log array and date formatter
* Updated HeaderDocs, inline notes, pragma marks
## 18.04
- Added consent management for GDPR compliance
- Exposed device ID to be used for data export and/or removal requests
- Added precautions for SDK start state to prevent re-starting and early method calls
- Added mutability protection for core functions, configuration properties, events and user details
- Added `COUNTLY_EXCLUDE_IDFA` pre-processor flag to exclude IDFA references
- Added API availability checks and warnings for Apple Watch and Push Notifications
- Renamed `reportView:` method as `recordView:`
- Fixed early ending of `UIBackgroundTask`
- Fixed getting file path form local storage URL (thanks @dsmo)
- Fixed not respecting `doNotShowAlertForNotifications` flag on iOS10+ devices
- Fixed not starting requests queue when `manualSessionHandling` is enabled
- Fixed `block implicitly retains self` warning in Star Rating
- Fixed local variable shadowing warnings
- Fixed Japanese language code for Star Rating dialog
* Added consent management for GDPR compliance
* Exposed device ID to be used for data export and/or removal requests
* Added precautions for SDK start state to prevent re-starting and early method calls
* Added mutability protection for core functions, configuration properties, events and user details
* Added `COUNTLY_EXCLUDE_IDFA` pre-processor flag to exclude IDFA references
* Added API availability checks and warnings for Apple Watch and Push Notifications
* Renamed `reportView:` method as `recordView:`
* Fixed early ending of `UIBackgroundTask`
* Fixed getting file path form local storage URL (thanks @dsmo)
* Fixed not respecting `doNotShowAlertForNotifications` flag on iOS10+ devices
* Fixed not starting requests queue when `manualSessionHandling` is enabled
* Fixed `block implicitly retains self` warning in Star Rating
* Fixed local variable shadowing warnings
* Fixed Japanese language code for Star Rating dialog
- Other various improvements
- Refactored all location info into Location Manager
- Refactored `checkForAutoAsk` in Star Rating
- Refactored event recording for consents compatibility
- Refactored Apple Watch matching
- Refactored auto view tracking
- Added top view controller finding method
- Replaced asserts with exceptions
- Deleted unneccessary method declarations in Push Notifications
- Deleted unnecessary reference for `WCSession.defaultSession.delegate`
- Deleted unnecessary `TARGET_OS_OSX` definition
- Standardized `nil` checks
- Renamed and reordered some query string constants
- Updated HeaderDocs, inline notes, pragma marks
- Performed whitespace cleaning
* Other various improvements
* Refactored all location info into Location Manager
* Refactored `checkForAutoAsk` in Star Rating
* Refactored event recording for consents compatibility
* Refactored Apple Watch matching
* Refactored auto view tracking
* Added top view controller finding method
* Replaced asserts with exceptions
* Deleted unneccessary method declarations in Push Notifications
* Deleted unnecessary reference for `WCSession.defaultSession.delegate`
* Deleted unnecessary `TARGET_OS_OSX` definition
* Standardized `nil` checks
* Renamed and reordered some query string constants
* Updated HeaderDocs, inline notes, pragma marks
* Performed whitespace cleaning
## 18.01
- Added `attribution` config
- Added recording city and country for GeoLocation
- Added recording explicit IP address for GeoLocation
- Added disabling GeoLocation
- Updated `recordLocation` method to override inital `location` config
- Fixed reserved key for IP address query string
- Fixed a `CoreTelephony` related crash due to an iOS bug
- Replaced `NSUserDefaults` with `NSCachesDirectory` on tvOS for persistency
- Improved auto dSYM uploader script
- Improved performance on stored request limit execution
* Added `attribution` config
* Added recording city and country for GeoLocation
* Added recording explicit IP address for GeoLocation
* Added disabling GeoLocation
* Updated `recordLocation` method to override inital `location` config
* Fixed reserved key for IP address query string
* Fixed a `CoreTelephony` related crash due to an iOS bug
* Replaced `NSUserDefaults` with `NSCachesDirectory` on tvOS for persistency
* Improved auto dSYM uploader script
* Improved performance on stored request limit execution
- Other various improvements
- Fixed a placeholder type specifier for `NSNumber`
- Deleted unnecessary `CLYMessaging` definition
- Deleted unnecessary strong ownership qualifiers
- Added Hindu translation for star rating dialog
- Added change log file
- Updated user details and star rating reserved keys as constants
- Updated `OpenGLESVersion` method return type as `NSString`
- Updated time related types as `NSTimeInterval`
- Updated HeaderDocs
* Other various improvements
* Fixed a placeholder type specifier for `NSNumber`
* Deleted unnecessary `CLYMessaging` definition
* Deleted unnecessary strong ownership qualifiers
* Added Hindu translation for star rating dialog
* Added change log file
* Updated user details and star rating reserved keys as constants
* Updated `OpenGLESVersion` method return type as `NSString`
* Updated time related types as `NSTimeInterval`
* Updated HeaderDocs
## 17.09
- Updated for Xcode 9 and iOS 11
- Added symbolication support for crash reports
- Added Automatic dSYM Uploading script
- Added extension subspec for integrating Rich Push Notifications with CocoaPods
- Added nullability specifiers for better Swift compatibility
- Added 28 new system UIViewController subclass exception for Auto View Tracking
- Added convenience method for recording action event for manually handled notifications
- Added convenience method for recording handled exception with stack trace
- Added precaution for invalid event keys
- Added precaution for corrupt request strings
- Made Zero-IDFA fix optional
- Fixed a view tracking duration problem where duration being reported as timestamp
- Replaced `crashLog` method with `recordCrashLog` and added deprecated warning
- Changed dispatch queue type for opening external URLs
* Updated for Xcode 9 and iOS 11
* Added symbolication support for crash reports
* Added Automatic dSYM Uploading script
* Added extension subspec for integrating Rich Push Notifications with CocoaPods
* Added nullability specifiers for better Swift compatibility
* Added 28 new system UIViewController subclass exception for Auto View Tracking
* Added convenience method for recording action event for manually handled notifications
* Added convenience method for recording handled exception with stack trace
* Added precaution for invalid event keys
* Added precaution for corrupt request strings
* Made Zero-IDFA fix optional
* Fixed a view tracking duration problem where duration being reported as timestamp
* Replaced `crashLog` method with `recordCrashLog` and added deprecated warning
* Changed dispatch queue type for opening external URLs
- Other various improvements
- Added Bengali translation for star rating dialog
- Updated metric, event, view tracking and crash report reserved keys as constants
- Deleted unnecessary gitattributes file
- Deleted duplicate Zero-IDFA const
- Rearranged file imports
- Updated HeaderDocs
- Cleaned whitespace
* Other various improvements
* Added Bengali translation for star rating dialog
* Updated metric, event, view tracking and crash report reserved keys as constants
* Deleted unnecessary gitattributes file
* Deleted duplicate Zero-IDFA const
* Rearranged file imports
* Updated HeaderDocs
* Cleaned whitespace
## 17.05
- Added Rich Push Notifications support (attachments and custom action buttons)
- Added manual session handling
- Added URL escaping for custom device ID and other user defined properties
- Added support for accidental extra slash in host
- Added architecture, executable name and load address for crash reporting
- Added IP optional parameter
- Added SDK metadata to all request
- Switched to SHA256 for parameter tampering protection
- Discarded `recordUserDetails` method and combined it with `save` method
- Improved `AutoViewTracking` active duration calculation
- Improved Countly payload check in notification dictionary
- Fixed inner event timestamp for 32 bit devices
- Fixed token cleaning when user's permission changes
- Fixed checksum calculation for `zero-IDFA` fix case
- Fixed OS version metric for `tvOS`
- Fixed double `suspend` method call when user kills the app using App Switcher
- Fixed a compiler warning for `macOS` targets
- Fixed `AutoViewTracking` for `macOS` targets
- Fixed showing of multiple alerts in succession
* Added Rich Push Notifications support (attachments and custom action buttons)
* Added manual session handling
* Added URL escaping for custom device ID and other user defined properties
* Added support for accidental extra slash in host
* Added architecture, executable name and load address for crash reporting
* Added IP optional parameter
* Added SDK metadata to all request
* Switched to SHA256 for parameter tampering protection
* Discarded `recordUserDetails` method and combined it with `save` method
* Improved `AutoViewTracking` active duration calculation
* Improved Countly payload check in notification dictionary
* Fixed inner event timestamp for 32 bit devices
* Fixed token cleaning when user's permission changes
* Fixed checksum calculation for `zero-IDFA` fix case
* Fixed OS version metric for `tvOS`
* Fixed double `suspend` method call when user kills the app using App Switcher
* Fixed a compiler warning for `macOS` targets
* Fixed `AutoViewTracking` for `macOS` targets
* Fixed showing of multiple alerts in succession
- Other various improvements
- Refactored picture upload data preparation from request string using `NSURLComponents`
- Refactored `zero-IDFA` check
- Refactored additional info to be sent with begin session request
- Refactored checksum appending
- Refactored URLSession generation
- Refactored opening external URLs on main thread
- Refactored device model identifier method
- Refactored sending crash report into connection manager
- Replaced `__OPTIMIZED__` flag with `DEBUG` flag for push notification test mode detection
- Replaced boundary method with constant string
- Replaced text based dismiss button with cross dismiss button for star-rating
- Redefined request query string keys as constants
- Redefined push notification reserved keys as constants
- Redefined GET request max length as a constant
- Redefined server input endpoint as a constant
- Redefined push notification test mode values as enum
- Standardized some integer types
- Standardized target checking preprocessor macro usage
- Deleted unnecessary `init` override in push manager
- Deleted unnecessary `updateSessionPeriod` property in connection manager
- Deleted unnecessary `starRatingDismissButtonTitle` config property
- Deleted internal crash test methods
- Added Czech and Latvian localization for star-rating dialog
- Changed example host URL for rebranding compatibility
- Updated handling of notification on `iOS9` and older
- Updated alert key handling in push notification payload
- Updated HeaderDocs
- Cleaned whitespace
* Other various improvements
* Refactored picture upload data preparation from request string using `NSURLComponents`
* Refactored `zero-IDFA` check
* Refactored additional info to be sent with begin session request
* Refactored checksum appending
* Refactored URLSession generation
* Refactored opening external URLs on main thread
* Refactored device model identifier method
* Refactored sending crash report into connection manager
* Replaced `__OPTIMIZED__` flag with `DEBUG` flag for push notification test mode detection
* Replaced boundary method with constant string
* Replaced text based dismiss button with cross dismiss button for star-rating
* Redefined request query string keys as constants
* Redefined push notification reserved keys as constants
* Redefined GET request max length as a constant
* Redefined server input endpoint as a constant
* Redefined push notification test mode values as enum
* Standardized some integer types
* Standardized target checking preprocessor macro usage
* Deleted unnecessary `init` override in push manager
* Deleted unnecessary `updateSessionPeriod` property in connection manager
* Deleted unnecessary `starRatingDismissButtonTitle` config property
* Deleted internal crash test methods
* Added Czech and Latvian localization for star-rating dialog
* Changed example host URL for rebranding compatibility
* Updated handling of notification on `iOS9` and older
* Updated alert key handling in push notification payload
* Updated HeaderDocs
* Cleaned whitespace
## 16.12
- Refactored push notifications
- Made integration more easy
- Added iOS10 push notifications handling
- Added convenience method for asking push notifications permission covers all iOS versions
- Renamed feature name from `CLYMessaging` to `CLYPushNotifications`
- Added configuration option `doNotShowAlertForNotifications` to disable push triggered alerts
- Discarded complicated `UIUserNotificationCategory` actions
- Added configuration option `sendPushTokenAlways` to record push token always (for sending silent notification to users without notification permission)
- Discarded App Store URL fetching with `NSURLConnection`
- Discarded iOS7 support and deprecated method calls
- Switched to runtime controlled internal logging instead of preprocessor flag
- Added AutoViewTracking support for tvOS
- Added view controller title and custom titleView support for AutoViewTracking
- Improved AutoViewTracking performance and Swift compatibility
- Refactored suspending for crash reporting
- Switched to async file save for suspending
- Added user login and logout convenience methods
- Added configuration option to enable Apple Watch related features
- Moved archiving of queued request into sync block to prevent a very rare occurring crash
- Refactored unsent session duration
- Added completion callback for automatically displayed star-rating dialog
- Partially fixed but temporarily disabled APM feature until server completely supports it
- Fixed too long exception name in crash reports on iOS10
- Other various improvements
- Refactored starting method
- Switched to separate window based alert controller displaying for push notifications and star-rating dialogs
- Renamed constant kCountlyStarRatingButtonSize to prevent compile time conflicts
- Renamed server input endpoint variable for white label SDK renamer script compatibility
- Updated star-rating reserved event key
- Added internal log for successful initialization with SDK name and version
- Fixed unused `UIAlertViewAssociatedObjectKey` warning for macOS
- Removed old deviceID zero-IDFA fixer redundant request
- Added internal logging for connection type retrieval exception
- Added exception type info to crash reports
- Fixed duplicate exception adding for AutoViewTracking
- Prevented Countly internal view controllers from being tracked by AutoViewTracking
- Prefixed all category methods to prevent possible conflicts
- Changed timer's runloop mode
- Updated timestamp type specifier (thanks to @scottlaw)
- Changed SDK metadata sending to begin_session only
- Replaced empty string checks with length checks
- Cleared nullability specifiers
- Updated HeaderDocs
- Cleaned whitespace
* Refactored push notifications
* Made integration more easy
* Added iOS10 push notifications handling
* Added convenience method for asking push notifications permission covers all iOS versions
* Renamed feature name from `CLYMessaging` to `CLYPushNotifications`
* Added configuration option `doNotShowAlertForNotifications` to disable push triggered alerts
* Discarded complicated `UIUserNotificationCategory` actions
* Added configuration option `sendPushTokenAlways` to record push token always (for sending silent notification to users without notification permission)
* Discarded App Store URL fetching with `NSURLConnection`
* Discarded iOS7 support and deprecated method calls
* Switched to runtime controlled internal logging instead of preprocessor flag
* Added AutoViewTracking support for tvOS
* Added view controller title and custom titleView support for AutoViewTracking
* Improved AutoViewTracking performance and Swift compatibility
* Refactored suspending for crash reporting
* Switched to async file save for suspending
* Added user login and logout convenience methods
* Added configuration option to enable Apple Watch related features
* Moved archiving of queued request into sync block to prevent a very rare occurring crash
* Refactored unsent session duration
* Added completion callback for automatically displayed star-rating dialog
* Partially fixed but temporarily disabled APM feature until server completely supports it
* Fixed too long exception name in crash reports on iOS10
* Other various improvements
* Refactored starting method
* Switched to separate window based alert controller displaying for push notifications and star-rating dialogs
* Renamed constant kCountlyStarRatingButtonSize to prevent compile time conflicts
* Renamed server input endpoint variable for white label SDK renamer script compatibility
* Updated star-rating reserved event key
* Added internal log for successful initialization with SDK name and version
* Fixed unused `UIAlertViewAssociatedObjectKey` warning for macOS
* Removed old deviceID zero-IDFA fixer redundant request
* Added internal logging for connection type retrieval exception
* Added exception type info to crash reports
* Fixed duplicate exception adding for AutoViewTracking
* Prevented Countly internal view controllers from being tracked by AutoViewTracking
* Prefixed all category methods to prevent possible conflicts
* Changed timer's runloop mode
* Updated timestamp type specifier (thanks to @scottlaw)
* Changed SDK metadata sending to begin_session only
* Replaced empty string checks with length checks
* Cleared nullability specifiers
* Updated HeaderDocs
* Cleaned whitespace
## 16.06.4
- Fixed iOS10 zero-IDFA problem
- Fixed TARGET_OS_OSX warning for iOS10 SDK on Xcode 8.
- Fixed ending of background tasks.
- Added parameter tampering protection.
- Added density metric.
- Added alwaysUsePOST config property for using POST method for all requests regardless of the data size.
- Added timezone.
- Switched to millisecond timestamp.
- Disabled server response dictionary check.
- Other minor improvements like better internal logging, standardization, whitespacing, code cleaning, commenting, pragma marking and HeaderDocing
* Fixed iOS10 zero-IDFA problem
* Fixed TARGET_OS_OSX warning for iOS10 SDK on Xcode 8.
* Fixed ending of background tasks.
* Added parameter tampering protection.
* Added density metric.
* Added alwaysUsePOST config property for using POST method for all requests regardless of the data size.
* Added timezone.
* Switched to millisecond timestamp.
* Disabled server response dictionary check.
* Other minor improvements like better internal logging, standardization, whitespacing, code cleaning, commenting, pragma marking and HeaderDocing
## 16.06.3
- Fixed a persistency related crash
- Improved thread safety of request queue and events
- Added Star-Rating, the simplest form of feedback from users, both automatically and manually.
- Improved event recording performance and safety for APM and Auto View Tracking.
- Added custom HTTP header field support for requests, both on initial configuration and later.
- Standardized internal logging grammar and formatting for easier debugging
- Improved headerdocs grammar and formatting for easier integration and usage
- Fixed some static analyzer warnings
* Fixed a persistency related crash
* Improved thread safety of request queue and events
* Added Star-Rating, the simplest form of feedback from users, both automatically and manually.
* Improved event recording performance and safety for APM and Auto View Tracking.
* Added custom HTTP header field support for requests, both on initial configuration and later.
* Standardized internal logging grammar and formatting for easier debugging
* Improved headerdocs grammar and formatting for easier integration and usage
* Fixed some static analyzer warnings
## 16.06.2
- Added Star-Rating, the simplest form of feedback from users, both automatically and manually.
- Improved event recording performance and safety for APM and Auto View Tracking.
- Added custom HTTP header field support for requests, both on initial configuration and later.
- Standardized internal logging grammar and formatting for easier debugging
- Improved headerdocs grammar and formatting for easier integration and usage
- Fixed some static analyzer warnings
* Added Star-Rating, the simplest form of feedback from users, both automatically and manually.
* Improved event recording performance and safety for APM and Auto View Tracking.
* Added custom HTTP header field support for requests, both on initial configuration and later.
* Standardized internal logging grammar and formatting for easier debugging
* Improved headerdocs grammar and formatting for easier integration and usage
* Fixed some static analyzer warnings
## 16.06.1
- Added support for certificate pinning.
- Added deleting of user details properties on server by setting them as NSNull.
- Implemented switching between GET and POST depending on data size on requests.
- Fixed a URL encoding issue which causes problems for Asian languages and some JSON payloads.
- Fixed custom crash log formatter.
* Added support for certificate pinning.
* Added deleting of user details properties on server by setting them as NSNull.
* Implemented switching between GET and POST depending on data size on requests.
* Fixed a URL encoding issue which causes problems for Asian languages and some JSON payloads.
* Fixed custom crash log formatter.
## 16.06
- Fixed a problem with changing device ID (for system generated device IDs)
- Added isTestDevice flag to mark test devices for Push Notifications
- Improved Auto View Tracking by ignoring non-visible foundation UIViewController subclasses
- Implemented manually adding exception UIViewController subclasses for Auto View Tracking
- Changed default device ID type for tvOS from IDFA to NSUUID
- Added stored requests limit
- Added optional parameters ISOCountryCode, city and location for advanced segmentation
- Discarded timed events persistency
- Added buildUUID and build number to Crash Reports
- Added SDK name (language-origin-platform) to all requests
- Changed default alert title for push messages
- Other minor improvements like better internal logging, standardization, whitespacing, code cleaning, commenting, pragma marking and HeaderDocing
* Fixed a problem with changing device ID (for system generated device IDs)
* Added isTestDevice flag to mark test devices for Push Notifications
* Improved Auto View Tracking by ignoring non-visible foundation UIViewController subclasses
* Implemented manually adding exception UIViewController subclasses for Auto View Tracking
* Changed default device ID type for tvOS from IDFA to NSUUID
* Added stored requests limit
* Added optional parameters ISOCountryCode, city and location for advanced segmentation
* Discarded timed events persistency
* Added buildUUID and build number to Crash Reports
* Added SDK name (language-origin-platform) to all requests
* Changed default alert title for push messages
* Other minor improvements like better internal logging, standardization, whitespacing, code cleaning, commenting, pragma marking and HeaderDocing
# 16.02.01
- Swithed to POST method for all requests by default
- Fixed some issues with Crash Reporting persistency
- Fixed some issues with CocoaPods v1.0.0
- Other minor fixes and improvements
* Swithed to POST method for all requests by default
* Fixed some issues with Crash Reporting persistency
* Fixed some issues with CocoaPods v1.0.0
* Other minor fixes and improvements

@@ -629,12 +647,12 @@ ## 16.02

Completely re-written iOS SDK with watchOS, tvOS & OSX support
- APM
- Manual/Auto ViewTracking
- UserDetails modifiers
- watchOS 2 support
- tvOS support
- Configurable starting
- Custom or system provided (IDFA, IDFV, OpenUDID) device ID
- Changing/merging device ID on runtime
- Persistency without CoreData
- Various performance improvements and minor bugfixes
* APM
* Manual/Auto ViewTracking
* UserDetails modifiers
* watchOS 2 support
* tvOS support
* Configurable starting
* Custom or system provided (IDFA, IDFV, OpenUDID) device ID
* Changing/merging device ID on runtime
* Persistency without CoreData
* Various performance improvements and minor bugfixes

@@ -647,6 +665,6 @@ ## 15.06.01

- Added WatchKit support
- Added CrashReporting support
- Fixed minor problems with Messaging
- Added manually ending sessions on background fetch
- Switched to Ubuntu version numbering
* Added WatchKit support
* Added CrashReporting support
* Fixed minor problems with Messaging
* Added manually ending sessions on background fetch
* Switched to Ubuntu version numbering

@@ -1,9 +0,9 @@

[![Codacy Badge](https://app.codacy.com/project/badge/Grade/68dc667ef1e6465e99fa9d4b2ee56e58)](https://www.codacy.com/gh/Countly/countly-sdk-ios/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Countly/countly-sdk-ios&utm_campaign=Badge_Grade)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/68dc667ef1e6465e99fa9d4b2ee56e58)](https://app.codacy.com/gh/Countly/countly-sdk-ios/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
# Countly iOS SDK
This repository contains the Countly iOS SDK, which can be integrated into iOS, watchOS, tvOS & macOS applications. The Countly iOS SDK is intended to be used with [Countly Community Edition](https://github.com/Countly/countly-server) or [Countly Enterprise Edition](https://count.ly/product).
This repository contains the Countly iOS SDK, which can be integrated into iOS, watchOS, tvOS & macOS applications. The Countly iOS SDK is intended to be used with [Countly Lite](https://countly.com/lite) or [Countly Enterprise](https://count.ly/product).
## What is Countly?
[Countly](https://count.ly) is a product analytics solution and innovation enabler that helps teams track product performance and customer journey and behavior across [mobile](https://count.ly/mobile-analytics), [web](http://count.ly/web-analytics),
[Countly](https://count.ly) is a product analytics solution and innovation enabler that helps teams track product performance and customer journey and behavior across [mobile](https://count.ly/mobile-analytics), [web](https://count.ly/web-analytics),
and [desktop](https://count.ly/desktop-analytics) applications. [Ensuring privacy by design](https://count.ly/privacy-by-design), Countly allows you to innovate and enhance your products to provide personalized and customized customer experiences, and meet key business and revenue goals.

@@ -14,4 +14,4 @@

* **Questions or feature requests?** [Join the Countly Community on Discord](https://discord.gg/countly)
* **Looking for the Countly Server?** [Countly Community Edition repository](https://github.com/Countly/countly-server)
* **Looking for other Countly SDKs?** [An overview of all Countly SDKs for mobile, web and desktop](https://support.count.ly/hc/en-us/articles/360037236571-Downloading-and-Installing-SDKs#officially-supported-sdks)
* **Looking for the Countly Server?** [Countly Lite repository](https://github.com/Countly/countly-server)
* **Looking for other Countly SDKs?** [An overview of all Countly SDKs for mobile, web and desktop](https://support.count.ly/hc/en-us/articles/360037236571-Downloading-and-Installing-SDKs#h_01H9QCP8G5Y9PZJGERZ4XWYDY9)

@@ -22,5 +22,5 @@ ## Integrating Countly SDK in your projects

For information about how to add the SDK to your project, please check [this section of the documentation](https://support.count.ly/hc/en-us/articles/360037753511-iOS-watchOS-tvOS-macOS#adding-the-sdk-to-the-project).
For information about how to add the SDK to your project, please check [this section of the documentation](https://support.count.ly/hc/en-us/articles/360037753511-iOS-watchOS-tvOS-macOS#h_01HAVHW0RNNZT7742WNX46GS1R).
You can find minimal SDK integration information for your project in [this section of the documentation](https://support.count.ly/hc/en-us/articles/360037753511-iOS-watchOS-tvOS-macOS#minimal-setup).
You can find minimal SDK integration information for your project in [this section of the documentation](https://support.count.ly/hc/en-us/articles/360037753511-iOS-watchOS-tvOS-macOS#h_01HAVHW0RNVDW2E2F83R8E6PSB).

@@ -27,0 +27,0 @@ For an example integration of this SDK, you can have a look [here](https://github.com/Countly/countly-sample-ios).

{
"name": "countly-sdk-react-native-bridge",
"version": "23.10.0",
"version": "23.12.0",
"author": "Countly <hello@count.ly> (https://count.ly/)",

@@ -18,2 +18,3 @@ "bugs": {

"main": "Countly.js",
"types": "Countly.d.ts",
"repository": {

@@ -20,0 +21,0 @@ "type": "git",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc