Skip to content

Commit

Permalink
Merge pull request #9 from fumito-ito/fix-some-warnings
Browse files Browse the repository at this point in the history
Fix some warnings
  • Loading branch information
fumito-ito authored Jan 6, 2022
2 parents 54257a8 + 343e5c5 commit 38bb949
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 56 deletions.
56 changes: 27 additions & 29 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,43 @@
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription
import class Foundation.ProcessInfo

let shouldTest = ProcessInfo.processInfo.environment["TEST"] == "1"

func resolveDependencies() -> [Package.Dependency] {
let firebaseRemoteConfig: Package.Dependency = .package(name: "Firebase", url: "https://github.com/firebase/firebase-ios-sdk.git", .upToNextMajor(from: "8.0.0"))

return [
firebaseRemoteConfig,
]
}

func resolveTargets() -> [Target] {
let baseTarget = Target.target(
name: "SwiftyRemoteConfig",
dependencies: [
.product(name: "FirebaseRemoteConfig", package: "Firebase")
],
path: "Sources")

let testTarget = Target.testTarget(
name: "SwiftyRemoteConfigTests",
dependencies: ["SwiftyRemoteConfig"])

return shouldTest ? [baseTarget, testTarget] : [baseTarget]
}

let package = Package(
name: "SwiftyRemoteConfig",
platforms: [
.iOS(.v11),
.macOS(.v10_12),
.tvOS(.v12),
.watchOS(.v6),
],
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
.library(
name: "SwiftyRemoteConfig",
targets: ["SwiftyRemoteConfig"]),
targets: ["SwiftyRemoteConfig"]
),
],
dependencies: [
.package(
name: "Firebase",
url: "https://github.com/firebase/firebase-ios-sdk.git",
.upToNextMajor(from: "8.0.0")
),
],
dependencies: resolveDependencies(),
targets: resolveTargets()
targets: [
.target(
name: "SwiftyRemoteConfig",
dependencies: [
.product(name: "FirebaseRemoteConfig", package: "Firebase")
],
path: "Sources"
),
.testTarget(
name: "SwiftyRemoteConfigTests",
dependencies: [
"SwiftyRemoteConfig"
],
path: "Tests"
),
]
)
2 changes: 1 addition & 1 deletion Sources/SwiftyRemoteConfig/BuiltIns.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ extension RemoteConfigSerializable where Self: RawRepresentable {

extension RemoteConfigSerializable where Self: NSCoding {
public static var _remoteConfig: RemoteConfigKeyedArchiverBridge<Self> { RemoteConfigKeyedArchiverBridge() }
public static var _remoteConfigArray: RemoteConfigKeyedArchiverBridge<[Self]> { RemoteConfigKeyedArchiverBridge() }
public static var _remoteConfigArray: RemoteConfigKeyedArchiverArrayBridge<[Self]> { RemoteConfigKeyedArchiverArrayBridge() }
}

extension Dictionary: RemoteConfigSerializable where Key == String {
Expand Down
36 changes: 30 additions & 6 deletions Sources/SwiftyRemoteConfig/RemoteConfigBridge.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,6 @@ public struct RemoteConfigUrlBridge: RemoteConfigBridge {
}

public func deserialize(_ object: RemoteConfigValue) -> URL? {
if let url = NSKeyedUnarchiver.unarchiveObject(with: object.dataValue) as? URL {
return url
}

if let stringValue = object.stringValue, stringValue.isEmpty == false {
if let url = URL(string: stringValue) {
return url
Expand All @@ -160,13 +156,41 @@ public struct RemoteConfigCodableBridge<T: Codable>: RemoteConfigBridge {
}
}

public struct RemoteConfigKeyedArchiverBridge<T>: RemoteConfigBridge {
public struct RemoteConfigKeyedArchiverBridge<T: NSCoding>: RemoteConfigBridge {
public func get(key: String, remoteConfig: RemoteConfig) -> T? {
return self.deserialize(remoteConfig.configValue(forKey: key))
}

public func deserialize(_ object: RemoteConfigValue) -> T? {
guard #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) else {
return NSKeyedUnarchiver.unarchiveObject(with: object.dataValue) as? T
}

guard let object = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [T.self], from: object.dataValue) as? T else {
return nil
}

return object
}
}

public struct RemoteConfigKeyedArchiverArrayBridge<T: Collection>: RemoteConfigBridge where T.Element: NSCoding {
public func get(key: String, remoteConfig: RemoteConfig) -> T? {
return self.deserialize(remoteConfig.configValue(forKey: key))
}

public func deserialize(_ object: RemoteConfigValue) -> T? {
return NSKeyedUnarchiver.unarchiveObject(with: object.dataValue) as? T
guard #available(iOS 11.0, macOS 10.13, tvOS 11.0, *) else {
return NSKeyedUnarchiver.unarchiveObject(with: object.dataValue) as? T
}

guard let objects = object.jsonValue as? [Data] else {
return nil
}

return objects.compactMap({
try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [T.Element.self], from: $0) as? T.Element
}) as? T
}
}

Expand Down
8 changes: 5 additions & 3 deletions SwiftyRemoteConfig.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = "SwiftyRemoteConfig"
spec.version = "0.0.2"
spec.version = "0.0.4"
spec.summary = "Modern Swift API for FirebaseRemoteConfig"

spec.description = <<-DESC
Expand All @@ -12,8 +12,10 @@ Pod::Spec.new do |spec|
spec.authors = { "Fumito Ito" => "weathercook@gmail.com" }
spec.social_media_url = "https://twitter.com/fumito_ito"

spec.platform = :ios
spec.ios.deployment_target = "12.0"
spec.ios.deployment_target = "11.0"
spec.osx.deployment_target = "10.12"
spec.tvos.deployment_target = "12.0"
spec.watchos.deployment_target = "6.0"
spec.source = { :git => "https://github.com/fumito-ito/SwiftyRemoteConfig.git", :tag => "#{spec.version}" }
spec.source_files = "Sources", "Sources/**/*.swift"
spec.requires_arc = true
Expand Down
15 changes: 0 additions & 15 deletions Tests/LinuxMain.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,13 @@ extension RemoteConfigSerializableSpec where Serializable.T: Equatable, Serializ
then("create a key") { _ in
let key = RemoteConfigKey<Serializable?>("test")
XCTAssert(key._key == "test")
XCTAssertNil(key.defaultValue)
XCTAssert(key.defaultValue == nil)
}

then("create an array key") { _ in
let key = RemoteConfigKey<[Serializable]?>("test")
XCTAssert(key._key == "test")
XCTAssertNil(key.defaultValue)
XCTAssert(key.defaultValue == nil)
}

then("compare optional value to non-optional value") { _ in
Expand Down

0 comments on commit 38bb949

Please sign in to comment.