From 1488f31a9b429bdf776a0f8a0ef3f893ba05f5f7 Mon Sep 17 00:00:00 2001 From: Adwin Ronald Ross Date: Wed, 14 Aug 2024 09:27:51 +0530 Subject: [PATCH] feat(ios): initial project setup --- .../contents.xcworkspacedata | 13 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/swiftpm/Package.resolved | 15 + .../UserInterfaceState.xcuserstate | Bin 0 -> 110366 bytes .../MeasureDemo.xcodeproj/project.pbxproj | 396 ++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 10265 bytes .../xcschemes/xcschememanagement.plist | 14 + ios/MeasureDemo/MeasureDemo/AppDelegate.swift | 33 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../MeasureDemo/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../MeasureDemo/Base.lproj/Main.storyboard | 24 + ios/MeasureDemo/MeasureDemo/Info.plist | 25 + .../MeasureDemo/SceneDelegate.swift | 51 ++ .../MeasureDemo/ViewController.swift | 99 +++ .../MeasureDemoObjc.xcodeproj/project.pbxproj | 398 ++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 5257 bytes .../xcschemes/xcschememanagement.plist | 14 + .../MeasureDemoObjc/AppDelegate.h | 14 + .../MeasureDemoObjc/AppDelegate.m | 42 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Base.lproj/Main.storyboard | 24 + .../MeasureDemoObjc/Info.plist | 25 + .../MeasureDemoObjc/SceneDelegate.h | 15 + .../MeasureDemoObjc/SceneDelegate.m | 57 ++ .../MeasureDemoObjc/ViewController.h | 14 + .../MeasureDemoObjc/ViewController.m | 106 ++++ ios/MeasureDemoObjc/MeasureDemoObjc/main.m | 18 + .../MeasureSDK.xcodeproj/project.pbxproj | 585 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 10353 bytes .../xcschemes/xcschememanagement.plist | 14 + .../MeasureSDK/Config/Measure.swift | 16 + .../MeasureSDK/CoreData/CoreDataManager.swift | 45 ++ .../CrashReporter/CrashReportManager.swift | 20 + .../CrashReporter/MeasureCrashReporter.swift | 49 ++ ios/MeasureSDK/MeasureSDK/MeasureSDK.h | 16 + .../MeasureModel.xcdatamodel/contents | 2 + .../MeasureSDKTests/MeasureSDKTests.swift | 36 ++ 48 files changed, 2343 insertions(+) create mode 100644 ios/Measure.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Measure.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Measure.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 ios/Measure.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/MeasureDemo/MeasureDemo.xcodeproj/project.pbxproj create mode 100644 ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/MeasureDemo/MeasureDemo.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ios/MeasureDemo/MeasureDemo/AppDelegate.swift create mode 100644 ios/MeasureDemo/MeasureDemo/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/MeasureDemo/MeasureDemo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/MeasureDemo/MeasureDemo/Assets.xcassets/Contents.json create mode 100644 ios/MeasureDemo/MeasureDemo/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/MeasureDemo/MeasureDemo/Base.lproj/Main.storyboard create mode 100644 ios/MeasureDemo/MeasureDemo/Info.plist create mode 100644 ios/MeasureDemo/MeasureDemo/SceneDelegate.swift create mode 100644 ios/MeasureDemo/MeasureDemo/ViewController.swift create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.pbxproj create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.h create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.m create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/Contents.json create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/Main.storyboard create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/Info.plist create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.h create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.m create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.h create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.m create mode 100644 ios/MeasureDemoObjc/MeasureDemoObjc/main.m create mode 100644 ios/MeasureSDK/MeasureSDK.xcodeproj/project.pbxproj create mode 100644 ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/MeasureSDK/MeasureSDK.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ios/MeasureSDK/MeasureSDK/Config/Measure.swift create mode 100644 ios/MeasureSDK/MeasureSDK/CoreData/CoreDataManager.swift create mode 100644 ios/MeasureSDK/MeasureSDK/CrashReporter/CrashReportManager.swift create mode 100644 ios/MeasureSDK/MeasureSDK/CrashReporter/MeasureCrashReporter.swift create mode 100644 ios/MeasureSDK/MeasureSDK/MeasureSDK.h create mode 100644 ios/MeasureSDK/MeasureSDK/XCDataModel/MeasureModel.xcdatamodeld/MeasureModel.xcdatamodel/contents create mode 100644 ios/MeasureSDK/MeasureSDKTests/MeasureSDKTests.swift diff --git a/ios/Measure.xcworkspace/contents.xcworkspacedata b/ios/Measure.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..c2cc016b9 --- /dev/null +++ b/ios/Measure.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/ios/Measure.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Measure.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/Measure.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Measure.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Measure.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..c46d00437 --- /dev/null +++ b/ios/Measure.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "ca2b70622bceaacf465c6a2c4faed710abda8bd95f89c1332e1e2cdfe26063c1", + "pins" : [ + { + "identity" : "plcrashreporter", + "kind" : "remoteSourceControl", + "location" : "https://github.com/microsoft/plcrashreporter", + "state" : { + "revision" : "6752f71de206f6a53fa6a758c3660fd9a7fe7527", + "version" : "1.11.2" + } + } + ], + "version" : 3 +} diff --git a/ios/Measure.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate b/ios/Measure.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..054d81e6c379dd10235f9ffef9580e4bda22f814 GIT binary patch literal 110366 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 literal 0 HcmV?d00001 diff --git a/ios/MeasureDemo/MeasureDemo.xcodeproj/project.pbxproj b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.pbxproj new file mode 100644 index 000000000..80f5fd0e1 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.pbxproj @@ -0,0 +1,396 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 524CC5812C6A180F001AB506 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5802C6A180F001AB506 /* AppDelegate.swift */; }; + 524CC5832C6A180F001AB506 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5822C6A180F001AB506 /* SceneDelegate.swift */; }; + 524CC5852C6A180F001AB506 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5842C6A180F001AB506 /* ViewController.swift */; }; + 524CC5882C6A180F001AB506 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 524CC5872C6A180F001AB506 /* Base */; }; + 524CC58A2C6A1811001AB506 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 524CC5892C6A1811001AB506 /* Assets.xcassets */; }; + 524CC58D2C6A1811001AB506 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 524CC58C2C6A1811001AB506 /* Base */; }; + 524CC5E82C6A4C10001AB506 /* MeasureSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 524CC5E72C6A4C10001AB506 /* MeasureSDK.framework */; }; + 524CC5E92C6A4C10001AB506 /* MeasureSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 524CC5E72C6A4C10001AB506 /* MeasureSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 524CC5E62C6A4B9F001AB506 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 524CC5E92C6A4C10001AB506 /* MeasureSDK.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 524CC57D2C6A180F001AB506 /* MeasureDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeasureDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 524CC5802C6A180F001AB506 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 524CC5822C6A180F001AB506 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 524CC5842C6A180F001AB506 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 524CC5872C6A180F001AB506 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 524CC5892C6A1811001AB506 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 524CC58C2C6A1811001AB506 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 524CC58E2C6A1811001AB506 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 524CC5E72C6A4C10001AB506 /* MeasureSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MeasureSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 524CC57A2C6A180F001AB506 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5E82C6A4C10001AB506 /* MeasureSDK.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 524CC5742C6A180F001AB506 = { + isa = PBXGroup; + children = ( + 524CC57F2C6A180F001AB506 /* MeasureDemo */, + 524CC57E2C6A180F001AB506 /* Products */, + 524CC5942C6A1923001AB506 /* Frameworks */, + ); + sourceTree = ""; + }; + 524CC57E2C6A180F001AB506 /* Products */ = { + isa = PBXGroup; + children = ( + 524CC57D2C6A180F001AB506 /* MeasureDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + 524CC57F2C6A180F001AB506 /* MeasureDemo */ = { + isa = PBXGroup; + children = ( + 524CC5802C6A180F001AB506 /* AppDelegate.swift */, + 524CC5822C6A180F001AB506 /* SceneDelegate.swift */, + 524CC5842C6A180F001AB506 /* ViewController.swift */, + 524CC5862C6A180F001AB506 /* Main.storyboard */, + 524CC5892C6A1811001AB506 /* Assets.xcassets */, + 524CC58B2C6A1811001AB506 /* LaunchScreen.storyboard */, + 524CC58E2C6A1811001AB506 /* Info.plist */, + ); + path = MeasureDemo; + sourceTree = ""; + }; + 524CC5942C6A1923001AB506 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 524CC5E72C6A4C10001AB506 /* MeasureSDK.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 524CC57C2C6A180F001AB506 /* MeasureDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 524CC5912C6A1811001AB506 /* Build configuration list for PBXNativeTarget "MeasureDemo" */; + buildPhases = ( + 524CC5792C6A180F001AB506 /* Sources */, + 524CC57A2C6A180F001AB506 /* Frameworks */, + 524CC57B2C6A180F001AB506 /* Resources */, + 524CC5E62C6A4B9F001AB506 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MeasureDemo; + productName = MeasureDemo; + productReference = 524CC57D2C6A180F001AB506 /* MeasureDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 524CC5752C6A180F001AB506 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1530; + LastUpgradeCheck = 1530; + TargetAttributes = { + 524CC57C2C6A180F001AB506 = { + CreatedOnToolsVersion = 15.3; + }; + }; + }; + buildConfigurationList = 524CC5782C6A180F001AB506 /* Build configuration list for PBXProject "MeasureDemo" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 524CC5742C6A180F001AB506; + productRefGroup = 524CC57E2C6A180F001AB506 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 524CC57C2C6A180F001AB506 /* MeasureDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 524CC57B2C6A180F001AB506 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC58A2C6A1811001AB506 /* Assets.xcassets in Resources */, + 524CC58D2C6A1811001AB506 /* Base in Resources */, + 524CC5882C6A180F001AB506 /* Base in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 524CC5792C6A180F001AB506 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5852C6A180F001AB506 /* ViewController.swift in Sources */, + 524CC5812C6A180F001AB506 /* AppDelegate.swift in Sources */, + 524CC5832C6A180F001AB506 /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 524CC5862C6A180F001AB506 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 524CC5872C6A180F001AB506 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 524CC58B2C6A1811001AB506 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 524CC58C2C6A1811001AB506 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 524CC58F2C6A1811001AB506 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 524CC5902C6A1811001AB506 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 524CC5922C6A1811001AB506 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MeasureDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 524CC5932C6A1811001AB506 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MeasureDemo/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 524CC5782C6A180F001AB506 /* Build configuration list for PBXProject "MeasureDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 524CC58F2C6A1811001AB506 /* Debug */, + 524CC5902C6A1811001AB506 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 524CC5912C6A1811001AB506 /* Build configuration list for PBXNativeTarget "MeasureDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 524CC5922C6A1811001AB506 /* Debug */, + 524CC5932C6A1811001AB506 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 524CC5752C6A180F001AB506 /* Project object */; +} diff --git a/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..543365eb280ed1e4258ceaac7a8542400258ec18 GIT binary patch literal 10265 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 + + + + SchemeUserState + + MeasureDemo.xcscheme_^#shared#^_ + + orderHint + 1 + + + + diff --git a/ios/MeasureDemo/MeasureDemo/AppDelegate.swift b/ios/MeasureDemo/MeasureDemo/AppDelegate.swift new file mode 100644 index 000000000..c6dc1a5c7 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/AppDelegate.swift @@ -0,0 +1,33 @@ +// +// AppDelegate.swift +// MeasureDemo +// +// Created by Adwin Ross on 12/08/24. +// + +import UIKit +import MeasureSDK + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + Measure.start() + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } +} + diff --git a/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..eb8789700 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..13613e3ee --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemo/MeasureDemo/Assets.xcassets/Contents.json b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemo/MeasureDemo/Base.lproj/LaunchScreen.storyboard b/ios/MeasureDemo/MeasureDemo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..865e9329f --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/MeasureDemo/MeasureDemo/Base.lproj/Main.storyboard b/ios/MeasureDemo/MeasureDemo/Base.lproj/Main.storyboard new file mode 100644 index 000000000..25a763858 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/MeasureDemo/MeasureDemo/Info.plist b/ios/MeasureDemo/MeasureDemo/Info.plist new file mode 100644 index 000000000..dd3c9afda --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/ios/MeasureDemo/MeasureDemo/SceneDelegate.swift b/ios/MeasureDemo/MeasureDemo/SceneDelegate.swift new file mode 100644 index 000000000..af9a9bf4d --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/SceneDelegate.swift @@ -0,0 +1,51 @@ +// +// SceneDelegate.swift +// MeasureDemo +// +// Created by Adwin Ross on 12/08/24. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/ios/MeasureDemo/MeasureDemo/ViewController.swift b/ios/MeasureDemo/MeasureDemo/ViewController.swift new file mode 100644 index 000000000..a0380016b --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo/ViewController.swift @@ -0,0 +1,99 @@ +// +// ViewController.swift +// MeasureDemo +// +// Created by Adwin Ross on 12/08/24. +// + +import UIKit + +class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { + + let crashTypes = [ + "Abort", + "Bad Pointer", + "Corrupt Memory", + "Corrupt Object", + "Deadlock", + "NSException", + "Stack Overflow", + "Zombie", + "Zombie NSException" + ] + + override func viewDidLoad() { + super.viewDidLoad() + + let tableView = UITableView(frame: view.bounds, style: .plain) + tableView.delegate = self + tableView.dataSource = self + + tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") + + view.addSubview(tableView) + } + + // MARK: - UITableViewDataSource + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return crashTypes.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) + cell.textLabel?.text = crashTypes[indexPath.row] + return cell + } + + // MARK: - UITableViewDelegate + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let selectedCrashType = crashTypes[indexPath.row] + triggerCrash(type: selectedCrashType) + } + + // MARK: - Crash Triggers + + func triggerCrash(type: String) { + switch type { + case "Abort": + abort() + case "Bad Pointer": + let pointer = UnsafeMutableRawPointer(bitPattern: 0xdeadbeef)! + pointer.storeBytes(of: 0, as: Int.self) + case "Corrupt Memory": + let array = [1, 2, 3] + array.withUnsafeBufferPointer { + _ = $0.baseAddress!.advanced(by: 4).pointee + } + case "Corrupt Object": + let object: AnyObject = NSArray() + let _ = object.perform(Selector(("invalidSelector"))) + case "Deadlock": + let queue = DispatchQueue(label: "deadlockQueue") + queue.sync { + queue.sync {} + } + case "NSException": + let array = NSArray() + print(array[1]) + case "Stack Overflow": + func recurse() { + recurse() + } + recurse() + case "Zombie": + var object: NSObject? = NSObject() + let __weakObject = object + object = nil + print(__weakObject!.description) + case "Zombie NSException": + var exception: NSException? = NSException(name: .genericException, reason: "Test", userInfo: nil) + let __weakException = exception + exception = nil + __weakException?.raise() + default: + break + } + } +} diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.pbxproj b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.pbxproj new file mode 100644 index 000000000..043ac6bc8 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.pbxproj @@ -0,0 +1,398 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 523C1AA72C6B14730081D1CC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 523C1AA62C6B14730081D1CC /* AppDelegate.m */; }; + 523C1AAA2C6B14730081D1CC /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 523C1AA92C6B14730081D1CC /* SceneDelegate.m */; }; + 523C1AAD2C6B14730081D1CC /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 523C1AAC2C6B14730081D1CC /* ViewController.m */; }; + 523C1AB02C6B14730081D1CC /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 523C1AAF2C6B14730081D1CC /* Base */; }; + 523C1AB22C6B14770081D1CC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 523C1AB12C6B14770081D1CC /* Assets.xcassets */; }; + 523C1AB52C6B14770081D1CC /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 523C1AB42C6B14770081D1CC /* Base */; }; + 523C1AB82C6B14770081D1CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 523C1AB72C6B14770081D1CC /* main.m */; }; + 523C1AC02C6B14AC0081D1CC /* MeasureSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 523C1ABF2C6B14AC0081D1CC /* MeasureSDK.framework */; }; + 523C1AC12C6B14AC0081D1CC /* MeasureSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 523C1ABF2C6B14AC0081D1CC /* MeasureSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 523C1AC22C6B14AC0081D1CC /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 523C1AC12C6B14AC0081D1CC /* MeasureSDK.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 523C1AA22C6B14730081D1CC /* MeasureDemoObjc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeasureDemoObjc.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 523C1AA52C6B14730081D1CC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 523C1AA62C6B14730081D1CC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 523C1AA82C6B14730081D1CC /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = ""; }; + 523C1AA92C6B14730081D1CC /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = ""; }; + 523C1AAB2C6B14730081D1CC /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 523C1AAC2C6B14730081D1CC /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 523C1AAF2C6B14730081D1CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 523C1AB12C6B14770081D1CC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 523C1AB42C6B14770081D1CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 523C1AB62C6B14770081D1CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 523C1AB72C6B14770081D1CC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 523C1ABF2C6B14AC0081D1CC /* MeasureSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MeasureSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 523C1A9F2C6B14730081D1CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 523C1AC02C6B14AC0081D1CC /* MeasureSDK.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 523C1A992C6B14730081D1CC = { + isa = PBXGroup; + children = ( + 523C1AA42C6B14730081D1CC /* MeasureDemoObjc */, + 523C1AA32C6B14730081D1CC /* Products */, + 523C1ABE2C6B14AC0081D1CC /* Frameworks */, + ); + sourceTree = ""; + }; + 523C1AA32C6B14730081D1CC /* Products */ = { + isa = PBXGroup; + children = ( + 523C1AA22C6B14730081D1CC /* MeasureDemoObjc.app */, + ); + name = Products; + sourceTree = ""; + }; + 523C1AA42C6B14730081D1CC /* MeasureDemoObjc */ = { + isa = PBXGroup; + children = ( + 523C1AA52C6B14730081D1CC /* AppDelegate.h */, + 523C1AA62C6B14730081D1CC /* AppDelegate.m */, + 523C1AA82C6B14730081D1CC /* SceneDelegate.h */, + 523C1AA92C6B14730081D1CC /* SceneDelegate.m */, + 523C1AAB2C6B14730081D1CC /* ViewController.h */, + 523C1AAC2C6B14730081D1CC /* ViewController.m */, + 523C1AAE2C6B14730081D1CC /* Main.storyboard */, + 523C1AB12C6B14770081D1CC /* Assets.xcassets */, + 523C1AB32C6B14770081D1CC /* LaunchScreen.storyboard */, + 523C1AB62C6B14770081D1CC /* Info.plist */, + 523C1AB72C6B14770081D1CC /* main.m */, + ); + path = MeasureDemoObjc; + sourceTree = ""; + }; + 523C1ABE2C6B14AC0081D1CC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 523C1ABF2C6B14AC0081D1CC /* MeasureSDK.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 523C1AA12C6B14730081D1CC /* MeasureDemoObjc */ = { + isa = PBXNativeTarget; + buildConfigurationList = 523C1ABB2C6B14770081D1CC /* Build configuration list for PBXNativeTarget "MeasureDemoObjc" */; + buildPhases = ( + 523C1A9E2C6B14730081D1CC /* Sources */, + 523C1A9F2C6B14730081D1CC /* Frameworks */, + 523C1AA02C6B14730081D1CC /* Resources */, + 523C1AC22C6B14AC0081D1CC /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MeasureDemoObjc; + productName = MeasureDemoObjc; + productReference = 523C1AA22C6B14730081D1CC /* MeasureDemoObjc.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 523C1A9A2C6B14730081D1CC /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1530; + TargetAttributes = { + 523C1AA12C6B14730081D1CC = { + CreatedOnToolsVersion = 15.3; + }; + }; + }; + buildConfigurationList = 523C1A9D2C6B14730081D1CC /* Build configuration list for PBXProject "MeasureDemoObjc" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 523C1A992C6B14730081D1CC; + productRefGroup = 523C1AA32C6B14730081D1CC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 523C1AA12C6B14730081D1CC /* MeasureDemoObjc */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 523C1AA02C6B14730081D1CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 523C1AB22C6B14770081D1CC /* Assets.xcassets in Resources */, + 523C1AB52C6B14770081D1CC /* Base in Resources */, + 523C1AB02C6B14730081D1CC /* Base in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 523C1A9E2C6B14730081D1CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 523C1AAD2C6B14730081D1CC /* ViewController.m in Sources */, + 523C1AA72C6B14730081D1CC /* AppDelegate.m in Sources */, + 523C1AB82C6B14770081D1CC /* main.m in Sources */, + 523C1AAA2C6B14730081D1CC /* SceneDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 523C1AAE2C6B14730081D1CC /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 523C1AAF2C6B14730081D1CC /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 523C1AB32C6B14770081D1CC /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 523C1AB42C6B14770081D1CC /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 523C1AB92C6B14770081D1CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 523C1ABA2C6B14770081D1CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 523C1ABC2C6B14770081D1CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MeasureDemoObjc/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureDemoObjc; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 523C1ABD2C6B14770081D1CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = MeasureDemoObjc/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureDemoObjc; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 523C1A9D2C6B14730081D1CC /* Build configuration list for PBXProject "MeasureDemoObjc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 523C1AB92C6B14770081D1CC /* Debug */, + 523C1ABA2C6B14770081D1CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 523C1ABB2C6B14770081D1CC /* Build configuration list for PBXNativeTarget "MeasureDemoObjc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 523C1ABC2C6B14770081D1CC /* Debug */, + 523C1ABD2C6B14770081D1CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 523C1A9A2C6B14730081D1CC /* Project object */; +} diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cf2c2f6bd8e83cb287fdcfa8803fdf26845f4057 GIT binary patch literal 5257 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 OW_^=W)_3|-KKK6w)M0`E literal 0 HcmV?d00001 diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..20d208447 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + MeasureDemoObjc.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.h b/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.h new file mode 100644 index 000000000..dd532f1d5 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.h @@ -0,0 +1,14 @@ +// +// AppDelegate.h +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import + +@interface AppDelegate : UIResponder + + +@end + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.m b/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.m new file mode 100644 index 000000000..87d5db1db --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/AppDelegate.m @@ -0,0 +1,42 @@ +// +// AppDelegate.m +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import "AppDelegate.h" +#import "MeasureSDK/MeasureSDK.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + [Measure start]; + return YES; +} + + +#pragma mark - UISceneSession lifecycle + + +- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; +} + + +- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. +} + + +@end diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..eb8789700 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..13613e3ee --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/Contents.json b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/LaunchScreen.storyboard b/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..865e9329f --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/Main.storyboard b/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/Main.storyboard new file mode 100644 index 000000000..808a21ce7 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/Info.plist b/ios/MeasureDemoObjc/MeasureDemoObjc/Info.plist new file mode 100644 index 000000000..81ed29b76 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/Info.plist @@ -0,0 +1,25 @@ + + + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + SceneDelegate + UISceneStoryboardFile + Main + + + + + + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.h b/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.h new file mode 100644 index 000000000..8122cf0f8 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.h @@ -0,0 +1,15 @@ +// +// SceneDelegate.h +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import + +@interface SceneDelegate : UIResponder + +@property (strong, nonatomic) UIWindow * window; + +@end + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.m b/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.m new file mode 100644 index 000000000..4a2702880 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/SceneDelegate.m @@ -0,0 +1,57 @@ +// +// SceneDelegate.m +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import "SceneDelegate.h" + +@interface SceneDelegate () + +@end + +@implementation SceneDelegate + + +- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). +} + + +- (void)sceneDidDisconnect:(UIScene *)scene { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). +} + + +- (void)sceneDidBecomeActive:(UIScene *)scene { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. +} + + +- (void)sceneWillResignActive:(UIScene *)scene { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). +} + + +- (void)sceneWillEnterForeground:(UIScene *)scene { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. +} + + +- (void)sceneDidEnterBackground:(UIScene *)scene { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. +} + + +@end diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.h b/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.h new file mode 100644 index 000000000..a9141f5eb --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.h @@ -0,0 +1,14 @@ +// +// ViewController.h +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.m b/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.m new file mode 100644 index 000000000..d2e66a840 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/ViewController.m @@ -0,0 +1,106 @@ +// +// ViewController.m +// MeasureDemoObjc +// +// Created by Adwin Ross on 13/08/24. +// + +#import "ViewController.h" + +@interface ViewController () + +@property (nonatomic, strong) NSArray *crashTypes; + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Initialize the crash types array + self.crashTypes = @[ + @"Abort", + @"Bad Pointer", + @"Corrupt Memory", + @"Corrupt Object", + @"Deadlock", + @"NSException", + @"Stack Overflow", + @"Zombie", + @"Zombie NSException" + ]; + + // Create the table view + UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; + tableView.delegate = self; + tableView.dataSource = self; + + // Register a simple UITableViewCell class for use in creating cells + [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; + + // Add the table view to the view controller's view + [self.view addSubview:tableView]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.crashTypes.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; + cell.textLabel.text = self.crashTypes[indexPath.row]; + return cell; +} + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *selectedCrashType = self.crashTypes[indexPath.row]; + [self triggerCrash:selectedCrashType]; +} + +#pragma mark - Crash Triggers + +- (void)triggerCrash:(NSString *)type { + if ([type isEqualToString:@"Abort"]) { + abort(); + } else if ([type isEqualToString:@"Bad Pointer"]) { + int *pointer = (int *)0xdeadbeef; + *pointer = 0; + } else if ([type isEqualToString:@"Corrupt Memory"]) { + int array[3] = {1, 2, 3}; + int corruptValue = array[4]; // Accessing out of bounds memory + NSLog(@"%d", corruptValue); + } else if ([type isEqualToString:@"Corrupt Object"]) { + id object = [NSArray new]; + [object performSelector:NSSelectorFromString(@"invalidSelector")]; + } else if ([type isEqualToString:@"Deadlock"]) { + dispatch_queue_t queue = dispatch_queue_create("deadlockQueue", NULL); + dispatch_sync(queue, ^{ + dispatch_sync(queue, ^{ + // This will cause a deadlock + }); + }); + } else if ([type isEqualToString:@"NSException"]) { + NSArray *array = @[]; + NSLog(@"%@", array[1]); // This will throw an exception + } else if ([type isEqualToString:@"Stack Overflow"]) { + [self causeStackOverflow]; + } else if ([type isEqualToString:@"Zombie"]) { + __weak id object = [NSObject new]; + NSLog(@"%@", [object description]); // Accessing a zombie object + } else if ([type isEqualToString:@"Zombie NSException"]) { + __weak NSException *exception = [NSException exceptionWithName:@"TestException" reason:@"Testing" userInfo:nil]; + exception = nil; + [exception raise]; // This will crash due to a zombie exception + } +} + +- (void)causeStackOverflow { + [self causeStackOverflow]; // Recursive call to cause a stack overflow +} + +@end diff --git a/ios/MeasureDemoObjc/MeasureDemoObjc/main.m b/ios/MeasureDemoObjc/MeasureDemoObjc/main.m new file mode 100644 index 000000000..0c4e72f56 --- /dev/null +++ b/ios/MeasureDemoObjc/MeasureDemoObjc/main.m @@ -0,0 +1,18 @@ +// +// main.m +// MeasureDemoObjc +// +// Created by EdPu on 13/08/24. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + NSString * appDelegateClassName; + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + appDelegateClassName = NSStringFromClass([AppDelegate class]); + } + return UIApplicationMain(argc, argv, nil, appDelegateClassName); +} diff --git a/ios/MeasureSDK/MeasureSDK.xcodeproj/project.pbxproj b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.pbxproj new file mode 100644 index 000000000..4cd76a6e3 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.pbxproj @@ -0,0 +1,585 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 523C1AC52C6B1B850081D1CC /* CrashReporter in Frameworks */ = {isa = PBXBuildFile; productRef = 523C1AC42C6B1B850081D1CC /* CrashReporter */; }; + 524CC5C32C6A4B12001AB506 /* MeasureSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 524CC5BA2C6A4B11001AB506 /* MeasureSDK.framework */; }; + 524CC5C82C6A4B12001AB506 /* MeasureSDKTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5C72C6A4B12001AB506 /* MeasureSDKTests.swift */; }; + 524CC5C92C6A4B12001AB506 /* MeasureSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 524CC5BD2C6A4B11001AB506 /* MeasureSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 524CC5DC2C6A4B48001AB506 /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5D22C6A4B48001AB506 /* CoreDataManager.swift */; }; + 524CC5DD2C6A4B48001AB506 /* MeasureModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5D42C6A4B48001AB506 /* MeasureModel.xcdatamodeld */; }; + 524CC5DE2C6A4B48001AB506 /* MeasureCrashReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5D72C6A4B48001AB506 /* MeasureCrashReporter.swift */; }; + 524CC5DF2C6A4B48001AB506 /* Measure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5D92C6A4B48001AB506 /* Measure.swift */; }; + 524CC5EE2C6A55F0001AB506 /* CrashReportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524CC5ED2C6A55F0001AB506 /* CrashReportManager.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 524CC5C42C6A4B12001AB506 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 524CC5B12C6A4B11001AB506 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 524CC5B92C6A4B11001AB506; + remoteInfo = MeasureSDK; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 524CC5BA2C6A4B11001AB506 /* MeasureSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MeasureSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 524CC5BD2C6A4B11001AB506 /* MeasureSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MeasureSDK.h; sourceTree = ""; }; + 524CC5C22C6A4B12001AB506 /* MeasureSDKTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeasureSDKTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 524CC5C72C6A4B12001AB506 /* MeasureSDKTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeasureSDKTests.swift; sourceTree = ""; }; + 524CC5D22C6A4B48001AB506 /* CoreDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = ""; }; + 524CC5D62C6A4B48001AB506 /* MeasureModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeasureModel.xcdatamodel; sourceTree = ""; }; + 524CC5D72C6A4B48001AB506 /* MeasureCrashReporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeasureCrashReporter.swift; sourceTree = ""; }; + 524CC5D92C6A4B48001AB506 /* Measure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Measure.swift; sourceTree = ""; }; + 524CC5ED2C6A55F0001AB506 /* CrashReportManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportManager.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 524CC5B72C6A4B11001AB506 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 523C1AC52C6B1B850081D1CC /* CrashReporter in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 524CC5BF2C6A4B12001AB506 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5C32C6A4B12001AB506 /* MeasureSDK.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 524CC5B02C6A4B11001AB506 = { + isa = PBXGroup; + children = ( + 524CC5BC2C6A4B11001AB506 /* MeasureSDK */, + 524CC5C62C6A4B12001AB506 /* MeasureSDKTests */, + 524CC5BB2C6A4B11001AB506 /* Products */, + ); + sourceTree = ""; + }; + 524CC5BB2C6A4B11001AB506 /* Products */ = { + isa = PBXGroup; + children = ( + 524CC5BA2C6A4B11001AB506 /* MeasureSDK.framework */, + 524CC5C22C6A4B12001AB506 /* MeasureSDKTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 524CC5BC2C6A4B11001AB506 /* MeasureSDK */ = { + isa = PBXGroup; + children = ( + 524CC5DA2C6A4B48001AB506 /* Config */, + 524CC5D32C6A4B48001AB506 /* CoreData */, + 524CC5D82C6A4B48001AB506 /* CrashReporter */, + 524CC5DB2C6A4B48001AB506 /* Utils */, + 524CC5D52C6A4B48001AB506 /* XCDataModel */, + 524CC5BD2C6A4B11001AB506 /* MeasureSDK.h */, + ); + path = MeasureSDK; + sourceTree = ""; + }; + 524CC5C62C6A4B12001AB506 /* MeasureSDKTests */ = { + isa = PBXGroup; + children = ( + 524CC5C72C6A4B12001AB506 /* MeasureSDKTests.swift */, + ); + path = MeasureSDKTests; + sourceTree = ""; + }; + 524CC5D32C6A4B48001AB506 /* CoreData */ = { + isa = PBXGroup; + children = ( + 524CC5D22C6A4B48001AB506 /* CoreDataManager.swift */, + ); + path = CoreData; + sourceTree = ""; + }; + 524CC5D52C6A4B48001AB506 /* XCDataModel */ = { + isa = PBXGroup; + children = ( + 524CC5D42C6A4B48001AB506 /* MeasureModel.xcdatamodeld */, + ); + path = XCDataModel; + sourceTree = ""; + }; + 524CC5D82C6A4B48001AB506 /* CrashReporter */ = { + isa = PBXGroup; + children = ( + 524CC5D72C6A4B48001AB506 /* MeasureCrashReporter.swift */, + 524CC5ED2C6A55F0001AB506 /* CrashReportManager.swift */, + ); + path = CrashReporter; + sourceTree = ""; + }; + 524CC5DA2C6A4B48001AB506 /* Config */ = { + isa = PBXGroup; + children = ( + 524CC5D92C6A4B48001AB506 /* Measure.swift */, + ); + path = Config; + sourceTree = ""; + }; + 524CC5DB2C6A4B48001AB506 /* Utils */ = { + isa = PBXGroup; + children = ( + ); + path = Utils; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 524CC5B52C6A4B11001AB506 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5C92C6A4B12001AB506 /* MeasureSDK.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 524CC5B92C6A4B11001AB506 /* MeasureSDK */ = { + isa = PBXNativeTarget; + buildConfigurationList = 524CC5CC2C6A4B12001AB506 /* Build configuration list for PBXNativeTarget "MeasureSDK" */; + buildPhases = ( + 524CC5B52C6A4B11001AB506 /* Headers */, + 524CC5B62C6A4B11001AB506 /* Sources */, + 524CC5B72C6A4B11001AB506 /* Frameworks */, + 524CC5B82C6A4B11001AB506 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MeasureSDK; + packageProductDependencies = ( + 523C1AC42C6B1B850081D1CC /* CrashReporter */, + ); + productName = MeasureSDK; + productReference = 524CC5BA2C6A4B11001AB506 /* MeasureSDK.framework */; + productType = "com.apple.product-type.framework"; + }; + 524CC5C12C6A4B12001AB506 /* MeasureSDKTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 524CC5CF2C6A4B12001AB506 /* Build configuration list for PBXNativeTarget "MeasureSDKTests" */; + buildPhases = ( + 524CC5BE2C6A4B12001AB506 /* Sources */, + 524CC5BF2C6A4B12001AB506 /* Frameworks */, + 524CC5C02C6A4B12001AB506 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 524CC5C52C6A4B12001AB506 /* PBXTargetDependency */, + ); + name = MeasureSDKTests; + productName = MeasureSDKTests; + productReference = 524CC5C22C6A4B12001AB506 /* MeasureSDKTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 524CC5B12C6A4B11001AB506 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1530; + LastUpgradeCheck = 1530; + TargetAttributes = { + 524CC5B92C6A4B11001AB506 = { + CreatedOnToolsVersion = 15.3; + }; + 524CC5C12C6A4B12001AB506 = { + CreatedOnToolsVersion = 15.3; + }; + }; + }; + buildConfigurationList = 524CC5B42C6A4B11001AB506 /* Build configuration list for PBXProject "MeasureSDK" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 524CC5B02C6A4B11001AB506; + packageReferences = ( + 523C1AC32C6B1B850081D1CC /* XCRemoteSwiftPackageReference "plcrashreporter" */, + ); + productRefGroup = 524CC5BB2C6A4B11001AB506 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 524CC5B92C6A4B11001AB506 /* MeasureSDK */, + 524CC5C12C6A4B12001AB506 /* MeasureSDKTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 524CC5B82C6A4B11001AB506 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 524CC5C02C6A4B12001AB506 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 524CC5B62C6A4B11001AB506 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5DE2C6A4B48001AB506 /* MeasureCrashReporter.swift in Sources */, + 524CC5DD2C6A4B48001AB506 /* MeasureModel.xcdatamodeld in Sources */, + 524CC5EE2C6A55F0001AB506 /* CrashReportManager.swift in Sources */, + 524CC5DF2C6A4B48001AB506 /* Measure.swift in Sources */, + 524CC5DC2C6A4B48001AB506 /* CoreDataManager.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 524CC5BE2C6A4B12001AB506 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 524CC5C82C6A4B12001AB506 /* MeasureSDKTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 524CC5C52C6A4B12001AB506 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 524CC5B92C6A4B11001AB506 /* MeasureSDK */; + targetProxy = 524CC5C42C6A4B12001AB506 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 524CC5CA2C6A4B12001AB506 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 524CC5CB2C6A4B12001AB506 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.4; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_INSTALL_OBJC_HEADER = YES; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 524CC5CD2C6A4B12001AB506 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + OTHER_SWIFT_FLAGS = "-no-verify-emitted-module-interface"; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureSDK; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 524CC5CE2C6A4B12001AB506 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + OTHER_SWIFT_FLAGS = "-no-verify-emitted-module-interface"; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureSDK; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 524CC5D02C6A4B12001AB506 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureSDKTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 524CC5D12C6A4B12001AB506 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.measure.MeasureSDKTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 524CC5B42C6A4B11001AB506 /* Build configuration list for PBXProject "MeasureSDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 524CC5CA2C6A4B12001AB506 /* Debug */, + 524CC5CB2C6A4B12001AB506 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 524CC5CC2C6A4B12001AB506 /* Build configuration list for PBXNativeTarget "MeasureSDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 524CC5CD2C6A4B12001AB506 /* Debug */, + 524CC5CE2C6A4B12001AB506 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 524CC5CF2C6A4B12001AB506 /* Build configuration list for PBXNativeTarget "MeasureSDKTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 524CC5D02C6A4B12001AB506 /* Debug */, + 524CC5D12C6A4B12001AB506 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 523C1AC32C6B1B850081D1CC /* XCRemoteSwiftPackageReference "plcrashreporter" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/microsoft/plcrashreporter"; + requirement = { + kind = exactVersion; + version = 1.11.2; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 523C1AC42C6B1B850081D1CC /* CrashReporter */ = { + isa = XCSwiftPackageProductDependency; + package = 523C1AC32C6B1B850081D1CC /* XCRemoteSwiftPackageReference "plcrashreporter" */; + productName = CrashReporter; + }; +/* End XCSwiftPackageProductDependency section */ + +/* Begin XCVersionGroup section */ + 524CC5D42C6A4B48001AB506 /* MeasureModel.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 524CC5D62C6A4B48001AB506 /* MeasureModel.xcdatamodel */, + ); + currentVersion = 524CC5D62C6A4B48001AB506 /* MeasureModel.xcdatamodel */; + name = MeasureModel.xcdatamodeld; + path = /Users/edpu/Documents/Workspace/measure/ios/MeasureSDK/MeasureSDK/XCDataModel/MeasureModel.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 524CC5B12C6A4B11001AB506 /* Project object */; +} diff --git a/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e69f544056fd5ad579f194183fecf3ea28e963dc GIT binary patch literal 10353 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 P2%n;X!e{uM`S + + + + SchemeUserState + + MeasureSDK.xcscheme_^#shared#^_ + + orderHint + 2 + + + + diff --git a/ios/MeasureSDK/MeasureSDK/Config/Measure.swift b/ios/MeasureSDK/MeasureSDK/Config/Measure.swift new file mode 100644 index 000000000..41b4b694c --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/Config/Measure.swift @@ -0,0 +1,16 @@ +// +// Measure.swift +// Measure +// +// Created by Adwin Ross on 12/08/24. +// + +import Foundation + +@objc public class Measure: NSObject { + private override init() {} + + @objc public static func start() { + CrashReportManager.shared.start() + } +} diff --git a/ios/MeasureSDK/MeasureSDK/CoreData/CoreDataManager.swift b/ios/MeasureSDK/MeasureSDK/CoreData/CoreDataManager.swift new file mode 100644 index 000000000..bbcc4d5c1 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/CoreData/CoreDataManager.swift @@ -0,0 +1,45 @@ +// +// CoreDataManager.swift +// Measure +// +// Created by Adwin Ross on 12/08/24. +// + +import Foundation +import CoreData + +class CoreDataManager { + static let shared = CoreDataManager() + + private let persistentContainer: NSPersistentContainer + private lazy var mainContext: NSManagedObjectContext = { + let context = persistentContainer.viewContext + context.mergePolicy = NSMergePolicy(merge: .mergeByPropertyStoreTrumpMergePolicyType) + return context + }() + + private init() { + guard let modelURL = Bundle(for: type(of: self)).url(forResource: "MeasureModel", withExtension:"momd") else { + fatalError("Error loading model from bundle") + } + + guard let mom = NSManagedObjectModel(contentsOf: modelURL) else { + fatalError("Error initializing mom from: \(modelURL)") + } + persistentContainer = NSPersistentContainer(name: "MeasureModel", managedObjectModel: mom) + persistentContainer.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + } + + // MARK: - Private Context Creation + + private func newBackgroundContext() -> NSManagedObjectContext { + let context = persistentContainer.newBackgroundContext() + context.mergePolicy = NSMergePolicy(merge: .mergeByPropertyObjectTrumpMergePolicyType) + return context + } +} + diff --git a/ios/MeasureSDK/MeasureSDK/CrashReporter/CrashReportManager.swift b/ios/MeasureSDK/MeasureSDK/CrashReporter/CrashReportManager.swift new file mode 100644 index 000000000..47b2ca773 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/CrashReporter/CrashReportManager.swift @@ -0,0 +1,20 @@ +// +// CrashReportManager.swift +// MeasureSDK +// +// Created by Adwin Ross on 12/08/24. +// + +import Foundation + +class CrashReportManager { + static let shared = CrashReportManager() + let crashReporter = MeasureCrashReporter() + + private init() {} + + func start() { + crashReporter.initializeCrashReporter(with: UUID().uuidString) + crashReporter.handleCrashReport() + } +} diff --git a/ios/MeasureSDK/MeasureSDK/CrashReporter/MeasureCrashReporter.swift b/ios/MeasureSDK/MeasureSDK/CrashReporter/MeasureCrashReporter.swift new file mode 100644 index 000000000..698e41a83 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/CrashReporter/MeasureCrashReporter.swift @@ -0,0 +1,49 @@ +// +// CrashReporter.swift +// Measure +// +// Created by Adwin Ross on 12/08/24. +// + +import Foundation +import CrashReporter + +class MeasureCrashReporter { + private let crashReporter = PLCrashReporter() + + func initializeCrashReporter(with sessionId: String) { + do { + let customData = ["session_id": sessionId] + do { + let jsonData = try JSONSerialization.data(withJSONObject: customData, options: []) + crashReporter.customData = jsonData + } catch { + print("Error converting dictionary to JSON data: \(error)") + } + try crashReporter.enableAndReturnError() + } catch { + print("Could not enable crash reporter: \(error)") + } + } + + func handleCrashReport() { + if crashReporter.hasPendingCrashReport() { + do { + let crashPath = crashReporter.crashReportPath() + let crashData = try crashReporter.loadPendingCrashReportDataAndReturnError() + let crashReport = try PLCrashReport(data: crashData) + + // Convert the crash report to a human-readable string + let crashReportString = PLCrashReportTextFormatter.stringValue(for: crashReport, with: PLCrashReportTextFormatiOS) + + // Save the crash report to a file or send it to your server + print(crashReportString ?? "No crash report string") + + // Purge the report + crashReporter.purgePendingCrashReport() + } catch { + print("Could not load crash report: \(error)") + } + } + } +} diff --git a/ios/MeasureSDK/MeasureSDK/MeasureSDK.h b/ios/MeasureSDK/MeasureSDK/MeasureSDK.h new file mode 100644 index 000000000..054089ffc --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/MeasureSDK.h @@ -0,0 +1,16 @@ +// +// MeasureSDK.h +// MeasureSDK +// +// Created by Adwin Ross on 12/08/24. +// + +#import + +//! Project version number for MeasureSDK. +FOUNDATION_EXPORT double MeasureSDKVersionNumber; + +//! Project version string for MeasureSDK. +FOUNDATION_EXPORT const unsigned char MeasureSDKVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import diff --git a/ios/MeasureSDK/MeasureSDK/XCDataModel/MeasureModel.xcdatamodeld/MeasureModel.xcdatamodel/contents b/ios/MeasureSDK/MeasureSDK/XCDataModel/MeasureModel.xcdatamodeld/MeasureModel.xcdatamodel/contents new file mode 100644 index 000000000..ae6e40d3f --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK/XCDataModel/MeasureModel.xcdatamodeld/MeasureModel.xcdatamodel/contents @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ios/MeasureSDK/MeasureSDKTests/MeasureSDKTests.swift b/ios/MeasureSDK/MeasureSDKTests/MeasureSDKTests.swift new file mode 100644 index 000000000..396a0f7b3 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDKTests/MeasureSDKTests.swift @@ -0,0 +1,36 @@ +// +// MeasureSDKTests.swift +// MeasureSDKTests +// +// Created by Adwin Ross on 12/08/24. +// + +import XCTest +@testable import MeasureSDK + +final class MeasureSDKTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +}