diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6084cd3f7..37dda3bc7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,32 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Build OneSignalKMP XCFramework run: iOS_SDK/OneSignalSDK/build_kmp_xcframework.sh + - name: Archive OneSignalOSCore for Catalyst + run: | + xcodebuild archive \ + -scheme OneSignalOSCore \ + -project iOS_SDK/OneSignalSDK/OneSignal.xcodeproj \ + -destination 'generic/platform=macOS,variant=Mac Catalyst' \ + -archivePath "$RUNNER_TEMP/OneSignalOSCore-Catalyst.xcarchive" \ + SKIP_INSTALL=NO \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ + CODE_SIGN_IDENTITY= \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGNING_ALLOWED=NO + - name: Run KMP logger Catalyst host + run: | + frameworks="$RUNNER_TEMP/OneSignalOSCore-Catalyst.xcarchive/Products/Library/Frameworks" + host="$RUNNER_TEMP/CatalystLoggerHost" + xcrun --sdk macosx swiftc \ + -target "$(uname -m)-apple-ios14.0-macabi" \ + -F "$frameworks" \ + -framework OneSignalOSCore \ + -framework OneSignalCore \ + -Xlinker -rpath \ + -Xlinker "$frameworks" \ + iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift \ + -o "$host" + DYLD_FRAMEWORK_PATH="$frameworks" "$host" - name: Set Default Scheme run: | default="UnitTestApp" diff --git a/OneSignal-KMP-SDK b/OneSignal-KMP-SDK index 72581f399..c1656833f 160000 --- a/OneSignal-KMP-SDK +++ b/OneSignal-KMP-SDK @@ -1 +1 @@ -Subproject commit 72581f39968104755f322b7dc48f5b3e4a401403 +Subproject commit c1656833fa3335865bc75e26e50d36d7ba173687 diff --git a/iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift b/iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift new file mode 100644 index 000000000..527963311 --- /dev/null +++ b/iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift @@ -0,0 +1,25 @@ +import Foundation +import OneSignalOSCore + +let logger = OSRemoteLogger( + installIdProvider: { "catalyst-host" }, + onesignalIdProvider: { nil }, + pushSubscriptionIdProvider: { nil }, + appStateProvider: { "foreground" }, + featureFlagsProvider: { [] }, + remoteLogLevelProvider: { "INFO" }, + exporterLoggingEnabledProvider: { false } +) + +precondition(!logger.kmpVersion.isEmpty) +precondition(!logger.crashStoragePath.isEmpty) + +logger.start() +logger.log(level: "INFO", message: "Catalyst logger round trip") + +let flushed = DispatchSemaphore(value: 0) +logger.forceFlush { + flushed.signal() +} +precondition(flushed.wait(timeout: .now() + 5) == .success) +logger.shutdown() diff --git a/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj index 2ad50490c..f80baa580 100644 --- a/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj +++ b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj @@ -5440,6 +5440,10 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( + "$(inherited)", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst", + ); "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64", @@ -5481,6 +5485,7 @@ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Hiptic. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -5508,6 +5513,10 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( + "$(inherited)", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst", + ); "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64", @@ -5556,6 +5565,7 @@ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Hiptic. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -7908,6 +7918,7 @@ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2021 Hiptic. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -7929,6 +7940,11 @@ "-force_load", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-simulator/OneSignalKMP.framework/OneSignalKMP", ); + "OTHER_LDFLAGS[sdk=macosx*]" = ( + "$(inherited)", + "-force_load", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst/OneSignalKMP.framework/OneSignalKMP", + ); PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.OneSignalCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -8307,6 +8323,7 @@ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2021 Hiptic. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8328,6 +8345,11 @@ "-force_load", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-simulator/OneSignalKMP.framework/OneSignalKMP", ); + "OTHER_LDFLAGS[sdk=macosx*]" = ( + "$(inherited)", + "-force_load", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst/OneSignalKMP.framework/OneSignalKMP", + ); PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.OneSignalCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -8394,6 +8416,7 @@ INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2021 Hiptic. All rights reserved."; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -8415,6 +8438,11 @@ "-force_load", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-simulator/OneSignalKMP.framework/OneSignalKMP", ); + "OTHER_LDFLAGS[sdk=macosx*]" = ( + "$(inherited)", + "-force_load", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst/OneSignalKMP.framework/OneSignalKMP", + ); PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.OneSignalCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -9235,6 +9263,10 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( + "$(inherited)", + "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64_x86_64-maccatalyst", + ); "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", "$(SRCROOT)/../../OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework/ios-arm64", @@ -9256,6 +9288,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OneSignalOSCoreFramework/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/xcshareddata/xcschemes/OneSignalOSCore.xcscheme b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/xcshareddata/xcschemes/OneSignalOSCore.xcscheme new file mode 100644 index 000000000..2aa670e4a --- /dev/null +++ b/iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/xcshareddata/xcschemes/OneSignalOSCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/FileLogStore.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/FileLogStore.swift index 85bf04266..e70dbc73c 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/FileLogStore.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/FileLogStore.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Darwin import Foundation import OneSignalCore @@ -236,5 +233,3 @@ final class FileLogStore: ILogFileStore { } } } - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/IOSLogger.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/IOSLogger.swift index 682cf1360..3b981b814 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/IOSLogger.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/IOSLogger.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Foundation import OneSignalCore @_implementationOnly import OneSignalKMP @@ -51,5 +48,3 @@ final class IOSLogger: ILogger { OneSignalLog.onesignalLog(.LL_DEBUG, message: message) } } - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/KotlinByteArray+Data.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/KotlinByteArray+Data.swift index 31b38b0bd..64ccf18e6 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/KotlinByteArray+Data.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/KotlinByteArray+Data.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Foundation @_implementationOnly import OneSignalKMP @@ -36,11 +33,8 @@ extension KotlinByteArray { AppleByteArrayInterop.shared.toNSData(bytes: self) } } - extension Data { var kotlinByteArray: KotlinByteArray { AppleByteArrayInterop.shared.toByteArray(data: self) } } - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLogCrashHandler.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLogCrashHandler.swift index 555abbcc6..a310fe9b3 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLogCrashHandler.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLogCrashHandler.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Darwin import Foundation @_implementationOnly import OneSignalKMP @@ -223,5 +220,3 @@ final class OSLogCrashHandler: ILogCrashHandler { return String(fields[1]) } } - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLoggerPlatformProvider.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLoggerPlatformProvider.swift index c8ae20ee2..c494aa8bf 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLoggerPlatformProvider.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSLoggerPlatformProvider.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Darwin import Foundation import OneSignalCore @@ -110,6 +107,15 @@ final class OSLoggerPlatformProvider: ILoggerPlatformProvider { let osBuildId = OSLoggerPlatformProvider.systemValue(named: Constants.osBuildName) let sdkWrapper = OneSignalWrapper.sdkType let sdkWrapperVersion = OneSignalWrapper.sdkVersion + let kotlinVersion: String? = nil + let swiftVersion: String? = nil + let additionalVersionAttributes: [String: String] = { + #if targetEnvironment(macCatalyst) + return ["apple_platform": "mac_catalyst"] + #else + return [:] + #endif + }() var enabledFeatureFlags: [String] { featureFlagsProvider() } @@ -241,5 +247,3 @@ final class OSLoggerPlatformProvider: ILoggerPlatformProvider { } } - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSRemoteLogger.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSRemoteLogger.swift index 38df28cc4..5278c49ef 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSRemoteLogger.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OSRemoteLogger.swift @@ -52,8 +52,6 @@ public extension OSRemoteLoggerProtocol { func start() {} } -#if !targetEnvironment(macCatalyst) - @_implementationOnly import OneSignalKMP private final class OSRemoteLoggerLifecycle { @@ -305,39 +303,3 @@ public final class OSRemoteLogger: OSRemoteLoggerProtocol { @_spi(OneSignalInternal) extension OSRemoteLogger: OSStructuredRemoteLoggerProtocol {} - -#else - -public final class OSRemoteLogger: OSRemoteLoggerProtocol { - public init( - installIdProvider: @escaping () -> String, - onesignalIdProvider: @escaping () -> String?, - pushSubscriptionIdProvider: @escaping () -> String?, - appStateProvider: @escaping () -> String, - featureFlagsProvider: @escaping () -> [String], - remoteLogLevelProvider: @escaping () -> String?, - exporterLoggingEnabledProvider: @escaping () -> Bool - ) {} - - public let kmpVersion = "unavailable" - public let crashStoragePath = "unavailable" - - public func start() {} - public func log(level: String, message: String) {} - public func log( - level: String, - message: String, - exceptionType: String?, - exceptionMessage: String?, - exceptionStacktrace: String? - ) {} - public func forceFlush(completion: @escaping () -> Void) { - completion() - } - public func shutdown() {} -} - -@_spi(OneSignalInternal) -extension OSRemoteLogger: OSStructuredRemoteLoggerProtocol {} - -#endif diff --git a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OneSignalLogHttpSender.swift b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OneSignalLogHttpSender.swift index e8219a204..68a926822 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OneSignalLogHttpSender.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/Logging/OneSignalLogHttpSender.swift @@ -25,9 +25,6 @@ THE SOFTWARE. */ -// Kotlin/Native does not produce a Mac Catalyst framework slice. -#if !targetEnvironment(macCatalyst) - import Foundation @_implementationOnly import OneSignalKMP @@ -207,5 +204,3 @@ final class OneSignalLogHttpSender: ILogHttpSender { String(body.prefix(maximumDiagnosticBodyLength)) } } - -#endif