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 000000000..054d81e6c Binary files /dev/null and b/ios/Measure.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate differ 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 000000000..543365eb2 Binary files /dev/null and b/ios/MeasureDemo/MeasureDemo.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/MeasureDemo/MeasureDemo.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/MeasureDemo/MeasureDemo.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..7f18445b8 --- /dev/null +++ b/ios/MeasureDemo/MeasureDemo.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + 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 000000000..cf2c2f6bd Binary files /dev/null and b/ios/MeasureDemoObjc/MeasureDemoObjc.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate differ 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 000000000..e69f54405 Binary files /dev/null and b/ios/MeasureSDK/MeasureSDK.xcodeproj/project.xcworkspace/xcuserdata/edpu.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/MeasureSDK/MeasureSDK.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/MeasureSDK/MeasureSDK.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..499bb41d5 --- /dev/null +++ b/ios/MeasureSDK/MeasureSDK.xcodeproj/xcuserdata/edpu.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + 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. + } + } + +}