Compare commits

..

2 Commits

Author SHA1 Message Date
Savya Bikram Shah
4976bf14ca Appsflyer done and intersterial ad done 2026-06-01 17:58:32 +05:45
Savya Bikram Shah
cb82705189 smartlook 2026-06-01 17:10:35 +05:45
64 changed files with 3274 additions and 14 deletions

View File

@@ -48,7 +48,7 @@ namespace Darkmatter.Features.Coloring.UI
_canvasGroup.interactable = true;
_canvasGroup.blocksRaycasts = true;
_activeSequence = Sequence.Create()
_activeSequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.UIAnchoredPosition(animatedRoot, _shownAnchoredPos, showDuration, Ease.OutBack))
.Group(Tween.Alpha(_canvasGroup, 1f, showDuration, Ease.OutQuad));
return _activeSequence;
@@ -62,7 +62,7 @@ namespace Darkmatter.Features.Coloring.UI
_canvasGroup.blocksRaycasts = false;
var hiddenPos = _shownAnchoredPos + hiddenOffset;
_activeSequence = Sequence.Create()
_activeSequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.UIAnchoredPosition(animatedRoot, hiddenPos, hideDuration, Ease.InQuad))
.Group(Tween.Alpha(_canvasGroup, 0f, hideDuration, Ease.InQuad))
.ChainCallback(() => gameObject.SetActive(false));

View File

@@ -79,6 +79,13 @@ namespace Darkmatter.Features.GameplayFlow.Systems
_scopeCts = CancellationTokenSource.CreateLinkedTokenSource(cancellation);
var ct = _scopeCts.Token;
// The in-editor AdMob placeholder interstitial pauses via Time.timeScale = 0 and is
// shown fire-and-forget during the Colorbook->Gameplay swap; the Colorbook scene unload
// destroys the placeholder before it can resume, stranding timeScale at 0 (gameplay and
// scaled tweens frozen). Gameplay must never start frozen, so restore it on entry.
// No-op on device, where the real ad clients don't touch timeScale.
Time.timeScale = 1f;
_templateId = _progression.LastOpenedTemplateId;
if (string.IsNullOrEmpty(_templateId))
throw new Exception(

View File

@@ -29,6 +29,7 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
private GameObject _piecePrefab;
private IDisposable _snappedSub;
private IDisposable _unsnappedSub;
private readonly CancellationTokenSource _lifetimeCts = new();
private readonly List<string> _snappedPieceIds = new();
private readonly List<ShapePiece> _pieces = new();
@@ -174,7 +175,32 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
private void CheckIfShapeAssembled()
{
if (_expected > 0 && _snapped == _expected)
_bus.Publish(new ShapeAssembledSignal(_currentTemplateId));
PublishAssembledWhenSettledAsync().Forget();
}
private async UniTaskVoid PublishAssembledWhenSettledAsync()
{
var templateId = _currentTemplateId;
try
{
// Hold the handoff to coloring until the final piece's snap
// animation has finished playing.
await UniTask.WaitWhile(AnyPieceSettling, cancellationToken: _lifetimeCts.Token);
}
catch (OperationCanceledException)
{
return;
}
if (templateId == _currentTemplateId)
_bus.Publish(new ShapeAssembledSignal(templateId));
}
private bool AnyPieceSettling()
{
foreach (var piece in _pieces)
if (piece != null && piece.IsSnapSettling) return true;
return false;
}
private async UniTask TryLoadPiecePrefabAsync(CancellationToken ct)
@@ -241,6 +267,8 @@ namespace Darkmatter.Features.ShapeBuilder.Systems
{
_snappedSub?.Dispose();
_unsnappedSub?.Dispose();
_lifetimeCts.Cancel();
_lifetimeCts.Dispose();
}
}
}

View File

@@ -53,7 +53,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
_canvasGroup.interactable = true;
_canvasGroup.blocksRaycasts = true;
_activeSequence = Sequence.Create()
_activeSequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.UIAnchoredPosition(animatedRoot, _shownAnchoredPos, showDuration, Ease.OutBack))
.Group(Tween.Alpha(_canvasGroup, 1f, showDuration, Ease.OutQuad));
return _activeSequence;
@@ -67,7 +67,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
_canvasGroup.blocksRaycasts = false;
var hiddenPos = _shownAnchoredPos + hiddenOffset;
_activeSequence = Sequence.Create()
_activeSequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.UIAnchoredPosition(animatedRoot, hiddenPos, hideDuration, Ease.InQuad))
.Group(Tween.Alpha(_canvasGroup, 0f, hideDuration, Ease.InQuad))
.ChainCallback(() => gameObject.SetActive(false));

View File

@@ -1,3 +1,4 @@
using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Features.History;
using Darkmatter.Core.Contracts.Services.Audio;
using Darkmatter.Core.Data.Signals.Features.ShapeBuilder;
@@ -45,6 +46,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
private Vector2 _dragSizeDelta;
private Vector3 _dragLocalScale;
private Sequence _previewSeq;
private Sequence _snapSettle;
private bool _locked;
private bool _inPreview;
@@ -57,6 +59,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
public Vector2 TrayPosition => _trayPos;
public Vector2 TraySize => _traySize;
public SlotMarker ActiveSlot => _activeSlot;
public bool IsSnapSettling => _snapSettle.isAlive;
public void ReassignActiveSlot(SlotMarker slot) => _activeSlot = slot;
@@ -236,12 +239,43 @@ namespace Darkmatter.Features.ShapeBuilder.UI
internal void SnapInternal()
{
_locked = true;
image.raycastTarget = false;
if (_activeSlot != null) _activeSlot.SetOccupied(true);
_sfx.Play(SfxId.ShapeSnap);
// Let the in-flight settle animation play to completion before locking the
// piece into its slot, so the final piece lands smoothly instead of being
// cut short the instant it's dropped.
if (_previewSeq.isAlive)
{
_snapSettle = _previewSeq;
SettleThenFinalizeAsync().Forget();
}
else
{
FinalizeSnapPose();
}
_bus.Publish(new PieceSnappedSignal(_shape.Id));
}
private async UniTaskVoid SettleThenFinalizeAsync()
{
await _snapSettle; // completes when the settle finishes or is stopped
FinalizeSnapPose();
}
private void FinalizeSnapPose()
{
if (this == null || RectTransform == null) return;
_snapSettle = default;
// Bail if the piece was unsnapped (undo) or invalidated while settling.
if (!_locked || _activeSlot == null) return;
StopPreviewTweens();
Lock();
FillSlot();
_sfx.Play(SfxId.ShapeSnap);
_bus.Publish(new PieceSnappedSignal(_shape.Id));
}
private void FillSlot()
@@ -267,6 +301,7 @@ namespace Darkmatter.Features.ShapeBuilder.UI
_activeSlot = null;
Tween.StopAll(onTarget: RectTransform);
_snapSettle = default;
RectTransform.SetParent(parent, worldPositionStays: false);
if (siblingIndex >= 0) RectTransform.SetSiblingIndex(siblingIndex);

View File

@@ -498,6 +498,11 @@ namespace Darkmatter.Services.Ads
{
resolved = true; // stop the watchdog within one poll
unsubscribe(onClosed, onFailed);
// The in-editor placeholder ad pauses via Time.timeScale = 0; if its resume is
// dropped (e.g. the host scene unloads before its close fires) the game stays
// frozen. The ad layer owns that pause, so never leave it stranded. No-op on
// device, where real ad clients don't touch timeScale.
Time.timeScale = 1f;
ScheduleReload(format);
}
}

View File

@@ -567,7 +567,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 8713146880366692101}
- {fileID: 4954180409987358819}

View File

@@ -101,8 +101,8 @@ RectTransform:
m_GameObject: {fileID: 3594252390097820856}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 5980705335490319841}
- {fileID: 3827914630025194271}

View File

@@ -12,10 +12,11 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 52d6fdba64cc3491880636e34ed593d0, type: 3}
m_Name: ShapeBuilderConfig
m_EditorClassIdentifier: Core::Darkmatter.Core.Data.Static.Features.ShapeBuilder.ShapeBuilderConfig
snapRadius: 100
previewRadius: 200
snapRadius: 200
previewRadius: 300
snapDuration: 0.25
returnDuration: 0.25
dragScale: 1.15
previewCurve:
serializedVersion: 2
m_Curve:

View File

@@ -1394,6 +1394,10 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4405976200006927252, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
propertyPath: devKey
value: DwvwaVs4yYqfPWfWjFcAL3
objectReference: {fileID: 0}
- target: {fileID: 6207133488976360133, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
propertyPath: m_LocalPosition.x
value: 1021.8063
@@ -1443,6 +1447,52 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0bfe3b149145747cc92dc53bb4df4e9b, type: 3}
--- !u!1 &680382927
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 680382929}
- component: {fileID: 680382928}
m_Layer: 0
m_Name: Smartlook Initializer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &680382928
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 680382927}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8f8ef78bee04409481341d4213ba58aa, type: 3}
m_Name:
m_EditorClassIdentifier: SmartlookAnalytics::SmartlookUnity.SmartlookInitializer
ResetSession: 0
ResetUser: 0
--- !u!4 &680382929
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 680382927}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &752713006
GameObject:
m_ObjectHideFlags: 0
@@ -1735,6 +1785,7 @@ MonoBehaviour:
autoReload: 1
reloadDelaySeconds: 5
reloadMaxAttempts: 6
showWatchdogSeconds: 60
--- !u!1 &1239449674
GameObject:
m_ObjectHideFlags: 0
@@ -2501,3 +2552,4 @@ SceneRoots:
- {fileID: 196669903}
- {fileID: 673724413}
- {fileID: 1156238481}
- {fileID: 680382929}

8
Assets/Smartlook.meta Executable file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b33a6fe45d766964da5fc03d08014670
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 467e2fabc4e40d148b07e8728a86ca3c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d06bca5055646b840abf8e0525eda4a5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,32 @@
fileFormatVersion: 2
guid: 90631a0ec3430a544b991bac301a39d8
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Android: Android
second:
enabled: 1
settings: {}
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 52fd817ee8e81624b969da5aed35fcb7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1 @@
Work in progress

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9af2dfa206055d847a637198672732dd
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ebabf3b02b3cedd40811bb3e176a8c71
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,40 @@
using UnityEditor;
using UnityEngine;
namespace SmartlookUnity.Editor
{
public static class EditorSettings
{
private const string SettingsResourceSuffix = ".asset";
private const string SettingsResourceFolder = "Assets/Smartlook/SmartlookAnalytics/Resources/";
[MenuItem("Smartlook/Edit Settings")]
public static void EditSettings()
{
var setting = Settings.LoadSettings();
if (setting == null)
{
setting = ScriptableObject.CreateInstance<Settings>();
AssetDatabase.CreateAsset(setting, SettingsResourceFolder + Settings.SettingsResourceName + SettingsResourceSuffix);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.FocusProjectWindow();
}
Selection.activeObject = setting;
}
[MenuItem("GameObject/Smartlook/Initializer", false, 10)]
[MenuItem("Smartlook/Create Initializer")]
public static void CreateInitializer(MenuCommand menuCommand)
{
var go = new GameObject("Smartlook Initializer");
go.AddComponent<SmartlookInitializer>();
// Ensure it gets reparented if this was a context click (otherwise does nothing)
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
// Register the creation in the undo system
Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
Selection.activeObject = go;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 71ff3ca4c29b2074286fc69d417442cc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,5 @@
<dependencies>
<androidPackages>
<androidPackage spec="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10" />
</androidPackages>
</dependencies>

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: fc2b5e901decc7c4a80ab878bce70789
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,18 @@
{
"name": "Smartlook.Editor",
"rootNamespace": "SmartlookUnity",
"references": [
"GUID:52537e7b5c9a4f64e9d1ef8878c041c3"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f9bdb6ee76021dc42832371ef3b3ff87
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,37 @@
#if UNITY_IOS || UNITY_TVOS
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEditor.iOS.Xcode.Extensions;
namespace SmartlookUnity.Editor
{
public partial class SmartlookEditor
{
private const string FRAMEWORK_TARGET_PATH = "Frameworks/Smartlook/SmartlookAnalytics/iOS"; // relative to build folder
private const string FRAMEWORK_NAME = "Smartlook.framework";
[PostProcessBuild(500)]
public static void OnPostProcessBuild(BuildTarget target, string path)
{
string destPath = Path.Combine(FRAMEWORK_TARGET_PATH, FRAMEWORK_NAME);
// obtain the xcode project
string pbxProjectPath = PBXProject.GetPBXProjectPath(path);
PBXProject project = new PBXProject();
project.ReadFromFile(pbxProjectPath);
string targetGuid = project.GetUnityMainTargetGuid();
// add the framework to the project and enable 'Embed & Sign' for it
string fileGuid = project.AddFile(destPath, destPath);
project.AddFileToEmbedFrameworks(targetGuid, fileGuid);
project.WriteToFile(pbxProjectPath);
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7d8b442681228234d8880c0588704c83
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3eba07253de2be546bff9739c3f40385
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8a037d972e344070808470b09a6f9228, type: 3}
m_Name: SmartlookSettings
m_EditorClassIdentifier:
ProjectKey: 3bcfb098c5c4f6f1f48d8bbef4c0c94d7c2f9bc9
FPS: 30

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5f06c1262ba16ba419a9ef51a9a0f320
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 59d30f4c6329b944da8edf6ec31c83f0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,6 @@
# Unity SDK bridge
Single source of truth for Unity C# bridge
## Report a issue
If you want to **submit new issue** please use [smartlook-mobile-issue-tracker](https://github.com/smartlook/smartlook-mobile-issue-tracker).

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1dd0436bfcddcb04787b932eb0ac8365
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,25 @@
using UnityEngine;
namespace SmartlookUnity
{
public class Settings : ScriptableObject
{
public const string SettingsResourceName = "SmartlookSettings";
[SerializeField]
[Tooltip("Project Key")]
public string ProjectKey;
[SerializeField]
[Tooltip("Frames per second")]
[Range(1, 30)]
public int FPS = 2;
private static Settings _instance;
public static Settings Instance => _instance ??= LoadSettings();
public static Settings LoadSettings()
{
return Resources.Load(SettingsResourceName) as Settings;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8a037d972e344070808470b09a6f9228
timeCreated: 1680461368

View File

@@ -0,0 +1,272 @@
#if UNITY_ANDROID
using UnityEngine;
namespace SmartlookUnity
{
public partial class Smartlook
{
static AndroidJavaClass SL;
static AndroidJavaClass getSLClass()
{
if (SL == null) SL = new AndroidJavaClass("com.smartlook.sdk.smartlook.Smartlook");
return SL;
}
static partial void SetupAndStartRecordingInternal(string key)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setupAndStartRecording", key);
}
}
static partial void SetupAndStartRecordingInternal(string key, int frameRate)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setupAndStartRecording", key, frameRate);
}
}
static partial void SetupAndStartRecordingInternal(SetupOptions setupOptions)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setupAndStartRecordingBridge", JsonUtility.ToJson(setupOptions));
}
}
static partial void SetupInternal(string key)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setup", key);
}
}
static partial void SetupInternal(string key, int frameRate)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setup", key, frameRate);
}
}
static partial void SetupInternal(SetupOptions setupOptions)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setupBridge", JsonUtility.ToJson(setupOptions));
}
}
static partial void StartFullscreenSensitiveModeInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("startFullscreenSensitiveMode");
}
}
static partial void StopFullscreenSensitiveModeInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("stopFullscreenSensitiveMode");
}
}
static partial void SetReferrerInternal(string referrer, string source)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setReferrer", referrer, source);
}
}
static partial void TrackCustomEventInternal(string eventName)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("trackCustomEvent", eventName);
}
}
static partial void TrackCustomEventInternal(string eventName, string properties)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("trackCustomEvent", eventName, properties);
}
}
static partial void TrackNavigationEventInternal(string screenName, int direction)
{
if (Application.platform == RuntimePlatform.Android)
{
string internalDirection = "start";
if (direction.Equals(NavigationEventType.exit))
{
internalDirection = "stop";
}
getSLClass().CallStatic("trackNavigationEvent", screenName, internalDirection);
}
}
static partial void StopTimedCustomEventInternal(string eventId)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("stopTimedCustomEvent", eventId);
}
}
static partial void StopTimedCustomEventInternal(string eventId, string properties)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("stopTimedCustomEvent", eventId, properties);
}
}
static partial void CancelTimedCustomEventInternal(string eventId, string reason)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("cancelTimedCustomEvent", eventId, reason);
}
}
static partial void CancelTimedCustomEventInternal(string eventId, string reason, string properties)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("cancelTimedCustomEvent", eventId, reason, properties);
}
}
static partial void SetGlobalEventPropertyInternal(string eventName, string eventValue, bool immutable)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setGlobalEventProperty", eventName, eventValue, immutable);
}
}
static partial void SetGlobalEventPropertiesInternal(string properties, bool immutable)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setGlobalEventProperties", properties, immutable);
}
}
static partial void RemoveGlobalEventPropertyInternal(string eventName)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("removeGlobalEventProperty", eventName);
}
}
static partial void RemoveAllGlobalEventPropertiesInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("removeAllGlobalEventProperties");
}
}
static partial void SetUserIdentifierInternal(string userIdentifier)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setUserIdentifier", userIdentifier);
}
}
static partial void SetUserIdentifierInternal(string userIdentifier, string properties)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setUserIdentifier", userIdentifier);
getSLClass().CallStatic("setUserProperties", properties, false);
}
}
static partial void StartRecordingInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("startRecording");
}
}
static partial void StopRecordingInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("stopRecording");
}
}
static partial void EnableCrashlyticsInternal(bool enable)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("enableCrashlytics", enable);
}
}
static partial void ResetSessionInternal(bool resetUser)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("resetSession", resetUser);
}
}
static partial void SetRenderingModeInternal(int renderingMode)
{
if (Application.platform == RuntimePlatform.Android)
{
string internalRenderingMode = "native";
if (renderingMode.Equals(RenderingModeType.no_rendering))
{
internalRenderingMode = "no_rendering";
}
getSLClass().CallStatic("setRenderingMode", internalRenderingMode);
}
}
static partial void SetEventTrackingModeInternal(string eventTrackingMode)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setEventTrackingMode", eventTrackingMode);
}
}
static partial void SetEventTrackingModesInternal(string eventTrackingModes)
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("setEventTrackingModes", eventTrackingModes);
}
}
static partial void UnregisterIntegrationListenerInternal()
{
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("unregisterIntegrationListener");
}
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 872537cb224545f4a8c43d836d6b598e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,368 @@
#if UNITY_IOS
namespace SmartlookUnity {
using System.Runtime.InteropServices;
using UnityEngine;
using System.Collections;
using AOT;
public partial class Smartlook {
[DllImport("__Internal")]
static extern void SmartlookSetupAndStartRecording(string key);
static partial void SetupAndStartRecordingInternal(string key) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetupAndStartRecording(key);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetupAndStartRecordingWithFramerate(string key, int frameRate);
static partial void SetupAndStartRecordingInternal(string key, int frameRate) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetupAndStartRecordingWithFramerate(key, frameRate);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetupAndStartRecordingWithOptions(string setupOptions);
static partial void SetupAndStartRecordingInternal(SetupOptions setupOptions) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetupAndStartRecordingWithOptions(JsonUtility.ToJson(setupOptions));
}
}
[DllImport("__Internal")]
static extern void SmartlookSetup(string key);
static partial void SetupInternal(string key) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetup(key);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetupWithFramerate(string key, int frameRate);
static partial void SetupInternal(string key, int frameRate) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetupWithFramerate(key, frameRate);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetupWithOptions(string setupOptions);
static partial void SetupInternal(SetupOptions setupOptions) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetupWithOptions(JsonUtility.ToJson(setupOptions));
}
}
[DllImport("__Internal")]
static extern void SmartlookStartRecording();
static partial void StartRecordingInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStartRecording();
}
}
[DllImport("__Internal")]
static extern void SmartlookStopRecording();
static partial void StopRecordingInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStopRecording();
}
}
[DllImport("__Internal")]
static extern void SmartlookStartFullscreenSensitiveMode();
static partial void StartFullscreenSensitiveModeInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStartFullscreenSensitiveMode();
}
}
[DllImport("__Internal")]
static extern void SmartlookStopFullscreenSensitiveMode();
static partial void StopFullscreenSensitiveModeInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStopFullscreenSensitiveMode();
}
}
[DllImport("__Internal")]
static extern void SmartlookSetReferrer(string referrer, string source);
static partial void SetReferrerInternal(string referrer, string source) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetReferrer(referrer, source);
}
}
[DllImport("__Internal")]
static extern void SmartlookTrackCustomEvent(string eventName);
static partial void TrackCustomEventInternal(string eventName) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookTrackCustomEvent(eventName);
}
}
[DllImport("__Internal")]
static extern void SmartlookTrackCustomEventWithProperties(string eventName, string properties);
static partial void TrackCustomEventInternal(string eventName, string properties) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookTrackCustomEventWithProperties(eventName, properties);
}
}
[DllImport("__Internal")]
static extern void SmartlookTrackNavigationEvent(string screenName, int direction);
static partial void TrackNavigationEventInternal(string screenName, int direction) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookTrackNavigationEvent(screenName, direction);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetUserIdentifier(string userIdentifier);
static partial void SetUserIdentifierInternal(string userIdentifier) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetUserIdentifier(userIdentifier);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetUserIdentifierWithProperties(string userIdentifier, string properties);
static partial void SetUserIdentifierInternal(string userIdentifier, string properties) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetUserIdentifierWithProperties(userIdentifier, properties);
}
}
[DllImport("__Internal")]
static extern bool SmartlookIsRecording();
public static bool IsRecordingInternalIOS() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return SmartlookIsRecording();
}
return false;
}
[DllImport("__Internal")]
static extern string SmartlookGetDashboardSessionUrl(bool withTimestamp);
public static string GetDashboardSessionUrlInternalIOS(bool withTimestamp) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return SmartlookGetDashboardSessionUrl(withTimestamp);
}
return null;
}
[DllImport("__Internal")]
static extern string SmartlookGetDashboardVisitorUrl();
public static string GetDashboardVisitorUrlInternalIOS() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return SmartlookGetDashboardVisitorUrl();
}
return null;
}
[DllImport("__Internal")]
static extern void SmartlookEnableCrashlytics(bool enable);
static partial void EnableCrashlyticsInternal(bool enable) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookEnableCrashlytics(enable);
}
}
[DllImport("__Internal")]
static extern string SmartlookStartTimedCustomEvent(string eventName);
public static string StartTimedCustomEventInternalIOS(string eventName) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return SmartlookStartTimedCustomEvent(eventName);
}
return null;
}
[DllImport("__Internal")]
static extern string SmartlookStartTimedCustomEventWithProperties(string eventName, string properties);
public static string StartTimedCustomEventInternalIOS(string eventName, string properties) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return SmartlookStartTimedCustomEventWithProperties(eventName, properties);
}
return null;
}
[DllImport("__Internal")]
static extern void SmartlookStopTimedCustomEvent(string eventId);
static partial void StopTimedCustomEventInternal(string eventId) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStopTimedCustomEvent(eventId);
}
}
[DllImport("__Internal")]
static extern void SmartlookStopTimedCustomEventWithProperties(string eventId, string properties);
static partial void StopTimedCustomEventInternal(string eventId, string properties) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookStopTimedCustomEventWithProperties(eventId, properties);
}
}
[DllImport("__Internal")]
static extern void SmartlookCancelTimedCustomEvent(string eventId, string reason);
static partial void CancelTimedCustomEventInternal(string eventId, string reason) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookCancelTimedCustomEvent(eventId, reason);
}
}
[DllImport("__Internal")]
static extern void SmartlookCancelTimedCustomEventWithProperties(string eventId, string reason, string properties);
static partial void CancelTimedCustomEventInternal(string eventId, string reason, string properties) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookCancelTimedCustomEventWithProperties(eventId, reason, properties);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetGlobalEventProperty(string key, string value, bool immutable);
static partial void SetGlobalEventPropertyInternal(string key, string value, bool immutable) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetGlobalEventProperty(key, value, immutable);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetGlobalEventProperties(string properties, bool immutable);
static partial void SetGlobalEventPropertiesInternal(string properties, bool immutable) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetGlobalEventProperties(properties, immutable);
}
}
[DllImport("__Internal")]
static extern void SmartlookRemoveGlobalEventProperty(string key);
static partial void RemoveGlobalEventPropertyInternal(string key) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookRemoveGlobalEventProperty(key);
}
}
[DllImport("__Internal")]
static extern void SmartlookRemoveAllGlobalEventProperties();
static partial void RemoveAllGlobalEventPropertiesInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookRemoveAllGlobalEventProperties();
}
}
[DllImport("__Internal")]
static extern void SmartlookResetSession(bool resetUser);
static partial void ResetSessionInternal(bool resetUser) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookResetSession(resetUser);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetRenderingMode(int renderingMode);
static partial void SetRenderingModeInternal(int renderingMode) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetRenderingMode(renderingMode);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetEventTrackingMode(string eventTrackingMode);
static partial void SetEventTrackingModeInternal(string eventTrackingMode)
{
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetEventTrackingMode(eventTrackingMode);
}
}
[DllImport("__Internal")]
static extern void SmartlookSetEventTrackingModes(string eventTrackingModes);
static partial void SetEventTrackingModesInternal(string eventTrackingModes)
{
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookSetEventTrackingModes(eventTrackingModes);
}
}
private static IntegrationListener privateIntegrationListener;
private delegate void DelegateMessage(string message);
[MonoPInvokeCallback(typeof(DelegateMessage))]
private static void delegateVisitorUrlChanged(string message) {
privateIntegrationListener.onVisitorReady(message);
}
[MonoPInvokeCallback(typeof(DelegateMessage))]
private static void delegateSessionUrlChanged(string message) {
privateIntegrationListener.onSessionReady(message);
}
[DllImport("__Internal")]
static extern void SmartlookSetDashboardSessionUrlListener(DelegateMessage callback);
[DllImport("__Internal")]
static extern void SmartlookSetDashboardVisitorUrlListener(DelegateMessage callback);
public static void RegisterIntegrationListenerInternalIOS(IntegrationListener integrationListener) {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
privateIntegrationListener = integrationListener;
SmartlookSetDashboardSessionUrlListener(delegateSessionUrlChanged);
SmartlookSetDashboardVisitorUrlListener(delegateVisitorUrlChanged);
}
}
[DllImport("__Internal")]
static extern void SmartlookUnregisterDashboardListener();
static partial void UnregisterIntegrationListenerInternal() {
if (Application.platform == RuntimePlatform.IPhonePlayer) {
SmartlookUnregisterDashboardListener();
}
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4cdf78a5d29fed94cafc9ebf39eec979
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,471 @@
using System;
using UnityEngine;
using System.Collections.Generic;
namespace SmartlookUnity
{
#if UNITY_ANDROID
/// Extended class can be passed to RegisterIntegrationListener method
[SL_COMPATIBILITY_NAME("name=IntegrationListener;type=callback;members=onSessionReady,onVisitorReady")]
public abstract class IntegrationListener : AndroidJavaProxy
{
public IntegrationListener() : base("com.smartlook.sdk.smartlook.integration.IntegrationListener") { }
public abstract void onSessionReady(string dashboardSessionUrl);
public abstract void onVisitorReady(string dashboardVisitorUrl);
}
#elif UNITY_IOS
/// Extended class can be passed to RegisterIntegrationListener method
public abstract class IntegrationListener
{
public abstract void onSessionReady(string dashboardSessionUrl);
public abstract void onVisitorReady(string dashboardVisitorUrl);
}
#else
public abstract class IntegrationListener
{
public abstract void onSessionReady(string dashboardSessionUrl);
public abstract void onVisitorReady(string dashboardVisitorUrl);
}
#endif
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = true)]
public class SL_COMPATIBILITY_NAME : System.Attribute
{
private string value;
public SL_COMPATIBILITY_NAME(string value)
{
this.value = value;
}
}
public class SetupOptionsBuilder
{
protected string ApiKey { get; set; }
protected int Fps { get; set; }
protected bool StartNewSession { get; set; } = false;
protected bool StartNewSessionAndUser { get; set; } = false;
public SetupOptionsBuilder(string ApiKey)
{
this.ApiKey = ApiKey;
}
public SetupOptionsBuilder SetFps(int Fps)
{
this.Fps = Fps;
return this;
}
public SetupOptionsBuilder SetStartNewSession(bool StartNewSession)
{
this.StartNewSession = StartNewSession;
return this;
}
public SetupOptionsBuilder SetStartNewSessionAndUser(bool StartNewSessionAndUser)
{
this.StartNewSessionAndUser = StartNewSessionAndUser;
return this;
}
public SetupOptions Build()
{
return new SetupOptions(ApiKey, Fps, StartNewSession, StartNewSessionAndUser);
}
}
/// Setup options used in SetupAndStartRecording(SetupOptions setupOptions)
[SL_COMPATIBILITY_NAME("name=SetupOptions;type=builder;members=smartlookAPIKey,fps,startNewSession,startNewSessionAndUser")]
public class SetupOptions
{
public string ApiKey;
public int Fps;
public bool StartNewSession;
public bool StartNewSessionAndUser;
public SetupOptions(string ApiKey, int Fps, bool StartNewSession, bool StartNewSessionAndUser)
{
this.ApiKey = ApiKey;
this.Fps = Fps;
this.StartNewSession = StartNewSession;
this.StartNewSessionAndUser = StartNewSessionAndUser;
}
}
public static partial class Smartlook
{
public enum NavigationEventType { enter = 0, exit = 1 }
public enum RenderingModeType { native = 0, no_rendering = 1 }
[Serializable]
public enum EventTrackingMode { FULL_TRACKING, IGNORE_USER_INTERACTION, IGNORE_NAVIGATION_INTERACTION, IGNORE_RAGE_CLICKS, NO_TRACKING }
[Serializable]
public class TrackingEventsWrapper
{
public List<string> eventTrackingModes;
}
/// Setup Smartlook and start recording.
/// <param name="key">The application (project) specific SDK key, available in your Smartlook dashboard.</param>
[SL_COMPATIBILITY_NAME("name=setupAndStartRecording;type=func;params=smartlookAPIKey{string}")]
public static void SetupAndStartRecording(string key) { SetupAndStartRecordingInternal(key); }
/// Setup Smartlook and start recording, with custom framerate.
/// <param name="key">The application (project) specific SDK key, available in your Smartlook dashboard.</param>
/// <param name="frameRate">Custom recording framerate.</param>
[SL_COMPATIBILITY_NAME("name=setupAndStartRecording;type=func;params=smartlookAPIKey{string},fps{int};deprecated=yes")]
public static void SetupAndStartRecording(string key, int frameRate) { SetupAndStartRecordingInternal(key, frameRate); }
/// Setup Smartlook and start recording with custom setup options.
/// <param name="setupOptions">Instance of SetupOptions class.</param>
[SL_COMPATIBILITY_NAME("name=setupAndStartRecording;type=func;params=setupOptions{SetupOptions}")]
public static void SetupAndStartRecording(SetupOptions setupOptions) { SetupAndStartRecordingInternal(setupOptions); }
/// Setup Smartlook. This method initializes Smartlook SDK, but does not start recording. To start recording, call StartRecording() method.
/// <param name="key">The application (project) specific SDK key, available in your Smartlook dashboard.</param>
[SL_COMPATIBILITY_NAME("name=setup;type=func;params=smartlookAPIKey{string}")]
public static void Setup(string key) { SetupInternal(key); }
/// Setup Smartlook. This method initializes Smartlook SDK, but does not start recording. To start recording, call StartRecording() method.
/// <param name="key">The application (project) specific SDK key, available in your Smartlook dashboard.</param>
/// <param name="frameRate">Custom recording framerate.</param>
[SL_COMPATIBILITY_NAME("name=setup;type=func;params=smartlookAPIKey{string},fps{int};deprecated=yes")]
public static void Setup(string key, int frameRate) { SetupInternal(key, frameRate); }
/// Setup Smartlook. This method initializes Smartlook SDK, but does not start recording. To start recording, call StartRecording() method.
/// <param name="setupOptions">Instance of SetupOptions class.</param>
[SL_COMPATIBILITY_NAME("name=setup;type=func;params=setupOptions{SetupOptions}")]
public static void Setup(SetupOptions setupOptions) { SetupInternal(setupOptions); }
/// Starts video and events recording.
[SL_COMPATIBILITY_NAME("name=startRecording;type=func")]
public static void StartRecording() { StartRecordingInternal(); }
/// Stops video and events recording.
[SL_COMPATIBILITY_NAME("name=stopRecording;type=func")]
public static void StopRecording() { StopRecordingInternal(); }
/// Current video and events recording state.
[SL_COMPATIBILITY_NAME("name=isRecording;type=func;returns=boolean")]
public static bool IsRecording() { return IsRecordingInternal(); }
/// <summary>
/// Start timer for custom event.
/// This method does not record an event. It is the subsequent `RecordEvent` call with the same `eventId` that does.
/// In the resulting event, the property dictionaries of `start` and `record` are merged (the `record` values override the `start` ones if the key is the same), and a `duration` property is added to them.
/// <summary>
/// <param name="eventName">Name of the event.</param>
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
/// <returns>
/// eventId that can be used in StopTimedCustomEvent or CancelTimedCustomEvent methods
/// </returns>
[SL_COMPATIBILITY_NAME("name=startTimedCustomEvent;type=func;params=eventName{string},eventProperties{JSONObject};returns=string")]
[SL_COMPATIBILITY_NAME("name=startTimedCustomEvent;type=func;params=eventName{string},bundle{Bundle};returns=string")]
[SL_COMPATIBILITY_NAME("name=startTimedCustomEvent;type=func;params=eventName{string},eventProperties{string};returns=string")]
public static string StartTimedCustomEvent(string eventName, string properties) { return StartTimedCustomEventInternal(eventName, properties); }
/// <summary>
/// Start timer for custom event.
/// This method does not record an event. It is the subsequent `RecordEvent` call with the same `eventId` that does.
/// In the resulting event, the property dictionaries of `start` and `record` are merged (the `record` values override the `start` ones if the key is the same), and a `duration` property is added to them.
/// <summary>
/// <param name="eventName">Name of the event.</param>
/// <returns>
/// eventId that can be used in StopTimedCustomEvent or CancelTimedCustomEvent methods
/// </returns>
/// <param name="eventName">Name of the event.</param>
[SL_COMPATIBILITY_NAME("name=startTimedCustomEvent;type=func;params=eventName{string};returns=string")]
public static string StartTimedCustomEvent(string eventName) { return StartTimedCustomEventInternal(eventName); }
/// Stops timed event
/// <param name="eventId">Name of the event.</param>
[SL_COMPATIBILITY_NAME("name=stopTimedCustomEvent;type=func;params=eventId{string}")]
public static void StopTimedCustomEvent(string eventId) { StopTimedCustomEventInternal(eventId); }
/// Stops timed event
/// <param name="eventId">Name of the event.</param>
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
[SL_COMPATIBILITY_NAME("name=stopTimedCustomEvent;type=func;params=eventId{string},eventProperties{JSONObject}")]
[SL_COMPATIBILITY_NAME("name=stopTimedCustomEvent;type=func;params=eventId{string},bundle{Bundle}")]
[SL_COMPATIBILITY_NAME("name=stopTimedCustomEvent;type=func;params=eventId{string},eventProperties{string}")]
public static void StopTimedCustomEvent(string eventId, string properties) { StopTimedCustomEventInternal(eventId, properties); }
/// Cancels timed event
/// <param name="eventId">Name of the event.</param>
/// <param name="reason">Cancellation Reason</param>
[SL_COMPATIBILITY_NAME("name=cancelTimedCustomEvent;type=func;params=eventId{string},reason{string}")]
public static void CancelTimedCustomEvent(string eventId, string reason) { CancelTimedCustomEventInternal(eventId, reason); }
/// <param name="eventId">Name of the event.</param>
/// <param name="reason">Cancellation Reason</param>
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
[SL_COMPATIBILITY_NAME("name=cancelTimedCustomEvent;type=func;params=eventId{string},reason{string},eventProperties{JSONObject}")]
[SL_COMPATIBILITY_NAME("name=cancelTimedCustomEvent;type=func;params=eventId{string},reason{string},bundle{Bundle}")]
[SL_COMPATIBILITY_NAME("name=cancelTimedCustomEvent;type=func;params=eventId{string},reason{string},eventProperties{string}")]
public static void CancelTimedCustomEvent(string eventId, string reason, string properties) { CancelTimedCustomEventInternal(eventId, reason, properties); }
/// Records timestamped custom event.
/// <param name="eventName">Name that identifies the event.</param>
[SL_COMPATIBILITY_NAME("name=trackCustomEvent;type=func;params=eventName{string}")]
public static void TrackCustomEvent(string eventName) { TrackCustomEventInternal(eventName); }
/// Records timestamped custom event with optional properties.
/// <param name="eventName">Name that identifies the event.</param>
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
[SL_COMPATIBILITY_NAME("name=trackCustomEvent;type=func;params=eventName{string},eventProperties{JSONObject}")]
[SL_COMPATIBILITY_NAME("name=trackCustomEvent;type=func;params=eventName{string},bundle{Bundle}")]
[SL_COMPATIBILITY_NAME("name=trackCustomEvent;type=func;params=eventName{string},properties{string}")]
public static void TrackCustomEvent(string eventName, string properties) { TrackCustomEventInternal(eventName, properties); }
/// Records navigation event
/// <param name="screenName">Name that identifies the screen user is currently on.</param>
/// <param name="direction">Navigation direction. Either entering the screen, or exiting the screen.</param>
[SL_COMPATIBILITY_NAME("name=trackNavigationEvent;type=func;params=name{string},viewState{ViewState}")]
public static void TrackNavigationEvent(string screenName, NavigationEventType direction) { TrackNavigationEventInternal(screenName, (int)direction); }
/// Global event properties are sent with every event.
/// <param name="key">Property key (name).</param>
/// <param name="value">Property Value.</param>
/// <param name="immutable">To change immutable property, you need to remove that property first.</param>
[SL_COMPATIBILITY_NAME("name=setGlobalEventProperty;type=func;params=key{string},value{string},immutable{boolean}")]
public static void SetGlobalEventProperty(string key, string value, bool immutable) { SetGlobalEventPropertyInternal(key, value, immutable); }
/// Global event properties are sent with every event.
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
/// <param name="immutable">To change immutable property, you need to remove that property first.</param>
[SL_COMPATIBILITY_NAME("name=setGlobalEventProperties;type=func;params=globalEventProperties{JSONObject},immutable{boolean}")]
[SL_COMPATIBILITY_NAME("name=setGlobalEventProperties;type=func;params=globalEventProperties{Bundle},immutable{boolean}")]
[SL_COMPATIBILITY_NAME("name=setGlobalEventProperties;type=func;params=globalEventProperties{string},immutable{boolean}")]
public static void SetGlobalEventProperties(string properties, bool immutable) { SetGlobalEventPropertiesInternal(properties, immutable); }
/// Removes global event property
[SL_COMPATIBILITY_NAME("name=removeGlobalEventProperty;type=func;params=key{string}")]
public static void RemoveGlobalEventProperty(string key) { RemoveGlobalEventPropertyInternal(key); }
/// Removes all global event properties
[SL_COMPATIBILITY_NAME("name=removeAllGlobalEventProperties;type=func")]
public static void RemoveAllGlobalEventProperties() { RemoveAllGlobalEventPropertiesInternal(); }
/// Returns URL leading to the Dashboard player for the current Smartlook session. This URL can be access by everyone with the access rights to the dashboard.
/// <param name="withCurrentTimestamp">If true recording starts at current time</param>
[SL_COMPATIBILITY_NAME("name=getDashboardSessionUrl;type=func;params=withCurrentTimestamp{boolean};returns=string")]
public static string GetDashboardSessionUrl(bool withCurrentTimestamp) { return GetDashboardSessionUrlInternal(withCurrentTimestamp); }
/// Returns URL leading to the Dashboard for current visitor. This URL can be access by everyone with the access rights to the dashboard.
[SL_COMPATIBILITY_NAME("name=getDashboardVisitorUrl;type=func;returns=string")]
public static string GetDashboardVisitorUrl() { return GetDashboardVisitorUrlInternal(); }
/// Use this method to enter the **full sensitive mode**. No video is recorded, just analytics events.
[SL_COMPATIBILITY_NAME("name=startFullscreenSensitiveMode;type=func;deprecated=yes")]
public static void StartFullscreenSensitiveMode() { StartFullscreenSensitiveModeInternal(); }
/// Use this method to leave the **full sensitive mode**. Video is recorded again.
[SL_COMPATIBILITY_NAME("name=stopFullscreenSensitiveMode;type=func;deprecated=yes")]
public static void StopFullscreenSensitiveMode() { StopFullscreenSensitiveModeInternal(); }
[SL_COMPATIBILITY_NAME("name=setReferrer;type=func;params=referrer{string},source{string}")]
public static void SetReferrer(string referrer, string source) { SetReferrerInternal(referrer, source); }
/// Enables/disabled Crashlytics integration
[SL_COMPATIBILITY_NAME("name=enableCrashlytics;type=func;params=enable{boolean}")]
public static void EnableCrashlytics(bool enable) { EnableCrashlyticsInternal(enable); }
/// Resets the current session by implicitly starting a new session. Optionally, it also resets the user.
/// <param name="resetUser">Indicates whether new session starts with new user.</param>
[SL_COMPATIBILITY_NAME("name=resetSession;type=func;params=resetUser{boolean}")]
public static void ResetSession(bool resetUser) { ResetSessionInternal(resetUser); }
/// By changing rendering mode you can adjust the way we render the application for recordings.
/// <param name="renderingMode">Options are RenderingModeType.native (normal recording), and RenderingModeType.no_rendering (gray screen).</param>
[SL_COMPATIBILITY_NAME("name=setRenderingMode;type=func;params=renderingMode{RenderingMode}")]
public static void SetRenderingMode(RenderingModeType renderingMode) { SetRenderingModeInternal((int)renderingMode); }
/// By changing rendering mode you can adjust the way we render the application for recordings.
/// <param name="eventTrackingMode">Desired tracking mode.</param>
[SL_COMPATIBILITY_NAME("name=setEventTrackingMode;type=func;params=eventTrackingMode{EventTrackingMode}")]
public static void setEventTrackingMode(EventTrackingMode eventTrackingMode) { SetEventTrackingModeInternal(eventTrackingMode.ToString()); }
/// By changing rendering mode you can adjust the way we render the application for recordings.
/// <param name="eventTrackingModes">Desired tracking modes.</param>
[SL_COMPATIBILITY_NAME("name=setEventTrackingModes;type=func;params=eventTrackingModes{List[EventTrackingMode]}")]
public static void setEventTrackingModes(List<EventTrackingMode> eventTrackingModes) { SetEventTrackingModesInternal(handleEventModes(eventTrackingModes)); }
private static string handleEventModes(List<EventTrackingMode> modes)
{
SmartlookUnity.Smartlook.TrackingEventsWrapper wrapper = new SmartlookUnity.Smartlook.TrackingEventsWrapper() { eventTrackingModes = modes.ConvertAll(mode => mode.ToString()) };
string input = JsonUtility.ToJson(wrapper);
string array = "[" + input.Split('[')[1].Split(']')[0] + "]";
return array;
}
/// Set the app's user identifier.
/// <param name="userIdentifier">The application-specific user identifier.</param>
[SL_COMPATIBILITY_NAME("name=setUserIdentifier;type=func;params=identifier{string}")]
public static void SetUserIdentifier(string userIdentifier) { SetUserIdentifierInternal(userIdentifier); }
/// Set the app's user identifier with additional properties.
/// <param name="userIdentifier">The application-specific user identifier.</param>
/// <param name="properties">Optional dictionary (json string, obtained for example with JsonUtility.ToJson(param)) with additional information. Non String values will be stringlified.</param>
[SL_COMPATIBILITY_NAME("name=setUserProperties;type=func;params=sessionProperties{JSONObject},immutable{boolean}")]
[SL_COMPATIBILITY_NAME("name=setUserProperties;type=func;params=sessionProperties{Bundle},immutable{boolean}")]
[SL_COMPATIBILITY_NAME("name=setUserProperties;type=func;params=sessionProperties{string},immutable{boolean}")]
public static void SetUserIdentifier(string userIdentifier, string properties) { SetUserIdentifierInternal(userIdentifier, properties); }
/// Set integration listener
/// <param name="integrationListener">You provide your own subclass of IntegrationListener, with onSessionReady() and onVisitorReady callbacks, which are called when dashboard visitor url or dashboard session url changes.</param>
[SL_COMPATIBILITY_NAME("name=registerIntegrationListener;type=func;params=integrationListener{IntegrationListener}")]
public static void RegisterIntegrationListener(IntegrationListener integrationListener) { RegisterIntegrationListenerInternal(integrationListener); }
/// Unregister integration listener
[SL_COMPATIBILITY_NAME("name=unregisterIntegrationListener;type=func")]
public static void UnregisterIntegrationListener() { UnregisterIntegrationListenerInternal(); }
public static void EnableLogging()
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("enableLogging", "[ALL]");
}
#endif
}
// Internal
static partial void SetupAndStartRecordingInternal(string key);
static partial void SetupAndStartRecordingInternal(string key, int frameRate);
static partial void SetupAndStartRecordingInternal(SetupOptions setupOptions);
static partial void SetupInternal(string key);
static partial void SetupInternal(string key, int frameRate);
static partial void SetupInternal(SetupOptions setupOptions);
static partial void StartRecordingInternal();
static partial void StopRecordingInternal();
static partial void TrackCustomEventInternal(string eventName);
static partial void TrackCustomEventInternal(string eventName, string properties);
static partial void TrackNavigationEventInternal(string screenName, int direction);
static partial void SetGlobalEventPropertyInternal(string key, string value, bool immutable);
static partial void SetGlobalEventPropertiesInternal(string properties, bool immutable);
static partial void RemoveGlobalEventPropertyInternal(string key);
static partial void RemoveAllGlobalEventPropertiesInternal();
static partial void StartFullscreenSensitiveModeInternal();
static partial void StopFullscreenSensitiveModeInternal();
static partial void SetReferrerInternal(string referrer, string source);
static partial void EnableCrashlyticsInternal(bool enable);
static partial void SetUserIdentifierInternal(string userIdentifier);
static partial void SetUserIdentifierInternal(string userIdentifier, string properties);
static partial void StopTimedCustomEventInternal(string eventId);
static partial void StopTimedCustomEventInternal(string eventId, string properties);
static partial void CancelTimedCustomEventInternal(string eventId, string reason);
static partial void CancelTimedCustomEventInternal(string eventId, string reason, string properties);
static partial void ResetSessionInternal(bool resetUser);
static partial void SetRenderingModeInternal(int renderingMode);
static partial void SetEventTrackingModeInternal(string eventTrackingMode);
static partial void SetEventTrackingModesInternal(string eventTrackingModes);
static partial void UnregisterIntegrationListenerInternal();
public static bool IsRecordingInternal()
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
return getSLClass().CallStatic<bool>("isRecording");
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return IsRecordingInternalIOS();
}
#endif
return false;
}
public static string GetDashboardSessionUrlInternal(bool withCurrentTimestamp)
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
return getSLClass().CallStatic<string>("getDashboardSessionUrl", withCurrentTimestamp);
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return GetDashboardSessionUrlInternalIOS(withCurrentTimestamp);
}
#endif
return "";
}
public static string GetDashboardVisitorUrlInternal()
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
return getSLClass().CallStatic<string>("getDashboardVisitorUrl");
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return GetDashboardVisitorUrlInternalIOS();
}
#endif
return "";
}
public static string StartTimedCustomEventInternal(string eventName)
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
return getSLClass().CallStatic<string>("startTimedCustomEvent", eventName);
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return StartTimedCustomEventInternalIOS(eventName);
}
#endif
return "";
}
public static string StartTimedCustomEventInternal(string eventName, string properties)
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
return getSLClass().CallStatic<string>("startTimedCustomEvent", eventName, properties);
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
return StartTimedCustomEventInternalIOS(eventName, properties);
}
#endif
return "";
}
private static void RegisterIntegrationListenerInternal(IntegrationListener integrationListener)
{
#if UNITY_ANDROID
if (Application.platform == RuntimePlatform.Android)
{
getSLClass().CallStatic("registerIntegrationListener", integrationListener);
}
#endif
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer) {
RegisterIntegrationListenerInternalIOS(integrationListener);
}
#endif
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9c57b92e3c12c1744824630b3f25d4f3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,29 @@
using UnityEngine;
namespace SmartlookUnity
{
[DefaultExecutionOrder(-5000)]
public class SmartlookInitializer : MonoBehaviour
{
[Tooltip("Reset Session")]
public bool ResetSession;
[Tooltip("Reset User")]
public bool ResetUser;
private void Awake()
{
var settings = Settings.Instance;
if (settings == null)
{
Debug.LogError("Smartlook: Settings file missing. Open menu \"Smartlook/Edit Settings\" and provide desired settings");
return;
}
if (string.IsNullOrEmpty(settings.ProjectKey))
{
Debug.LogError("Smartlook: Project Key is missing. Open menu \"Smartlook/Edit Settings\" and provide correct Project Key.");
return;
}
Smartlook.SetupAndStartRecording(new SetupOptions(settings.ProjectKey, settings.FPS, ResetSession, ResetUser));
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8f8ef78bee04409481341d4213ba58aa
timeCreated: 1680463181

View File

@@ -0,0 +1,14 @@
{
"name": "SmartlookAnalytics",
"rootNamespace": "SmartlookUnity",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 52537e7b5c9a4f64e9d1ef8878c041c3
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4059014ff79ac2447b98dcf3a704d802
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 33894b541167eb34f99313d27a41826e
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fb5a01a1e43952b408395b66bc8b5fce
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,358 @@
//
// Smartlook SDK, © 2022 Smartlook.com
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@class SLSetupConfiguration;
@class SLIntegration;
// MARK: - Enumerations
typedef NSString * SLNavigationType NS_TYPED_ENUM;
static SLNavigationType const _Nonnull SLNavigationTypeEnter = @"enter";
static SLNavigationType const _Nonnull SLNavigationTypeExit = @"exit";
typedef NSString * SLRenderingMode NS_TYPED_ENUM;
static SLRenderingMode const _Nonnull SLRenderingModeNative = @"rendering-method-native";
static SLRenderingMode const _Nonnull SLRenderingModeWireframe = @"rendering-method-wireframe";
static SLRenderingMode const _Nonnull SLRenderingModeNoRendering = @"no-rendering";
typedef NSString * SLRenderingModeOption NS_TYPED_ENUM;
static SLRenderingModeOption const _Nonnull SLRenderingModeOptionNone = @"rendering-method-option-none";
static SLRenderingModeOption const _Nonnull SLRenderingModeOptionColorWireframe = @"rendering-method-option-color-wireframe";
static SLRenderingModeOption const _Nonnull SLRenderingModeOptionBlueprintWireframe = @"rendering-method-option-blueprint-wireframe";
static SLRenderingModeOption const _Nonnull SLRenderingModeOptionIconBlueprintWireframe = @"rendering-method-option-icon-blueprint-wireframe";
typedef NSString * SLEventTrackingMode NS_TYPED_ENUM;
static SLEventTrackingMode const _Nonnull SLEventTrackingModeFullTracking = @"event-tracking-mode-full";
static SLEventTrackingMode const _Nonnull SLEventTrackingModeIgnoreUserInteractionEvents = @"event-tracking-mode-ignore-user-interaction";
static SLEventTrackingMode const _Nonnull SLEventTrackingModeNoTracking = @"event-tracking-mode-no-tracking";
static SLEventTrackingMode const _Nonnull SLEventTrackingModeIgnoreNavigationInteractionEvents = @"event-tracking-mode-ignore-navigation-interaction-events";
static SLEventTrackingMode const _Nonnull SLEventTrackingModeIgnoreRageClickEvents = @"event-tracking-mode-ignore-rage-click-events";
typedef NSString * SLRegion NS_TYPED_ENUM;
static SLRegion const _Nonnull SLRegionEU = @"eu";
static SLRegion const _Nonnull SLRegionUS = @"us";
// MARK: - Dashboard URL change notification
static NSNotificationName const _Nonnull SLDashboardSessionURLChangedNotification = @"dashboard-session-URL-changed-notification";
static NSNotificationName const _Nonnull SLDashboardVisitorURLChangedNotification = @"dashboard-visitor-URL-changed-notification";
// MARK: - Bridge technologies
typedef NSString * SLBridgeTechnology NS_TYPED_ENUM;
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyReactNative = @"react_native";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyFlutter = @"flutter";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyCordova = @"cordova";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyIonic = @"ionic";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyUnity = @"unity";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyUnreal = @"unreal";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyXamarin = @"xamarin";
static SLBridgeTechnology const _Nonnull SLBridgeTechnologyOther = @"other";
// MARK: - Smartlook
@interface Smartlook : NSObject
// MARK: - Setup
+ (void)setupWithConfiguration:(nonnull SLSetupConfiguration *)configuration;
+ (void)setupAndStartRecordingWithConfiguration:(nonnull SLSetupConfiguration *)configuration;
// MARK: - Reset session
+ (void)resetSessionAndUser:(BOOL)resetUser;
// MARK: - Start/Stop Recording
+ (void)startRecording;
+ (void)stopRecording;
+ (BOOL)isRecording;
// MARK: - Switch Rendering Mode
+ (void)setRenderingModeTo:(nonnull SLRenderingMode)renderingMode;
+ (void)setRenderingModeTo:(nonnull SLRenderingMode)renderingMode withOption:(nullable SLRenderingModeOption)renderingModeOption;
+ (_Nonnull SLRenderingMode)currentRenderingMode;
+ (_Nullable SLRenderingModeOption)currentRenderingModeOption;
// MARK: - Events Tracking Mode
+ (void)setEventTrackingModeTo:(SLEventTrackingMode _Nonnull)eventTrackingMode;
+ (void)setEventTrackingModesTo:(NSArray<SLEventTrackingMode> * _Nonnull)eventTrackingModes;
+ (nonnull NSArray<SLEventTrackingMode> *)currentEventTrackingModes;
// MARK: - Custom Events
+ (void)trackCustomEventWithName:(nonnull NSString*)eventName;
+ (void)trackCustomEventWithName:(nonnull NSString*)eventName props:(nullable NSDictionary<NSString*, NSString*>*)props;
+ (id _Nonnull)startTimedCustomEventWithName:(nonnull NSString*)eventName props:(nullable NSDictionary<NSString*, NSString*>*)props;
+ (void)trackTimedCustomEventWithEventId:(id _Nonnull)eventId props:(nullable NSDictionary<NSString*, NSString*>*)props;
+ (void)trackTimedCustomEventCancelWithEventId:(id _Nonnull)eventId reason:(NSString *_Nullable)reason props:(nullable NSDictionary<NSString*, NSString*>*)props;
// MARK: - Session and Global Event Properties
+ (void)setUserIdentifier:(nullable NSString*)userIdentifier;
typedef NS_OPTIONS(NSUInteger, SLPropertyOption) {
SLPropertyOptionDefaults = 0,
SLPropertyOptionImmutable = 1 << 0
};
+ (void)setSessionPropertyValue:(nonnull NSString *)value forName:(nonnull NSString *)name;
+ (void)setSessionPropertyValue:(nonnull NSString *)value forName:(nonnull NSString *)name withOptions:(SLPropertyOption)options;
+ (void)removeSessionPropertyForName:(nonnull NSString *)name;
+ (void)clearSessionProperties;
+ (void)setGlobalEventPropertyValue:(nonnull NSString *)value forName:(nonnull NSString *)name;
+ (void)setGlobalEventPropertyValue:(nonnull NSString *)value forName:(nonnull NSString *)name withOptions:(SLPropertyOption)options;
+ (void)removeGlobalEventPropertyForName:(nonnull NSString *)name;
+ (void)clearGlobalEventProperties;
// MARK: - Sensitive Views
+ (void)setBlacklistedItemsColor:(nonnull UIColor *)color;
+ (void)registerWhitelistedObject:(nonnull id)object;
+ (void)unregisterWhitelistedObject:(nonnull id)object;
+ (void)registerBlacklistedObject:(nonnull id)object;
+ (void)unregisterBlacklistedObject:(nonnull id)object;
// MARK: - Dashboard session URL
+ (nullable NSURL *)getDashboardSessionURLWithCurrentTimestamp:(BOOL)withTimestamp;
+ (nullable NSURL *)getDashboardVisitorURL;
+ (void)trackNavigationEventWithControllerId:(nonnull NSString *)controllerId type:(nonnull SLNavigationType)type;
// MARK: - Automated Integrations
+ (void)enableIntegrations:(NSArray<SLIntegration *> * _Nonnull)integrations;
+ (void)disableIntegrations:(NSArray<SLIntegration *> * _Nonnull)integrations;
+ (void)disableAllIntegrations;
+ (NSArray<SLIntegration *> * _Nonnull)currentlyEnabledIntegrations;
@end
// MARK: - Setup Configuration
@interface SLSetupConfiguration : NSObject
@property (nonatomic, strong) NSString * _Nonnull apiKey;
@property (nonatomic) NSInteger framerate;
@property (nonatomic) BOOL enableAdaptiveFramerate;
@property (nonatomic, copy) NSArray<SLEventTrackingMode> * _Nullable eventTrackingModes;
@property (nonatomic, strong) SLRenderingMode _Nullable renderingMode;
@property (nonatomic, strong) SLRenderingModeOption _Nullable renderingModeOption;
@property (nonatomic) BOOL resetSession;
@property (nonatomic) BOOL resetSessionAndUser;
@property (nonatomic, strong) SLRegion _Nullable regionalStorage;
@property (nonatomic, strong) NSArray * _Nullable requestHeaderFilters;
@property (nonatomic, strong) NSDictionary * _Nullable urlPatternFilters;
@property (nonatomic, strong) NSArray * _Nullable URLQueryParamFilters;
@property (nonatomic, copy) NSArray<SLIntegration *> * _Nullable enableIntegrations;
- (instancetype _Nonnull)initWithKey:(NSString *_Nonnull)apiKey;
- (void)setInternalProps:(id _Nonnull)internalProps;
@end
// MARK: - Sensitivity Protocols
@protocol SLSensitiveData
@end
@protocol SLNonSensitiveData
@end
// MARK: - Bridge Interface
@interface SLWireframeDataItem : NSObject
@property CGFloat left;
@property CGFloat top;
@property CGFloat width;
@property CGFloat height;
@property (nonatomic, copy) UIColor * _Nonnull color;
@end
@interface SLWireframeData : NSObject
@property CGFloat width;
@property CGFloat height;
@property (nonatomic, copy) NSArray<SLWireframeDataItem *> * _Nonnull items;
@end
@protocol SLBridgeInterface <NSObject>
@property (nonatomic, copy) NSString * _Nullable sdkFramework;
@property (nonatomic, copy) NSString * _Nullable sdkFrameworkVersion;
@property (nonatomic, copy) NSString * _Nullable sdkFrameworkPluginVersion;
- (void)obtainWireframeDataWithCompletion:(void (^_Nonnull)(SLWireframeData * _Nullable result))completionHandler;
@end
@interface Smartlook (BridgeInterface)
+ (void)registerBridgeInterface:(NSObject<SLBridgeInterface> * _Nonnull)bridgeInterface;
@end
// MARK: - UIView category
@interface UIView (Smartlook)
@property (nonatomic, assign) IBInspectable BOOL slSensitive;
@end
// MARK: - Integrations
@interface SLIntegration : NSObject;
@property (nonatomic, nonnull, readonly) id integratedObject;
@property (nonatomic, nonnull, readonly) NSString *name;
@property (nonatomic, readonly) BOOL isValid;
@end
// MARK: - Firebase Crashlytics
static NSString * const _Nonnull SLIntegrationFirebaseCrashlyticsName = @"firebase_crashlytics";
@class FIRCrashlytics;
@interface SLFirebaseCrashlyticsIntegration : SLIntegration
- (instancetype _Nonnull)initIntegrationWith:(FIRCrashlytics *_Nonnull)crashlytics;
@end;
// MARK: - Firebase Analytics
static NSString * const _Nonnull SLIntegrationFirebaseAnalyticsName = @"firebase_analytics";
@interface SLFirebaseAnalyticsIntegration : SLIntegration
- (instancetype _Nonnull)initIntegrationWith:(Class _Nonnull)analyticsClass;
@end
// MARK: - Amplitude
extern NSString * const _Nonnull SLIntegrationAmplitudeName;
@class Amplitude;
@interface SLAmplitudeIntegration : SLIntegration
- (instancetype _Nonnull)initIntegrationWith:(Amplitude *_Nonnull)amplitudeInstance;
@end
// MARK: - Mixpanel
extern NSString * const _Nonnull SLIntegrationMixpanelName;
@class Mixpanel;
@interface SLMixpanelIntegration : SLIntegration
- (instancetype _Nonnull)initIntegrationWith:(Mixpanel *_Nonnull)mixpanelInstance;
@end
// MARK: - Heap
extern NSString * const _Nonnull SLIntegrationHeapName;
@interface SLHeapIntegration : SLIntegration
- (instancetype _Nonnull)initIntegrationWith:(Class _Nonnull)heapClass;
@end
// MARK: - Segment
@class SEGBlockMiddleware;
typedef NS_OPTIONS(NSUInteger, SLSegmentMiddlewareOption) {
SLSegmentMiddlewareOptionTrack = 1 << 0,
SLSegmentMiddlewareOptionScreen = 1 << 1,
SLSegmentMiddlewareOptionIdentify = 1 << 2,
SLSegmentMiddlewareOptionAlias = 1 << 3,
SLSegmentMiddlewareOptionReset = 1 << 4,
SLSegmentMiddlewareOptionAll = 0xFF,
SLSegmentMiddlewareOptionDefault = SLSegmentMiddlewareOptionAll & ~SLSegmentMiddlewareOptionScreen & ~SLSegmentMiddlewareOptionAlias,
};
@interface Smartlook (Segment)
+(SEGBlockMiddleware * _Nullable)segmentSourceMiddlewareWithOptions:(SLSegmentMiddlewareOption)option whereSEGResetEventTypeIs:(NSInteger)resetEventType;
@end

View File

@@ -0,0 +1,57 @@
//
// SmartlookCBridge.h
// Smartlook iOS SDK 1.2.0
//
// Copyright © 2019 Smartsupp.com, s.r.o. All rights reserved.
//
#pragma once
typedef void (*DashboardUrlCallback)(const char* url);
#if defined __cplusplus
extern "C" {
#endif
void SmartlookSetupAndStartRecording(const char* key);
void SmartlookSetupAndStartRecordingWithFramerate(const char* key, int framerate);
void SmartlookSetupAndStartRecordingWithOptions(const char* options);
void SmartlookSetup(const char* key);
void SmartlookSetupWithFramerate(const char* key, int framerate);
void SmartlookSetupWithOptions(const char* options);
void SmartlookStartRecording();
void SmartlookStopRecording();
void SmartlookStartFullscreenSensitiveMode();
void SmartlookStopFullscreenSensitiveMode();
void SmartlookSetReferrer(const char* referrer, const char* source);
void SmartlookTrackCustomEvent(const char* eventName);
void SmartlookTrackCustomEventWithProperties(const char* eventName, const char* properties);
void SmartlookTrackNavigationEvent(const char* screenName, int direction);
void SmartlookSetUserIdentifier(const char* userIdentifier);
void SmartlookSetUserIdentifierWithProperties(const char* userIdentifier, const char* properties);
bool SmartlookIsRecording();
const char* SmartlookGetDashboardSessionUrl(bool withTimestamp)
const char* SmartlookGetDashboardVisitorUrl();
void SmartlookEnableCrashlytics(bool enable);
const char* SmartlookStartTimedCustomEvent(const char* eventName);
const char* SmartlookStartTimedCustomEventWithProperties(const char* eventName, const char* properties);
void SmartlookStopTimedCustomEvent(const char* eventId);
void SmartlookStopTimedCustomEventWithProperties(const char* eventId, const char* properties);
void SmartlookCancelTimedCustomEvent(const char* eventId, const char* reason);
void SmartlookCancelTimedCustomEventWithProperties(const char* eventId, const char* reason, const char* properties);
void SmartlookSetGlobalEventProperty(const char* key, const char* value, bool immutable);
void SmartlookSetGlobalEventProperties(const char* properties, bool immutable);
void SmartlookRemoveGlobalEventProperty(const char* key);
void SmartlookRemoveAllGlobalEventProperties();
void SmartlookResetSession(bool resetUser);
void SmartlookSetRenderingMode(int renderingMode); // native = 0, no rendering = 1
void SmartlookSetEventTrackingMode(const char* eventTrackingMode);
void SmartlookSetEventTrackingModes(const char* eventTrackingModes);
typedef void (*DashboardUrlCallback)(const char* url);
void SmartlookSetDashboardSessionUrlListener(DashboardUrlCallback callback);
void SmartlookSetDashboardVisitorUrlListener(DashboardUrlCallback callback);
void SmartlookUnregisterDashboardListener();
#if defined __cplusplus
};
#endif

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c9d04bd4826820c4791e2b9f2164b603
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 99e005aebd892ce4698de31d560d8807
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,456 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target arm64-apple-ios10.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name Smartlook
import AVFoundation
import CoreData
import CoreGraphics
import CoreMedia
import CoreVideo
import Foundation
import MapKit
import MetalKit
import OSLog
import QuartzCore
import SceneKit
@_exported import Smartlook
import SpriteKit
import Swift
import UIKit
import Vision
import WebKit
import _Concurrency
extension UIKit.UIImage {
convenience public init?(color: Smartlook.PlatformColor, size: CoreGraphics.CGSize = CGSize(width: 1, height: 1))
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(trackCustomEventWithName:) dynamic public class func objcTrackCustomEvent(name: Swift.String)
@objc(trackCustomEventWithName:props:) dynamic public class func trackCustomEvent(name: Swift.String, props: [Swift.String : Swift.String]? = nil)
}
extension Smartlook.Smartlook {
@objc(startTimedCustomEventWithName:props:) dynamic public class func startTimedCustomEvent(name: Swift.String, props: [Swift.String : Swift.String]? = nil) -> Swift.String
@objc(trackTimedCustomEventWithEventId:props:) dynamic public class func trackTimedCustomEvent(eventId: Swift.String, props: [Swift.String : Swift.String]? = nil)
@objc(trackTimedCustomEventCancelWithEventId:reason:props:) dynamic public class func trackTimedCustomEventCancel(eventId: Swift.String, reason: Swift.String?, props: [Swift.String : Swift.String]?)
}
extension Smartlook.Smartlook {
public enum NavigationEventType : Swift.String {
case enter
case exit
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public class func trackNavigationEvent(withControllerId name: Swift.String, type: Smartlook.Smartlook.NavigationEventType)
}
public typealias SLNavigationType = Foundation.NSString
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(trackNavigationEventWithControllerId:type:) dynamic public class func objcTrackNavigationEvent(controllerId: Swift.String, type: Foundation.NSString)
}
extension Smartlook.Smartlook {
public class func setGlobalEventProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@objc(setGlobalEventPropertyValue:forName:immutable:) dynamic public class func setGlobalEventProperty(value: Swift.String, forName name: Swift.String, immutable: Swift.Bool = false)
@objc(removeGlobalEventPropertyForName:) dynamic public class func removeGlobalEventProperty(forName name: Swift.String)
@objc(clearGlobalEventProperties) dynamic public class func clearGlobalEventProperties()
}
extension Smartlook.Smartlook {
@available(*, deprecated, message: "Use `setGlobalEventProperty(value:forName:immutable:)` instead.")
@objc(setGlobalEventPropertyValue:forName:withOptions:) dynamic public class func objcSetGlobalEventProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@available(swift, obsoleted: 0.1)
@objc(setGlobalEventPropertyValue:forName:) dynamic public class func objcSetGlobalEventProperty(value: Swift.String, forName name: Swift.String)
}
@objc(SLSensitiveData) public protocol SensitiveData {
}
@objc(SLNonSensitiveData) public protocol NonSensitiveData {
}
@_inheritsConvenienceInitializers @objc(Smartlook) public class Smartlook : ObjectiveC.NSObject {
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@objc(SLAmplitudeIntegration) public class AmplitudeIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith amplitudeInstance: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
@objc(SLDashboardVisitorURLChangedNotification) dynamic public class var dashboardVisitorURLChanged: Foundation.NSNotification.Name {
@objc get
}
@objc(setUserIdentifier:) dynamic public class func setUserIdentifier(_ userIdentifier: Swift.String?)
@objc public enum SLPropertyOption : Swift.Int {
case `default` = 0
case immutable = 1
public init?(rawValue: Swift.Int)
public typealias RawValue = Swift.Int
public var rawValue: Swift.Int {
get
}
}
public class func setSessionProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption? = nil)
@objc(removeSessionPropertyForName:) dynamic public class func removeSessionProperty(forName name: Swift.String)
@objc(clearSessionProperties) dynamic public class func clearSessionProperties()
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setSessionPropertyValue:forName:withOptions:) dynamic public class func objcSetSessionProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@available(swift, obsoleted: 0.1)
@objc(setSessionPropertyValue:forName:) dynamic public class func objcSetSessionProperty(value: Swift.String, forName name: Swift.String)
}
extension Smartlook.Smartlook {
@objc(startRecording) dynamic public class func startRecording()
@objc(stopRecording) dynamic public class func stopRecording()
@objc(isRecording) dynamic public class func isRecording() -> Swift.Bool
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setEventTrackingModeTo:) dynamic public class func objcSetEventTrackingMode(to mode: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(setEventTrackingModesTo:) dynamic public class func objcSetEventTrackingModes(to modes: [Foundation.NSString])
@available(swift, obsoleted: 0.1)
@objc(currentEventTrackingModes) dynamic public class func objcCurrentEventTrackingModes() -> [Foundation.NSString]
}
extension Smartlook.Smartlook {
@objc(SLDashboardSessionURLChangedNotification) dynamic public class var dashboardSessionURLChanged: Foundation.NSNotification.Name {
@objc get
}
@objc(resetSessionAndUser:) dynamic public class func resetSession(resetUser: Swift.Bool = false)
}
extension Smartlook.Smartlook {
@objc(SLFirebaseAnalyticsIntegration) public class FirebaseAnalyticsIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith analyticsClass: Swift.AnyClass)
@objc deinit
}
}
public enum BridgeTechnology : Swift.String {
case reactNative
case flutter
case cordova
case ionic
case unity
case unreal
case xamarin
case other
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
infix operator <~ : AssignmentPrecedence
extension UIKit.UIView {
@objc @_Concurrency.MainActor(unsafe) dynamic public var slSensitive: Swift.Bool {
@objc get
@objc set
}
}
extension Smartlook.Smartlook {
@objc(getDashboardSessionURLWithCurrentTimestamp:) dynamic public class func getDashboardSessionURL(withCurrentTimestamp withTimestamp: Swift.Bool = false) -> Foundation.URL?
@objc(getDashboardVisitorURL) dynamic public class func getDashboardVisitorURL() -> Foundation.URL?
}
extension Smartlook.Smartlook {
@objc(setBlacklistedItemsColor:) dynamic public class func setBlacklistedItem(color: Smartlook.PlatformColor)
@objc(registerBlacklistedObject:) dynamic public class func registerBlacklisted(object: Any)
@objc(unregisterBlacklistedObject:) dynamic public class func unregisterBlacklisted(object: Any)
@objc(registerWhitelistedObject:) dynamic public class func registerWhitelisted(object: Any)
@objc(unregisterWhitelistedObject:) dynamic public class func unregisterWhitelisted(object: Any)
}
public typealias PlatformApplication = UIKit.UIApplication
public typealias PlatformScreen = UIKit.UIScreen
public typealias PlatformResponder = UIKit.UIResponder
public typealias PlatformImage = UIKit.UIImage
public typealias PlatformColor = UIKit.UIColor
public typealias PlatformFont = UIKit.UIFont
@available(iOS 13, tvOS 13, *)
public typealias PlatformScene = UIKit.UIScene
@available(iOS 13, tvOS 13, *)
public typealias PlatformWindowScene = UIKit.UIWindowScene
public typealias PlatformWindow = UIKit.UIWindow
public typealias PlatformView = UIKit.UIView
public typealias PlatformViewController = UIKit.UIViewController
public typealias PlatformImageView = UIKit.UIImageView
public typealias PlatformScrollView = UIKit.UIScrollView
public typealias PlatformCollectionView = UIKit.UICollectionView
public typealias PlatformTableView = UIKit.UITableView
public typealias PlatformTableViewCell = UIKit.UITableViewCell
public typealias PlatformActivityIndicatorView = UIKit.UIActivityIndicatorView
public typealias PlatformVisualEffectView = UIKit.UIVisualEffectView
public typealias PlatformLabel = UIKit.UILabel
public typealias PlatformTextView = UIKit.UITextView
public typealias PlatformTextField = UIKit.UITextField
public typealias PlatformButton = UIKit.UIButton
public typealias PlatformPageControl = UIKit.UIPageControl
public typealias PlatformImageRendererFormat = UIKit.UIGraphicsImageRendererFormat
public typealias PlatformImageRenderer = UIKit.UIGraphicsImageRenderer
public typealias PlatformBezierPath = UIKit.UIBezierPath
public typealias PlatformPickerView = UIKit.UIPickerView
public typealias PlatformRefreshControl = UIKit.UIRefreshControl
public typealias PlatformSwitch = UIKit.UISwitch
public typealias PlatformSlider = UIKit.UISlider
public typealias PlatformStepper = UIKit.UIStepper
public typealias PlatformDatePicker = UIKit.UIDatePicker
extension Smartlook.Smartlook {
@objc(SLMixpanelIntegration) public class MixpanelIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith mixpanelInstance: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
@objc(SLFirebaseCrashlyticsIntegration) public class FirebaseCrashlyticsIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith crashlytics: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
public enum RenderingModeOption : Swift.String {
case none
case colorWireframe
case blueprintWireframe
case iconBlueprintWireframe
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public enum RenderingMode : Swift.String {
case native
case wireframe
case noRendering
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public class func setRenderingMode(to renderingMode: Smartlook.Smartlook.RenderingMode, option: Smartlook.Smartlook.RenderingModeOption? = nil)
public class func currentRenderingMode() -> Smartlook.Smartlook.RenderingMode
public class func currentRenderingModeOption() -> Smartlook.Smartlook.RenderingModeOption
}
infix operator ?= : AssignmentPrecedence
infix operator ?+ : AdditionPrecedence
infix operator ≈ : DefaultPrecedence
extension Smartlook.Smartlook {
public enum EventTrackingMode : Swift.String, Swift.Codable {
case noTracking
case fullTracking
case ignoreUserInteractionEvents
case ignoreNavigationInteractionEvents
case ignoreRageClickEvents
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
}
extension Smartlook.Smartlook.EventTrackingMode : Swift.Comparable {
public static func < (lhs: Smartlook.Smartlook.EventTrackingMode, rhs: Smartlook.Smartlook.EventTrackingMode) -> Swift.Bool
}
extension Smartlook.Smartlook {
public class func setEventTrackingMode(to eventTrackingMode: Smartlook.Smartlook.EventTrackingMode)
public class func setEventTrackingModes(to eventTrackingModes: [Smartlook.Smartlook.EventTrackingMode])
public class func currentEventTrackingModes() -> [Smartlook.Smartlook.EventTrackingMode]
}
extension Smartlook.Smartlook {
@_inheritsConvenienceInitializers @objc(SLSetupConfiguration) public class ObjCSetupConfiguration : ObjectiveC.NSObject {
@objc public var apiKey: Swift.String
@objc public var framerate: Swift.Int
@objc public var enableAdaptiveFramerate: Swift.Bool
@objc public var renderingMode: Foundation.NSString?
@objc public var renderingModeOption: Foundation.NSString?
@objc public var eventTrackingModes: [Foundation.NSString]?
@objc public var resetSession: Swift.Bool
@objc public var resetSessionAndUser: Swift.Bool
@objc public var regionalStorage: Foundation.NSString?
@objc public var enableIntegrations: [Smartlook.Smartlook.Integration]?
@available(swift, obsoleted: 0.1)
@objc(setInternalProps:) public func objcSetInternalProperties(_ props: Any)
@objc(init) override dynamic public init()
@objc(initWithKey:) public init(withKey: Swift.String)
@available(swift, obsoleted: 0.1)
@objc(configurationWithKey:) public class func objcConfiguration(withKey key: Swift.String) -> Smartlook.Smartlook.ObjCSetupConfiguration
@objc deinit
}
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setupWithConfiguration:) dynamic public class func objcSetup(configuration: Smartlook.Smartlook.ObjCSetupConfiguration)
@available(swift, obsoleted: 0.1)
@objc(setupAndStartRecordingWithConfiguration:) dynamic public class func objcSetupAndStartRecording(configuration: Smartlook.Smartlook.ObjCSetupConfiguration)
}
extension QuartzCore.CATransform3D : Swift.Codable {
public init(from decoder: Swift.Decoder) throws
public func encode(to encoder: Swift.Encoder) throws
}
extension QuartzCore.CATransform3D : Swift.Equatable {
public static func == (lhs: QuartzCore.CATransform3D, rhs: QuartzCore.CATransform3D) -> Swift.Bool
}
extension Smartlook.Smartlook {
public enum Region : Swift.String {
case eu
case us
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
}
extension Smartlook.Smartlook {
public struct SegmentMiddlewareOption : Swift.OptionSet {
public let rawValue: Swift.UInt32
public init(rawValue: Swift.UInt32)
public static let track: Smartlook.Smartlook.SegmentMiddlewareOption
public static let screen: Smartlook.Smartlook.SegmentMiddlewareOption
public static let identify: Smartlook.Smartlook.SegmentMiddlewareOption
public static let alias: Smartlook.Smartlook.SegmentMiddlewareOption
public static let reset: Smartlook.Smartlook.SegmentMiddlewareOption
public static let all: Smartlook.Smartlook.SegmentMiddlewareOption
public static let `default`: Smartlook.Smartlook.SegmentMiddlewareOption
public typealias ArrayLiteralElement = Smartlook.Smartlook.SegmentMiddlewareOption
public typealias Element = Smartlook.Smartlook.SegmentMiddlewareOption
public typealias RawValue = Swift.UInt32
}
public class func segmentSourceMiddleware(options option: Smartlook.Smartlook.SegmentMiddlewareOption, segResetEventType resetEventType: Swift.Int) -> Any?
@available(swift, obsoleted: 0.1)
@objc(segmentSourceMiddlewareWithOptions:whereSEGResetEventTypeIs:) dynamic public class func objcSegmentSourceMiddleware(options option: Swift.UInt32, segResetEventType resetEventType: Swift.Int) -> Any?
}
extension Smartlook.Smartlook {
public class SetupConfiguration {
final public let apiKey: Swift.String
public var framerate: Swift.Int?
public var enableAdaptiveFramerate: Swift.Bool?
public var renderingMode: Smartlook.Smartlook.RenderingMode?
public var renderingModeOption: Smartlook.Smartlook.RenderingModeOption?
public var eventTrackingModes: [Smartlook.Smartlook.EventTrackingMode]?
public var resetSession: Swift.Bool?
public var resetSessionAndUser: Swift.Bool?
public var regionalStorage: Smartlook.Smartlook.Region?
public var enableIntegrations: [Smartlook.Smartlook.Integration]?
public init(key: Swift.String)
public func setInternalProps(_ props: Any)
@objc deinit
}
public class func setup(configuration: Smartlook.Smartlook.SetupConfiguration)
public class func setupAndStartRecording(configuration: Smartlook.Smartlook.SetupConfiguration)
}
@_inheritsConvenienceInitializers @objc(SLWireframeDataItem) public class WireframeDataItem : ObjectiveC.NSObject {
@objc public var left: CoreGraphics.CGFloat
@objc public var top: CoreGraphics.CGFloat
@objc public var width: CoreGraphics.CGFloat
@objc public var height: CoreGraphics.CGFloat
@objc public var color: UIKit.UIColor?
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setRenderingModeTo:) dynamic public class func objcSetRenderingMode(to mode: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(setRenderingModeTo:withOption:) dynamic public class func objcSetRenderingMode(to mode: Foundation.NSString, options: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(currentRenderingMode) dynamic public class func objcCurrentRenderingMode() -> Foundation.NSString
@available(swift, obsoleted: 0.1)
@objc(currentRenderingModeOption) dynamic public class func objcCurrentRenderingModeOption() -> Foundation.NSString
}
extension Smartlook.Smartlook {
@objc(enableIntegrations:) dynamic public class func enable(integrations: [Smartlook.Smartlook.Integration])
@objc(disableIntegrations:) dynamic public class func disable(integrations: [Smartlook.Smartlook.Integration])
@objc(disableAllIntegrations) dynamic public class func disableAllIntegrations()
@objc(currentlyEnabledIntegrations) dynamic public class func currentlyEnabledIntegrations() -> [Smartlook.Smartlook.Integration]
}
extension Smartlook.Smartlook {
@objc(SLHeapIntegration) public class HeapIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith heapClass: Swift.AnyClass)
@objc deinit
}
}
@_inheritsConvenienceInitializers @objc(SLWireframeData) public class WireframeData : ObjectiveC.NSObject {
@objc public var width: CoreGraphics.CGFloat
@objc public var height: CoreGraphics.CGFloat
@objc public var items: [Smartlook.WireframeDataItem]
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@_inheritsConvenienceInitializers @objc(SLIntegration) public class Integration : ObjectiveC.NSObject {
@objc public var name: Swift.String {
@objc get
}
@objc public var isValid: Swift.Bool {
@objc get
}
@objc public var integratedObject: Any?
@objc override dynamic public init()
@objc deinit
}
}
extension Smartlook.Smartlook {
public static func registerDenied(_ object: Any)
public static func unregisterDenied(_ object: Any)
public static func registerAllowed(_ object: Any)
public static func unregisterAllowed(_ object: Any)
public static func isSensitive(_ view: Swift.AnyObject) -> Swift.Bool
}
@objc(SLBridgeInterface) public protocol BridgeInterface {
@objc var sdkFramework: Swift.String? { get set }
@objc var sdkFrameworkVersion: Swift.String? { get set }
@objc var sdkFrameworkPluginVersion: Swift.String? { get set }
@objc(obtainWireframeDataWithCompletion:) func obtainWireframeData(completion: (Smartlook.WireframeData?) -> Swift.Void)
}
extension Smartlook.Smartlook {
@objc(registerBridgeInterface:) dynamic public class func register(bridgeInterface: Smartlook.BridgeInterface)
}
extension Smartlook.Smartlook.NavigationEventType : Swift.Equatable {}
extension Smartlook.Smartlook.NavigationEventType : Swift.Hashable {}
extension Smartlook.Smartlook.NavigationEventType : Swift.RawRepresentable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.Equatable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.Hashable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.RawRepresentable {}
extension Smartlook.BridgeTechnology : Swift.Equatable {}
extension Smartlook.BridgeTechnology : Swift.Hashable {}
extension Smartlook.BridgeTechnology : Swift.RawRepresentable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.Equatable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.Hashable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.RawRepresentable {}
extension Smartlook.Smartlook.RenderingMode : Swift.Equatable {}
extension Smartlook.Smartlook.RenderingMode : Swift.Hashable {}
extension Smartlook.Smartlook.RenderingMode : Swift.RawRepresentable {}
extension Smartlook.Smartlook.EventTrackingMode : Swift.Hashable {}
extension Smartlook.Smartlook.EventTrackingMode : Swift.RawRepresentable {}
extension Smartlook.Smartlook.Region : Swift.Equatable {}
extension Smartlook.Smartlook.Region : Swift.Hashable {}
extension Smartlook.Smartlook.Region : Swift.RawRepresentable {}

View File

@@ -0,0 +1,456 @@
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)
// swift-module-flags: -target armv7-apple-ios10.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name Smartlook
import AVFoundation
import CoreData
import CoreGraphics
import CoreMedia
import CoreVideo
import Foundation
import MapKit
import MetalKit
import OSLog
import QuartzCore
import SceneKit
@_exported import Smartlook
import SpriteKit
import Swift
import UIKit
import Vision
import WebKit
import _Concurrency
extension UIKit.UIImage {
convenience public init?(color: Smartlook.PlatformColor, size: CoreGraphics.CGSize = CGSize(width: 1, height: 1))
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(trackCustomEventWithName:) dynamic public class func objcTrackCustomEvent(name: Swift.String)
@objc(trackCustomEventWithName:props:) dynamic public class func trackCustomEvent(name: Swift.String, props: [Swift.String : Swift.String]? = nil)
}
extension Smartlook.Smartlook {
@objc(startTimedCustomEventWithName:props:) dynamic public class func startTimedCustomEvent(name: Swift.String, props: [Swift.String : Swift.String]? = nil) -> Swift.String
@objc(trackTimedCustomEventWithEventId:props:) dynamic public class func trackTimedCustomEvent(eventId: Swift.String, props: [Swift.String : Swift.String]? = nil)
@objc(trackTimedCustomEventCancelWithEventId:reason:props:) dynamic public class func trackTimedCustomEventCancel(eventId: Swift.String, reason: Swift.String?, props: [Swift.String : Swift.String]?)
}
extension Smartlook.Smartlook {
public enum NavigationEventType : Swift.String {
case enter
case exit
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public class func trackNavigationEvent(withControllerId name: Swift.String, type: Smartlook.Smartlook.NavigationEventType)
}
public typealias SLNavigationType = Foundation.NSString
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(trackNavigationEventWithControllerId:type:) dynamic public class func objcTrackNavigationEvent(controllerId: Swift.String, type: Foundation.NSString)
}
extension Smartlook.Smartlook {
public class func setGlobalEventProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@objc(setGlobalEventPropertyValue:forName:immutable:) dynamic public class func setGlobalEventProperty(value: Swift.String, forName name: Swift.String, immutable: Swift.Bool = false)
@objc(removeGlobalEventPropertyForName:) dynamic public class func removeGlobalEventProperty(forName name: Swift.String)
@objc(clearGlobalEventProperties) dynamic public class func clearGlobalEventProperties()
}
extension Smartlook.Smartlook {
@available(*, deprecated, message: "Use `setGlobalEventProperty(value:forName:immutable:)` instead.")
@objc(setGlobalEventPropertyValue:forName:withOptions:) dynamic public class func objcSetGlobalEventProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@available(swift, obsoleted: 0.1)
@objc(setGlobalEventPropertyValue:forName:) dynamic public class func objcSetGlobalEventProperty(value: Swift.String, forName name: Swift.String)
}
@objc(SLSensitiveData) public protocol SensitiveData {
}
@objc(SLNonSensitiveData) public protocol NonSensitiveData {
}
@_inheritsConvenienceInitializers @objc(Smartlook) public class Smartlook : ObjectiveC.NSObject {
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@objc(SLAmplitudeIntegration) public class AmplitudeIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith amplitudeInstance: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
@objc(SLDashboardVisitorURLChangedNotification) dynamic public class var dashboardVisitorURLChanged: Foundation.NSNotification.Name {
@objc get
}
@objc(setUserIdentifier:) dynamic public class func setUserIdentifier(_ userIdentifier: Swift.String?)
@objc public enum SLPropertyOption : Swift.Int {
case `default` = 0
case immutable = 1
public init?(rawValue: Swift.Int)
public typealias RawValue = Swift.Int
public var rawValue: Swift.Int {
get
}
}
public class func setSessionProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption? = nil)
@objc(removeSessionPropertyForName:) dynamic public class func removeSessionProperty(forName name: Swift.String)
@objc(clearSessionProperties) dynamic public class func clearSessionProperties()
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setSessionPropertyValue:forName:withOptions:) dynamic public class func objcSetSessionProperty(value: Swift.String, forName name: Swift.String, options: Smartlook.Smartlook.SLPropertyOption)
@available(swift, obsoleted: 0.1)
@objc(setSessionPropertyValue:forName:) dynamic public class func objcSetSessionProperty(value: Swift.String, forName name: Swift.String)
}
extension Smartlook.Smartlook {
@objc(startRecording) dynamic public class func startRecording()
@objc(stopRecording) dynamic public class func stopRecording()
@objc(isRecording) dynamic public class func isRecording() -> Swift.Bool
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setEventTrackingModeTo:) dynamic public class func objcSetEventTrackingMode(to mode: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(setEventTrackingModesTo:) dynamic public class func objcSetEventTrackingModes(to modes: [Foundation.NSString])
@available(swift, obsoleted: 0.1)
@objc(currentEventTrackingModes) dynamic public class func objcCurrentEventTrackingModes() -> [Foundation.NSString]
}
extension Smartlook.Smartlook {
@objc(SLDashboardSessionURLChangedNotification) dynamic public class var dashboardSessionURLChanged: Foundation.NSNotification.Name {
@objc get
}
@objc(resetSessionAndUser:) dynamic public class func resetSession(resetUser: Swift.Bool = false)
}
extension Smartlook.Smartlook {
@objc(SLFirebaseAnalyticsIntegration) public class FirebaseAnalyticsIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith analyticsClass: Swift.AnyClass)
@objc deinit
}
}
public enum BridgeTechnology : Swift.String {
case reactNative
case flutter
case cordova
case ionic
case unity
case unreal
case xamarin
case other
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
infix operator <~ : AssignmentPrecedence
extension UIKit.UIView {
@objc @_Concurrency.MainActor(unsafe) dynamic public var slSensitive: Swift.Bool {
@objc get
@objc set
}
}
extension Smartlook.Smartlook {
@objc(getDashboardSessionURLWithCurrentTimestamp:) dynamic public class func getDashboardSessionURL(withCurrentTimestamp withTimestamp: Swift.Bool = false) -> Foundation.URL?
@objc(getDashboardVisitorURL) dynamic public class func getDashboardVisitorURL() -> Foundation.URL?
}
extension Smartlook.Smartlook {
@objc(setBlacklistedItemsColor:) dynamic public class func setBlacklistedItem(color: Smartlook.PlatformColor)
@objc(registerBlacklistedObject:) dynamic public class func registerBlacklisted(object: Any)
@objc(unregisterBlacklistedObject:) dynamic public class func unregisterBlacklisted(object: Any)
@objc(registerWhitelistedObject:) dynamic public class func registerWhitelisted(object: Any)
@objc(unregisterWhitelistedObject:) dynamic public class func unregisterWhitelisted(object: Any)
}
public typealias PlatformApplication = UIKit.UIApplication
public typealias PlatformScreen = UIKit.UIScreen
public typealias PlatformResponder = UIKit.UIResponder
public typealias PlatformImage = UIKit.UIImage
public typealias PlatformColor = UIKit.UIColor
public typealias PlatformFont = UIKit.UIFont
@available(iOS 13, tvOS 13, *)
public typealias PlatformScene = UIKit.UIScene
@available(iOS 13, tvOS 13, *)
public typealias PlatformWindowScene = UIKit.UIWindowScene
public typealias PlatformWindow = UIKit.UIWindow
public typealias PlatformView = UIKit.UIView
public typealias PlatformViewController = UIKit.UIViewController
public typealias PlatformImageView = UIKit.UIImageView
public typealias PlatformScrollView = UIKit.UIScrollView
public typealias PlatformCollectionView = UIKit.UICollectionView
public typealias PlatformTableView = UIKit.UITableView
public typealias PlatformTableViewCell = UIKit.UITableViewCell
public typealias PlatformActivityIndicatorView = UIKit.UIActivityIndicatorView
public typealias PlatformVisualEffectView = UIKit.UIVisualEffectView
public typealias PlatformLabel = UIKit.UILabel
public typealias PlatformTextView = UIKit.UITextView
public typealias PlatformTextField = UIKit.UITextField
public typealias PlatformButton = UIKit.UIButton
public typealias PlatformPageControl = UIKit.UIPageControl
public typealias PlatformImageRendererFormat = UIKit.UIGraphicsImageRendererFormat
public typealias PlatformImageRenderer = UIKit.UIGraphicsImageRenderer
public typealias PlatformBezierPath = UIKit.UIBezierPath
public typealias PlatformPickerView = UIKit.UIPickerView
public typealias PlatformRefreshControl = UIKit.UIRefreshControl
public typealias PlatformSwitch = UIKit.UISwitch
public typealias PlatformSlider = UIKit.UISlider
public typealias PlatformStepper = UIKit.UIStepper
public typealias PlatformDatePicker = UIKit.UIDatePicker
extension Smartlook.Smartlook {
@objc(SLMixpanelIntegration) public class MixpanelIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith mixpanelInstance: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
@objc(SLFirebaseCrashlyticsIntegration) public class FirebaseCrashlyticsIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith crashlytics: Any)
@objc deinit
}
}
extension Smartlook.Smartlook {
public enum RenderingModeOption : Swift.String {
case none
case colorWireframe
case blueprintWireframe
case iconBlueprintWireframe
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public enum RenderingMode : Swift.String {
case native
case wireframe
case noRendering
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
public class func setRenderingMode(to renderingMode: Smartlook.Smartlook.RenderingMode, option: Smartlook.Smartlook.RenderingModeOption? = nil)
public class func currentRenderingMode() -> Smartlook.Smartlook.RenderingMode
public class func currentRenderingModeOption() -> Smartlook.Smartlook.RenderingModeOption
}
infix operator ?= : AssignmentPrecedence
infix operator ?+ : AdditionPrecedence
infix operator ≈ : DefaultPrecedence
extension Smartlook.Smartlook {
public enum EventTrackingMode : Swift.String, Swift.Codable {
case noTracking
case fullTracking
case ignoreUserInteractionEvents
case ignoreNavigationInteractionEvents
case ignoreRageClickEvents
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
}
extension Smartlook.Smartlook.EventTrackingMode : Swift.Comparable {
public static func < (lhs: Smartlook.Smartlook.EventTrackingMode, rhs: Smartlook.Smartlook.EventTrackingMode) -> Swift.Bool
}
extension Smartlook.Smartlook {
public class func setEventTrackingMode(to eventTrackingMode: Smartlook.Smartlook.EventTrackingMode)
public class func setEventTrackingModes(to eventTrackingModes: [Smartlook.Smartlook.EventTrackingMode])
public class func currentEventTrackingModes() -> [Smartlook.Smartlook.EventTrackingMode]
}
extension Smartlook.Smartlook {
@_inheritsConvenienceInitializers @objc(SLSetupConfiguration) public class ObjCSetupConfiguration : ObjectiveC.NSObject {
@objc public var apiKey: Swift.String
@objc public var framerate: Swift.Int
@objc public var enableAdaptiveFramerate: Swift.Bool
@objc public var renderingMode: Foundation.NSString?
@objc public var renderingModeOption: Foundation.NSString?
@objc public var eventTrackingModes: [Foundation.NSString]?
@objc public var resetSession: Swift.Bool
@objc public var resetSessionAndUser: Swift.Bool
@objc public var regionalStorage: Foundation.NSString?
@objc public var enableIntegrations: [Smartlook.Smartlook.Integration]?
@available(swift, obsoleted: 0.1)
@objc(setInternalProps:) public func objcSetInternalProperties(_ props: Any)
@objc(init) override dynamic public init()
@objc(initWithKey:) public init(withKey: Swift.String)
@available(swift, obsoleted: 0.1)
@objc(configurationWithKey:) public class func objcConfiguration(withKey key: Swift.String) -> Smartlook.Smartlook.ObjCSetupConfiguration
@objc deinit
}
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setupWithConfiguration:) dynamic public class func objcSetup(configuration: Smartlook.Smartlook.ObjCSetupConfiguration)
@available(swift, obsoleted: 0.1)
@objc(setupAndStartRecordingWithConfiguration:) dynamic public class func objcSetupAndStartRecording(configuration: Smartlook.Smartlook.ObjCSetupConfiguration)
}
extension QuartzCore.CATransform3D : Swift.Codable {
public init(from decoder: Swift.Decoder) throws
public func encode(to encoder: Swift.Encoder) throws
}
extension QuartzCore.CATransform3D : Swift.Equatable {
public static func == (lhs: QuartzCore.CATransform3D, rhs: QuartzCore.CATransform3D) -> Swift.Bool
}
extension Smartlook.Smartlook {
public enum Region : Swift.String {
case eu
case us
public init?(rawValue: Swift.String)
public typealias RawValue = Swift.String
public var rawValue: Swift.String {
get
}
}
}
extension Smartlook.Smartlook {
public struct SegmentMiddlewareOption : Swift.OptionSet {
public let rawValue: Swift.UInt32
public init(rawValue: Swift.UInt32)
public static let track: Smartlook.Smartlook.SegmentMiddlewareOption
public static let screen: Smartlook.Smartlook.SegmentMiddlewareOption
public static let identify: Smartlook.Smartlook.SegmentMiddlewareOption
public static let alias: Smartlook.Smartlook.SegmentMiddlewareOption
public static let reset: Smartlook.Smartlook.SegmentMiddlewareOption
public static let all: Smartlook.Smartlook.SegmentMiddlewareOption
public static let `default`: Smartlook.Smartlook.SegmentMiddlewareOption
public typealias ArrayLiteralElement = Smartlook.Smartlook.SegmentMiddlewareOption
public typealias Element = Smartlook.Smartlook.SegmentMiddlewareOption
public typealias RawValue = Swift.UInt32
}
public class func segmentSourceMiddleware(options option: Smartlook.Smartlook.SegmentMiddlewareOption, segResetEventType resetEventType: Swift.Int) -> Any?
@available(swift, obsoleted: 0.1)
@objc(segmentSourceMiddlewareWithOptions:whereSEGResetEventTypeIs:) dynamic public class func objcSegmentSourceMiddleware(options option: Swift.UInt32, segResetEventType resetEventType: Swift.Int) -> Any?
}
extension Smartlook.Smartlook {
public class SetupConfiguration {
final public let apiKey: Swift.String
public var framerate: Swift.Int?
public var enableAdaptiveFramerate: Swift.Bool?
public var renderingMode: Smartlook.Smartlook.RenderingMode?
public var renderingModeOption: Smartlook.Smartlook.RenderingModeOption?
public var eventTrackingModes: [Smartlook.Smartlook.EventTrackingMode]?
public var resetSession: Swift.Bool?
public var resetSessionAndUser: Swift.Bool?
public var regionalStorage: Smartlook.Smartlook.Region?
public var enableIntegrations: [Smartlook.Smartlook.Integration]?
public init(key: Swift.String)
public func setInternalProps(_ props: Any)
@objc deinit
}
public class func setup(configuration: Smartlook.Smartlook.SetupConfiguration)
public class func setupAndStartRecording(configuration: Smartlook.Smartlook.SetupConfiguration)
}
@_inheritsConvenienceInitializers @objc(SLWireframeDataItem) public class WireframeDataItem : ObjectiveC.NSObject {
@objc public var left: CoreGraphics.CGFloat
@objc public var top: CoreGraphics.CGFloat
@objc public var width: CoreGraphics.CGFloat
@objc public var height: CoreGraphics.CGFloat
@objc public var color: UIKit.UIColor?
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@available(swift, obsoleted: 0.1)
@objc(setRenderingModeTo:) dynamic public class func objcSetRenderingMode(to mode: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(setRenderingModeTo:withOption:) dynamic public class func objcSetRenderingMode(to mode: Foundation.NSString, options: Foundation.NSString)
@available(swift, obsoleted: 0.1)
@objc(currentRenderingMode) dynamic public class func objcCurrentRenderingMode() -> Foundation.NSString
@available(swift, obsoleted: 0.1)
@objc(currentRenderingModeOption) dynamic public class func objcCurrentRenderingModeOption() -> Foundation.NSString
}
extension Smartlook.Smartlook {
@objc(enableIntegrations:) dynamic public class func enable(integrations: [Smartlook.Smartlook.Integration])
@objc(disableIntegrations:) dynamic public class func disable(integrations: [Smartlook.Smartlook.Integration])
@objc(disableAllIntegrations) dynamic public class func disableAllIntegrations()
@objc(currentlyEnabledIntegrations) dynamic public class func currentlyEnabledIntegrations() -> [Smartlook.Smartlook.Integration]
}
extension Smartlook.Smartlook {
@objc(SLHeapIntegration) public class HeapIntegration : Smartlook.Smartlook.Integration {
@objc override public var name: Swift.String {
@objc get
}
@objc override public var isValid: Swift.Bool {
@objc get
}
@objc(initIntegrationWith:) public init(integrationWith heapClass: Swift.AnyClass)
@objc deinit
}
}
@_inheritsConvenienceInitializers @objc(SLWireframeData) public class WireframeData : ObjectiveC.NSObject {
@objc public var width: CoreGraphics.CGFloat
@objc public var height: CoreGraphics.CGFloat
@objc public var items: [Smartlook.WireframeDataItem]
@objc override dynamic public init()
@objc deinit
}
extension Smartlook.Smartlook {
@_inheritsConvenienceInitializers @objc(SLIntegration) public class Integration : ObjectiveC.NSObject {
@objc public var name: Swift.String {
@objc get
}
@objc public var isValid: Swift.Bool {
@objc get
}
@objc public var integratedObject: Any?
@objc override dynamic public init()
@objc deinit
}
}
extension Smartlook.Smartlook {
public static func registerDenied(_ object: Any)
public static func unregisterDenied(_ object: Any)
public static func registerAllowed(_ object: Any)
public static func unregisterAllowed(_ object: Any)
public static func isSensitive(_ view: Swift.AnyObject) -> Swift.Bool
}
@objc(SLBridgeInterface) public protocol BridgeInterface {
@objc var sdkFramework: Swift.String? { get set }
@objc var sdkFrameworkVersion: Swift.String? { get set }
@objc var sdkFrameworkPluginVersion: Swift.String? { get set }
@objc(obtainWireframeDataWithCompletion:) func obtainWireframeData(completion: (Smartlook.WireframeData?) -> Swift.Void)
}
extension Smartlook.Smartlook {
@objc(registerBridgeInterface:) dynamic public class func register(bridgeInterface: Smartlook.BridgeInterface)
}
extension Smartlook.Smartlook.NavigationEventType : Swift.Equatable {}
extension Smartlook.Smartlook.NavigationEventType : Swift.Hashable {}
extension Smartlook.Smartlook.NavigationEventType : Swift.RawRepresentable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.Equatable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.Hashable {}
extension Smartlook.Smartlook.SLPropertyOption : Swift.RawRepresentable {}
extension Smartlook.BridgeTechnology : Swift.Equatable {}
extension Smartlook.BridgeTechnology : Swift.Hashable {}
extension Smartlook.BridgeTechnology : Swift.RawRepresentable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.Equatable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.Hashable {}
extension Smartlook.Smartlook.RenderingModeOption : Swift.RawRepresentable {}
extension Smartlook.Smartlook.RenderingMode : Swift.Equatable {}
extension Smartlook.Smartlook.RenderingMode : Swift.Hashable {}
extension Smartlook.Smartlook.RenderingMode : Swift.RawRepresentable {}
extension Smartlook.Smartlook.EventTrackingMode : Swift.Hashable {}
extension Smartlook.Smartlook.EventTrackingMode : Swift.RawRepresentable {}
extension Smartlook.Smartlook.Region : Swift.Equatable {}
extension Smartlook.Smartlook.Region : Swift.Hashable {}
extension Smartlook.Smartlook.Region : Swift.RawRepresentable {}

View File

@@ -0,0 +1,8 @@
//
// Smartlook SDK, © 2022 Smartlook.com
//
framework module Smartlook {
umbrella header "Smartlook.h"
requires objc
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b95d672953d016f4dbab99e59b7a5d0e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/Smartlook.h</key>
<data>
r6XbMWNSwbkrvOa8bJSdW8HKNIk=
</data>
<key>Headers/SmartlookCBridge.h</key>
<data>
pwne0rBASnuuf8BgvRiFKuzWJRg=
</data>
<key>Info.plist</key>
<data>
3J/5Xa4n4qx8rJI/ZMaqNVlU7XI=
</data>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftdoc</key>
<data>
sscLtAQhiy8/76Cno5avJ5U7VAA=
</data>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftinterface</key>
<data>
vzwvBCjZS/w/kE8luvlQ8Mk1kuE=
</data>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftmodule</key>
<data>
0/BafHdO1SP3NW4pSkZ/E/aTHHE=
</data>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftdoc</key>
<data>
P/NU8TBFILkBPoJzVXpWZweNRAc=
</data>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftinterface</key>
<data>
3E+oHnq6ZtLLpMw5b39UGib2HSs=
</data>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftmodule</key>
<data>
bDuSRQJG+SOszvsTNtklq4fzOAc=
</data>
<key>Modules/module.modulemap</key>
<data>
WJc6kjwz3eL/wIUY+ZSJnM+A0Lg=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/Smartlook.h</key>
<dict>
<key>hash</key>
<data>
r6XbMWNSwbkrvOa8bJSdW8HKNIk=
</data>
<key>hash2</key>
<data>
aSlcyxpxzYeixpazDg8GJo229A3OK8URDS47dCEdTEk=
</data>
</dict>
<key>Headers/SmartlookCBridge.h</key>
<dict>
<key>hash</key>
<data>
pwne0rBASnuuf8BgvRiFKuzWJRg=
</data>
<key>hash2</key>
<data>
D8G+InlD8teEUes9dcEQ3E7wKunIoImEuryJnScU3Fg=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftdoc</key>
<dict>
<key>hash</key>
<data>
sscLtAQhiy8/76Cno5avJ5U7VAA=
</data>
<key>hash2</key>
<data>
9tmncEwsEimfNP/+XnHBZ0EYHja1k3+s72HovfNgoFE=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftinterface</key>
<dict>
<key>hash</key>
<data>
vzwvBCjZS/w/kE8luvlQ8Mk1kuE=
</data>
<key>hash2</key>
<data>
nMkbLW1kx+pDAPezywN3KQH52XcOxdzv2Dir9PZejTA=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/arm64-apple-ios.swiftmodule</key>
<dict>
<key>hash</key>
<data>
0/BafHdO1SP3NW4pSkZ/E/aTHHE=
</data>
<key>hash2</key>
<data>
78YxRN/cJWlzrz27Eow5k9viRQZKNrb5RF8PcvCAvWs=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftdoc</key>
<dict>
<key>hash</key>
<data>
P/NU8TBFILkBPoJzVXpWZweNRAc=
</data>
<key>hash2</key>
<data>
jIgjWaz53e6nOJzWij8tm3X5kkRmsD/TT0L/vADZ6uw=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftinterface</key>
<dict>
<key>hash</key>
<data>
3E+oHnq6ZtLLpMw5b39UGib2HSs=
</data>
<key>hash2</key>
<data>
mCH57AxU/c2X2D1KvaQ9IzH+Fem+T94Yc1v9W/+be7c=
</data>
</dict>
<key>Modules/Smartlook.swiftmodule/armv7-apple-ios.swiftmodule</key>
<dict>
<key>hash</key>
<data>
bDuSRQJG+SOszvsTNtklq4fzOAc=
</data>
<key>hash2</key>
<data>
ARc3F/cBf2PVgfvTBoBoHb8IL7/O1dtGqbNIRFeDMeI=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
WJc6kjwz3eL/wIUY+ZSJnM+A0Lg=
</data>
<key>hash2</key>
<data>
uhMe5HspvDwkjMMWBJspvWF4nJq7RglCNw/y6B2xMDQ=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -146,7 +146,6 @@ PlayerSettings:
bundleVersion: 1.0
preloadedAssets:
- {fileID: 11400000, guid: cc969dbecb228fa49b16da9273753a8f, type: 2}
- {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
metroInputSource: 0
wsaTransparentSwapchain: 0
xboxOneDisableKinectGpuReservation: 1