Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,33 @@ jobs:
uses: gradle/actions/setup-gradle@v4
- name: Build OneSignalKMP XCFramework
run: iOS_SDK/OneSignalSDK/build_kmp_xcframework.sh
- name: Archive OneSignalFramework for Catalyst
run: |
xcodebuild archive \
-scheme OneSignalFramework \
-configuration Release \
-project iOS_SDK/OneSignalSDK/OneSignal.xcodeproj \
-destination 'generic/platform=macOS,variant=Mac Catalyst' \
-archivePath "$RUNNER_TEMP/OneSignalFramework-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/OneSignalFramework-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"
Comment thread
fadi-george marked this conversation as resolved.
- name: Set Default Scheme
run: |
default="UnitTestApp"
Expand Down
3 changes: 3 additions & 0 deletions OneSignal.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ Pod::Spec.new do |s|

s.source = { :git => "https://github.com/OneSignal/OneSignal-iOS-SDK.git", :tag => s.version.to_s }
s.platform = :ios, "11.0"
s.pod_target_xcconfig = {
'IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]' => '14.0'
}
s.requires_arc = true
s.default_subspec = "OneSignalComplete"

Expand Down
3 changes: 3 additions & 0 deletions OneSignalXCFramework.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ Pod::Spec.new do |s|

s.source = { :git => "https://github.com/OneSignal/OneSignal-iOS-SDK.git", :tag => s.version.to_s }
s.platform = :ios, '11.0'
s.pod_target_xcconfig = {
'IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]' => '14.0'
}
s.requires_arc = true
s.default_subspec = "OneSignalComplete"

Expand Down
6 changes: 5 additions & 1 deletion Package.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
// swift-tools-version:5.3
// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "OneSignalFramework", // Package name MUST be on line 7 for release automation
platforms: [
.iOS(.v11),
.macCatalyst(.v14),
],
products: [
.library(
name: "OneSignalFramework",
Expand Down
78 changes: 78 additions & 0 deletions iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import Foundation
@_spi(OneSignalInternal) import OneSignalOSCore

final class CapturingRequestSender {
let captured = DispatchSemaphore(value: 0)

private let lock = NSLock()
private(set) var requests: [URLRequest] = []

func send(
request: URLRequest,
completion: @escaping (Data?, URLResponse?, Error?) -> Void
) {
lock.lock()
requests.append(request)
lock.unlock()

let response = HTTPURLResponse(
url: request.url!,
statusCode: 202,
httpVersion: nil,
headerFields: nil
)
DispatchQueue.global().async {
completion(nil, response, nil)
self.captured.signal()
}
}

var requestCount: Int {
lock.lock()
defer { lock.unlock() }
return requests.count
}

var firstRequest: URLRequest? {
lock.lock()
defer { lock.unlock() }
return requests.first
}
}

let requestSender = CapturingRequestSender()
let logger = OSRemoteLogger(
installIdProvider: { "catalyst-host" },
onesignalIdProvider: { nil },
pushSubscriptionIdProvider: { nil },
appStateProvider: { "foreground" },
featureFlagsProvider: { [] },
remoteLogLevelProvider: { "INFO" },
exporterLoggingEnabledProvider: { false },
requestSender: requestSender.send
)

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)
precondition(requestSender.captured.wait(timeout: .now() + 5) == .success)

let request = requestSender.firstRequest
precondition(request?.httpMethod == "POST")
precondition(request?.url?.path == "/sdk/log")
precondition(request?.httpBody?.isEmpty == false)

logger.shutdown()
Comment thread
fadi-george marked this conversation as resolved.

let requestCountAfterShutdown = requestSender.requestCount
logger.log(level: "INFO", message: "Must not be exported after shutdown")
precondition(requestSender.captured.wait(timeout: .now() + 1) == .timedOut)
precondition(requestSender.requestCount == requestCountAfterShutdown)
Loading
Loading