diff --git a/.android.env.example b/.android.env.example index efc8527371d..aceaabefa76 100644 --- a/.android.env.example +++ b/.android.env.example @@ -1,4 +1,3 @@ export MM_FOX_CODE="EXAMPLE_FOX_CODE" export MM_BRANCH_KEY_TEST= export MM_BRANCH_KEY_LIVE= -export MM_MIXPANEL_TOKEN= diff --git a/.gitmodules b/.gitmodules index 2be95567512..45e9d97f297 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "ios/mixpanel-iphone"] - path = ios/mixpanel-iphone - url = https://github.com/metamask/mixpanel-iphone [submodule "ios/branch-ios-sdk"] path = ios/branch-ios-sdk url = https://github.com/metamask/ios-branch-deep-linking-attribution diff --git a/android/app/build.gradle b/android/app/build.gradle index 884a391b87b..98dc31a97d3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -188,7 +188,6 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" manifestPlaceholders.MM_BRANCH_KEY_TEST = "$System.env.MM_BRANCH_KEY_TEST" manifestPlaceholders.MM_BRANCH_KEY_LIVE = "$System.env.MM_BRANCH_KEY_LIVE" - manifestPlaceholders.MM_MIXPANEL_TOKEN = "$System.env.MM_MIXPANEL_TOKEN" } packagingOptions { @@ -294,7 +293,6 @@ dependencies { implementation(files("../libs/nativesdk.aar")) implementation("com.facebook.react:react-android") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") - implementation('com.mixpanel.android:mixpanel-android:5.+') implementation 'org.apache.commons:commons-compress:1.22' androidTestImplementation 'org.mockito:mockito-android:4.2.0' androidTestImplementation 'androidx.test:core:1.5.0' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 79494301125..2de3a9109ea 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -126,10 +126,6 @@ android:value="io.metamask"/> - - - getPackages() { packages.add(new LottiePackage()); packages.add(new PreventScreenshotPackage()); packages.add(new ReactVideoPackage()); - packages.add(new RCTAnalyticsPackage()); packages.add(new RCTMinimizerPackage()); packages.add(new NativeSDKPackage()); packages.add(new RNTarPackage()); diff --git a/android/app/src/main/java/io/metamask/nativeModules/RCTAnalytics.java b/android/app/src/main/java/io/metamask/nativeModules/RCTAnalytics.java deleted file mode 100644 index c9acd71ae88..00000000000 --- a/android/app/src/main/java/io/metamask/nativeModules/RCTAnalytics.java +++ /dev/null @@ -1,209 +0,0 @@ -package io.metamask.nativeModules; - -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.util.Log; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableMapKeySetIterator; -import com.facebook.react.bridge.Promise; - -import com.mixpanel.android.mpmetrics.MixpanelAPI; -import com.mixpanel.android.mpmetrics.Tweak; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.HashMap; -import com.facebook.react.bridge.Promise; - -public class RCTAnalytics extends ReactContextBaseJavaModule { - - MixpanelAPI mixpanel; - private static Tweak remoteVariables = MixpanelAPI.stringTweak("remoteVariables","{}"); - - - public RCTAnalytics(ReactApplicationContext reactContext) { - super(reactContext); - try{ - ApplicationInfo ai = reactContext.getPackageManager().getApplicationInfo(reactContext.getPackageName(), PackageManager.GET_META_DATA); - String mixpanelToken = (String)ai.metaData.get("com.mixpanel.android.mpmetrics.MixpanelAPI.token"); - this.mixpanel = - MixpanelAPI.getInstance(reactContext, mixpanelToken); - - }catch (PackageManager.NameNotFoundException e){ - Log.d("RCTAnalytics","init:token missing"); - } - } - - @Override - public String getName() { - return "Analytics"; - } - - @ReactMethod - public void trackEvent(ReadableMap e) { - String eventCategory = e.getString("category"); - JSONObject props = toJSONObject(e); - props.remove("category"); - this.mixpanel.track(eventCategory, props); - } - - @ReactMethod - public void trackEventAnonymously(ReadableMap e) { - String eventCategory = e.getString("category"); - String distinctId = this.mixpanel.getDistinctId(); - this.mixpanel.identify("0x0000000000000000"); - JSONObject props = toJSONObject(e); - this.mixpanel.track(eventCategory, props); - this.mixpanel.identify(distinctId); - } - - @ReactMethod - public void getDistinctId(Promise promise) { - String distinctId = this.mixpanel.getDistinctId(); - promise.resolve(distinctId); - } - - @ReactMethod - public void peopleIdentify() { - String distinctId = this.mixpanel.getDistinctId(); - this.mixpanel.getPeople().identify(distinctId); - } - - @ReactMethod - public void setUserProfileProperty(String propertyName, String propertyValue) { - String distinctId = this.mixpanel.getDistinctId(); - this.mixpanel.getPeople().identify(distinctId); - this.mixpanel.getPeople().set(propertyName, propertyValue); - } - - @ReactMethod - public void optIn(boolean val) { - if(val){ - this.mixpanel.optInTracking(); - }else{ - this.mixpanel.optOutTracking(); - } - } - - @ReactMethod - public void getRemoteVariables(Promise promise) { - try{ - String vars = remoteVariables.get(); - promise.resolve(vars); - } catch (Error e){ - promise.reject(e); - } - - } - - private JSONObject toJSONObject(ReadableMap readableMap){ - - ReadableMapKeySetIterator iterator = readableMap.keySetIterator(); - JSONObject map = new JSONObject(); - while (iterator.hasNextKey()) { - String key = iterator.nextKey(); - try{ - switch (readableMap.getType(key)) { - case Null: - map.put(key, null); - break; - case Boolean: - map.put(key, readableMap.getBoolean(key)); - break; - case Number: - map.put(key, readableMap.getDouble(key)); - break; - case String: - map.put(key, readableMap.getString(key)); - break; - case Map: - map.put(key, toHashMap(readableMap.getMap(key))); - break; - case Array: - map.put(key, toArrayList(readableMap.getArray(key))); - break; - default: - throw new IllegalArgumentException("Could not convert object with key: " + key + "."); - } - }catch(JSONException e){ - Log.d("RCTAnalytics","JSON parse error"); - } - } - return map; - - } - - private HashMap toHashMap(ReadableMap readableMap){ - - ReadableMapKeySetIterator iterator = readableMap.keySetIterator(); - HashMap hashMap = new HashMap<>(); - while (iterator.hasNextKey()) { - String key = iterator.nextKey(); - switch (readableMap.getType(key)) { - case Null: - hashMap.put(key, null); - break; - case Boolean: - hashMap.put(key, readableMap.getBoolean(key)); - break; - case Number: - hashMap.put(key, readableMap.getDouble(key)); - break; - case String: - hashMap.put(key, readableMap.getString(key)); - break; - case Map: - hashMap.put(key, toHashMap(readableMap.getMap(key))); - break; - case Array: - hashMap.put(key, toArrayList(readableMap.getArray(key))); - break; - default: - throw new IllegalArgumentException("Could not convert object with key: " + key + "."); - } - } - return hashMap; - - } - - - private ArrayList toArrayList(ReadableArray readableArray) { - - - ArrayList arrayList = new ArrayList<>(); - - for (int i = 0; i < readableArray.size(); i++) { - switch (readableArray.getType(i)) { - case Null: - arrayList.add(null); - break; - case Boolean: - arrayList.add(readableArray.getBoolean(i)); - break; - case Number: - arrayList.add(readableArray.getDouble(i)); - break; - case String: - arrayList.add(readableArray.getString(i)); - break; - case Map: - arrayList.add(toHashMap(readableArray.getMap(i))); - break; - case Array: - arrayList.add(toArrayList(readableArray.getArray(i))); - break; - default: - throw new IllegalArgumentException("Could not convert object at index: " + i + "."); - } - } - return arrayList; - - } -} diff --git a/android/app/src/main/java/io/metamask/nativeModules/RCTAnalyticsPackage.java b/android/app/src/main/java/io/metamask/nativeModules/RCTAnalyticsPackage.java deleted file mode 100644 index 64cad409dbf..00000000000 --- a/android/app/src/main/java/io/metamask/nativeModules/RCTAnalyticsPackage.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.metamask.nativeModules; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class RCTAnalyticsPackage implements ReactPackage { - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules( - ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new RCTAnalytics(reactContext)); - - return modules; - } - -} diff --git a/app/constants/storage.ts b/app/constants/storage.ts index 8d9430c23a1..77a41920c77 100644 --- a/app/constants/storage.ts +++ b/app/constants/storage.ts @@ -16,6 +16,16 @@ export const ANALYTICS_DATA_DELETION_DATE = `${prefix}analyticsDataDeletionDate` export const METAMETRICS_DELETION_REGULATION_ID = `${prefix}MetaMetricsDeletionRegulationId`; export const ANALYTICS_DATA_RECORDED = `${prefix}analyticsDataRecorded`; export const METAMETRICS_ID = `${prefix}MetaMetricsId`; + +/** + * @deprecated, use {@link METAMETRICS_ID} instead + * Keeping MIXPANEL_METAMETRICS_ID for backward compatibility + * + * TODO remove MIXPANEL_METAMETRICS_ID: + * - add a migration + * - remove the legacy id test from {@link MetaMetrics}.#getMetaMetricsId() + * @see https://github.com/MetaMask/metamask-mobile/issues/8833 + */ export const MIXPANEL_METAMETRICS_ID = `${prefix}MixpanelMetaMetricsId`; export const WALLETCONNECT_SESSIONS = `${prefix}walletconnectSessions`; diff --git a/app/constants/urls.ts b/app/constants/urls.ts index 1b6b4d882e5..906644e00ce 100644 --- a/app/constants/urls.ts +++ b/app/constants/urls.ts @@ -32,10 +32,6 @@ export const KEYSTONE_LEARN_MORE = 'https://keyst.one/metamask?rfsn=6088257.656b3e9&utm_source=refersion&utm_medium=affiliate&utm_campaign=6088257.656b3e9'; export const KEYSTONE_SUPPORT_VIDEO = 'https://keyst.one/mmmvideo'; -// MixPanel -export const MIXPANEL_PROXY_ENDPOINT_BASE_URL = - 'https://proxy.metafi.codefi.network/mixpanel/v1/api/app'; - // Network export const CHAINLIST_URL = 'https://chainlist.wtf'; export const MM_ETHERSCAN_URL = 'https://etherscamdb.info/domain/meta-mask.com'; diff --git a/app/util/test/testSetup.js b/app/util/test/testSetup.js index 7fbf6a9267f..3b169bc0b44 100644 --- a/app/util/test/testSetup.js +++ b/app/util/test/testSetup.js @@ -171,12 +171,6 @@ NativeModules.RNCNetInfo = { getCurrentState: jest.fn(() => Promise.resolve()), }; -NativeModules.RCTAnalytics = { - optIn: jest.fn(), - trackEvent: jest.fn(), - getRemoteVariables: jest.fn(), -}; - NativeModules.PlatformConstants = { forceTouchAvailable: false, }; diff --git a/ios/MetaMask.xcodeproj/project.pbxproj b/ios/MetaMask.xcodeproj/project.pbxproj index 85b1ff0028f..adb09fc1eb5 100644 --- a/ios/MetaMask.xcodeproj/project.pbxproj +++ b/ios/MetaMask.xcodeproj/project.pbxproj @@ -21,9 +21,6 @@ 15AD28A921B7CFD9005DEB23 /* release.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 15FDD86021B76461006B7C35 /* release.xcconfig */; }; 15AD28AA21B7CFDC005DEB23 /* debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 15FDD82721B7642B006B7C35 /* debug.xcconfig */; }; 15D158ED210BD912006982B5 /* Metamask.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 15D158EC210BD8C8006982B5 /* Metamask.ttf */; }; - 15F7795E22A1B7B500B1DF8C /* Mixpanel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; }; - 15F7795F22A1B7B500B1DF8C /* Mixpanel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 15F7796522A1BC8C00B1DF8C /* RCTAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F7796422A1BC8C00B1DF8C /* RCTAnalytics.m */; }; 2370F9A340CF4ADFBCFB0543 /* EuclidCircularB-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 58572D81B5D54ED79A16A16D /* EuclidCircularB-RegularItalic.otf */; }; 298242C958524BB38FB44CAE /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9FD3FB1258A41A5A0546C83 /* Roboto-BoldItalic.ttf */; }; 2A27FC9EEF1F4FD18E658544 /* config.json in Resources */ = {isa = PBXBuildFile; fileRef = EF1C01B7F08047F9B8ADCFBA /* config.json */; }; @@ -32,13 +29,11 @@ 2EF2825A2B0FF86900D7B4B1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2EF2825B2B0FF86900D7B4B1 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 654378AF243E2ADC00571B9C /* File.swift */; }; 2EF2825C2B0FF86900D7B4B1 /* RCTScreenshotDetect.m in Sources */ = {isa = PBXBuildFile; fileRef = CF98DA9B28D9FEB700096782 /* RCTScreenshotDetect.m */; }; - 2EF2825D2B0FF86900D7B4B1 /* RCTAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F7796422A1BC8C00B1DF8C /* RCTAnalytics.m */; }; 2EF2825E2B0FF86900D7B4B1 /* RCTMinimizer.m in Sources */ = {isa = PBXBuildFile; fileRef = CF9895762A3B49BE00B4C9B5 /* RCTMinimizer.m */; }; 2EF2825F2B0FF86900D7B4B1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2EF282612B0FF86900D7B4B1 /* LinkPresentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F961A36A28105CF9007442B5 /* LinkPresentation.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 2EF282622B0FF86900D7B4B1 /* libRCTAesForked.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 650F2B9C24DC5FEC00C3B9C4 /* libRCTAesForked.a */; }; 2EF282632B0FF86900D7B4B1 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 153C1A742217BCDC0088EFE0 /* JavaScriptCore.framework */; }; - 2EF282642B0FF86900D7B4B1 /* Mixpanel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; }; 2EF282652B0FF86900D7B4B1 /* Branch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 153F84C92319B8DB00C19B63 /* Branch.framework */; }; 2EF2826A2B0FF86900D7B4B1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2EF2826B2B0FF86900D7B4B1 /* InpageBridgeWeb3.js in Resources */ = {isa = PBXBuildFile; fileRef = 158B0639211A72F500DF3C74 /* InpageBridgeWeb3.js */; }; @@ -71,7 +66,6 @@ 2EF282862B0FF86900D7B4B1 /* EuclidCircularB-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 58572D81B5D54ED79A16A16D /* EuclidCircularB-RegularItalic.otf */; }; 2EF282872B0FF86900D7B4B1 /* EuclidCircularB-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = A8DE9C5BC0714D648276E123 /* EuclidCircularB-Semibold.otf */; }; 2EF282882B0FF86900D7B4B1 /* EuclidCircularB-SemiboldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9499B01ECAC44DA29AC44E80 /* EuclidCircularB-SemiboldItalic.otf */; }; - 2EF2828B2B0FF86900D7B4B1 /* Mixpanel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 2EF2828C2B0FF86900D7B4B1 /* Branch.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 153F84C92319B8DB00C19B63 /* Branch.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 2EF2832A2B17EBD600D7B4B1 /* RnTar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF283292B17EBD600D7B4B1 /* RnTar.swift */; }; 2EF2832B2B17EBD600D7B4B1 /* RnTar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF283292B17EBD600D7B4B1 /* RnTar.swift */; }; @@ -99,12 +93,10 @@ B0EF7FA927BD16EA00D48B4E /* ThemeColors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B0EF7FA827BD16EA00D48B4E /* ThemeColors.xcassets */; }; B339FF02289ABD70001B89FB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; B339FF03289ABD70001B89FB /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 654378AF243E2ADC00571B9C /* File.swift */; }; - B339FF04289ABD70001B89FB /* RCTAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F7796422A1BC8C00B1DF8C /* RCTAnalytics.m */; }; B339FF05289ABD70001B89FB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; B339FF07289ABD70001B89FB /* LinkPresentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F961A36A28105CF9007442B5 /* LinkPresentation.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; B339FF08289ABD70001B89FB /* libRCTAesForked.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 650F2B9C24DC5FEC00C3B9C4 /* libRCTAesForked.a */; }; B339FF09289ABD70001B89FB /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 153C1A742217BCDC0088EFE0 /* JavaScriptCore.framework */; }; - B339FF0B289ABD70001B89FB /* Mixpanel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; }; B339FF0C289ABD70001B89FB /* Branch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 153F84C92319B8DB00C19B63 /* Branch.framework */; }; B339FF10289ABD70001B89FB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; B339FF11289ABD70001B89FB /* InpageBridgeWeb3.js in Resources */ = {isa = PBXBuildFile; fileRef = 158B0639211A72F500DF3C74 /* InpageBridgeWeb3.js */; }; @@ -137,7 +129,6 @@ B339FF2C289ABD70001B89FB /* EuclidCircularB-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 58572D81B5D54ED79A16A16D /* EuclidCircularB-RegularItalic.otf */; }; B339FF2D289ABD70001B89FB /* EuclidCircularB-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = A8DE9C5BC0714D648276E123 /* EuclidCircularB-Semibold.otf */; }; B339FF2E289ABD70001B89FB /* EuclidCircularB-SemiboldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9499B01ECAC44DA29AC44E80 /* EuclidCircularB-SemiboldItalic.otf */; }; - B339FF31289ABD70001B89FB /* Mixpanel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 15F7795722A1B79400B1DF8C /* Mixpanel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B339FF32289ABD70001B89FB /* Branch.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 153F84C92319B8DB00C19B63 /* Branch.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B339FF3C289ABF2C001B89FB /* MetaMask-QA-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B339FEA72899852C001B89FB /* MetaMask-QA-Info.plist */; }; B638844E306CAE9147B52C85 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; @@ -172,48 +163,6 @@ remoteGlobalIDString = E298D0511C73D1B800589D22; remoteInfo = Branch; }; - 15F7795622A1B79400B1DF8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7C170C2A1A4A02F500D9E0F2; - remoteInfo = Mixpanel; - }; - 15F7795822A1B79400B1DF8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 511FC39D1C2B74BD00DC4796; - remoteInfo = Mixpanel_watchOS; - }; - 15F7795A22A1B79400B1DF8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E1C2BEB61CFD6A010052172F; - remoteInfo = Mixpanel_tvOS; - }; - 15F7795C22A1B79400B1DF8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E1F160B01E677D2200391AE3; - remoteInfo = Mixpanel_macOS; - }; - 15F7796022A1B7B500B1DF8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7C170C291A4A02F500D9E0F2; - remoteInfo = Mixpanel; - }; - 2EF282542B0FF86900D7B4B1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7C170C291A4A02F500D9E0F2; - remoteInfo = Mixpanel; - }; 2EF282562B0FF86900D7B4B1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 153F84C42319B8DA00C19B63 /* BranchSDK.xcodeproj */; @@ -228,13 +177,6 @@ remoteGlobalIDString = 32D980DD1BE9F11C00FA27E5; remoteInfo = RCTAesForked; }; - B339FEFC289ABD70001B89FB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7C170C291A4A02F500D9E0F2; - remoteInfo = Mixpanel; - }; B339FEFE289ABD70001B89FB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 153F84C42319B8DA00C19B63 /* BranchSDK.xcodeproj */; @@ -251,7 +193,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 15F7795F22A1B7B500B1DF8C /* Mixpanel.framework in Embed Frameworks */, 153F84CB2319B8FD00C19B63 /* Branch.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -263,7 +204,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 2EF2828B2B0FF86900D7B4B1 /* Mixpanel.framework in Embed Frameworks */, 2EF2828C2B0FF86900D7B4B1 /* Branch.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -275,7 +215,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - B339FF31289ABD70001B89FB /* Mixpanel.framework in Embed Frameworks */, B339FF32289ABD70001B89FB /* Branch.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -301,9 +240,6 @@ 158B0639211A72F500DF3C74 /* InpageBridgeWeb3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = InpageBridgeWeb3.js; path = ../app/core/InpageBridgeWeb3.js; sourceTree = ""; }; 159878012231DF67001748EC /* AntDesign.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; 15D158EC210BD8C8006982B5 /* Metamask.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Metamask.ttf; path = ../app/fonts/Metamask.ttf; sourceTree = ""; }; - 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Mixpanel.xcodeproj; path = "mixpanel-iphone/Mixpanel.xcodeproj"; sourceTree = ""; }; - 15F7796322A1BC8C00B1DF8C /* RCTAnalytics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RCTAnalytics.h; path = MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.h; sourceTree = ""; }; - 15F7796422A1BC8C00B1DF8C /* RCTAnalytics.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RCTAnalytics.m; path = MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.m; sourceTree = ""; }; 15FDD82721B7642B006B7C35 /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = debug.xcconfig; sourceTree = ""; }; 15FDD86021B76461006B7C35 /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = release.xcconfig; sourceTree = ""; }; 178440FE3F1C4F4180D14622 /* libTcpSockets.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libTcpSockets.a; sourceTree = ""; }; @@ -384,7 +320,6 @@ F961A37228105CF9007442B5 /* LinkPresentation.framework in Frameworks */, 650F2B9D24DC5FF200C3B9C4 /* libRCTAesForked.a in Frameworks */, 153C1ABB2217BCDC0088EFE0 /* JavaScriptCore.framework in Frameworks */, - 15F7795E22A1B7B500B1DF8C /* Mixpanel.framework in Frameworks */, 153F84CA2319B8FD00C19B63 /* Branch.framework in Frameworks */, 0FD509E0336BF221F6527B24 /* BuildFile in Frameworks */, D45BF85DECACCB74EDCBE88A /* BuildFile in Frameworks */, @@ -400,7 +335,6 @@ 2EF282612B0FF86900D7B4B1 /* LinkPresentation.framework in Frameworks */, 2EF282622B0FF86900D7B4B1 /* libRCTAesForked.a in Frameworks */, 2EF282632B0FF86900D7B4B1 /* JavaScriptCore.framework in Frameworks */, - 2EF282642B0FF86900D7B4B1 /* Mixpanel.framework in Frameworks */, 2EF282652B0FF86900D7B4B1 /* Branch.framework in Frameworks */, 0C119A06A4353DD11451F541 /* libPods-MetaMask-Flask.a in Frameworks */, ); @@ -413,7 +347,6 @@ B339FF07289ABD70001B89FB /* LinkPresentation.framework in Frameworks */, B339FF08289ABD70001B89FB /* libRCTAesForked.a in Frameworks */, B339FF09289ABD70001B89FB /* JavaScriptCore.framework in Frameworks */, - B339FF0B289ABD70001B89FB /* Mixpanel.framework in Frameworks */, B339FF0C289ABD70001B89FB /* Branch.framework in Frameworks */, DDB2D8FF8BDA806A38D61B1B /* libPods-MetaMask-QA.a in Frameworks */, ); @@ -480,36 +413,15 @@ name = "Recovered References"; sourceTree = ""; }; - 15F7795022A1B79400B1DF8C /* Products */ = { - isa = PBXGroup; - children = ( - 15F7795722A1B79400B1DF8C /* Mixpanel.framework */, - 15F7795922A1B79400B1DF8C /* Mixpanel.framework */, - 15F7795B22A1B79400B1DF8C /* Mixpanel.framework */, - 15F7795D22A1B79400B1DF8C /* Mixpanel.framework */, - ); - name = Products; - sourceTree = ""; - }; 15F7796222A1BC1E00B1DF8C /* NativeModules */ = { isa = PBXGroup; children = ( CF9895742A3B48DC00B4C9B5 /* RCTMinimizer */, CF98DA9228D9FE5000096782 /* RCTScreenshotDetect */, - 15F7796622A1BC9300B1DF8C /* RCTAnalytics */, ); name = NativeModules; sourceTree = ""; }; - 15F7796622A1BC9300B1DF8C /* RCTAnalytics */ = { - isa = PBXGroup; - children = ( - 15F7796322A1BC8C00B1DF8C /* RCTAnalytics.h */, - 15F7796422A1BC8C00B1DF8C /* RCTAnalytics.m */, - ); - name = RCTAnalytics; - sourceTree = ""; - }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( @@ -590,7 +502,6 @@ children = ( 650F2B9724DC5FEB00C3B9C4 /* RCTAesForked.xcodeproj */, 153F84C42319B8DA00C19B63 /* BranchSDK.xcodeproj */, - 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -680,7 +591,6 @@ buildRules = ( ); dependencies = ( - 15F7796122A1B7B500B1DF8C /* PBXTargetDependency */, 153F84CD2319B8FD00C19B63 /* PBXTargetDependency */, ); name = MetaMask; @@ -705,7 +615,6 @@ buildRules = ( ); dependencies = ( - 2EF282532B0FF86900D7B4B1 /* PBXTargetDependency */, 2EF282552B0FF86900D7B4B1 /* PBXTargetDependency */, ); name = "MetaMask-Flask"; @@ -730,7 +639,6 @@ buildRules = ( ); dependencies = ( - B339FEFB289ABD70001B89FB /* PBXTargetDependency */, B339FEFD289ABD70001B89FB /* PBXTargetDependency */, ); name = "MetaMask-QA"; @@ -777,10 +685,6 @@ ProductGroup = 153F84C52319B8DA00C19B63 /* Products */; ProjectRef = 153F84C42319B8DA00C19B63 /* BranchSDK.xcodeproj */; }, - { - ProductGroup = 15F7795022A1B79400B1DF8C /* Products */; - ProjectRef = 15F7794F22A1B79400B1DF8C /* Mixpanel.xcodeproj */; - }, { ProductGroup = 650F2B9824DC5FEB00C3B9C4 /* Products */; ProjectRef = 650F2B9724DC5FEB00C3B9C4 /* RCTAesForked.xcodeproj */; @@ -803,34 +707,6 @@ remoteRef = 153F84C82319B8DB00C19B63 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 15F7795722A1B79400B1DF8C /* Mixpanel.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Mixpanel.framework; - remoteRef = 15F7795622A1B79400B1DF8C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 15F7795922A1B79400B1DF8C /* Mixpanel.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Mixpanel.framework; - remoteRef = 15F7795822A1B79400B1DF8C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 15F7795B22A1B79400B1DF8C /* Mixpanel.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Mixpanel.framework; - remoteRef = 15F7795A22A1B79400B1DF8C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 15F7795D22A1B79400B1DF8C /* Mixpanel.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Mixpanel.framework; - remoteRef = 15F7795C22A1B79400B1DF8C /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 650F2B9C24DC5FEC00C3B9C4 /* libRCTAesForked.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1245,7 +1121,6 @@ 2EF2832A2B17EBD600D7B4B1 /* RnTar.swift in Sources */, 2EF283372B17EC7900D7B4B1 /* Light-Swift-Untar.swift in Sources */, CF98DA9C28D9FEB700096782 /* RCTScreenshotDetect.m in Sources */, - 15F7796522A1BC8C00B1DF8C /* RCTAnalytics.m in Sources */, CF9895772A3B49BE00B4C9B5 /* RCTMinimizer.m in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, ); @@ -1261,7 +1136,6 @@ 2EF2832C2B17EBD600D7B4B1 /* RnTar.swift in Sources */, 2EF283392B17EC7900D7B4B1 /* Light-Swift-Untar.swift in Sources */, 2EF2825C2B0FF86900D7B4B1 /* RCTScreenshotDetect.m in Sources */, - 2EF2825D2B0FF86900D7B4B1 /* RCTAnalytics.m in Sources */, 2EF2825E2B0FF86900D7B4B1 /* RCTMinimizer.m in Sources */, 2EF2825F2B0FF86900D7B4B1 /* main.m in Sources */, ); @@ -1277,7 +1151,6 @@ 2EF2832B2B17EBD600D7B4B1 /* RnTar.swift in Sources */, 2EF283382B17EC7900D7B4B1 /* Light-Swift-Untar.swift in Sources */, B339FF03289ABD70001B89FB /* File.swift in Sources */, - B339FF04289ABD70001B89FB /* RCTAnalytics.m in Sources */, CF9895782A3B49BE00B4C9B5 /* RCTMinimizer.m in Sources */, B339FF05289ABD70001B89FB /* main.m in Sources */, ); @@ -1291,26 +1164,11 @@ name = Branch; targetProxy = 153F84CC2319B8FD00C19B63 /* PBXContainerItemProxy */; }; - 15F7796122A1B7B500B1DF8C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Mixpanel; - targetProxy = 15F7796022A1B7B500B1DF8C /* PBXContainerItemProxy */; - }; - 2EF282532B0FF86900D7B4B1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Mixpanel; - targetProxy = 2EF282542B0FF86900D7B4B1 /* PBXContainerItemProxy */; - }; 2EF282552B0FF86900D7B4B1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Branch; targetProxy = 2EF282562B0FF86900D7B4B1 /* PBXContainerItemProxy */; }; - B339FEFB289ABD70001B89FB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Mixpanel; - targetProxy = B339FEFC289ABD70001B89FB /* PBXContainerItemProxy */; - }; B339FEFD289ABD70001B89FB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Branch; @@ -1416,10 +1274,7 @@ "$(PROJECT_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DISABLE_MIXPANEL_AB_DESIGNER=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; GCC_UNROLL_LOOPS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -1543,10 +1398,7 @@ "$(PROJECT_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DISABLE_MIXPANEL_AB_DESIGNER=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; GCC_UNROLL_LOOPS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -1772,10 +1624,7 @@ "$(PROJECT_DIR)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DISABLE_MIXPANEL_AB_DESIGNER=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; GCC_UNROLL_LOOPS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", diff --git a/ios/MetaMask/AppDelegate.m b/ios/MetaMask/AppDelegate.m index 55b596de08c..b22d5678257 100644 --- a/ios/MetaMask/AppDelegate.m +++ b/ios/MetaMask/AppDelegate.m @@ -1,5 +1,4 @@ #import "AppDelegate.h" -#import #import #import #import @@ -22,17 +21,15 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSString *foxCodeFromBundle = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"fox_code"]; - NSString *mixPanelTokenFromBundle = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"mixpanel_token"]; NSString *foxCode; - + if(foxCodeFromBundle != nil){ foxCode = foxCodeFromBundle; - [Mixpanel sharedInstanceWithToken:mixPanelTokenFromBundle]; } else { foxCode = @"debug"; } - + // Uncomment this line to use the test key instead of the live one. // [RNBranch useTestInstance]; [RNBranch initSessionWithLaunchOptions:launchOptions isReferrable:YES]; @@ -58,12 +55,12 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( UIView* launchScreenView = [[[NSBundle mainBundle] loadNibNamed:@"LaunchScreen" owner:self options:nil] objectAtIndex:0]; launchScreenView.frame = self.window.bounds; rootView.loadingView = launchScreenView; - + [self initializeFlipper:application]; //Uncomment the following line to enable the splashscreen on ios //[RNSplashScreen show]; - + return YES; } diff --git a/ios/MetaMask/Info.plist b/ios/MetaMask/Info.plist index 5c7957e7702..91874b25613 100644 --- a/ios/MetaMask/Info.plist +++ b/ios/MetaMask/Info.plist @@ -21,12 +21,12 @@ CFBundleSignature ???? branch_universal_link_domains - - metamask.app.link - metamask-alternate.app.link - metamask.test.app.link - metamask-alternate.test.app.link - + + metamask.app.link + metamask-alternate.app.link + metamask.test.app.link + metamask-alternate.test.app.link + CFBundleURLTypes @@ -128,16 +128,14 @@ UIViewControllerBasedStatusBarAppearance branch_key - - live - $(MM_BRANCH_KEY_LIVE) - test - $(MM_BRANCH_KEY_TEST) - + + live + $(MM_BRANCH_KEY_LIVE) + test + $(MM_BRANCH_KEY_TEST) + fox_code $(MM_FOX_CODE) - mixpanel_token - $(MM_MIXPANEL_TOKEN) LSApplicationQueriesSchemes twitter diff --git a/ios/MetaMask/MetaMask-Flask-Info.plist b/ios/MetaMask/MetaMask-Flask-Info.plist index 901414400af..a3718629e93 100644 --- a/ios/MetaMask/MetaMask-Flask-Info.plist +++ b/ios/MetaMask/MetaMask-Flask-Info.plist @@ -20,13 +20,6 @@ $(MARKETING_VERSION) CFBundleSignature ???? - branch_universal_link_domains - - metamask.app.link - metamask-alternate.app.link - metamask.test.app.link - metamask-alternate.test.app.link - CFBundleURLTypes @@ -43,6 +36,11 @@ $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption + LSApplicationQueriesSchemes + + twitter + itms-apps + LSRequiresIPhoneOS NSAppTransportSecurity @@ -64,12 +62,12 @@ MetaMask needs Bluetooth access to connect to external devices. NSCameraUsageDescription MetaMask needs camera access to scan QR codes - NSMicrophoneUsageDescription - MetaMask needs microphone access to record audio NSFaceIDUsageDescription $(PRODUCT_NAME) needs to authenticate NSLocationWhenInUseUsageDescription + NSMicrophoneUsageDescription + MetaMask needs microphone access to record audio NSPhotoLibraryAddUsageDescription Allow MetaMask to save an image to your Photo Library NSPhotoLibraryUsageDescription @@ -128,20 +126,20 @@ UIViewControllerBasedStatusBarAppearance branch_key - - live - $(MM_BRANCH_KEY_LIVE) - test - $(MM_BRANCH_KEY_TEST) - - fox_code - $(MM_FOX_CODE) - mixpanel_token - $(MM_MIXPANEL_TOKEN) - LSApplicationQueriesSchemes + + live + $(MM_BRANCH_KEY_LIVE) + test + $(MM_BRANCH_KEY_TEST) + + branch_universal_link_domains - twitter - itms-apps + metamask.app.link + metamask-alternate.app.link + metamask.test.app.link + metamask-alternate.test.app.link + fox_code + $(MM_FOX_CODE) diff --git a/ios/MetaMask/MetaMask-QA-Info.plist b/ios/MetaMask/MetaMask-QA-Info.plist index 7389e1f8152..dfd5c301d1c 100644 --- a/ios/MetaMask/MetaMask-QA-Info.plist +++ b/ios/MetaMask/MetaMask-QA-Info.plist @@ -1,135 +1,133 @@ - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - MetaMask-QA - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLSchemes - - ethereum - metamask - dapp - wc - - - - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - ITSAppUsesNonExemptEncryption - - LSApplicationQueriesSchemes - - twitter - itms-apps - - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - NSBluetoothAlwaysUsageDescription - MetaMask needs Bluetooth access to connect to external devices. - NSBluetoothPeripheralUsageDescription - MetaMask needs Bluetooth access to connect to external devices. - NSCameraUsageDescription - MetaMask needs camera access to scan QR codes - NSMicrophoneUsageDescription - MetaMask needs microphone access to record audio - NSFaceIDUsageDescription - $(PRODUCT_NAME) needs to authenticate - NSLocationWhenInUseUsageDescription - - NSPhotoLibraryAddUsageDescription - Allow MetaMask to save an image to your Photo Library - NSPhotoLibraryUsageDescription - Allow MetaMask to access a images from your Photo Library - UIAppFonts - - Entypo.ttf - AntDesign.ttf - EvilIcons.ttf - Feather.ttf - FontAwesome.ttf - Foundation.ttf - Ionicons.ttf - MaterialCommunityIcons.ttf - MaterialIcons.ttf - Octicons.ttf - SimpleLineIcons.ttf - Zocial.ttf - Metamask.ttf - Roboto-Black.ttf - Roboto-BlackItalic.ttf - Roboto-Bold.ttf - Roboto-BoldItalic.ttf - Roboto-Italic.ttf - Roboto-Light.ttf - Roboto-LightItalic.ttf - Roboto-Medium.ttf - Roboto-MediumItalic.ttf - Roboto-Regular.ttf - Roboto-Thin.ttf - Roboto-ThinItalic.ttf - FontAwesome5_Brands.ttf - FontAwesome5_Regular.ttf - FontAwesome5_Solid.ttf - EuclidCircularB-Bold.otf - EuclidCircularB-BoldItalic.otf - EuclidCircularB-Light.otf - EuclidCircularB-LightItalic.otf - EuclidCircularB-Medium.otf - EuclidCircularB-MediumItalic.otf - EuclidCircularB-Regular.otf - EuclidCircularB-RegularItalic.otf - EuclidCircularB-Semibold.otf - EuclidCircularB-SemiboldItalic.otf - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UIViewControllerBasedStatusBarAppearance - - branch_key - $(MM_BRANCH_KEY_LIVE) - fox_code - $(MM_FOX_CODE) - mixpanel_token - $(MM_MIXPANEL_TOKEN) - + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + MetaMask-QA + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + ethereum + metamask + dapp + wc + + + + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + ITSAppUsesNonExemptEncryption + + LSApplicationQueriesSchemes + + twitter + itms-apps + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + NSBluetoothAlwaysUsageDescription + MetaMask needs Bluetooth access to connect to external devices. + NSBluetoothPeripheralUsageDescription + MetaMask needs Bluetooth access to connect to external devices. + NSCameraUsageDescription + MetaMask needs camera access to scan QR codes + NSFaceIDUsageDescription + $(PRODUCT_NAME) needs to authenticate + NSLocationWhenInUseUsageDescription + + NSMicrophoneUsageDescription + MetaMask needs microphone access to record audio + NSPhotoLibraryAddUsageDescription + Allow MetaMask to save an image to your Photo Library + NSPhotoLibraryUsageDescription + Allow MetaMask to access a images from your Photo Library + UIAppFonts + + Entypo.ttf + AntDesign.ttf + EvilIcons.ttf + Feather.ttf + FontAwesome.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + SimpleLineIcons.ttf + Zocial.ttf + Metamask.ttf + Roboto-Black.ttf + Roboto-BlackItalic.ttf + Roboto-Bold.ttf + Roboto-BoldItalic.ttf + Roboto-Italic.ttf + Roboto-Light.ttf + Roboto-LightItalic.ttf + Roboto-Medium.ttf + Roboto-MediumItalic.ttf + Roboto-Regular.ttf + Roboto-Thin.ttf + Roboto-ThinItalic.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + EuclidCircularB-Bold.otf + EuclidCircularB-BoldItalic.otf + EuclidCircularB-Light.otf + EuclidCircularB-LightItalic.otf + EuclidCircularB-Medium.otf + EuclidCircularB-MediumItalic.otf + EuclidCircularB-Regular.otf + EuclidCircularB-RegularItalic.otf + EuclidCircularB-Semibold.otf + EuclidCircularB-SemiboldItalic.otf + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UIViewControllerBasedStatusBarAppearance + + branch_key + $(MM_BRANCH_KEY_LIVE) + fox_code + $(MM_FOX_CODE) + diff --git a/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.h b/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.h deleted file mode 100644 index 5a48ffe679b..00000000000 --- a/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// RCTAnalytics.h -// MetaMask -// -// Created by Bruno Barbieri on 5/31/19. -// Copyright © 2019 MetaMask. All rights reserved. -// - -#import - - -NS_ASSUME_NONNULL_BEGIN - -@interface RCTAnalytics : NSObject -@end - -NS_ASSUME_NONNULL_END diff --git a/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.m b/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.m deleted file mode 100644 index c8b8e5c9c5f..00000000000 --- a/ios/MetaMask/NativeModules/RCTAnalytics/RCTAnalytics.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// RCTAnalytics.m -// MetaMask -// -// Created by Bruno Barbieri on 5/31/19. -// Copyright © 2019 MetaMask. All rights reserved. -// - -#import "RCTAnalytics.h" -#import -#import -#import - -@implementation RCTAnalytics -RCT_EXPORT_MODULE() - -RCT_EXPORT_METHOD(optIn:(BOOL) val) { - // Making sure it runs on the main thread - dispatch_async(dispatch_get_main_queue(), ^(){ - if(val){ - [[Mixpanel sharedInstance] optInTracking]; - } else { - [[Mixpanel sharedInstance] optOutTracking]; - } - }); -} - -RCT_EXPORT_METHOD(trackEvent:(NSDictionary *)event) -{ - [[Mixpanel sharedInstance] track: [self getCategory:event] properties:[self getInfo:event]]; -} - -RCT_EXPORT_METHOD(trackEventAnonymously:(NSDictionary *)event) -{ - NSString *const distinctId = [[Mixpanel sharedInstance] distinctId]; - [[Mixpanel sharedInstance] identify:@"0x0000000000000000"]; - [[Mixpanel sharedInstance] track: [self getCategory:event] properties:[self getInfo:event]]; - [[Mixpanel sharedInstance] identify:distinctId]; -} - - -RCT_EXPORT_METHOD(peopleIdentify) -{ - [[Mixpanel sharedInstance] identify:[[Mixpanel sharedInstance] distinctId]]; -} - -RCT_EXPORT_METHOD(setUserProfileProperty:(NSString *)propertyName to:(id)propertyValue) -{ - [[Mixpanel sharedInstance] identify:[[Mixpanel sharedInstance] distinctId]]; - [[Mixpanel sharedInstance].people set:propertyName to:propertyValue]; -} - -RCT_REMAP_METHOD(getDistinctId, - getDistinctIdWithResolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) -{ - resolve([[Mixpanel sharedInstance] distinctId]); -} - - -RCT_REMAP_METHOD(getRemoteVariables, - getRemoteVariableWithResolver:(RCTPromiseResolveBlock)resolve - rejecter:(RCTPromiseRejectBlock)reject) -{ - NSString *val = MPTweakValue(@"remoteVariables", @"{}"); - - if (val) { - resolve(val); - } else { - resolve(@"{}"); - } -} - -- (NSString *)getCategory:(NSDictionary *)event{ - return event[@"category"]; -} - -- (NSDictionary *)getInfo:(NSDictionary *)event{ - NSMutableDictionary *e = [event mutableCopy]; - [e removeObjectForKey:@"category"]; - return e; -} - -@end diff --git a/ios/Mixpanel.framework/Headers/MPTweak.h b/ios/Mixpanel.framework/Headers/MPTweak.h deleted file mode 100644 index 51c391cd476..00000000000 --- a/ios/Mixpanel.framework/Headers/MPTweak.h +++ /dev/null @@ -1,99 +0,0 @@ -/** - Copyright (c) 2014-present, Facebook, Inc. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPTweakObserver; - -/** - @abstract Represents a possible value of a tweak. - @discussion Should be able to be persisted in user defaults. - For minimum and maximum values, should implement -compare:. - */ -typedef id MPTweakValue; - -/** - @abstract Represents a tweak - @discussion A tweak contains a persistent, editable value. - */ -@interface MPTweak : NSObject - -/** - @abstract Creates a new tweak model. - @discussion This is the designated initializer. - */ -- (instancetype)initWithName:(NSString *)name andEncoding:(NSString *)encoding; - -/** - @abstract This tweak's unique name. - @discussion Used when reading and writing the tweak's value. - */ -@property (nonatomic, copy, readonly) NSString *name; - -/** - @abstract This tweak's value encoding, as returned by `@encoding` - */ -@property (nonatomic, copy, readonly) NSString *encoding; - -/** - @abstract The default value of the tweak. - @discussion Use this when the current value is unset. - */ -@property (nonatomic, strong, readwrite) MPTweakValue defaultValue; - -/** - @abstract The current value of the tweak. Can be nil. - @discussion Changes to this property will be propagated to disk. - */ -@property (nullable, nonatomic, strong, readwrite) MPTweakValue currentValue; - -/** - @abstract The minimum value of the tweak. - @discussion Optional. If nil, there is no minimum. - */ -@property (nonatomic, strong, readwrite) MPTweakValue minimumValue; - -/** - @abstract The maximum value of the tweak. - @discussion Optional. If nil, there is no maximum. - */ -@property (nonatomic, strong, readwrite) MPTweakValue maximumValue; - -/** - @abstract Adds an observer to the tweak. - @param observer The observer. Must not be nil. - @discussion A weak reference is taken on the observer. - */ -- (void)addObserver:(id)observer; - -/** - @abstract Removes an observer from the tweak. - @param observer The observer to remove. Must not be nil. - @discussion Optional, removing an observer isn't required. - */ -- (void)removeObserver:(id)observer; - -@end - -/** - @abstract Responds to updates when a tweak changes. - */ -@protocol MPTweakObserver - -/** - @abstract Called when a tweak's value changes. - @param tweak The tweak which changed in value. - */ -- (void)tweakDidChange:(MPTweak *)tweak; - -@end - -NS_ASSUME_NONNULL_END diff --git a/ios/Mixpanel.framework/Headers/MPTweakInline.h b/ios/Mixpanel.framework/Headers/MPTweakInline.h deleted file mode 100644 index 02ea958b4c8..00000000000 --- a/ios/Mixpanel.framework/Headers/MPTweakInline.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - Copyright (c) 2014-present, Facebook, Inc. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "MPTweakInlineInternal.h" - -/*! - @abstract Loads the value of a tweak inline. - @discussion To use a tweak, use this instead of the constant value you otherwise would. - To use the same tweak in two places, define a C function that returns MPTweakValue. - @param name_ The name of the tweak. Must be a constant NSString. - @param default_ The default value of the tweak. If the user doesn't configure - a custom value or the build is a release build, then the default value is used. - The default value supports a variety of types, but all must be constant literals. - Supported types include: BOOL, int, double, unsigned long long, CGFloat, NSString *, char *. - @param min_ Optional, for numbers. The minimum value. Same restrictions as default. - @param max_ Optional, for numbers. The maximum value. Same restrictions as default. - @return The current value of the tweak, or the default value if none is set. - */ -#define MPTweakValue(name_, ...) _MPTweakValue(name_, __VA_ARGS__) - -/*! - @abstract Binds an object property to a tweak. - @param object_ The object to bind to. - @param property_ The property to bind. - @param name_ The name of the tweak. Must be a constant NSString. - @param default_ The default value of the tweak. If the user doesn't configure - a custom value or the build is a release build, then the default value is used. - The default value supports a variety of types, but all must be constant literals. - Supported types include: BOOL, int, double, unsigned long long, CGFloat, NSString *, char *. - @param min_ Optional, for numbers. The minimum value. Same restrictions as default. - @param max_ Optional, for numbers. The maximum value. Same restrictions as default. - @discussion As long as the object is alive, the property will be updated to match the tweak. - */ -#define MPTweakBind(object_, property_, name_, ...) _MPTweakBind(object_, property_, name_, __VA_ARGS__) diff --git a/ios/Mixpanel.framework/Headers/MPTweakInlineInternal.h b/ios/Mixpanel.framework/Headers/MPTweakInlineInternal.h deleted file mode 100644 index 6e5e569be70..00000000000 --- a/ios/Mixpanel.framework/Headers/MPTweakInlineInternal.h +++ /dev/null @@ -1,133 +0,0 @@ -/** - Copyright (c) 2014-present, Facebook, Inc. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "_MPTweakBindObserver.h" -#import "MPTweak.h" -#import "MPTweakStore.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MPTweakSegmentName "__DATA" -#define MPTweakSectionName "MPTweak" - -typedef __unsafe_unretained NSString *MPTweakLiteralString; - -typedef struct { - MPTweakLiteralString *name; - void *value; - void *min; - void *max; - char **encoding; -} mp_tweak_entry; - -#if __has_feature(objc_arc) -#define _MPTweakRelease(x) -#else -#define _MPTweakRelease(x) [x release] -#endif - -#define __MPTweakConcat_(X, Y) X ## Y -#define __MPTweakConcat(X, Y) __MPTweakConcat_(X, Y) - -#define __MPTweakIndex(_1, _2, _3, value, ...) value -#define __MPTweakIndexCount(...) __MPTweakIndex(__VA_ARGS__, 3, 2, 1) - -#define __MPTweakHasRange1(__withoutRange, __withRange, ...) __withoutRange -#define __MPTweakHasRange2(__withoutRange, __withRange, ...) __MPTweakInvalidNumberOfArgumentsPassed -#define __MPTweakHasRange3(__withoutRange, __withRange, ...) __withRange -#define _MPTweakHasRange(__withoutRange, __withRange, ...) __MPTweakConcat(__MPTweakHasRange, __MPTweakIndexCount(__VA_ARGS__))(__withoutRange, __withRange) - -#define _MPTweakInlineWithoutRange(name_, default_) \ - _MPTweakInlineWithRangeInternal(name_, default_, NO, NULL, NO, NULL) -#define _MPTweakInlineWithRange(name_, default_, min_, max_) \ - _MPTweakInlineWithRangeInternal(name_, default_, YES, min_, YES, max_) -#define _MPTweakInlineWithRangeInternal(name_, default_, hasmin_, min_, hasmax_, max_) \ -((^{ \ - /* store the tweak data in the binary at compile time. */ \ - __attribute__((used)) static MPTweakLiteralString name__ = name_; \ - __attribute__((used)) static __typeof__(default_) default__ = default_; \ - __attribute__((used)) static __typeof__(min_) min__ = min_; \ - __attribute__((used)) static __typeof__(max_) max__ = max_; \ - __attribute__((used)) static char *encoding__ = (char *)@encode(__typeof__(default_)); \ - __attribute__((used)) __attribute__((section (MPTweakSegmentName "," MPTweakSectionName))) static mp_tweak_entry entry = \ - {&name__, &default__, hasmin_ ? &min__ : NULL, hasmax_ ? &max__ : NULL, &encoding__ }; \ -\ - /* find the registered tweak with the given name. */ \ - return [[MPTweakStore sharedInstance] tweakWithName:[NSString stringWithString:*entry.name]]; \ -})()) -#define _MPTweakInline(name_, ...) _MPTweakHasRange(_MPTweakInlineWithoutRange, _MPTweakInlineWithRange, __VA_ARGS__)(name_, __VA_ARGS__) - -#define _MPTweakValueInternal(tweak_, name_, default_, hasmin_, min_, hasmax_, max_) \ -((^{ \ - /* returns a correctly typed version of the current tweak value */ \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Wc11-extensions\"") \ - MPTweakValue currentValue = tweak_.currentValue ?: tweak_.defaultValue; \ - return _Generic(default_, \ - float: [currentValue floatValue], \ - const float: [currentValue floatValue], \ - double: [currentValue doubleValue], \ - const double: [currentValue doubleValue], \ - short: [currentValue shortValue], \ - const short: [currentValue shortValue], \ - unsigned short: [currentValue unsignedShortValue], \ - const unsigned short: [currentValue unsignedShortValue], \ - int: [currentValue intValue], \ - const int: [currentValue intValue], \ - unsigned int: [currentValue unsignedIntValue], \ - const unsigned int: [currentValue unsignedIntValue], \ - long long: [currentValue longLongValue], \ - const long long: [currentValue longLongValue], \ - unsigned long long: [currentValue unsignedLongLongValue], \ - const unsigned long long: [currentValue unsignedLongLongValue], \ - BOOL: [currentValue boolValue], \ - const BOOL: [currentValue boolValue], \ - id: currentValue, \ - const id: currentValue, \ - /* assume char * as the default. */ \ - /* constant strings are typed as char[N] */ \ - /* and we can't enumerate all of those. */ \ - /* luckily, we only need one fallback */ \ - default: [currentValue UTF8String] \ - ); \ - _Pragma("clang diagnostic pop") \ -})()) - -#define _MPTweakValueWithoutRange(name_, default_) _MPTweakValueWithRangeInternal(name_, default_, NO, NULL, NO, NULL) -#define _MPTweakValueWithRange(name_, default_, min_, max_) _MPTweakValueWithRangeInternal(name_, default_, YES, min_, YES, max_) -#define _MPTweakValueWithRangeInternal(name_, default_, hasmin_, min_, hasmax_, max_) \ -((^{ \ - MPTweak *tweak = _MPTweakInlineWithRangeInternal(name_, default_, hasmin_, min_, hasmax_, max_); \ - return _MPTweakValueInternal(tweak, name_, default_, hasmin_, min_, hasmax_, max_); \ -})()) -#define _MPTweakValue(name_, ...) _MPTweakHasRange(_MPTweakValueWithoutRange, _MPTweakValueWithRange, __VA_ARGS__)(name_, __VA_ARGS__) - -#define _MPTweakBindWithoutRange(object_, property_, name_, default_) \ - _MPTweakBindWithRangeInternal(object_, property_, name_, default_, NO, NULL, NO, NULL) -#define _MPTweakBindWithRange(object_, property_, name_, default_, min_, max_) \ - _MPTweakBindWithRangeInternal(object_, property_, name_, default_, YES, min_, YES, max_) -#define _MPTweakBindWithRangeInternal(object_, property_, name_, default_, hasmin_, min_, hasmax_, max_) \ -((^{ \ - MPTweak *tweak = _MPTweakInlineWithRangeInternal(name_, default_, hasmin_, min_, hasmax_, max_); \ - object_.property_ = _MPTweakValueInternal(tweak, name_, default_, hasmin_, min_, hasmax_, max_); \ -\ - _MPTweakBindObserver *observer__ = [[_MPTweakBindObserver alloc] initWithTweak:tweak block:^(id object__) { \ - __typeof__(object_) object___ = object__; \ - object___.property_ = _MPTweakValueInternal(tweak, name_, default_, hasmin_, min_, hasmax_, max_); \ - }]; \ - [observer__ attachToObject:object_]; \ -})()) -#define _MPTweakBind(object_, property_, name_, ...) _MPTweakHasRange(_MPTweakBindWithoutRange, _MPTweakBindWithRange, __VA_ARGS__)(object_, property_, name_, __VA_ARGS__) - -#ifdef __cplusplus -} -#endif - diff --git a/ios/Mixpanel.framework/Headers/MPTweakStore.h b/ios/Mixpanel.framework/Headers/MPTweakStore.h deleted file mode 100644 index 9589aa8fc43..00000000000 --- a/ios/Mixpanel.framework/Headers/MPTweakStore.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - Copyright (c) 2014-present, Facebook, Inc. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. - */ - -#import -#import "MPTweak.h" - -@class MPTweak; - -/** - @abstract The global store for tweaks. - */ -@interface MPTweakStore : NSObject - -/** - @abstract Creates or returns the shared global store. - */ -+ (instancetype)sharedInstance; - -/** - @abstract The tweak categories in the store. - */ -@property (nonatomic, copy, readonly) NSArray *tweaks; - -/** - @abstract Finds a tweak by name. - @param name The name of the tweak to find. - @return The tweak if found, nil otherwise. - */ -- (MPTweak *)tweakWithName:(NSString *)name; - -/** - @abstract Registers a tweak with the store. - @param tweak The tweak to register. - */ -- (void)addTweak:(MPTweak *)tweak; - -/** - @abstract Removes a tweak from the store. - @param tweak The tweak to remove. - */ -- (void)removeTweak:(MPTweak *)tweak; - -/** - @abstract Resets all tweaks in the store. - */ -- (void)reset; - -@end diff --git a/ios/Mixpanel.framework/Headers/Mixpanel.h b/ios/Mixpanel.framework/Headers/Mixpanel.h deleted file mode 100644 index 8994abc727b..00000000000 --- a/ios/Mixpanel.framework/Headers/Mixpanel.h +++ /dev/null @@ -1,882 +0,0 @@ -#import -#if !TARGET_OS_OSX -#import -#else -#import -#endif -#import "MixpanelPeople.h" -#import "MixpanelType.h" - - -#if defined(MIXPANEL_WATCHOS) -#define MIXPANEL_FLUSH_IMMEDIATELY 1 -#define MIXPANEL_NO_APP_LIFECYCLE_SUPPORT 1 -#endif - -#if (defined(MIXPANEL_WATCHOS) || defined(MIXPANEL_MACOS)) -#define MIXPANEL_NO_UIAPPLICATION_ACCESS 1 -#endif - -#if (defined(MIXPANEL_TVOS) || defined(MIXPANEL_WATCHOS) || defined(MIXPANEL_MACOS)) -#define MIXPANEL_NO_REACHABILITY_SUPPORT 1 -#define MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT 1 -#define MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT 1 -#define MIXPANEL_NO_CONNECT_INTEGRATION_SUPPORT 1 -#endif - -@class MixpanelPeople; -@class MixpanelGroup; -@protocol MixpanelDelegate; - -NS_ASSUME_NONNULL_BEGIN - -/*! - A string constant "mini" that respresent Mini Notification - */ -extern NSString *const MPNotificationTypeMini; -/*! - A string constant "takeover" that respresent Takeover Notification - */ -extern NSString *const MPNotificationTypeTakeover; - -/*! - Mixpanel API. - - The primary interface for integrating Mixpanel with your app. - - Use the Mixpanel class to set up your project and track events in Mixpanel - Engagement. It now also includes a people property for accessing - the Mixpanel People API. - -
- // Initialize the API
- Mixpanel *mixpanel = [Mixpanel sharedInstanceWithToken:@"YOUR API TOKEN"];
-
- // Track an event in Mixpanel Engagement
- [mixpanel track:@"Button Clicked"];
-
- // Set properties on a user in Mixpanel People
- [mixpanel identify:@"CURRENT USER DISTINCT ID"];
- [mixpanel.people set:@"Plan" to:@"Premium"];
- 
- - For more advanced usage, please see the Mixpanel iPhone - Library Guide. - */ -@interface Mixpanel : NSObject - -#pragma mark Properties - -/*! - Accessor to the Mixpanel People API object. - - See the documentation for MixpanelDelegate below for more information. - */ -@property (atomic, readonly, strong) MixpanelPeople *people; - -/*! - The distinct ID of the current user. - - A distinct ID is a string that uniquely identifies one of your users. By default, - we'll use the device's advertisingIdentifier UUIDString, if that is not available - we'll use the device's identifierForVendor UUIDString, and finally if that - is not available we will generate a new random UUIDString. To change the - current distinct ID, use the identify: method. - */ -@property (atomic, readonly, copy) NSString *distinctId; - -/*! - The default anonymous Id / distinct Id given to the events before identify. - - A default distinct ID is a string that uniquely identifies the anonymous activity. - By default, we'll use the device's advertisingIdentifier UUIDString, if that is not - available we'll use the device's identifierForVendor UUIDString, and finally if that - is not available we will generate a new random UUIDString. - */ -@property (atomic, readonly, copy) NSString *anonymousId; - -/*! - The user ID with which identify: is called with. - - This is null until identify: is called and is set to the id - with which identify is called with. - */ -@property (atomic, readonly, copy) NSString *userId; - -/*! - The alias of the current user. - - An alias is another string that uniquely identifies one of your users. Typically, - this is the user ID from your database. By using an alias you can link pre- and - post-sign up activity as well as cross-platform activity under one distinct ID. - To set the alias use the createAlias:forDistinctID: method. - */ -@property (atomic, readonly, copy) NSString *alias; - -/*! - A flag which says if a distinctId is already in peristence from old sdk - Defaults to NO. - */ -@property (atomic) BOOL hadPersistedDistinctId; - -/*! - The base URL used for Mixpanel API requests. - - Useful if you need to proxy Mixpanel requests. Defaults to - https://api.mixpanel.com. - */ -@property (nonatomic, copy) NSString *serverURL; - -/*! - Flush timer's interval. - - Setting a flush interval of 0 will turn off the flush timer. - */ -@property (atomic) NSUInteger flushInterval; - -/*! - Control whether the library should flush data to Mixpanel when the app - enters the background. - - Defaults to YES. Only affects apps targeted at iOS 4.0, when background - task support was introduced, and later. - */ -@property (atomic) BOOL flushOnBackground; - -/*! - Controls whether to show spinning network activity indicator when flushing - data to the Mixpanel servers. - - Defaults to YES. - */ -@property (atomic) BOOL shouldManageNetworkActivityIndicator; - -/*! - Controls whether to automatically check for notifications for the - currently identified user when the application becomes active. - - Defaults to YES. Will fire a network request on - applicationDidBecomeActive to retrieve a list of valid notifications - for the currently identified user. - */ -@property (atomic) BOOL checkForNotificationsOnActive; - -/*! - Controls whether to automatically check for A/B test variants for the - currently identified user when the application becomes active. - - Defaults to YES. Will fire a network request on - applicationDidBecomeActive to retrieve a list of valid variants - for the currently identified user. - */ -@property (atomic) BOOL checkForVariantsOnActive; - -/*! - Controls whether to automatically check for and show in-app notifications - for the currently identified user when the application becomes active. - - Defaults to YES. - */ -@property (atomic) BOOL showNotificationOnActive; - -/*! - Controls whether to automatically send the client IP Address as part of - event tracking. With an IP address, geo-location is possible down to neighborhoods - within a city, although the Mixpanel Dashboard will just show you city level location - specificity. For privacy reasons, you may be in a situation where you need to forego - effectively having access to such granular location information via the IP Address. - - Defaults to YES. - */ -@property (atomic) BOOL useIPAddressForGeoLocation; - -/*! - Controls whether to enable the visual test designer for A/B testing and codeless on mixpanel.com. - You will be unable to edit A/B tests and codeless events with this disabled, however *previously* - created A/B tests and codeless events will still be delivered. - - Defaults to YES. - */ -@property (atomic) BOOL enableVisualABTestAndCodeless; - -/*! - Controls whether to enable the run time debug logging at all levels. Note that the - Mixpanel SDK uses Apple System Logging to forward log messages to `STDERR`, this also - means that mixpanel logs are segmented by log level. Settings this to `YES` will enable - Mixpanel logging at the following levels: - - * Error - Something has failed - * Warning - Something is amiss and might fail if not corrected - * Info - The lowest priority that is normally logged, purely informational in nature - * Debug - Information useful only to developers, and normally not logged. - - - Defaults to NO. - */ -@property (atomic) BOOL enableLogging; - -/*! - Determines the time, in seconds, that a mini notification will remain on - the screen before automatically hiding itself. - - Defaults to 6.0. - */ -@property (atomic) CGFloat miniNotificationPresentationTime; - -#if !MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT -/*! - The minimum session duration (ms) that is tracked in automatic events. - - The default value is 10000 (10 seconds). - */ -@property (atomic) UInt64 minimumSessionDuration; - -/*! - The maximum session duration (ms) that is tracked in automatic events. - - The default value is UINT64_MAX (no maximum session duration). - */ -@property (atomic) UInt64 maximumSessionDuration; -#endif - -/*! - The a MixpanelDelegate object that can be used to assert fine-grain control - over Mixpanel network activity. - - Using a delegate is optional. See the documentation for MixpanelDelegate - below for more information. - */ -@property (atomic, weak) id delegate; // allows fine grain control over uploading (optional) - -#pragma mark Tracking - -/*! - Returns (and creates, if needed) a singleton instance of the API. - - This method will return a singleton instance of the Mixpanel class for - you using the given project token. If an instance does not exist, this method will create - one using initWithToken:launchOptions:andFlushInterval:. If you only have one - instance in your project, you can use sharedInstance to retrieve it. - -
- [Mixpanel sharedInstance] track:@"Something Happened"]];
- 
- - If you are going to use this singleton approach, - sharedInstanceWithToken: must be the first call to the - Mixpanel class, since it performs important initializations to - the API. - - @param apiToken your project token - */ -+ (Mixpanel *)sharedInstanceWithToken:(NSString *)apiToken; - -/*! - Initializes a singleton instance of the API, uses it to set whether or not to opt out tracking for - GDPR compliance, and then returns it. - - This is the preferred method for creating a sharedInstance with a mixpanel - like above. With the optOutTrackingByDefault parameter, Mixpanel tracking can be opted out by default. - - @param apiToken your project token - @param optOutTrackingByDefault whether or not to be opted out from tracking by default - - */ -+ (Mixpanel *)sharedInstanceWithToken:(NSString *)apiToken optOutTrackingByDefault:(BOOL)optOutTrackingByDefault; - -/*! - Initializes a singleton instance of the API, uses it to track launchOptions information, - and then returns it. - - This is the preferred method for creating a sharedInstance with a mixpanel - like above. With the launchOptions parameter, Mixpanel can track referral - information created by push notifications. - - @param apiToken your project token - @param launchOptions your application delegate's launchOptions - - */ -+ (Mixpanel *)sharedInstanceWithToken:(NSString *)apiToken launchOptions:(nullable NSDictionary *)launchOptions; - -/*! - Initializes a singleton instance of the API, uses it to track launchOptions information, - and then returns it. - - This is the preferred method for creating a sharedInstance with a mixpanel - like above. With the trackCrashes and automaticPushTracking parameter, Mixpanel can track crashes and automatic push. - - @param apiToken your project token - @param launchOptions your application delegate's launchOptions - @param trackCrashes whether or not to track crashes in Mixpanel. may want to disable if you're seeing - issues with your crash reporting for either signals or exceptions - @param automaticPushTracking whether or not to automatically track pushes sent from Mixpanel - */ -+ (Mixpanel *)sharedInstanceWithToken:(NSString *)apiToken launchOptions:(nullable NSDictionary *)launchOptions trackCrashes:(BOOL)trackCrashes automaticPushTracking:(BOOL)automaticPushTracking; - -/*! - Initializes a singleton instance of the API, uses it to track launchOptions information, - and then returns it. - - This is the preferred method for creating a sharedInstance with a mixpanel - like above. With the optOutTrackingByDefault parameter, Mixpanel tracking can be opted out by default. - - @param apiToken your project token - @param launchOptions your application delegate's launchOptions - @param trackCrashes whether or not to track crashes in Mixpanel. may want to disable if you're seeing - issues with your crash reporting for either signals or exceptions - @param automaticPushTracking whether or not to automatically track pushes sent from Mixpanel - @param optOutTrackingByDefault whether or not to be opted out from tracking by default - */ -+ (Mixpanel *)sharedInstanceWithToken:(NSString *)apiToken launchOptions:(nullable NSDictionary *)launchOptions trackCrashes:(BOOL)trackCrashes automaticPushTracking:(BOOL)automaticPushTracking optOutTrackingByDefault:(BOOL)optOutTrackingByDefault; - -/*! - Returns a previously instantiated singleton instance of the API. - - The API must be initialized with sharedInstanceWithToken: or - initWithToken:launchOptions:andFlushInterval before calling this class method. - This method will return nil if there are no instances created. If there is more than - one instace, it will return the first one that was created by using sharedInstanceWithToken: - or initWithToken:launchOptions:andFlushInterval:. - */ -+ (nullable Mixpanel *)sharedInstance; - -/*! - Initializes an instance of the API with the given project token. This also sets - it as a shared instance so you can use sharedInstance or - sharedInstanceWithToken: to retrieve this object later. - - Creates and initializes a new API object. See also sharedInstanceWithToken:. - - @param apiToken your project token - @param launchOptions optional app delegate launchOptions - @param flushInterval interval to run background flushing - @param trackCrashes whether or not to track crashes in Mixpanel. may want to disable if you're seeing - issues with your crash reporting for either signals or exceptions - */ -- (instancetype)initWithToken:(NSString *)apiToken - launchOptions:(nullable NSDictionary *)launchOptions - flushInterval:(NSUInteger)flushInterval - trackCrashes:(BOOL)trackCrashes; - -/*! - Initializes an instance of the API with the given project token. This also sets - it as a shared instance so you can use sharedInstance or - sharedInstanceWithToken: to retrieve this object later. - - Creates and initializes a new API object. See also sharedInstanceWithToken:. - - @param apiToken your project token - @param launchOptions optional app delegate launchOptions - @param flushInterval interval to run background flushing - @param trackCrashes whether or not to track crashes in Mixpanel. may want to disable if you're seeing - issues with your crash reporting for either signals or exceptions - @param automaticPushTracking whether or not to automatically track pushes sent from Mixpanel - */ -- (instancetype)initWithToken:(NSString *)apiToken - launchOptions:(nullable NSDictionary *)launchOptions - flushInterval:(NSUInteger)flushInterval - trackCrashes:(BOOL)trackCrashes - automaticPushTracking:(BOOL)automaticPushTracking; - -/*! - Initializes an instance of the API with the given project token. - - Creates and initializes a new API object. See also sharedInstanceWithToken:. - - @param apiToken your project token - @param launchOptions optional app delegate launchOptions - @param flushInterval interval to run background flushing - */ -- (instancetype)initWithToken:(NSString *)apiToken - launchOptions:(nullable NSDictionary *)launchOptions - andFlushInterval:(NSUInteger)flushInterval; - -/*! - Initializes an instance of the API with the given project token. - - Supports for the old initWithToken method format but really just passes - launchOptions to the above method as nil. - - @param apiToken your project token - @param flushInterval interval to run background flushing - */ -- (instancetype)initWithToken:(NSString *)apiToken andFlushInterval:(NSUInteger)flushInterval; - -/*! - Sets the distinct ID of the current user. - - As of version 2.3.1, Mixpanel will choose a default distinct ID based on - whether you are using the AdSupport.framework or not. - - If you are not using the AdSupport Framework (iAds), then we use the - [UIDevice currentDevice].identifierForVendor (IFV) string as the - default distinct ID. This ID will identify a user across all apps by the same - vendor, but cannot be used to link the same user across apps from different - vendors. - - If you are showing iAds in your application, you are allowed use the iOS ID - for Advertising (IFA) to identify users. If you have this framework in your - app, Mixpanel will use the IFA as the default distinct ID. If you have - AdSupport installed but still don't want to use the IFA, you can define the - MIXPANEL_NO_IFA preprocessor flag in your build settings, and - Mixpanel will use the IFV as the default distinct ID. - - If we are unable to get an IFA or IFV, we will fall back to generating a - random persistent UUID. - - For tracking events, you do not need to call identify: if you - want to use the default. However, Mixpanel People always requires an - explicit call to identify:. If calls are made to - set:, increment or other MixpanelPeople - methods prior to calling identify:, then they are queued up and - flushed once identify: is called. - - If you'd like to use the default distinct ID for Mixpanel People as well - (recommended), call identify: using the current distinct ID: - [mixpanel identify:mixpanel.distinctId]. - - @param distinctId string that uniquely identifies the current user - */ -- (void)identify:(NSString *)distinctId; - -/*! - Sets the distinct ID of the current user. With the option of only updating the - distinct ID value and not the Mixpanel People distinct ID. - - This method is not intended to be used unless you wish to prevent updating the Mixpanel - People distinct ID value by passing a value of NO to the usePeople param. This can be - useful if the user wishes to prevent People updates from being sent until the identify - method is called. - - @param distinctId string that uniquely identifies the current user - @param usePeople bool controls whether or not to set the people distinctId to the event distinctId - */ -- (void)identify:(NSString *)distinctId usePeople:(BOOL)usePeople; - -/*! - Add a group to this user's membership for a particular group key. - The groupKey must be an NSString. The groupID should be a legal MixpanelType value. - - @param groupKey the group key - @param groupID the group ID - */ -- (void)addGroup:(NSString *)groupKey groupID:(id)groupID; - -/*! - Remove a group from this user's membership for a particular group key. - The groupKey must be an NSString. The groupID should be a legal MixpanelType value. - - @param groupKey the group key - @param groupID the group ID - */ -- (void)removeGroup:(NSString *)groupKey groupID:(id)groupID; - -/*! - Set the group to which the user belongs. - The groupKey must be an NSString. The groupID should be an array - of MixpanelTypes. - - @param groupKey the group key - @param groupIDs the group IDs - */ -- (void)setGroup:(NSString *)groupKey groupIDs:(NSArray> *)groupIDs; - -/*! - Convenience method to set a single group ID for the current user. - - @param groupKey the group key - @param groupID the group ID - */ -- (void)setGroup:(NSString *)groupKey groupID:(id)groupID; - -/*! - Tracks an event with specific groups. - - Similar to track(), the data will also be sent to the specific group - datasets. Group key/value pairs are upserted into the property map - before tracking. - The keys in groups must be NSString objects. values can be any legal - MixpanelType objects. If the event is being timed, the timer will - stop and be added as a property. - - @param event event name - @param properties properties dictionary - @param groups groups dictionary, which contains key-value pairs - for this event - */ -- (void)trackWithGroups:(NSString *)event properties:(NSDictionary *)properties groups:(NSDictionary *)groups; - -/*! - Get a MixpanelGroup identifier from groupKey and groupID. - The groupKey must be an NSString. The groupID should be a legal MixpanelType value. - - @param groupKey the group key - @param groupID the group ID - */ -- (MixpanelGroup *)getGroup:(NSString *)groupKey groupID:(id)groupID; - -/*! - Tracks an event. - - @param event event name - */ -- (void)track:(NSString *)event; - -/*! - Tracks an event with properties. - - Properties will allow you to segment your events in your Mixpanel reports. - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. If the event is being timed, the timer will - stop and be added as a property. - - @param event event name - @param properties properties dictionary - */ -- (void)track:(NSString *)event properties:(nullable NSDictionary *)properties; - -/*! - Registers super properties, overwriting ones that have already been set. - - Super properties, once registered, are automatically sent as properties for - all event tracking calls. They save you having to maintain and add a common - set of properties to your events. Property keys must be NSString - objects and values must be NSString, NSNumber, - NSNull, NSArray, NSDictionary, - NSDate or NSURL objects. - - @param properties properties dictionary - */ -- (void)registerSuperProperties:(NSDictionary *)properties; - -/*! - Registers super properties without overwriting ones that have already been - set. - - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. - - @param properties properties dictionary - */ -- (void)registerSuperPropertiesOnce:(NSDictionary *)properties; - -/*! - Registers super properties without overwriting ones that have already been set - unless the existing value is equal to defaultValue. - - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. - - @param properties properties dictionary - @param defaultValue overwrite existing properties that have this value - */ -- (void)registerSuperPropertiesOnce:(NSDictionary *)properties defaultValue:(nullable id)defaultValue; - -/*! - Removes a previously registered super property. - - As an alternative to clearing all properties, unregistering specific super - properties prevents them from being recorded on future events. This operation - does not affect the value of other super properties. Any property name that is - not registered is ignored. - - Note that after removing a super property, events will show the attribute as - having the value undefined in Mixpanel until a new value is - registered. - - @param propertyName array of property name strings to remove - */ -- (void)unregisterSuperProperty:(NSString *)propertyName; - -/*! - Clears all currently set super properties. - */ -- (void)clearSuperProperties; - -/*! - Returns the currently set super properties. - */ -- (NSDictionary *)currentSuperProperties; - -/*! - Starts a timer that will be stopped and added as a property when a - corresponding event is tracked. - - This method is intended to be used in advance of events that have - a duration. For example, if a developer were to track an "Image Upload" event - she might want to also know how long the upload took. Calling this method - before the upload code would implicitly cause the track - call to record its duration. - -
- // begin timing the image upload
- [mixpanel timeEvent:@"Image Upload"];
-
- // upload the image
- [self uploadImageWithSuccessHandler:^{
-
-    // track the event
-    [mixpanel track:@"Image Upload"];
- }];
- 
- - @param event a string, identical to the name of the event that will be tracked - - */ -- (void)timeEvent:(NSString *)event; - -/*! - Retrieves the time elapsed for the named event since timeEvent: was called. - - @param event the name of the event to be tracked that was passed to timeEvent: - */ -- (double)eventElapsedTime:(NSString *)event; - -/*! - Clears all current event timers. - */ -- (void)clearTimedEvents; - -/*! - Clears all stored properties and distinct IDs. Useful if your app's user logs out. - */ -- (void)reset; - -/*! - Uploads queued data to the Mixpanel server. - - By default, queued data is flushed to the Mixpanel servers every minute (the - default for flushInterval), and on background (since - flushOnBackground is on by default). You only need to call this - method manually if you want to force a flush at a particular moment. - */ -- (void)flush; - -/*! - Calls flush, then optionally archives and calls a handler when finished. - - When calling flush manually, it is sometimes important to verify - that the flush has finished before further action is taken. This is - especially important when the app is in the background and could be suspended - at any time if protocol is not followed. Delegate methods like - application:didReceiveRemoteNotification:fetchCompletionHandler: - are called when an app is brought to the background and require a handler to - be called when it finishes. - - @param handler completion handler to be called after flush completes - */ -- (void)flushWithCompletion:(nullable void (^)(void))handler; - -/*! - Writes current project info, including distinct ID, super properties and pending event - and People record queues to disk. - - This state will be recovered when the app is launched again if the Mixpanel - library is initialized with the same project token. You do not need to call - this method. The library listens for app state changes and handles - persisting data as needed. It can be useful in some special circumstances, - though, for example, if you'd like to track app crashes from main.m. - */ -- (void)archive; - -/*! - Creates a distinct_id alias from alias to original id. - - This method is used to map an identifier called an alias to the existing Mixpanel - distinct id. This causes all events and people requests sent with the alias to be - mapped back to the original distinct id. The recommended usage pattern is to call - createAlias: and then identify: (with their new user ID) when they log in the next time. - This will keep your signup funnels working correctly. - -
- // This makes the current ID (an auto-generated GUID)
- // and 'Alias' interchangeable distinct ids.
- [mixpanel createAlias:@"Alias"
-    forDistinctID:mixpanel.distinctId];
-
- // You must call identify if you haven't already
- // (e.g., when your app launches).
- [mixpanel identify:mixpanel.distinctId];
-
- -@param alias the new distinct_id that should represent original -@param distinctID the old distinct_id that alias will be mapped to - */ -- (void)createAlias:(NSString *)alias forDistinctID:(NSString *)distinctID; - -/*! - Creates a distinct_id alias from alias to original id. - - This method is not intended to be used unless you wish to prevent updating the Mixpanel - People distinct ID value by passing a value of NO to the usePeople param. This can be - useful if the user wishes to prevent People updates from being sent until the identify - method is called. - - @param alias the new distinct_id that should represent original - @param distinctID the old distinct_id that alias will be mapped to - @param usePeople bool controls whether or not to set the people distinctId to the event distinctId - */ -- (void)createAlias:(NSString *)alias forDistinctID:(NSString *)distinctID usePeople:(BOOL)usePeople; - -/*! - Returns the Mixpanel library version number as a string, e.g. "3.2.3". - */ -- (NSString *)libVersion; - -/*! - Opt out tracking. - - This method is used to opt out tracking. This causes all events and people request no longer - to be sent back to the Mixpanel server. - */ -- (void)optOutTracking; - -/*! - Opt in tracking. - - Use this method to opt in an already opted out user from tracking. People updates and track calls will be - sent to Mixpanel after using this method. - - This method will internally track an opt in event to your project. If you want to identify the opt-in - event and/or pass properties to the event, See also optInTrackingForDistinctId: and - optInTrackingForDistinctId:withEventProperties:. - */ -- (void)optInTracking; - -/*! - Opt in tracking. - - Use this method to opt in an already opted out user from tracking. People updates and track calls will be - sent to Mixpanel after using this method. - - This method will internally track an opt in event to your project. If you want to pass properties to the event, see also - optInTrackingForDistinctId:withEventProperties:. - - @param distinctID optional string to use as the distinct ID for events. This will call identify:. - If you use people profiles make sure you manually call identify: after this method. - */ -- (void)optInTrackingForDistinctID:(nullable NSString *)distinctID; - -/*! - Opt in tracking. - - Use this method to opt in an already opted out user from tracking. People updates and track calls will be - sent to Mixpanel after using this method. - - This method will internally track an opt in event to your project.See also optInTracking or - optInTrackingForDistinctId:. - - @param distinctID optional string to use as the distinct ID for events. This will call identify:. - If you use people profiles make sure you manually call identify: after this method. - @param properties optional properties dictionary that could be passed to add properties to the opt-in event that is sent to - Mixpanel. - */ -- (void)optInTrackingForDistinctID:(nullable NSString *)distinctID withEventProperties:(nullable NSDictionary *)properties; - -/*! - Returns YES if the current user has opted out tracking, NO if the current user has opted in tracking. - */ -- (BOOL)hasOptedOutTracking; - -/*! - Returns the Mixpanel library version number as a string, e.g. "3.2.3". - */ -+ (NSString *)libVersion; - - -#if !MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT -#pragma mark - Mixpanel Notifications - -/*! - Shows the notification of the given id. - - You do not need to call this method on the main thread. - - @param ID notification id - */ -- (void)showNotificationWithID:(NSUInteger)ID; - - -/*! - Shows a notification with the given type if one is available. - - You do not need to call this method on the main thread. - - @param type The type of notification to show, either @"mini", or @"takeover" - */ -- (void)showNotificationWithType:(NSString *)type; - -/*! - Shows a notification if one is available. - - You do not need to call this method on the main thread. - */ -- (void)showNotification; - -#pragma mark - Mixpanel A/B Testing - -/*! - Join any experiments (A/B tests) that are available for the current user. - - Mixpanel will check for A/B tests automatically when your app enters - the foreground. Call this method if you would like to to check for, - and join, any experiments are newly available for the current user. - - You do not need to call this method on the main thread. - */ -- (void)joinExperiments; - -/*! - Join any experiments (A/B tests) that are available for the current user. - - Same as joinExperiments but will fire the given callback after all experiments - have been loaded and applied. - - @param experimentsLoadedCallback callback to be called after experiments - joined and applied - */ -- (void)joinExperimentsWithCallback:(nullable void (^)(void))experimentsLoadedCallback; - -#endif // MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT - -#pragma mark - Deprecated -/*! - Current user's name in Mixpanel Streams. - */ -@property (nullable, atomic, copy) NSString *nameTag __deprecated; // Deprecated in v3.0.1 - -@end - -/*! - @protocol - - Delegate protocol for controlling the Mixpanel API's network behavior. - - Creating a delegate for the Mixpanel object is entirely optional. It is only - necessary when you want full control over when data is uploaded to the server, - beyond simply calling stop: and start: before and after a particular block of - your code. - */ - -@protocol MixpanelDelegate - -@optional -/*! - Asks the delegate if data should be uploaded to the server. - - Return YES to upload now, NO to defer until later. - - @param mixpanel Mixpanel API instance - */ -- (BOOL)mixpanelWillFlush:(Mixpanel *)mixpanel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/ios/Mixpanel.framework/Headers/MixpanelGroup.h b/ios/Mixpanel.framework/Headers/MixpanelGroup.h deleted file mode 100644 index 3d22b7ed1f2..00000000000 --- a/ios/Mixpanel.framework/Headers/MixpanelGroup.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// MixpanelGroup.h -// Mixpanel -// -// Created by Weizhe Yuan on 8/16/18. -// Copyright © 2018 Mixpanel. All rights reserved. -// -#import "Mixpanel.h" -#import - - -NS_ASSUME_NONNULL_BEGIN - -@interface MixpanelGroup : NSObject - -/*! - Set properties on this Mixpanel Group. Keys in properties must be NSString, - and values are MixpanelTypes. - - The properties will be set on the current group. We use an NSAssert to enforce - this type requirement. In release mode, the assert is stripped out and we will silently convert - incorrect types to strings using [NSString stringWithFormat:@"%@", value]. - If the existing group record on the server already has a value for a given property, - the old value is overwritten. Other existing properties will not be affected. - - @param properties properties dictionary - */ -- (void)set:(NSDictionary *)properties; - -/*! - Set properties on this Mixpanel Group, but don't overwrite if - there are existing values. - - This method is identical to set() except it will only set - properties that are not already set. - - @param properties properties dictionary - */ -- (void)setOnce:(NSDictionary *)properties; - -/*! - Remove a property and all its values from this Mixpanel Group. For - properties that aren't set will be no effect. - - @param property the property to be unset - */ -- (void)unset:(NSString *)property; - -/*! - Union list properties. - - Property keys must be NSString objects. - - @param property mapping of list property names to lists to union - */ -- (void)union:(NSString *)property values:(NSArray> *)values; - -/*! - Permanently remove a group on server side. - */ -- (void)deleteGroup; - -/*! - Remove one value from a group property. - - @param property the name of group property - @param value the value to be removed - */ -- (void)remove:(NSString *)property value:(id)value; - -@end - -NS_ASSUME_NONNULL_END diff --git a/ios/Mixpanel.framework/Headers/MixpanelPeople.h b/ios/Mixpanel.framework/Headers/MixpanelPeople.h deleted file mode 100644 index 13911c68980..00000000000 --- a/ios/Mixpanel.framework/Headers/MixpanelPeople.h +++ /dev/null @@ -1,229 +0,0 @@ -// -// MixpanelPeople.h -// Mixpanel -// -// Created by Sam Green on 6/16/16. -// Copyright © 2016 Mixpanel. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Mixpanel People API. - - Access to the Mixpanel People API, available as a property on the main - Mixpanel API. - - You should not instantiate this object yourself. An instance of it will - be available as a property of the main Mixpanel object. Calls to Mixpanel - People methods will look like this: - -
- [mixpanel.people increment:@"App Opens" by:[NSNumber numberWithInt:1]];
- 
- - Please note that the core Mixpanel and - MixpanelPeople classes share the identify: method. - The Mixpanel identify: affects the - distinct_id property of events sent by track: and - track:properties: and determines which Mixpanel People user - record will be updated by set:, increment: and other - MixpanelPeople methods. - - If you are going to set your own distinct IDs for core Mixpanel event - tracking, make sure to use the same distinct IDs when using Mixpanel - People. - */ -@interface MixpanelPeople : NSObject -/*! - controls the $ignore_time property in any subsequent MixpanelPeople operation. - - If the $ignore_time property is present and true in your request, - Mixpanel will not automatically update the "Last Seen" property of the profile. - Otherwise, Mixpanel will add a "Last Seen" property associated with the - current time for all $set, $append, and $add operations - - Defaults to NO. - */ -@property (atomic) BOOL ignoreTime; - -/*! - Register the given device to receive push notifications. - - This will associate the device token with the current user in Mixpanel People, - which will allow you to send push notifications to the user from the Mixpanel - People web interface. You should call this method with the NSData - token passed to - application:didRegisterForRemoteNotificationsWithDeviceToken:. - - @param deviceToken device token as returned application:didRegisterForRemoteNotificationsWithDeviceToken: - */ -- (void)addPushDeviceToken:(NSData *)deviceToken; - -/*! - Unregister the given device to receive push notifications. - - This will unset all of the push tokens saved to this people profile. This is useful - in conjunction with a call to `reset`, or when a user is logging out. - */ -- (void)removeAllPushDeviceTokens; - -/*! - Unregister a specific device token from the ability to receive push notifications. - - This will remove the provided push token saved to this people profile. This is useful - in conjunction with a call to `reset`, or when a user is logging out. - - @param deviceToken device token to be unregistered - */ -- (void)removePushDeviceToken:(NSData *)deviceToken; - -/*! - Set properties on the current user in Mixpanel People. - - The properties will be set on the current user. The keys must be NSString - objects and the values should be NSString, NSNumber, NSArray, NSDate, or - NSNull objects. We use an NSAssert to enforce this type requirement. In - release mode, the assert is stripped out and we will silently convert - incorrect types to strings using [NSString stringWithFormat:@"%@", value]. You - can override the default the current project token and distinct ID by - including the special properties: $token and $distinct_id. If the existing - user record on the server already has a value for a given property, the old - value is overwritten. Other existing properties will not be affected. - -
- // applies to both Mixpanel Engagement track: AND Mixpanel People set: and
- // increment: calls
- [mixpanel identify:distinctId];
- 
- - @param properties properties dictionary - - */ -- (void)set:(NSDictionary *)properties; - -/*! - Convenience method for setting a single property in Mixpanel People. - - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. - - @param property property name - @param object property value - */ -- (void)set:(NSString *)property to:(id)object; - -/*! - Set properties on the current user in Mixpanel People, but don't overwrite if - there is an existing value. - - This method is identical to set: except it will only set - properties that are not already set. It is particularly useful for collecting - data about the user's initial experience and source, as well as dates - representing the first time something happened. - - @param properties properties dictionary - - */ -- (void)setOnce:(NSDictionary *)properties; - -/*! - Remove a list of properties and their values from the current user's profile - in Mixpanel People. - - The properties array must ony contain NSString names of properties. For properties - that don't exist there will be no effect. - - @param properties properties array - - */ -- (void)unset:(NSArray *)properties; - -/*! - Increment the given numeric properties by the given values. - - Property keys must be NSString names of numeric properties. A property is - numeric if its current value is a number. If a property does not exist, it - will be set to the increment amount. Property values must be NSNumber objects. - - @param properties properties dictionary - */ -- (void)increment:(NSDictionary *)properties; - -/*! - Convenience method for incrementing a single numeric property by the specified - amount. - - @param property property name - @param amount amount to increment by - */ -- (void)increment:(NSString *)property by:(NSNumber *)amount; - -/*! - Append values to list properties. - - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. - - @param properties mapping of list property names to values to append - */ -- (void)append:(NSDictionary *)properties; - -/*! - Union list properties. - - Property keys must be NSString objects. - - @param properties mapping of list property names to lists to union - */ -- (void)union:(NSDictionary *)properties; - -/*! - Remove list properties. - - Property keys must be NSString objects and values must be - NSString, NSNumber, NSNull, - NSArray, NSDictionary, NSDate or - NSURL objects. - - @param properties mapping of list property names to values to remove - */ -- (void)remove:(NSDictionary *)properties; - -/*! - Track money spent by the current user for revenue analytics. - - @param amount amount of revenue received - */ -- (void)trackCharge:(NSNumber *)amount; - -/*! - Track money spent by the current user for revenue analytics and associate - properties with the charge. - - Charge properties allow you segment on types of revenue. For instance, you - could record a product ID with each charge so that you could segment on it in - revenue analytics to see which products are generating the most revenue. - */ -- (void)trackCharge:(NSNumber *)amount withProperties:(nullable NSDictionary *)properties; - - -/*! - Delete current user's revenue history. - */ -- (void)clearCharges; - -/*! - Delete current user's record from Mixpanel People. - */ -- (void)deleteUser; - -@end - -NS_ASSUME_NONNULL_END diff --git a/ios/Mixpanel.framework/Headers/MixpanelType.h b/ios/Mixpanel.framework/Headers/MixpanelType.h deleted file mode 100644 index 78db3e49cea..00000000000 --- a/ios/Mixpanel.framework/Headers/MixpanelType.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MixpanelType.h -// Mixpanel -// -// Created by Weizhe Yuan on 9/6/18. -// Copyright © 2018 Mixpanel. All rights reserved. -// - -#import - -@protocol MixpanelType - -- (BOOL)equalToMixpanelType:(id)rhs; - -@end - -@interface NSString (MixpanelTypeCategory) - -@end - -@interface NSNumber (MixpanelTypeCategory) - -@end - -@interface NSArray (MixpanelTypeCategory) - -@end - -@interface NSDictionary (MixpanelTypeCategory) - -@end - -@interface NSDate (MixpanelTypeCategory) - -@end - -@interface NSURL (MixpanelTypeCategory) - -@end diff --git a/ios/Mixpanel.framework/Headers/_MPTweakBindObserver.h b/ios/Mixpanel.framework/Headers/_MPTweakBindObserver.h deleted file mode 100644 index a9afc1039c2..00000000000 --- a/ios/Mixpanel.framework/Headers/_MPTweakBindObserver.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - Copyright (c) 2014-present, Facebook, Inc. - All rights reserved. - - This source code is licensed under the BSD-style license found in the - LICENSE file in the root directory of this source tree. An additional grant - of patent rights can be found in the PATENTS file in the same directory. - */ - -#import - -@class MPTweak; - -/** - @abstract Block to call when an update is observed. - @param object The object that the observer is attached to. - */ -typedef void (^_MPTweakBindObserverBlock)(id object); - -/** - @abstract Observes a tweak to issue bind updates. - @discussion This is an implementation detail of {@ref MPTweakBind}. - */ -@interface _MPTweakBindObserver : NSObject - -/** - @abstract Designated initializer. - @param tweak The tweak to observe. - @param block The block to call on change. - @return A new bind observer. -*/ -- (instancetype)initWithTweak:(MPTweak *)tweak block:(_MPTweakBindObserverBlock)block; - -/** - @abstract Attaches to an object and deallocates with it. - @discussion Useful to create a limited lifetime for the observer. - */ -- (void)attachToObject:(id)object; - -@end diff --git a/ios/Mixpanel.framework/Info.plist b/ios/Mixpanel.framework/Info.plist deleted file mode 100644 index de64b5210cf..00000000000 Binary files a/ios/Mixpanel.framework/Info.plist and /dev/null differ diff --git a/ios/Mixpanel.framework/MPArrowLeft.png b/ios/Mixpanel.framework/MPArrowLeft.png deleted file mode 100644 index 46e93c5be70..00000000000 Binary files a/ios/Mixpanel.framework/MPArrowLeft.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPArrowLeft@2x.png b/ios/Mixpanel.framework/MPArrowLeft@2x.png deleted file mode 100644 index cdd9a721c5a..00000000000 Binary files a/ios/Mixpanel.framework/MPArrowLeft@2x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPArrowRight.png b/ios/Mixpanel.framework/MPArrowRight.png deleted file mode 100644 index 2a02ae4d431..00000000000 Binary files a/ios/Mixpanel.framework/MPArrowRight.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPArrowRight@2x.png b/ios/Mixpanel.framework/MPArrowRight@2x.png deleted file mode 100644 index 7b1c98c9c62..00000000000 Binary files a/ios/Mixpanel.framework/MPArrowRight@2x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPCheckmark.png b/ios/Mixpanel.framework/MPCheckmark.png deleted file mode 100644 index e39c272b2df..00000000000 Binary files a/ios/Mixpanel.framework/MPCheckmark.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPCheckmark@2x.png b/ios/Mixpanel.framework/MPCheckmark@2x.png deleted file mode 100644 index b67ed134a09..00000000000 Binary files a/ios/Mixpanel.framework/MPCheckmark@2x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPCloseButton.png b/ios/Mixpanel.framework/MPCloseButton.png deleted file mode 100644 index 465c45d0a66..00000000000 Binary files a/ios/Mixpanel.framework/MPCloseButton.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPCloseButton@2x.png b/ios/Mixpanel.framework/MPCloseButton@2x.png deleted file mode 100644 index edd5a4be631..00000000000 Binary files a/ios/Mixpanel.framework/MPCloseButton@2x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPCloseButton@3x.png b/ios/Mixpanel.framework/MPCloseButton@3x.png deleted file mode 100644 index ba9cebaa22f..00000000000 Binary files a/ios/Mixpanel.framework/MPCloseButton@3x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPDismissKeyboard.png b/ios/Mixpanel.framework/MPDismissKeyboard.png deleted file mode 100644 index 1e8eee8510b..00000000000 Binary files a/ios/Mixpanel.framework/MPDismissKeyboard.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPDismissKeyboard@2x.png b/ios/Mixpanel.framework/MPDismissKeyboard@2x.png deleted file mode 100644 index 826c2aab943..00000000000 Binary files a/ios/Mixpanel.framework/MPDismissKeyboard@2x.png and /dev/null differ diff --git a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~ipad.nib b/ios/Mixpanel.framework/MPTakeoverNotificationViewController~ipad.nib deleted file mode 100644 index 9690f370f8d..00000000000 Binary files a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~ipad.nib and /dev/null differ diff --git a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphonelandscape.nib b/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphonelandscape.nib deleted file mode 100644 index fd7517b86cf..00000000000 Binary files a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphonelandscape.nib and /dev/null differ diff --git a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphoneportrait.nib b/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphoneportrait.nib deleted file mode 100644 index f154f27f106..00000000000 Binary files a/ios/Mixpanel.framework/MPTakeoverNotificationViewController~iphoneportrait.nib and /dev/null differ diff --git a/ios/Mixpanel.framework/Mixpanel b/ios/Mixpanel.framework/Mixpanel deleted file mode 100755 index 92b134fcc7a..00000000000 Binary files a/ios/Mixpanel.framework/Mixpanel and /dev/null differ diff --git a/ios/Mixpanel.framework/Modules/module.modulemap b/ios/Mixpanel.framework/Modules/module.modulemap deleted file mode 100644 index 8c27e8d80a2..00000000000 --- a/ios/Mixpanel.framework/Modules/module.modulemap +++ /dev/null @@ -1,12 +0,0 @@ -framework module Mixpanel { - header "Mixpanel.h" - header "MixpanelPeople.h" - header "MixpanelGroup.h" - header "MixpanelType.h" - header "MPTweak.h" - header "MPTweakInline.h" - header "MPTweakInlineInternal.h" - header "MPTweakStore.h" - header "_MPTweakBindObserver.h" - export * -} diff --git a/ios/Mixpanel.framework/PrivateHeaders/MPNetworkPrivate.h b/ios/Mixpanel.framework/PrivateHeaders/MPNetworkPrivate.h deleted file mode 100644 index 1679e94577b..00000000000 --- a/ios/Mixpanel.framework/PrivateHeaders/MPNetworkPrivate.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPNetworkPrivate.h -// Mixpanel -// -// Created by Sam Green on 6/17/16. -// Copyright © 2016 Mixpanel. All rights reserved. -// - -#import "MPNetwork.h" - -@interface MPNetwork () - -@property (nonatomic, weak) Mixpanel *mixpanel; -@property (nonatomic, strong) NSURL *serverURL; - -@property (nonatomic) NSTimeInterval requestsDisabledUntilTime; -@property (nonatomic) NSUInteger consecutiveFailures; - -- (BOOL)handleNetworkResponse:(NSHTTPURLResponse *)response withError:(NSError *)error; - -+ (NSTimeInterval)calculateBackOffTimeFromFailures:(NSUInteger)failureCount; -+ (NSTimeInterval)parseRetryAfterTime:(NSHTTPURLResponse *)response; -+ (BOOL)parseHTTPFailure:(NSHTTPURLResponse *)response withError:(NSError *)error; - -+ (NSString *)encodeArrayForAPI:(NSArray *)array; -+ (NSData *)encodeArrayAsJSONData:(NSArray *)array; -+ (NSString *)encodeJSONDataAsBase64:(NSData *)data; - -+ (NSArray *)buildDecideQueryForProperties:(NSDictionary *)properties - withDistinctID:(NSString *)distinctID - andToken:(NSString *)token; - -- (NSURLRequest *)buildRequestForEndpoint:(NSString *)endpoint - byHTTPMethod:(NSString *)method - withQueryItems:(NSArray *)queryItems - andBody:(NSString *)body; - -+ (NSURLSession *)sharedURLSession; - -@end diff --git a/ios/Mixpanel.framework/PrivateHeaders/MixpanelPeoplePrivate.h b/ios/Mixpanel.framework/PrivateHeaders/MixpanelPeoplePrivate.h deleted file mode 100644 index 2c6d0ddcfc1..00000000000 --- a/ios/Mixpanel.framework/PrivateHeaders/MixpanelPeoplePrivate.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MixpanelPeoplePrivate.h -// Mixpanel -// -// Created by Sam Green on 6/16/16. -// Copyright © 2016 Mixpanel. All rights reserved. -// -#import - -@class Mixpanel; - -@interface MixpanelPeople () - -@property (nonatomic, weak) Mixpanel *mixpanel; -@property (nonatomic, strong) NSMutableArray *unidentifiedQueue; -@property (nonatomic, copy) NSString *distinctId; -@property (nonatomic, strong) NSDictionary *automaticPeopleProperties; - -- (instancetype)initWithMixpanel:(Mixpanel *)mixpanel; -- (void)merge:(NSDictionary *)properties; - -@end diff --git a/ios/Mixpanel.framework/PrivateHeaders/MixpanelPrivate.h b/ios/Mixpanel.framework/PrivateHeaders/MixpanelPrivate.h deleted file mode 100644 index e831e619ced..00000000000 --- a/ios/Mixpanel.framework/PrivateHeaders/MixpanelPrivate.h +++ /dev/null @@ -1,162 +0,0 @@ -// -// MixpanelPrivate.h -// Mixpanel -// -// Created by Sam Green on 6/16/16. -// Copyright © 2016 Mixpanel. All rights reserved. -// - -#import "Mixpanel.h" -#import "MPNetwork.h" -#import "SessionMetadata.h" -#import "MixpanelType.h" - -#if TARGET_OS_IOS -#import -#endif - -#if !MIXPANEL_NO_REACHABILITY_SUPPORT -#import -#import -#import -#endif - -#if !MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT -#import "Mixpanel+AutomaticTracks.h" -#import "AutomaticTracksConstants.h" -#import "AutomaticEvents.h" -#import "MixpanelExceptionHandler.h" -#endif - -#if !MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT -#import "MPResources.h" -#import "MPABTestDesignerConnection.h" -#import "UIView+MPHelpers.h" -#import "MPDesignerEventBindingMessage.h" -#import "MPDesignerSessionCollection.h" -#import "MPEventBinding.h" -#import "MPNotification.h" -#import "MPTakeoverNotification.h" -#import "MPMiniNotification.h" -#import "MPNotificationViewController.h" -#import "MPSwizzler.h" -#import "MPTweakStore.h" -#import "MPVariant.h" -#import "MPWebSocket.h" -#import "MPNotification.h" -#endif - -#if !MIXPANEL_NO_CONNECT_INTEGRATION_SUPPORT -#import "MPConnectIntegrations.h" -#endif - -#if defined(MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT) && defined(MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT) -@interface Mixpanel () -#elif defined(MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT) -@interface Mixpanel () -#elif defined(MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT) -@interface Mixpanel () -#else -@interface Mixpanel () -#endif - -{ - NSUInteger _flushInterval; - BOOL _enableVisualABTestAndCodeless; -} - -#if !MIXPANEL_NO_REACHABILITY_SUPPORT -@property (nonatomic, assign) SCNetworkReachabilityRef reachability; -@property (nonatomic, strong) CTTelephonyNetworkInfo *telephonyInfo; -#endif - -#if !MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT -@property (nonatomic, strong) UILongPressGestureRecognizer *testDesignerGestureRecognizer; -@property (nonatomic, strong) MPABTestDesignerConnection *abtestDesignerConnection; -#endif - -#if !MIXPANEL_NO_AUTOMATIC_EVENTS_SUPPORT -@property (nonatomic) AutomaticTrackMode validationMode; -@property (nonatomic) NSUInteger validationEventCount; -@property (nonatomic, getter=isValidationEnabled) BOOL validationEnabled; -@property (atomic, strong) AutomaticEvents *automaticEvents; -#endif - -#if !MIXPANEL_NO_CONNECT_INTEGRATION_SUPPORT -@property (nonatomic, strong) MPConnectIntegrations *connectIntegrations; -#endif - -#if !defined(MIXPANEL_WATCHOS) && !defined(MIXPANEL_MACOS) -@property (nonatomic, assign) UIBackgroundTaskIdentifier taskId; -@property (nonatomic, strong) UIViewController *notificationViewController; -#endif - -// re-declare internally as readwrite -@property (atomic, strong) MixpanelPeople *people; -@property (atomic, strong) NSMutableDictionary * cachedGroups; -@property (atomic, strong) MPNetwork *network; -@property (atomic, copy) NSString *distinctId; -@property (atomic, copy) NSString *alias; -@property (atomic, copy) NSString *anonymousId; -@property (atomic, copy) NSString *userId; - -@property (nonatomic, copy) NSString *apiToken; -@property (atomic, strong) NSDictionary *superProperties; -@property (atomic, strong) NSDictionary *automaticProperties; -@property (nonatomic, strong) NSTimer *timer; -@property (nonatomic, strong) NSMutableArray *eventsQueue; -@property (nonatomic, strong) NSMutableArray *peopleQueue; -@property (nonatomic, strong) NSMutableArray *groupsQueue; -@property (nonatomic) dispatch_queue_t serialQueue; -@property (nonatomic) dispatch_queue_t networkQueue; -@property (nonatomic, strong) NSMutableDictionary *timedEvents; -@property (nonatomic, strong) SessionMetadata *sessionMetadata; - -@property (nonatomic) BOOL decideResponseCached; -@property (nonatomic) BOOL hasAddedObserver; -@property (nonatomic, strong) NSNumber *automaticEventsEnabled; -@property (nonatomic, copy) NSArray *notifications; -@property (nonatomic, copy) NSArray *triggeredNotifications; -@property (nonatomic, strong) id currentlyShowingNotification; -@property (nonatomic, strong) NSMutableSet *shownNotifications; - -@property (nonatomic, strong) NSSet *variants; -@property (nonatomic, strong) NSSet *eventBindings; - -@property (nonatomic, assign) BOOL optOutStatus; -@property (nonatomic, assign) BOOL optOutStatusNotSet; - -@property (nonatomic, strong) NSString *savedUrbanAirshipChannelID; - -@property (atomic, copy) NSString *switchboardURL; - -+ (void)assertPropertyTypes:(NSDictionary *)properties; - -+ (BOOL)isAppExtension; -#if !MIXPANEL_NO_UIAPPLICATION_ACCESS -+ (UIApplication *)sharedUIApplication; -#endif - -- (NSString *)deviceModel; -- (NSString *)IFA; - -- (void)archivePeople; -- (NSString *)defaultDistinctId; -- (void)archive; -- (NSString *)eventsFilePath; -- (NSString *)peopleFilePath; -- (NSString *)groupsFilePath; -- (NSString *)propertiesFilePath; -- (NSString *)optOutFilePath; - -// for group caching -- (NSString *)keyForGroup:(NSString *)groupKey groupID:(id)groupID; -#if !MIXPANEL_NO_NOTIFICATION_AB_TEST_SUPPORT -- (void)trackPushNotification:(NSDictionary *)userInfo; -- (void)showNotificationWithObject:(MPNotification *)notification; -- (void)markVariantRun:(MPVariant *)variant; -- (void)checkForDecideResponseWithCompletion:(void (^)(NSArray *notifications, NSSet *variants, NSSet *eventBindings))completion; -- (void)checkForDecideResponseWithCompletion:(void (^)(NSArray *notifications, NSSet *variants, NSSet *eventBindings))completion useCache:(BOOL)useCache; -#endif - -@end diff --git a/ios/Mixpanel.framework/placeholder-image.png b/ios/Mixpanel.framework/placeholder-image.png deleted file mode 100644 index 6ec8b8690f7..00000000000 Binary files a/ios/Mixpanel.framework/placeholder-image.png and /dev/null differ diff --git a/ios/Mixpanel.framework/snapshot_config.json b/ios/Mixpanel.framework/snapshot_config.json deleted file mode 100644 index 0bf17eae70a..00000000000 --- a/ios/Mixpanel.framework/snapshot_config.json +++ /dev/null @@ -1,579 +0,0 @@ -{ - "enums" : [ - { - "name": "UILayoutConstraintAxis", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "Horizontal" }, - { "value": 1, "display_name": "Vertical" } - ] - }, - { - "name": "UIControlState", - "flag_set": true, - "base_type": "NSUInteger", - "values": [ - { "value": 0, "display_name": "Normal" }, - { "value": 1, "display_name": "Highlighted" }, - { "value": 2, "display_name": "Disabled" }, - { "value": 4, "display_name": "Selected" } - ] - }, - { - "name": "UIControlContentVerticalAlignment", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "Center" }, - { "value": 1, "display_name": "Top" }, - { "value": 2, "display_name": "Bottom" }, - { "value": 3, "display_name": "Fill" } - ] - }, - { - "name": "UIControlContentHorizontalAlignment", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "Center" }, - { "value": 1, "display_name": "Left" }, - { "value": 2, "display_name": "Right" }, - { "value": 3, "display_name": "Fill" } - ] - }, - { - "name": "NSLayoutRelation", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": -1, "display_name": "LessThanOrEqual" }, - { "value": 0, "display_name": "Equal" }, - { "value": 1, "display_name": "GreaterThanOrEqual" } - ] - }, - { - "name": "NSLayoutAttribute", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 1, "display_name": "Left" }, - { "value": 2, "display_name": "Right" }, - { "value": 3, "display_name": "Top" }, - { "value": 4, "display_name": "Bottom" }, - { "value": 5, "display_name": "Leading" }, - { "value": 6, "display_name": "Trailing" }, - { "value": 7, "display_name": "Width" }, - { "value": 8, "display_name": "Height" }, - { "value": 9, "display_name": "CenterX" }, - { "value": 10, "display_name": "CenterY" }, - { "value": 11, "display_name": "Baseline" }, - { "value": 0, "display_name": "NotAnAttribute" } - ] - }, - { - "name": "UIControlEvents", - "base_type": "NSUInteger", - "flag_set": true, - "values": [ - { "value": 1, "display_name": "TouchDown" }, - { "value": 2, "display_name": "TouchDownRepeat" }, - { "value": 4, "display_name": "TouchDragInside" }, - { "value": 8, "display_name": "TouchDragOutside" }, - { "value": 16, "display_name": "TouchDragEnter" }, - { "value": 32, "display_name": "TouchDragExit" }, - { "value": 64, "display_name": "TouchUpInside" }, - { "value": 128, "display_name": "TouchUpOutside" }, - { "value": 256, "display_name": "TouchCancel" }, - { "value": 4096, "display_name": "ValueChanged" }, - { "value": 65536, "display_name": "EditingDidBegin" }, - { "value": 131072, "display_name": "EditingChanged" }, - { "value": 262144, "display_name": "EditingDidEnd" }, - { "value": 524288, "display_name": "EditingDidEndOnExit" }, - { "value": 4095, "display_name": "AllTouchEvents" }, - { "value": 983040, "display_name": "AllEditingEvents" }, - { "value": 251658240, "display_name": "ApplicationReserved" }, - { "value": 4026531840, "display_name": "SystemReserved" }, - { "value": 4294967295, "display_name": "AllEvents" } - ] - }, - { - "name" : "UIBarButtonItemStyle", - "base_type" : "NSInteger", - "flag_set": false, - "values" : [ - { "value" : 0, "display_name": "Plain" }, - { "value" : 1, "display_name": "Bordered" }, - { "value" : 2, "display_name": "Done" } - ] - }, - { - "name": "NSTextAlignment", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "Left" }, - { "value": 1, "display_name": "Center" }, - { "value": 2, "display_name": "Right" }, - { "value": 3, "display_name": "Justified" }, - { "value": 4, "display_name": "Natural" } - ] - }, - { - "name": "NSLineBreakMode", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "WordWrapping" }, - { "value": 1, "display_name": "CharWrapping" }, - { "value": 2, "display_name": "Clipping" }, - { "value": 3, "display_name": "TruncatingHead" }, - { "value": 4, "display_name": "TruncatingTail" }, - { "value": 5, "display_name": "TruncatingMiddle" } - ] - }, - { - "name": "UIBaselineAdjustment", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "AlignBaselines" }, - { "value": 1, "display_name": "AlignCenters" }, - { "value": 2, "display_name": "None" } - ] - }, - { - "name": "UIScrollViewIndicatorStyle", - "base_type": "NSInteger", - "flag_set": false, - "values": [ - { "value": 0, "display_name": "Default" }, - { "value": 1, "display_name": "Black" }, - { "value": 2, "display_name": "White" } - ] - } - ], - "classes": [ - { - "name": "NSObject", - "superclass": null, - "properties": [] - }, - { - "name": "UIResponder", - "superclass": "NSObject", - "properties": [] - }, - { - "name": "UIScreen", - "superclass": "NSObject", - "properties": [ - { "name": "bounds", "type": "CGRect", "readonly":true }, - { "name": "applicationFrame", "type": "CGRect", "readonly":true }, - { "name": "scale", "type": "CGFloat", "readonly":true } - ] - }, - { - "name" : "UIStoryboardSegueTemplate", - "superclass" : "NSObject", - "properties" : [ - { "name" : "identifier", "type" : "NSString", "readonly":true}, - { "name" : "viewController", "type": "UIViewController" }, - { "name" : "performOnViewLoad", "type": "BOOL" } - ] - }, - { - "name" : "UINavigationItem", - "superclass" : "NSObject", - "properties" : [ - { "name" : "title", "type" : "NSString" }, - { "name" : "prompt", "type" : "NSString" }, - { "name" : "hidesBackButton", "type" : "BOOL" }, - { "name" : "leftItemsSupplementBackButton", "type" : "BOOL" }, - { "name" : "backBarButtonItem", "type" : "UIBarButtonItem" }, - { "name" : "titleView", "type" : "UIView" }, - { "name" : "leftBarButtonItems", "type" : "NSArray" }, - { "name" : "rightBarButtonItems", "type" : "NSArray" }, - { "name" : "leftBarButtonItem", "type" : "UIBarButtonItem" }, - { "name" : "rightBarButtonItem", "type" : "UIBarButtonItem" } - ] - }, - { - "name" : "UIBarItem", - "superclass" : "NSObject", - "properties" : [ - { "name" : "enabled", "type": "BOOL" }, - { "name" : "image", "type": "UIImage" }, - { "name" : "landscapeImagePhone", "type": "UIImage" }, - { "name" : "landscapeImagePhone", "type": "UIImage" }, - { "name" : "imageInsets", "type": "UIEdgeInsets" }, - { "name" : "landscapeImagePhoneInsets", "type": "UIEdgeInsets" }, - { "name" : "title", "type": "NSString" }, - { "name" : "tag", "type": "NSInteger" } - ] - }, - { - "name" : "UIBarButtonItem", - "superclass" : "UIBarItem", - "properties" : [ - { "name" : "target", "type" : "NSObject" }, - { "name" : "action", "type" : "SEL", "use_kvc":false }, - { "name" : "style", "type" : "UIBarButtonItemStyle" }, - { "name" : "possibleTitles", "type" : "NSSet" }, - { "name" : "width", "type" : "CGFloat" }, - { "name" : "customView", "type" : "UIView" }, - { "name" : "tintColor", "type" : "UIColor" } - ] - }, - { - "name": "UIGestureRecognizer", - "superclass": "NSObject", - "properties": [ - { "name": "numberOfTouches", "type": "NSUInteger" }, - { "name": "view", "type": "UIView" }, - { "name": "enabled", "type": "BOOL" }, - { "name": "cancelsTouchesInView", "type": "BOOL" }, - { "name": "delaysTouchesBegan", "type": "BOOL" }, - { "name": "delaysTouchesEnded", "type": "BOOL" }, - { "name": "_targets", "type": "NSArray" } - ] - }, - { - "name": "UIGestureRecognizerTarget", - "superclass": "NSObject", - "properties": [ - { "name": "_target", "type": "NSObject" }, - { "name": "_action", "type": "SEL", "use_ivar": true } - ] - }, - { - "name": "UIView", - "superclass": "UIResponder", - "properties": [ - { "name": "userInteractionEnabled", "type": "BOOL" }, - { "name": "tag", "type": "NSInteger" }, - { "name": "mp_imageFingerprint", "type": "NSString", "use_kvc":false }, - { "name": "frame", "type": "CGRect" }, - { "name": "bounds", "type": "CGRect" }, - { "name": "center", "type": "CGPoint" }, - { "name": "transform", "type": "CGAffineTransform" }, - { "name": "superview", "type": "UIView" }, - { "name": "window", "type": "UIWindow" }, - { "name": "subviews", "type": "NSArray" }, - { "name": "clipsToBounds", "type": "BOOL" }, - { "name": "backgroundColor", "type": "UIColor" }, - { "name": "alpha", "type": "CGFloat" }, - { "name": "opaque", "type": "BOOL" }, - { "name": "clearsContextBeforeDrawing", "type": "BOOL" }, - { "name": "hidden", "type": "BOOL" }, - { "name": "contentMode", "type": "NSInteger" }, - { "name": "autoresizesSubviews", "type": "BOOL" }, - { "name": "autoresizingMask", "type": "NSUInteger" }, - { "name": "tintColor", "type": "UIColor" }, - { "name": "tintAdjustmentMode", "type": "NSInteger" }, - { "name": "restorationIdentifier", "type": "NSString" }, - { "name": "multipleTouchEnabled", "type": "BOOL" }, - { "name": "exclusiveTouch", "type": "BOOL" }, - { "name": "translatesAutoresizingMaskIntoConstraints", "type": "BOOL" }, - { "name": "layer", "type": "CALayer" }, - { "name": "gestureRecognizers", "type": "NSArray" }, - { "name": "constraints", "type": "NSArray", "readonly": true }, - { - "name": "contentHuggingPriorityForAxis", - "get": { - "selector": "contentHuggingPriorityForAxis:", - "parameters": [ - { "name": "axis", "type": "UILayoutConstraintAxis"} - ], - "result": { "type": "float", "name": "priority" } - }, - "set": { - "selector": "setContentHuggingPriority:forAxis:", - "parameters": [ - { "name": "priority", "type": "float" }, - { "name": "axis", "type": "UILayoutConstraintAxis"} ] - } - }, - { - "name": "contentCompressionResistancePriorityForAxis", - "get": { - "selector": "contentCompressionResistancePriorityForAxis:", - "parameters": [ - { "name": "axis", "type": "UILayoutConstraintAxis"} - ], - "result": { "type": "float", "name": "priority" } - }, - "set": { - "selector": "setContentCompressionResistancePriority:forAxis:", - "parameters": [ - { "name": "priority", "type": "float" }, - { "name": "axis", "type": "UILayoutConstraintAxis"} ] - } - } - ] - }, - { - "name": "UILabel", - "superclass": "UIView", - "properties": [ - { "name": "text", "type": "NSString" }, - { "name": "attributedText", "type": "NSAttributedString" }, - { "name": "font", "type": "UIFont" }, - { "name": "textColor", "type": "UIColor" }, - { "name": "textAlignment", "type": "NSTextAlignment" }, - { "name": "lineBreakMode", "type": "NSLineBreakMode" }, - { "name": "enabled", "type": "BOOL" }, - { "name": "adjustsFontSizeToFitWidth", "type": "BOOL" }, - { "name": "baselineAdjustment", "type": "UIBaselineAdjustment" }, - { "name": "minimumScaleFactor", "type": "CGFloat" }, - { "name": "numberOfLines", "type": "NSInteger" }, - { "name": "highlightedTextColor", "type": "UIColor" }, - { "name": "highlighted", "type": "BOOL" }, - { "name": "shadowColor", "type": "UIColor" }, - { "name": "shadowOffset", "type": "CGSize" }, - { "name": "preferredMaxLayoutWidth", "type": "CGFloat" } - ] - }, - { - "name": "UIImageView", - "superclass" : "UIView", - "properties": [ - { "name": "image", "type": "UIImage" }, - { "name": "highlightedImage", "type": "UIImage" }, - { "name": "animationImages", "type": "NSArray" }, - { "name": "highlightedAnimationImages", "type": "NSArray" }, - { "name": "animationDuration", "type": "NSTimeInterval" }, - { "name": "animationRepeatCount", "type": "NSInteger" }, - { "name": "highlighted", "type": "BOOL" } - ] - }, - { - "name": "UIControlTargetAction", - "superclass": "NSObject", - "properties": [ - { "name": "_target", "type": "NSObject" }, - { "name": "_action", "type": "SEL", "use_ivar": true }, - { "name": "_eventMask", "type": "int" }, - { "name": "cancelled", "type": "BOOL" } - ] - }, - { - "name": "UIControl", - "superclass": "UIView", - "properties": [ - { "name": "state", "type": "UIControlState" }, - { "name": "enabled", "type": "BOOL" }, - { "name": "selected", "type": "BOOL" }, - { "name": "highlighted", "type": "BOOL" }, - { "name": "contentVerticalAlignment", "type": "UIControlContentVerticalAlignment" }, - { "name": "contentHorizontalAlignment", "type": "UIControlContentHorizontalAlignment" }, - { "name": "allTargets", "type": "NSSet" }, - { "name": "allControlEvents", "type": "UIControlEvents" }, - { "name": "_targetActions", "type": "NSArray" } - ] - }, - { - "name": "UISwitch", - "superclass": "UIControl", - "properties": [ - { "name": "on", "type": "BOOL" }, - { "name": "onTintColor", "type": "UIColor" }, - { "name": "thumbTintColor", "type": "UIColor" }, - { "name": "onImage", "type": "UIImage" }, - { "name": "offImage", "type": "UIImage" } - ] - }, - { - "name": "UIScrollView", - "superclass": "UIView", - "properties": [ - { "name": "contentOffset", "type": "CGPoint" }, - { "name": "contentSize", "type": "CGSize" }, - { "name": "contentInset", "type": "UIEdgeInsets" }, - { "name": "scrollEnabled", "type": "BOOL" }, - { "name": "directionalLockEnabled", "type": "BOOL" }, - { "name": "scrollsToTop", "type": "BOOL" }, - { "name": "pagingEnabled", "type": "BOOL" }, - { "name": "bounces", "type": "BOOL" }, - { "name": "alwaysBounceVertical", "type": "BOOL" }, - { "name": "alwaysBounceHorizontal", "type": "BOOL" }, - { "name": "delaysContentTouches", "type": "BOOL" }, - { "name": "decelerationRate", "type": "CGFloat" }, - { "name": "indicatorStyle", "type": "UIScrollViewIndicatorStyle" }, - { "name": "scrollIndicatorInsets", "type": "UIEdgeInsets" }, - { "name": "showsHorizontalScrollIndicator", "type": "BOOL" }, - { "name": "showsVerticalScrollIndicator", "type": "BOOL" }, - { "name": "zoomScale", "type": "CGFloat" }, - { "name": "maximumZoomScale", "type": "CGFloat" }, - { "name": "minimumZoomScale", "type": "CGFloat" }, - { "name": "bouncesZoom", "type": "BOOL" } - ] - }, - { - "name": "UITextView", - "superclass": "UIScrollView", - "properties": [ - { "name": "text", "type": "NSString" }, - { "name": "attributedText", "type": "NSAttributedString" } - ] - }, - { - "name": "UIButton", - "superclass": "UIControl", - "properties": [ - { "name": "adjustsImageWhenHighlighted", "type": "BOOL" }, - { "name": "adjustsImageWhenDisabled", "type": "BOOL" }, - { "name": "showsTouchWhenHighlighted", "type": "BOOL" }, - { "name": "adjustsImageWhenDisabled", "type": "BOOL" }, - { - "name": "titleForState", - "get": { - "selector": "titleForState:", - "parameters": [ { "name": "state", "type": "UIControlState"} ], - "result": { "type": "NSString" } - }, - "set": { - "selector": "setTitle:forState:", - "parameters": [ - { "name": "title", "type": "NSString" }, - { "name": "state", "type": "UIControlState"} ] - } - }, - { - "name": "titleColorForState", - "get": { - "selector": "titleColorForState:", - "parameters": [ { "name": "state", "type": "UIControlState"} ], - "result": { "type": "UIColor" } - }, - "set": { - "selector": "setTitleColor:forState:", - "parameters": [ - { "name": "color", "type": "UIColor" }, - { "name": "state", "type": "UIControlState"} ] - } - }, - { - "name": "titleShadowColorForState", - "get": { - "selector": "titleShadowColorForState:", - "parameters": [ { "name": "state", "type": "UIControlState"} ], - "result": { "type": "UIColor" } - }, - "set": { - "selector": "setTitleShadowColor:forState:", - "parameters": [ - { "name": "color", "type": "UIColor" }, - { "name": "state", "type": "UIControlState"} ] - } - }, - { - "name": "backgroundImageForState", - "get": { - "selector": "backgroundImageForState:", - "parameters": [ { "name": "state", "type": "UIControlState"} ], - "result": { "type": "UIImage" } - }, - "set": { - "selector": "setBackgroundImage:forState:", - "parameters": [ - { "name": "image", "type": "UIImage" }, - { "name": "state", "type": "UIControlState"} ] - } - }, - { - "name": "imageForState", - "get": { - "selector": "imageForState:", - "parameters": [ { "name": "state", "type": "UIControlState"} ], - "result": { "type": "UIImage" } - }, - "set": { - "selector": "setImage:forState:", - "parameters": [ - { "name": "image", "type": "UIImage" }, - { "name": "state", "type": "UIControlState"} ] - } - } - ] - }, - { - "name": "CALayer", - "superclass": "NSObject", - "properties": [ - { "name": "contentsRect", "type": "CGRect" }, - { "name": "contentsCenter", "type": "CGRect" }, - { "name": "contentsGravity", "type": "NSString" }, - { "name": "masksToBounds", "type": "BOOL" }, - { "name": "cornerRadius", "type": "CGFloat" }, - { "name": "borderWidth", "type": "CGFloat" }, - { "name": "borderColor", "type": "CGColorRef" }, - { "name": "shadowOpacity", "type": "float" }, - { "name": "shadowRadius", "type": "CGFloat" }, - { "name": "shadowOffset", "type": "CGSize" }, - { "name": "shadowColor", "type": "CGColorRef" }, - { "name": "frame", "type": "CGRect" }, - { "name": "bounds", "type": "CGRect" }, - { "name": "position", "type": "CGPoint" }, - { "name": "zPosition", "type": "CGFloat" }, - { "name": "anchorPointZ", "type": "CGFloat" }, - { "name": "anchorPoint", "type": "CGPoint" }, - { "name": "contentsScale", "type": "CGFloat" }, - { "name": "transform", "type": "CATransform3D" }, - { "name": "sublayerTransform", "type": "CATransform3D" }, - { "name": "affineTransform", "type": "CGAffineTransform" }, - { "name": "superlayer", "type": "CALayer" }, - { "name": "sublayers", "type": "NSArray", "readonly": true }, - { "name": "name", "type": "NSString" } - ] - }, - { - "name":"NSLayoutConstraint", - "superclass":"NSObject", - "properties": [ - { "name": "priority", "type": "float", "readonly":true }, - { "name": "firstItem", "type": "UIView", "readonly":true }, - { "name": "secondItem", "type": "UIView", "readonly":true }, - { "name": "firstAttribute", "type": "NSLayoutAttribute", "readonly":true }, - { "name": "secondAttribute", "type": "NSLayoutAttribute", "readonly":true }, - { "name": "relation", "type": "NSLayoutRelation", "readonly":true }, - { "name": "multiplier", "type": "CGFloat", "readonly":true }, - { "name": "constant", "type": "CGFloat" } - ] - }, - { - "name": "UIWindow", - "superclass": "UIView", - "properties": [ - { "name": "keyWindow", "type": "BOOL", "readonly": true }, - { "name": "rootViewController", "type": "UIViewController" }, - { "name": "windowLevel", "type": "CGFloat" }, - { "name": "screen", "type": "UIScreen", "readonly": true } - ] - }, - { - "name": "UIViewController", - "superclass": "UIResponder", - "properties": [ - { "name": "restorationIdentifier", "type": "NSString" }, - { "name": "isViewLoaded", "type": "BOOL", "readonly": true }, - { "name": "view", "type": "UIView", "predicate": "self.isViewLoaded == YES" }, - { "name": "title", "type": "NSString" }, - { "name": "parentViewController", "type": "UIViewController" }, - { "name": "presentedViewController", "type": "UIViewController" }, - { "name": "presentingViewController", "type": "UIViewController" }, - { "name": "definesPresentationContext", "type": "BOOL" }, - { "name": "providesPresentationContextTransitionStyle", "type": "BOOL" }, - { "name": "modalTransitionStyle", "type": "UIModalTransitionStyle" }, - { "name": "modalPresentationStyle", "type": "UIModalPresentationStyle" }, - { "name": "modalPresentationCapturesStatusBarAppearance", "type": "BOOL" }, - { "name": "preferredContentSize", "type": "CGSize" }, - { "name": "childViewControllers", "type": "NSArray" }, - { "name": "supportedInterfaceOrientations", "type": "NSUInteger", "readonly": true }, - { "name": "_storyboardSegueTemplates", "type": "NSArray" }, - { "name": "navigationItem", "type": "UINavigationItem", "readonly": true } - ] - } - ] -} - diff --git a/ios/Mixpanel.framework/test_variant.json b/ios/Mixpanel.framework/test_variant.json deleted file mode 100644 index b84075486f1..00000000000 --- a/ios/Mixpanel.framework/test_variant.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": 1, - "experiment_id": 2, - "actions":[ - {"path": "/UIView/UILabel[text == \"Old Text\"]", "args": [["New Text","NSString"]], "original": [["Old Text","NSString"]], "selector": "setText:", "swizzle":true, "swizzleClass":"UILabel", "swizzleSelector":"didMoveToWindow", "name":"XXXX-XXXX-XXXX"}, - {"path": "/UIView/UILabel[text == \"Old Text 2\"]", "args": [["New Text","NSString"]], "original": [["Old Text 2","NSString"]], "selector": "setText:", "name":"YYYY-YYYY-YYYY"} - ], - "tweaks":[] -} \ No newline at end of file diff --git a/ios/mixpanel-iphone b/ios/mixpanel-iphone deleted file mode 160000 index 7485f53e642..00000000000 --- a/ios/mixpanel-iphone +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7485f53e642ebf85256e3db709e46b7cce5e9582