7 Commits
0.2.0 ... 0.4.3

Author SHA1 Message Date
8fd1148cbd Reduce platform requirements 2022-06-09 16:00:21 +02:00
04dfb12052 Import network module on linux 2022-06-09 15:40:40 +02:00
f0589b9b90 Remove unused import 2022-06-09 13:58:58 +02:00
1131cb17c6 Update dependencies 2022-06-09 13:52:17 +02:00
c05643c6f1 Remove test files 2022-06-09 13:52:08 +02:00
fde2062507 Reduce swift tools version 2022-06-09 11:38:53 +02:00
e4883f9b2b Update route 2022-06-07 17:21:47 +02:00
3 changed files with 48 additions and 19 deletions

View File

@ -1,12 +1,12 @@
// swift-tools-version: 5.6
// swift-tools-version: 5.5
import PackageDescription
let package = Package(
name: "Push-iOS",
platforms: [
.macOS(.v12),
.iOS(.v15),
.macOS(.v10_15),
.iOS(.v13),
],
products: [
.library(
@ -14,14 +14,15 @@ let package = Package(
targets: ["Push"]),
],
dependencies: [
.package(url: "https://christophhagen.de/git/ch/Push-API.git", from: "0.5.0"),
.package(url: "https://christophhagen.de/git/ch/Push-Definitions.git", from: "1.0.0"),
.package(url: "https://github.com/swift-server-community/APNSwift.git", from: "4.0.0"),
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0")
],
targets: [
.target(
name: "Push",
dependencies: [
.product(name: "PushAPI", package: "Push-API"),
.product(name: "PushMessageDefinitions", package: "Push-Definitions"),
.product(name: "Crypto", package: "swift-crypto")
]),
]

View File

@ -1,13 +1,18 @@
import Foundation
import PushAPI
import SwiftUI
import PushMessageDefinitions
// Use crypto replacement on Linux
#if canImport(CryptoKit)
import CryptoKit
#else
import Crypto
#endif
// Import network types on Linux
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
/**
A client to interact with a push server.
*/
@ -76,7 +81,8 @@ public final class PushClient {
*/
public func getUnapprovedDevices(masterKey: String) async -> [DeviceRegistration]? {
let hash = hash(masterKey)
guard let data = await post(.listUnapprovedDevices, bodyData: hash) else {
let request = AdminRequest(keyHash: hash, application: application)
guard let data = await post(.listUnapprovedDevices, body: request) else {
return nil
}
do {
@ -139,6 +145,39 @@ public final class PushClient {
var request = URLRequest(url: server.appendingPathComponent(route.rawValue))
request.httpBody = bodyData
request.httpMethod = "POST"
if #available(iOS 15.0, *) {
return await post(request)
} else {
return await withCheckedContinuation { continuation in
postRequest(request) { data in
continuation.resume(returning: data)
}
}
}
}
private func postRequest(_ request: URLRequest, completion: @escaping (Data?) -> Void) {
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Failed with error: \(error)")
completion(nil)
}
guard let httpResponse = response as? HTTPURLResponse else {
completion(nil)
return
}
guard httpResponse.statusCode == 200 else {
print("Failed with code: \(httpResponse.statusCode)")
completion(nil)
return
}
completion(data)
}.resume()
}
@available(iOS 15.0, *)
private func post(_ request: URLRequest) async -> Data? {
do {
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else {

View File

@ -1,11 +0,0 @@
import XCTest
@testable import Push_iOS
final class Push_iOSTests: XCTestCase {
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.
XCTAssertEqual(Push_iOS().text, "Hello, World!")
}
}