Skip to content

Commit 03585ce

Browse files
chore: replace swift-log with oslog (#850)
1 parent 7f3ebd4 commit 03585ce

18 files changed

+202
-1006
lines changed

.github/workflows/tests.yml

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
name: Tests
2-
3-
on: [push]
4-
2+
on:
3+
push:
4+
branches:
5+
- master
6+
pull_request:
57
jobs:
6-
test:
7-
runs-on: macos-12
8+
build:
9+
name: Swift ${{ matrix.swift }} on ${{ matrix.os }}
10+
runs-on: ${{ matrix.os }}
811
env:
912
ALGOLIA_APPLICATION_ID_1: ${{ secrets.ALGOLIA_APPLICATION_ID_1 }}
1013
ALGOLIA_ADMIN_KEY_1: ${{ secrets.ALGOLIA_ADMIN_KEY_1 }}
1114
ALGOLIA_SEARCH_KEY_1: ${{ secrets.ALGOLIA_SEARCH_KEY_1 }}
1215
ALGOLIA_APPLICATION_ID_2: ${{ secrets.ALGOLIA_APPLICATION_ID_2 }}
1316
ALGOLIA_ADMIN_KEY_2: ${{ secrets.ALGOLIA_ADMIN_KEY_2 }}
14-
ALGOLIA_PLACES_APPLICATION_ID: ${{ secrets.ALGOLIA_PLACES_APPLICATION_ID }}
15-
ALGOLIA_PLACES_API_KEY: ${{ secrets.ALGOLIA_PLACES_API_KEY }}
1617
ALGOLIA_APPLICATION_ID_MCM: ${{ secrets.ALGOLIA_APPLICATION_ID_MCM }}
1718
ALGOLIA_ADMIN_KEY_MCM: ${{ secrets.ALGOLIA_ADMIN_KEY_MCM }}
18-
ALGOLIA_ANSWERS_APPLICATION_ID: ${{ secrets.ALGOLIA_ANSWERS_APPLICATION_ID }}
19-
ALGOLIA_ANSWERS_API_KEY: ${{ secrets.ALGOLIA_ANSWERS_API_KEY }}
19+
strategy:
20+
matrix:
21+
os: [ubuntu-latest, macos-latest]
22+
swift: ["5.8"]
23+
2024
steps:
21-
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
22-
- name: Select Xcode version
23-
run: sudo xcode-select -s '/Applications/Xcode_13.4.app/Contents/Developer'
24-
- name: Build project
25-
run: swift build
26-
- name: Run tests
27-
run: swift test
25+
- name: Checkout code
26+
uses: actions/checkout@v4
27+
28+
- uses: swift-actions/setup-swift@v1
29+
with:
30+
swift-version: ${{ matrix.swift }}
31+
32+
- name: Build and test
33+
run: |
34+
swift build
35+
swift test --enable-test-discovery

AlgoliaSearchClient.podspec

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ Pod::Spec.new do |spec|
77
spec.license = { :type => "MIT", :file => "LICENSE" }
88
spec.author = { 'Algolia' => '[email protected]' }
99
spec.documentation_url = "https://www.algolia.com/doc/api-client/getting-started/what-is-the-api-client/swift/"
10-
spec.platforms = { :ios => "9.0", :osx => "10.10", :watchos => "2.0", :tvos => "9.0" }
10+
spec.platforms = { :ios => "14.0", :osx => "11.0", :watchos => "7.0", :tvos => "14.0" }
1111
spec.swift_version = "5.1"
1212
spec.source = { :git => "https://github.com/algolia/algoliasearch-client-swift.git", :tag => spec.version }
1313
spec.source_files = "Sources/AlgoliaSearchClient/**/*.swift"
14-
spec.dependency 'Logging'
1514
end

Cartfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
github "apple/swift-log" ~> 1.4
1+

Dockerfile

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
# You can set the Swift version to what you need for your app.
2-
# Versions can be found here: https://hub.docker.com/_/swift
3-
FROM swift as builder
1+
# Use an official Swift runtime as a parent image
2+
FROM swift:latest
43

5-
WORKDIR /app
4+
# Set the working directory in the container
5+
WORKDIR /usr/src/app
66

7-
COPY ./Package.* ./
7+
# Copy the current directory contents into the container at /usr/src/app
8+
COPY . .
89

10+
# Download Swift package dependencies
911
RUN swift package resolve
1012

11-
COPY . .
13+
# Command to run tests
14+
CMD ["swift", "test", "--enable-test-discovery"]

Package.swift

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
// swift-tools-version:5.1
1+
// swift-tools-version:5.8
22
// The swift-tools-version declares the minimum version of Swift required to build this package.
33

44
import PackageDescription
55

66
#if os(Linux)
77
let macOSVersion: SupportedPlatform.MacOSVersion = .v10_15
88
#else
9-
let macOSVersion: SupportedPlatform.MacOSVersion = .v10_10
9+
let macOSVersion: SupportedPlatform.MacOSVersion = .v11
1010
#endif
1111

1212
#if os(Linux)
1313
let extraPackageDependencies: [Package.Dependency] = [
14-
.package(url: "https://github.com/apple/swift-crypto.git", from: "1.1.2")
14+
.package(url: "https://github.com/apple/swift-crypto.git", from: "1.1.2"),
15+
.package(url: "https://github.com/apple/swift-log.git", from: "1.5.4")
1516
]
1617
#else
1718
let extraPackageDependencies: [Package.Dependency] = []
1819
#endif
1920

2021
#if os(Linux)
2122
let extraTargetDependencies: [Target.Dependency] = [
22-
.product(name: "Crypto", package: "swift-crypto")
23+
.product(name: "Crypto", package: "swift-crypto"),
24+
.product(name: "Logging", package: "swift-log")
2325
]
2426
#else
2527
let extraTargetDependencies: [Target.Dependency] = []
@@ -28,30 +30,27 @@ let extraTargetDependencies: [Target.Dependency] = []
2830
let package = Package(
2931
name: "AlgoliaSearchClient",
3032
platforms: [
31-
.iOS(.v9),
33+
.iOS(.v14),
3234
.macOS(macOSVersion),
33-
.watchOS(.v2),
34-
.tvOS(.v9)
35+
.watchOS(.v7),
36+
.tvOS(.v14)
3537
],
3638
products: [
3739
.library(
3840
name: "AlgoliaSearchClient",
3941
targets: ["AlgoliaSearchClient"])
4042
],
4143
dependencies: [
42-
.package(url: "https://github.com/apple/swift-log.git", from: "1.4.0")
4344
] + extraPackageDependencies,
4445
targets: [
4546
.target(
4647
name: "AlgoliaSearchClient",
4748
dependencies: [
48-
.product(name: "Logging", package: "swift-log")
4949
] + extraTargetDependencies),
5050
.testTarget(
5151
name: "AlgoliaSearchClientTests",
5252
dependencies: [
53-
.target(name: "AlgoliaSearchClient"),
54-
.product(name: "Logging", package: "swift-log")
53+
.target(name: "AlgoliaSearchClient")
5554
] + extraTargetDependencies)
5655
]
5756
)

Sources/AlgoliaSearchClient/Helpers/Logging.swift

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,27 @@
66
//
77

88
import Foundation
9+
#if os(Linux)
910
import Logging
10-
1111
typealias SwiftLog = Logging.Logger
12+
#else
13+
import OSLog
14+
typealias SwiftLog = os.Logger
15+
#endif
1216

1317
public struct Logger {
1418

1519
static var loggingService: Loggable = {
16-
var swiftLog = SwiftLog(label: "com.algolia.searchClientSwift")
17-
print("Algolia Search Client Swift: Default minimal log severity level is info. Change Logger.minLogServerityLevel value if you want to change it.")
18-
swiftLog.logLevel = .info
19-
return swiftLog
20+
var logger: Loggable
21+
#if os(Linux)
22+
logger = SwiftLog(label: "com.algolia.searchClientSwift")
23+
#else
24+
logger = SwiftLog(subsystem: "com.algolia", category: "searchClientSwift")
25+
#endif
26+
return logger
2027
}()
2128

29+
@available(*, deprecated, message: "minSeverityLevel is deprecated")
2230
public static var minSeverityLevel: LogLevel {
2331
get {
2432
return loggingService.minSeverityLevel
@@ -79,6 +87,7 @@ extension Logger {
7987

8088
}
8189

90+
#if os(Linux)
8291
extension LogLevel {
8392

8493
init(swiftLogLevel: SwiftLog.Level) {
@@ -107,27 +116,81 @@ extension LogLevel {
107116

108117
}
109118

110-
protocol Loggable {
119+
extension SwiftLog: Loggable {
111120

112-
var minSeverityLevel: LogLevel { get set }
121+
var minSeverityLevel: LogLevel {
122+
get {
123+
return LogLevel(swiftLogLevel: logLevel)
124+
}
125+
set {
126+
self.logLevel = newValue.swiftLogLevel
127+
}
128+
}
113129

114-
func log(level: LogLevel, message: String)
130+
func log(level: LogLevel, message: String) {
131+
self.log(level: level.swiftLogLevel, SwiftLog.Message(stringLiteral: message), metadata: .none)
132+
}
133+
134+
}
135+
136+
#else
137+
138+
extension LogLevel {
139+
140+
init(_ type: OSLogType) {
141+
switch type {
142+
case .debug:
143+
self = .debug
144+
case .info:
145+
self = .info
146+
case .error:
147+
self = .error
148+
case .fault:
149+
self = .critical
150+
default:
151+
self = .info
152+
}
153+
}
154+
155+
var type: OSLogType {
156+
switch self {
157+
case .trace: return .info
158+
case .debug: return .debug
159+
case .info: return .info
160+
case .notice: return .info
161+
case .warning: return .info
162+
case .error: return .error
163+
case .critical: return .fault
164+
}
165+
}
115166

116167
}
117168

118169
extension SwiftLog: Loggable {
119170

120171
var minSeverityLevel: LogLevel {
121172
get {
122-
return LogLevel(swiftLogLevel: logLevel)
173+
.init(.default)
123174
}
175+
// swiftlint:disable:next unused_setter_value
124176
set {
125-
self.logLevel = newValue.swiftLogLevel
177+
log(level: .info, "minSeverityLevel is deprecated")
126178
}
127179
}
128180

129181
func log(level: LogLevel, message: String) {
130-
self.log(level: level.swiftLogLevel, SwiftLog.Message(stringLiteral: message), metadata: .none)
182+
log(level: level.type, "\(message)")
131183
}
132184

133185
}
186+
187+
#endif
188+
189+
protocol Loggable {
190+
191+
@available(*, deprecated, message: "minSeverityLevel is deprecated")
192+
var minSeverityLevel: LogLevel { get set }
193+
194+
func log(level: LogLevel, message: String)
195+
196+
}

Sources/AlgoliaSearchClient/Models/Common/RequestOptions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ extension HTTPHeaderKey {
108108
static let algoliaUserID: HTTPHeaderKey = "X-Algolia-User-ID"
109109
static let forwardedFor: HTTPHeaderKey = "X-Forwarded-For"
110110
static let applicationID: HTTPHeaderKey = "X-Algolia-Application-Id"
111-
static let apiKey: HTTPHeaderKey = "X-Algolia-API-Key"
111+
static let apiKey: HTTPHeaderKey = "X-Algolia-Api-Key"
112112
static let userAgent: HTTPHeaderKey = "User-Agent"
113113

114114
}

Tests/AlgoliaSearchClientTests/Helper/XCTest+Codable.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,41 @@ func AssertEquallyEncoded<A: Encodable, B: Encodable>(_ l: A, _ r: B, file: Stat
8181
try XCTAssertEqual(decoder.decode(JSON.self, from: lData), decoder.decode(JSON.self, from: rData))
8282
}
8383

84+
func AssertJSONEqual(_ data1: Data?,
85+
_ data2: Data?,
86+
message: String = "JSON objects are not equal",
87+
file: StaticString = #file,
88+
line: UInt = #line) {
89+
guard let data1, let data2 else {
90+
XCTAssertEqual(data1,
91+
data2,
92+
file: file,
93+
line: line)
94+
return
95+
}
96+
97+
do {
98+
let json1 = try JSONSerialization.jsonObject(with: data1, options: [])
99+
let json2 = try JSONSerialization.jsonObject(with: data2, options: [])
100+
101+
// Convert NSDictionary to [AnyHashable: Any]
102+
if let dict1 = json1 as? [AnyHashable: Any], let dict2 = json2 as? [AnyHashable: Any] {
103+
if NSDictionary(dictionary: dict1).isEqual(to: dict2) {
104+
// JSON objects are equal
105+
} else {
106+
XCTFail(message, file: file, line: line)
107+
}
108+
} else if let array1 = json1 as? [Any], let array2 = json2 as? [Any] {
109+
if NSArray(array: array1).isEqual(to: array2) {
110+
// JSON objects (arrays) are equal
111+
} else {
112+
XCTFail(message, file: file, line: line)
113+
}
114+
} else {
115+
XCTFail("JSON objects are not dictionaries", file: file, line: line)
116+
}
117+
} catch {
118+
XCTFail("JSON conversion failed: \(error)", file: file, line: line)
119+
}
120+
}
121+

Tests/AlgoliaSearchClientTests/Integration/InsightsIntegrationTests.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ class InsightsIntegrationTests: IntegrationTestCase {
1919
[insights]
2020
}
2121

22-
func insights() throws {
23-
Logger.minSeverityLevel = .trace
24-
22+
func insights() throws {
2523
let insightsClient = InsightsClient(appID: client.applicationID, apiKey: client.apiKey)
2624

2725
let records: [JSON] = [

Tests/AlgoliaSearchClientTests/Integration/QueryRulesIntegrationTests.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ class QueryRulesIntegrationTests: IntegrationTestCase {
1818
}
1919

2020
func queryRules() throws {
21-
22-
Logger.minSeverityLevel = .warning
23-
21+
2422
let index = client.index(withName: "rules")
2523

2624
let records: [JSON] = [

0 commit comments

Comments
 (0)