From eb0a44933967fb40a0a85bda6f8810ff4994f615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20Jas=CC=8Cs=CC=8Co?= Date: Tue, 27 Aug 2024 21:11:46 +0200 Subject: [PATCH] feat: Firebase Logger - Added Firebase Logger - Added Sample App - Added Shared Instances of loggers --- .../project.pbxproj | 652 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 123 ++++ .../GoodLogger-Sample/AppDelegate.swift | 24 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Assets.xcassets/Contents.json | 6 + .../GoodLogger-Sample/ContentView.swift | 122 ++++ .../GoodLogger_SampleApp.swift | 21 + .../GoogleService-Info.plist | 34 + .../GoodLogger-Sample/Info.plist | 37 + .../Preview Assets.xcassets/Contents.json | 6 + .../GoodLogger_SampleTests.swift | 17 + .../GoodLogger_SampleUITests.swift | 43 ++ .../GoodLogger_SampleUITestsLaunchTests.swift | 33 + GoodLogger-Sample/Package.swift | 8 + Package.swift | 11 +- Sources/GoodLogger/FirebaseLogger.swift | 46 ++ Sources/GoodLogger/GoodLogger.swift | 4 +- Sources/GoodLogger/OSLogLogger.swift | 6 +- Sources/GoodLogger/PrintLogger.swift | 4 +- 21 files changed, 1238 insertions(+), 12 deletions(-) create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.pbxproj create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/AppDelegate.swift create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/Contents.json create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/ContentView.swift create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoodLogger_SampleApp.swift create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoogleService-Info.plist create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Info.plist create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleTests/GoodLogger_SampleTests.swift create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITests.swift create mode 100644 GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITestsLaunchTests.swift create mode 100644 GoodLogger-Sample/Package.swift create mode 100644 Sources/GoodLogger/FirebaseLogger.swift diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.pbxproj b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9e55185 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.pbxproj @@ -0,0 +1,652 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 5DEA7D2C2C7E0FEC00306034 /* GoodLogger in Frameworks */ = {isa = PBXBuildFile; productRef = 5DEA7D2B2C7E0FEC00306034 /* GoodLogger */; }; + 5DEA7D2F2C7E177400306034 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5DEA7D2E2C7E177400306034 /* FirebaseCrashlytics */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 5DEA7D0D2C7E0AFC00306034 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5DEA7CF12C7E0AFB00306034 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5DEA7CF82C7E0AFB00306034; + remoteInfo = "GoodLogger-Sample"; + }; + 5DEA7D172C7E0AFC00306034 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5DEA7CF12C7E0AFB00306034 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5DEA7CF82C7E0AFB00306034; + remoteInfo = "GoodLogger-Sample"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 5DEA7CF92C7E0AFB00306034 /* GoodLogger-Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "GoodLogger-Sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DEA7D0C2C7E0AFC00306034 /* GoodLogger-SampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "GoodLogger-SampleTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DEA7D162C7E0AFC00306034 /* GoodLogger-SampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "GoodLogger-SampleUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + 5DEA7D1E2C7E0AFC00306034 /* Exceptions for "GoodLogger-Sample" folder in "GoodLogger-Sample" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 5DEA7CF82C7E0AFB00306034 /* GoodLogger-Sample */; + }; +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 5DEA7CFB2C7E0AFB00306034 /* GoodLogger-Sample */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + 5DEA7D1E2C7E0AFC00306034 /* Exceptions for "GoodLogger-Sample" folder in "GoodLogger-Sample" target */, + ); + path = "GoodLogger-Sample"; + sourceTree = ""; + }; + 5DEA7D0F2C7E0AFC00306034 /* GoodLogger-SampleTests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = "GoodLogger-SampleTests"; + sourceTree = ""; + }; + 5DEA7D192C7E0AFC00306034 /* GoodLogger-SampleUITests */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = "GoodLogger-SampleUITests"; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 5DEA7CF62C7E0AFB00306034 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5DEA7D2C2C7E0FEC00306034 /* GoodLogger in Frameworks */, + 5DEA7D2F2C7E177400306034 /* FirebaseCrashlytics in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D092C7E0AFC00306034 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D132C7E0AFC00306034 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5DEA7CF02C7E0AFB00306034 = { + isa = PBXGroup; + children = ( + 5DEA7CFB2C7E0AFB00306034 /* GoodLogger-Sample */, + 5DEA7D0F2C7E0AFC00306034 /* GoodLogger-SampleTests */, + 5DEA7D192C7E0AFC00306034 /* GoodLogger-SampleUITests */, + 5DEA7CFA2C7E0AFB00306034 /* Products */, + ); + sourceTree = ""; + }; + 5DEA7CFA2C7E0AFB00306034 /* Products */ = { + isa = PBXGroup; + children = ( + 5DEA7CF92C7E0AFB00306034 /* GoodLogger-Sample.app */, + 5DEA7D0C2C7E0AFC00306034 /* GoodLogger-SampleTests.xctest */, + 5DEA7D162C7E0AFC00306034 /* GoodLogger-SampleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 5DEA7CF82C7E0AFB00306034 /* GoodLogger-Sample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5DEA7D1F2C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-Sample" */; + buildPhases = ( + 5DEA7CF52C7E0AFB00306034 /* Sources */, + 5DEA7CF62C7E0AFB00306034 /* Frameworks */, + 5DEA7CF72C7E0AFB00306034 /* Resources */, + 5DEA7D342C7E548B00306034 /* Firebase */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 5DEA7CFB2C7E0AFB00306034 /* GoodLogger-Sample */, + ); + name = "GoodLogger-Sample"; + packageProductDependencies = ( + 5DEA7D2B2C7E0FEC00306034 /* GoodLogger */, + 5DEA7D2E2C7E177400306034 /* FirebaseCrashlytics */, + ); + productName = "GoodLogger-Sample"; + productReference = 5DEA7CF92C7E0AFB00306034 /* GoodLogger-Sample.app */; + productType = "com.apple.product-type.application"; + }; + 5DEA7D0B2C7E0AFC00306034 /* GoodLogger-SampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5DEA7D242C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-SampleTests" */; + buildPhases = ( + 5DEA7D082C7E0AFC00306034 /* Sources */, + 5DEA7D092C7E0AFC00306034 /* Frameworks */, + 5DEA7D0A2C7E0AFC00306034 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 5DEA7D0E2C7E0AFC00306034 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 5DEA7D0F2C7E0AFC00306034 /* GoodLogger-SampleTests */, + ); + name = "GoodLogger-SampleTests"; + packageProductDependencies = ( + ); + productName = "GoodLogger-SampleTests"; + productReference = 5DEA7D0C2C7E0AFC00306034 /* GoodLogger-SampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 5DEA7D152C7E0AFC00306034 /* GoodLogger-SampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5DEA7D272C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-SampleUITests" */; + buildPhases = ( + 5DEA7D122C7E0AFC00306034 /* Sources */, + 5DEA7D132C7E0AFC00306034 /* Frameworks */, + 5DEA7D142C7E0AFC00306034 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 5DEA7D182C7E0AFC00306034 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + 5DEA7D192C7E0AFC00306034 /* GoodLogger-SampleUITests */, + ); + name = "GoodLogger-SampleUITests"; + packageProductDependencies = ( + ); + productName = "GoodLogger-SampleUITests"; + productReference = 5DEA7D162C7E0AFC00306034 /* GoodLogger-SampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 5DEA7CF12C7E0AFB00306034 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + 5DEA7CF82C7E0AFB00306034 = { + CreatedOnToolsVersion = 16.0; + }; + 5DEA7D0B2C7E0AFC00306034 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 5DEA7CF82C7E0AFB00306034; + }; + 5DEA7D152C7E0AFC00306034 = { + CreatedOnToolsVersion = 16.0; + TestTargetID = 5DEA7CF82C7E0AFB00306034; + }; + }; + }; + buildConfigurationList = 5DEA7CF42C7E0AFB00306034 /* Build configuration list for PBXProject "GoodLogger-Sample" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 5DEA7CF02C7E0AFB00306034; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 5DEA7D2A2C7E0FEC00306034 /* XCLocalSwiftPackageReference "../../../GoodLogger" */, + 5DEA7D2D2C7E177400306034 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 5DEA7CFA2C7E0AFB00306034 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5DEA7CF82C7E0AFB00306034 /* GoodLogger-Sample */, + 5DEA7D0B2C7E0AFC00306034 /* GoodLogger-SampleTests */, + 5DEA7D152C7E0AFC00306034 /* GoodLogger-SampleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 5DEA7CF72C7E0AFB00306034 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D0A2C7E0AFC00306034 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D142C7E0AFC00306034 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 5DEA7D342C7E548B00306034 /* Firebase */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}", + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}", + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist", + "$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist", + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + ); + name = Firebase; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 5DEA7CF52C7E0AFB00306034 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D082C7E0AFC00306034 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5DEA7D122C7E0AFC00306034 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 5DEA7D0E2C7E0AFC00306034 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5DEA7CF82C7E0AFB00306034 /* GoodLogger-Sample */; + targetProxy = 5DEA7D0D2C7E0AFC00306034 /* PBXContainerItemProxy */; + }; + 5DEA7D182C7E0AFC00306034 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5DEA7CF82C7E0AFB00306034 /* GoodLogger-Sample */; + targetProxy = 5DEA7D172C7E0AFC00306034 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 5DEA7D202C7E0AFC00306034 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"GoodLogger-Sample/Preview Content\""; + DEVELOPMENT_TEAM = FFZN8CA2AB; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "GoodLogger-Sample/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportsDocumentBrowser = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.goodrequest.sourcery; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 5DEA7D212C7E0AFC00306034 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"GoodLogger-Sample/Preview Content\""; + DEVELOPMENT_TEAM = FFZN8CA2AB; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "GoodLogger-Sample/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportsDocumentBrowser = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.goodrequest.sourcery; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 5DEA7D222C7E0AFC00306034 /* 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 = 18.0; + 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; + }; + 5DEA7D232C7E0AFC00306034 /* 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 = 18.0; + 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; + }; + 5DEA7D252C7E0AFC00306034 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FFZN8CA2AB; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.goodrequest.GoodLogger-SampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GoodLogger-Sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/GoodLogger-Sample"; + }; + name = Debug; + }; + 5DEA7D262C7E0AFC00306034 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FFZN8CA2AB; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.goodrequest.GoodLogger-SampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GoodLogger-Sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/GoodLogger-Sample"; + }; + name = Release; + }; + 5DEA7D282C7E0AFC00306034 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FFZN8CA2AB; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.goodrequest.GoodLogger-SampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "GoodLogger-Sample"; + }; + name = Debug; + }; + 5DEA7D292C7E0AFC00306034 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = FFZN8CA2AB; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.goodrequest.GoodLogger-SampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = "GoodLogger-Sample"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 5DEA7CF42C7E0AFB00306034 /* Build configuration list for PBXProject "GoodLogger-Sample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5DEA7D222C7E0AFC00306034 /* Debug */, + 5DEA7D232C7E0AFC00306034 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5DEA7D1F2C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-Sample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5DEA7D202C7E0AFC00306034 /* Debug */, + 5DEA7D212C7E0AFC00306034 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5DEA7D242C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-SampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5DEA7D252C7E0AFC00306034 /* Debug */, + 5DEA7D262C7E0AFC00306034 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5DEA7D272C7E0AFC00306034 /* Build configuration list for PBXNativeTarget "GoodLogger-SampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5DEA7D282C7E0AFC00306034 /* Debug */, + 5DEA7D292C7E0AFC00306034 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 5DEA7D2A2C7E0FEC00306034 /* XCLocalSwiftPackageReference "../../../GoodLogger" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../../../GoodLogger; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 5DEA7D2D2C7E177400306034 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 11.1.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 5DEA7D2B2C7E0FEC00306034 /* GoodLogger */ = { + isa = XCSwiftPackageProductDependency; + productName = GoodLogger; + }; + 5DEA7D2E2C7E177400306034 /* FirebaseCrashlytics */ = { + isa = XCSwiftPackageProductDependency; + package = 5DEA7D2D2C7E177400306034 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseCrashlytics; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 5DEA7CF12C7E0AFB00306034 /* Project object */; +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..4aa1153 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,123 @@ +{ + "originHash" : "d2526b46fc0adfcea5e1f2587d137cbe66b48415ce9773dd4009d63c24d1c47e", + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "194a6706acbd25e4ef639bcaddea16e8758a3e27", + "version" : "1.2024011602.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "21fe1af9be463a359aaf8d96789ef73fc3760d09", + "version" : "11.0.1" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "1fc52ab0e172e7c5a961f975a76c2611f4f22852", + "version" : "11.2.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "07a2f57d147d2bf368a0d2dcb5579ff082d9e44f", + "version" : "11.1.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "53156c7ec267db846e6b64c9f4c4e31ba4cf75eb", + "version" : "8.0.2" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "f56d8fc3162de9a498377c7b6cea43431f4f5083", + "version" : "1.65.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648", + "version" : "100.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "edb6ed4919f7756157fe02f2552b7e3850a538e5", + "version" : "1.28.1" + } + } + ], + "version" : 3 +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/AppDelegate.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/AppDelegate.swift new file mode 100644 index 0000000..5bfc63c --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/AppDelegate.swift @@ -0,0 +1,24 @@ +// +// AppDelegate.swift +// GoodLogger-Sample +// +// Created by Andrej Jasso on 27/08/2024. +// + +import FirebaseCore +import UIKit +import FirebaseCrashlytics +import GoodLogger + +class AppDelegate: NSObject, UIApplicationDelegate { + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + FirebaseApp.configure() + + return true + } + +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AccentColor.colorset/Contents.json b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AppIcon.appiconset/Contents.json b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2305880 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/Contents.json b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/ContentView.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/ContentView.swift new file mode 100644 index 0000000..8ec3592 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/ContentView.swift @@ -0,0 +1,122 @@ +// +// ContentView.swift +// GoodLogger-Sample +// +// Created by Andrej Jasso on 27/08/2024. +// + +import SwiftUI +import GoodLogger +import Firebase + +struct ContentView: View { + + // MARK: - Properties + + private let osLogger = OSLogLogger() + private let printLogger = PrintLogger() + private let firebaseLogger = FirebaseLogger(crashlitics: Crashlytics.crashlytics()) + + // MARK: - Body + + var body: some View { + Group { + Button(action: { + osLogger.log(level: .debug, message: "Test", privacy: .auto) + }) { + Text(verbatim: "Send Log OSLog") + .foregroundStyle( + LinearGradient( + colors: [.blue, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .colorInvert() + .padding() + .background( + LinearGradient( + colors: [.blue, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .cornerRadius(20.0) + } + + Button(action: { + printLogger.log(level: .debug, message: "Test", privacy: .auto) + }) { + Text(verbatim: "Send Log Print Logger") + .foregroundStyle( + LinearGradient( + colors: [.green, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .colorInvert() + .padding() + .background( + LinearGradient( + colors: [.green, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .cornerRadius(20.0) + } + + Button(action: { + firebaseLogger?.log(level: .debug, message: "Test", privacy: .auto) + }) { + Text(verbatim: "Send Log Firebase") + .foregroundStyle( + LinearGradient( + colors: [.orange, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .colorInvert() + .padding() + .background( + LinearGradient( + colors: [.orange, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .cornerRadius(20.0) + } + + Button(action: { + fatalError("Firebase Start") + }) { + Text(verbatim: "Crash App") + .foregroundStyle( + LinearGradient( + colors: [.red, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .colorInvert() + .padding() + .background( + LinearGradient( + colors: [.red, .black], + startPoint: .top, + endPoint: .bottom + ) + ) + .cornerRadius(20.0) + } + } + } + +} + +#Preview { + ContentView() +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoodLogger_SampleApp.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoodLogger_SampleApp.swift new file mode 100644 index 0000000..013783b --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoodLogger_SampleApp.swift @@ -0,0 +1,21 @@ +// +// GoodLogger_SampleApp.swift +// GoodLogger-Sample +// +// Created by Andrej Jasso on 27/08/2024. +// + +import SwiftUI + +@main +struct GoodLogger_SampleApp: App { + + @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate + + var body: some Scene { + WindowGroup { + ContentView() + } + } + +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoogleService-Info.plist b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoogleService-Info.plist new file mode 100644 index 0000000..1322289 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 300959124870-0h2mms6g7q0u7mla0u51mr3ihnurtgcm.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.300959124870-0h2mms6g7q0u7mla0u51mr3ihnurtgcm + API_KEY + AIzaSyBAE6d_faz0OBr8-Xw9bqU-0jExj1WnUXU + GCM_SENDER_ID + 300959124870 + PLIST_VERSION + 1 + BUNDLE_ID + com.goodrequest.sourcery + PROJECT_ID + sorcery-cb699 + STORAGE_BUCKET + sorcery-cb699.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:300959124870:ios:06c05e1efd6adc0c887007 + + diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Info.plist b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Info.plist new file mode 100644 index 0000000..4c4f072 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Info.plist @@ -0,0 +1,37 @@ + + + + + CFBundleDocumentTypes + + + LSHandlerRank + Default + LSItemContentTypes + + com.example.plain-text + + + + UTImportedTypeDeclarations + + + UTTypeConformsTo + + public.plain-text + + UTTypeDescription + Example Text + UTTypeIdentifier + com.example.plain-text + UTTypeTagSpecification + + public.filename-extension + + exampletext + + + + + + diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Preview Content/Preview Assets.xcassets/Contents.json b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-Sample/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleTests/GoodLogger_SampleTests.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleTests/GoodLogger_SampleTests.swift new file mode 100644 index 0000000..aecd7ca --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleTests/GoodLogger_SampleTests.swift @@ -0,0 +1,17 @@ +// +// GoodLogger_SampleTests.swift +// GoodLogger-SampleTests +// +// Created by Andrej Jasso on 27/08/2024. +// + +import Testing +@testable import GoodLogger_Sample + +struct GoodLogger_SampleTests { + + @Test func example() async throws { + // Write your test here and use APIs like `#expect(...)` to check expected conditions. + } + +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITests.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITests.swift new file mode 100644 index 0000000..dfe6fdc --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITests.swift @@ -0,0 +1,43 @@ +// +// GoodLogger_SampleUITests.swift +// GoodLogger-SampleUITests +// +// Created by Andrej Jasso on 27/08/2024. +// + +import XCTest + +final class GoodLogger_SampleUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + @MainActor + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + @MainActor + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITestsLaunchTests.swift b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITestsLaunchTests.swift new file mode 100644 index 0000000..7912acd --- /dev/null +++ b/GoodLogger-Sample/GoodLogger-Sample/GoodLogger-SampleUITests/GoodLogger_SampleUITestsLaunchTests.swift @@ -0,0 +1,33 @@ +// +// GoodLogger_SampleUITestsLaunchTests.swift +// GoodLogger-SampleUITests +// +// Created by Andrej Jasso on 27/08/2024. +// + +import XCTest + +final class GoodLogger_SampleUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + @MainActor + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +} diff --git a/GoodLogger-Sample/Package.swift b/GoodLogger-Sample/Package.swift new file mode 100644 index 0000000..25179d9 --- /dev/null +++ b/GoodLogger-Sample/Package.swift @@ -0,0 +1,8 @@ +import PackageDescription + +let package = Package( + name: "", + products: [], + dependencies: [], + targets: [] +) \ No newline at end of file diff --git a/Package.swift b/Package.swift index 6bf0348..29e4932 100644 --- a/Package.swift +++ b/Package.swift @@ -1,11 +1,12 @@ // swift-tools-version: 6.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "GoodLogger", platforms: [ - .iOS(.v13), + .iOS(.v15), .macOS(.v10_15) ], products: [ @@ -16,11 +17,13 @@ let package = Package( ], targets: [ .target( - name: "GoodLogger" + name: "GoodLogger", + swiftSettings: [.swiftLanguageMode(.v6)] ), .testTarget( name: "GoodLoggerTests", - dependencies: ["GoodLogger"] - ) + dependencies: ["GoodLogger"], + swiftSettings: [.swiftLanguageMode(.v6)] + ), ] ) diff --git a/Sources/GoodLogger/FirebaseLogger.swift b/Sources/GoodLogger/FirebaseLogger.swift new file mode 100644 index 0000000..c2714be --- /dev/null +++ b/Sources/GoodLogger/FirebaseLogger.swift @@ -0,0 +1,46 @@ +// +// FirebaseLogger.swift +// GoodLogger +// +// Created by Andrej Jasso on 27/08/2024. +// + +import Foundation +import OSLog + +public struct FirebaseLogger: GoodLogger { + + let crashliticsLogger: CrashlyticsLogging + + public init?(crashlitics: AnyObject) { + if let crashliticsLogger = Self.setupFirebaseMessaging(crashlitics: crashlitics) { + self.crashliticsLogger = crashliticsLogger + } else { + return nil + } + } + + public func log(level: OSLogType, message: String, privacy: PrivacyType) { + crashliticsLogger.log(message) + } + +} + +@objc protocol CrashlyticsLogging { + + func log(_ msg: String) + +} + +// MARK: - Private - Helper functions + +private extension FirebaseLogger { + + static func setupFirebaseMessaging(crashlitics: AnyObject) -> CrashlyticsLogging? { + let type: AnyObject.Type = type(of: crashlitics) + class_addProtocol(type, CrashlyticsLogging.self) + + return crashlitics as? CrashlyticsLogging + } + +} diff --git a/Sources/GoodLogger/GoodLogger.swift b/Sources/GoodLogger/GoodLogger.swift index 4f012e7..d9e5784 100644 --- a/Sources/GoodLogger/GoodLogger.swift +++ b/Sources/GoodLogger/GoodLogger.swift @@ -1,6 +1,6 @@ // // GoodLogger.swift -// +// GoodLogger // // Created by Matus Klasovity on 30/01/2024. // @@ -8,7 +8,7 @@ import Foundation import OSLog -public enum PrivacyType { +public enum PrivacyType: Sendable { case `public` case `private` diff --git a/Sources/GoodLogger/OSLogLogger.swift b/Sources/GoodLogger/OSLogLogger.swift index 39e0095..6287235 100644 --- a/Sources/GoodLogger/OSLogLogger.swift +++ b/Sources/GoodLogger/OSLogLogger.swift @@ -1,6 +1,6 @@ // // OSLogLogger.swift -// +// GoodLogger // // Created by Matus Klasovity on 30/01/2024. // @@ -8,9 +8,7 @@ import Foundation import OSLog -@available(iOS 14, *) -@available(macOS 11, *) -public final class OSLogLogger: GoodLogger { +public struct OSLogLogger: GoodLogger { private let logger = Logger(subsystem: "OSLogSessionLogger", category: "Networking") diff --git a/Sources/GoodLogger/PrintLogger.swift b/Sources/GoodLogger/PrintLogger.swift index 8877331..4d82991 100644 --- a/Sources/GoodLogger/PrintLogger.swift +++ b/Sources/GoodLogger/PrintLogger.swift @@ -1,6 +1,6 @@ // // PrintLogger.swift -// +// GoodLogger // // Created by Matus Klasovity on 30/01/2024. // @@ -8,7 +8,7 @@ import Foundation import OSLog -public final class PrintLogger: GoodLogger { +public struct PrintLogger: GoodLogger { public init() {}