diff --git a/.gitignore b/.gitignore index 6fd0b0c71..a7fe67fd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Generated +Ruuvi Station.xcodeproj + # Private station/Resources/Plists/GoogleService-Info.plist station/Classes/Networking/Assembly/Networking.plist diff --git a/Common/RuuviBundleUtils/.gitignore b/Common/RuuviBundleUtils/.gitignore deleted file mode 100644 index bb460e7be..000000000 --- a/Common/RuuviBundleUtils/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -/.build -/Packages -/*.xcodeproj -xcuserdata/ -DerivedData/ -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/Common/RuuviBundleUtils/Package.swift b/Common/RuuviBundleUtils/Package.swift deleted file mode 100644 index 123d52762..000000000 --- a/Common/RuuviBundleUtils/Package.swift +++ /dev/null @@ -1,28 +0,0 @@ -// swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "RuuviBundleUtils", - products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. - .library( - name: "RuuviBundleUtils", - targets: ["RuuviBundleUtils"]) - ], - dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), - ], - targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. - .target( - name: "RuuviBundleUtils", - dependencies: []), - .testTarget( - name: "RuuviBundleUtilsTests", - dependencies: ["RuuviBundleUtils"]) - ] -) diff --git a/Common/RuuviBundleUtils/README.md b/Common/RuuviBundleUtils/README.md deleted file mode 100644 index 9517feee4..000000000 --- a/Common/RuuviBundleUtils/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# RuuviBundleUtils - -A description of this package. diff --git a/Common/RuuviBundleUtils/RuuviBundleUtils.podspec b/Common/RuuviBundleUtils/RuuviBundleUtils.podspec deleted file mode 100644 index deaab22b1..000000000 --- a/Common/RuuviBundleUtils/RuuviBundleUtils.podspec +++ /dev/null @@ -1,31 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'RuuviBundleUtils' - s.version = '0.0.1' - s.summary = 'Ruuvi BundleUtils' - s.homepage = 'https://ruuvi.com' - s.author = { 'Rinat Enikeev' => 'rinat@ruuvi.com' } - s.license = { :type => 'BSD 3-Clause', :file => '../../LICENSE' } - s.platform = :ios, '10.0' - s.source = { git: 'https://github.com/ruuvi/com.ruuvi.station.ios' } - s.frameworks = 'Foundation' - s.requires_arc = true - s.ios.deployment_target = '10.0' - s.swift_version = '5.0' - - s.default_subspecs = 'RuuviBundleUtils' - - s.subspec 'RuuviBundleUtils' do |ss| - ss.source_files = 'Sources/RuuviBundleUtils/**/*.{h,m,swift}', 'Sources/RuuviBundleUtils/*.{h,m,swift}' - ss.resource_bundles = { - 'RuuviBundleUtils' => ['Sources/**/Resources/**/*'] - } - end - - s.test_spec 'Tests' do |test_spec| - test_spec.source_files = 'Tests/**/*.{swift}', 'Tests/*.{swift}' - end -end - - - - diff --git a/Common/RuuviBundleUtils/Tests/RuuviBundleUtilsTests/RuuviBundleUtilsTests.swift b/Common/RuuviBundleUtils/Tests/RuuviBundleUtilsTests/RuuviBundleUtilsTests.swift deleted file mode 100644 index 33386d926..000000000 --- a/Common/RuuviBundleUtils/Tests/RuuviBundleUtilsTests/RuuviBundleUtilsTests.swift +++ /dev/null @@ -1,11 +0,0 @@ -import XCTest - @testable import RuuviBundleUtils - - final class RuuviBundleUtilsTests: XCTestCase { - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct - // results. - XCTAssertEqual(RuuviBundleUtils().text, "Hello, World!") - } - } diff --git a/Common/RuuviLocalization/Package.swift b/Common/RuuviLocalization/Package.swift index 3b58ba686..7ce392528 100644 --- a/Common/RuuviLocalization/Package.swift +++ b/Common/RuuviLocalization/Package.swift @@ -1,10 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviLocalization", + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/Common/RuuviPresenters/Package.swift b/Common/RuuviPresenters/Package.swift index 8c20dccf0..e8997bec6 100644 --- a/Common/RuuviPresenters/Package.swift +++ b/Common/RuuviPresenters/Package.swift @@ -1,28 +1,26 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviPresenters", + defaultLocalization: "en", + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "RuuviPresenters", - targets: ["RuuviPresenters"]) - ], - dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + targets: ["RuuviPresenters"] + ) ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "RuuviPresenters", - dependencies: []), + resources: [.process("Resources")] + ), .testTarget( name: "RuuviPresentersTests", - dependencies: ["RuuviPresenters"]) + dependencies: ["RuuviPresenters"] + ) ] ) diff --git a/Common/RuuviPresenters/RuuviPresenters.podspec b/Common/RuuviPresenters/RuuviPresenters.podspec index a70b2c733..ac4d34817 100644 --- a/Common/RuuviPresenters/RuuviPresenters.podspec +++ b/Common/RuuviPresenters/RuuviPresenters.podspec @@ -19,8 +19,6 @@ Pod::Spec.new do |s| ss.resource_bundles = { 'RuuviPresenters' => ['Sources/**/Resources/**/*'] } - - ss.dependency 'RuuviBundleUtils' end s.test_spec 'Tests' do |test_spec| diff --git a/Common/RuuviPresenters/Sources/RuuviPresenters/Activity/RuuviLogo/ActivityPresenterRuuviLogo.swift b/Common/RuuviPresenters/Sources/RuuviPresenters/Activity/RuuviLogo/ActivityPresenterRuuviLogo.swift index 4b181bdf6..a22c198e4 100644 --- a/Common/RuuviPresenters/Sources/RuuviPresenters/Activity/RuuviLogo/ActivityPresenterRuuviLogo.swift +++ b/Common/RuuviPresenters/Sources/RuuviPresenters/Activity/RuuviLogo/ActivityPresenterRuuviLogo.swift @@ -1,5 +1,4 @@ import UIKit -import RuuviBundleUtils public final class ActivityPresenterRuuviLogo: ActivityPresenter { var counter = 0 { diff --git a/Common/RuuviPresenters/Sources/RuuviPresenters/Error/Alert/ErrorPresenterAlert.swift b/Common/RuuviPresenters/Sources/RuuviPresenters/Error/Alert/ErrorPresenterAlert.swift index 329ea2345..3c6f5bd9c 100644 --- a/Common/RuuviPresenters/Sources/RuuviPresenters/Error/Alert/ErrorPresenterAlert.swift +++ b/Common/RuuviPresenters/Sources/RuuviPresenters/Error/Alert/ErrorPresenterAlert.swift @@ -1,5 +1,4 @@ import UIKit -import RuuviBundleUtils public final class ErrorPresenterAlert: ErrorPresenter { public init() {} diff --git a/Common/RuuviPresenters/Sources/RuuviPresenters/Permission/Alert/PermissionPresenterAlert.swift b/Common/RuuviPresenters/Sources/RuuviPresenters/Permission/Alert/PermissionPresenterAlert.swift index a162e2134..866dd72f1 100644 --- a/Common/RuuviPresenters/Sources/RuuviPresenters/Permission/Alert/PermissionPresenterAlert.swift +++ b/Common/RuuviPresenters/Sources/RuuviPresenters/Permission/Alert/PermissionPresenterAlert.swift @@ -1,5 +1,4 @@ import UIKit -import RuuviBundleUtils public final class PermissionPresenterAlert: PermissionPresenter { public init() {} diff --git a/Common/RuuviPresenters/Sources/RuuviPresenters/Resources/ActivityRuuviLogo.storyboard b/Common/RuuviPresenters/Sources/RuuviPresenters/Resources/ActivityRuuviLogo.storyboard index 3a187ac25..f88418340 100644 --- a/Common/RuuviPresenters/Sources/RuuviPresenters/Resources/ActivityRuuviLogo.storyboard +++ b/Common/RuuviPresenters/Sources/RuuviPresenters/Resources/ActivityRuuviLogo.storyboard @@ -1,9 +1,9 @@ - + - + @@ -11,7 +11,7 @@ - + diff --git a/Common/RuuviBundleUtils/Sources/RuuviBundleUtils/RuuviBundleUtils.swift b/Common/RuuviPresenters/Sources/RuuviPresenters/Util/RuuviBundleUtils.swift similarity index 100% rename from Common/RuuviBundleUtils/Sources/RuuviBundleUtils/RuuviBundleUtils.swift rename to Common/RuuviPresenters/Sources/RuuviPresenters/Util/RuuviBundleUtils.swift diff --git a/Common/RuuviPresenters/Tests/RuuviPresentersTests/RuuviPresentersTests.swift b/Common/RuuviPresenters/Tests/RuuviPresentersTests/RuuviPresentersTests.swift index 0396cf18a..81d4e300e 100644 --- a/Common/RuuviPresenters/Tests/RuuviPresentersTests/RuuviPresentersTests.swift +++ b/Common/RuuviPresenters/Tests/RuuviPresentersTests/RuuviPresentersTests.swift @@ -1,11 +1,7 @@ import XCTest - @testable import RuuviPresenters +@testable import RuuviPresenters - final class RuuviPresentersTests: XCTestCase { - func testExample() { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct - // results. - XCTAssertEqual(RuuviPresenters().text, "Hello, World!") - } +final class RuuviPresentersTests: XCTestCase { + func testExample() { } +} diff --git a/Modules/RuuviDiscover/Package.swift b/Modules/RuuviDiscover/Package.swift index e1ec72b9c..2ef691a3a 100644 --- a/Modules/RuuviDiscover/Package.swift +++ b/Modules/RuuviDiscover/Package.swift @@ -1,28 +1,45 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviDiscover", + defaultLocalization: "en", + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "RuuviDiscover", targets: ["RuuviDiscover"]) ], dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + .package(path: "../../Packages/RuuviOntology"), + .package(path: "../../Packages/RuuviContext"), + .package(path: "../../Packages/RuuviReactor"), + .package(path: "../../Packages/RuuviLocal"), + .package(path: "../../Packages/RuuviService"), + .package(path: "../../Packages/RuuviVirtual"), + .package(path: "../../Common/RuuviPresenters"), + .package(path: "../../Common/RuuviLocalization"), + .package(url: "https://github.com/ruuvi/BTKit", .upToNextMinor(from: "0.4.3")), ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "RuuviDiscover", - dependencies: []), + dependencies: [ + "RuuviOntology", + "RuuviContext", + "RuuviReactor", + "RuuviLocal", + "RuuviService", + "RuuviVirtual", + "RuuviPresenters", + "BTKit", + "RuuviLocalization" + ] + ), .testTarget( - name: "RuuviDiscoverTests", - dependencies: ["RuuviDiscover"]) + name: "RuuviDiscoverTests" + ) ] ) diff --git a/Modules/RuuviDiscover/Sources/RuuviDiscover/Util/RuuviBundleUtils.swift b/Modules/RuuviDiscover/Sources/RuuviDiscover/Util/RuuviBundleUtils.swift new file mode 100644 index 000000000..3f6f7e798 --- /dev/null +++ b/Modules/RuuviDiscover/Sources/RuuviDiscover/Util/RuuviBundleUtils.swift @@ -0,0 +1,83 @@ +import Foundation +import UIKit + +extension Bundle { + public static func pod(_ clazz: AnyClass) -> Bundle { + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first, + let bundleURL = Bundle(for: clazz).resourceURL?.appendingPathComponent("\(module).bundle"), + let bundle = Bundle(url: bundleURL) { + return bundle + } else { + assertionFailure() + return Bundle.main + } + } +} + +extension UIImage { + public static func named(_ name: String, for clazz: AnyClass) -> UIImage? { + #if SWIFT_PACKAGE + return UIImage(named: name, in: Bundle.module, compatibleWith: nil) + #else + return UIImage(named: name, in: Bundle.pod(clazz), compatibleWith: nil) + #endif + } +} + +extension String { + public func localized(for clazz: AnyClass) -> String { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first { + if let path = bundle.path(forResource: currentLanguage(), ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else if let path = bundle.path(forResource: "Base", ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else { + assertionFailure() + return self + } + } else { + assertionFailure() + return self + } + } + + private func currentLanguage() -> String { + if let preferred = Bundle.main.preferredLocalizations.first { + return preferred + } else { + return "Base" + } + } +} + +extension UIStoryboard { + public static func named(_ name: String, for clazz: AnyClass) -> UIStoryboard { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UIStoryboard(name: name, bundle: bundle) + } +} + +extension UINib { + public static func nibName(_ nibName: String, for clazz: AnyClass) -> UINib { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UINib(nibName: nibName, bundle: bundle) + } +} diff --git a/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableViewController.swift b/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableViewController.swift index 9bc3248ff..68d4f0964 100644 --- a/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableViewController.swift +++ b/Modules/RuuviDiscover/Sources/RuuviDiscover/VMP/View/Table/DiscoverTableViewController.swift @@ -3,7 +3,6 @@ import BTKit import RuuviOntology import RuuviVirtual import RuuviLocalization -import RuuviBundleUtils import CoreNFC enum DiscoverTableSection { diff --git a/Modules/RuuviDiscover/Tests/RuuviDiscoverTests/RuuviDiscoverTests.swift b/Modules/RuuviDiscover/Tests/RuuviDiscoverTests/RuuviDiscoverTests.swift index 58644a282..5bbd240b7 100644 --- a/Modules/RuuviDiscover/Tests/RuuviDiscoverTests/RuuviDiscoverTests.swift +++ b/Modules/RuuviDiscover/Tests/RuuviDiscoverTests/RuuviDiscoverTests.swift @@ -1,5 +1,4 @@ import XCTest -@testable import RuuviDiscover final class RuuviDiscoverTests: XCTestCase { func testExample() { diff --git a/Modules/RuuviLocationPicker/Package.swift b/Modules/RuuviLocationPicker/Package.swift index 69456016e..1568ed6d5 100644 --- a/Modules/RuuviLocationPicker/Package.swift +++ b/Modules/RuuviLocationPicker/Package.swift @@ -1,10 +1,12 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviLocationPicker", + defaultLocalization: "en", + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( @@ -12,15 +14,25 @@ let package = Package( targets: ["RuuviLocationPicker"]) ], dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + .package(path: "../../Packages/RuuviOntology"), + .package(path: "../../Common/RuuviPresenters"), + .package(path: "../../Common/RuuviLocalization"), + .package(path: "../../Packages/RuuviCore"), + .package(path: "../../Packages/RuuviLocation"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "RuuviLocationPicker", - dependencies: []), + dependencies: [ + "RuuviOntology", + "RuuviPresenters", + "RuuviCore", + "RuuviLocation", + "RuuviLocalization" + ] + ), .testTarget( name: "RuuviLocationPickerTests", dependencies: ["RuuviLocationPicker"]) diff --git a/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/Util/RuuviBundleUtils.swift b/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/Util/RuuviBundleUtils.swift new file mode 100644 index 000000000..3f6f7e798 --- /dev/null +++ b/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/Util/RuuviBundleUtils.swift @@ -0,0 +1,83 @@ +import Foundation +import UIKit + +extension Bundle { + public static func pod(_ clazz: AnyClass) -> Bundle { + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first, + let bundleURL = Bundle(for: clazz).resourceURL?.appendingPathComponent("\(module).bundle"), + let bundle = Bundle(url: bundleURL) { + return bundle + } else { + assertionFailure() + return Bundle.main + } + } +} + +extension UIImage { + public static func named(_ name: String, for clazz: AnyClass) -> UIImage? { + #if SWIFT_PACKAGE + return UIImage(named: name, in: Bundle.module, compatibleWith: nil) + #else + return UIImage(named: name, in: Bundle.pod(clazz), compatibleWith: nil) + #endif + } +} + +extension String { + public func localized(for clazz: AnyClass) -> String { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first { + if let path = bundle.path(forResource: currentLanguage(), ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else if let path = bundle.path(forResource: "Base", ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else { + assertionFailure() + return self + } + } else { + assertionFailure() + return self + } + } + + private func currentLanguage() -> String { + if let preferred = Bundle.main.preferredLocalizations.first { + return preferred + } else { + return "Base" + } + } +} + +extension UIStoryboard { + public static func named(_ name: String, for clazz: AnyClass) -> UIStoryboard { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UIStoryboard(name: name, bundle: bundle) + } +} + +extension UINib { + public static func nibName(_ nibName: String, for clazz: AnyClass) -> UINib { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UINib(nibName: nibName, bundle: bundle) + } +} diff --git a/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/VMP/Presenter/LocationPickerPresenter.swift b/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/VMP/Presenter/LocationPickerPresenter.swift index b2adf2a27..6cdd21793 100644 --- a/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/VMP/Presenter/LocationPickerPresenter.swift +++ b/Modules/RuuviLocationPicker/Sources/RuuviLocationPicker/VMP/Presenter/LocationPickerPresenter.swift @@ -3,6 +3,7 @@ import CoreLocation import RuuviLocation import RuuviCore import RuuviPresenters +import UIKit class LocationPickerPresenter: RuuviLocationPicker { var viewController: UIViewController { diff --git a/Modules/RuuviOnboard/Package.swift b/Modules/RuuviOnboard/Package.swift index 194fbc903..f21a142b7 100644 --- a/Modules/RuuviOnboard/Package.swift +++ b/Modules/RuuviOnboard/Package.swift @@ -6,20 +6,19 @@ import PackageDescription let package = Package( name: "RuuviOnboard", defaultLocalization: "en", - platforms: [.iOS(.v11), .macOS(.v10_15)], + platforms: [.iOS(.v13), .macOS(.v10_15)], products: [ .library( name: "RuuviOnboard", targets: ["RuuviOnboard"]) ], dependencies: [ - // Dependencies declare other packages that this package depends on. - // .package(url: /* package url */, from: "1.0.0"), + .package(path: "../../Packages/RuuviUser") ], targets: [ .target( name: "RuuviOnboard", - dependencies: []), + dependencies: ["RuuviUser"]), .testTarget( name: "RuuviOnboardTests", dependencies: ["RuuviOnboard"]) diff --git a/Modules/RuuviOnboard/RuuviOnboard.podspec b/Modules/RuuviOnboard/RuuviOnboard.podspec index f1720b9d0..e368acbb4 100644 --- a/Modules/RuuviOnboard/RuuviOnboard.podspec +++ b/Modules/RuuviOnboard/RuuviOnboard.podspec @@ -19,7 +19,6 @@ Pod::Spec.new do |s| ss.resource_bundles = { 'RuuviOnboard' => ['Sources/**/Resources/**/*'] } - ss.dependency 'RuuviBundleUtils' ss.dependency 'RuuviUser' end diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardViewController.swift b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardViewController.swift index 409cf0c3f..4740e9823 100644 --- a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardViewController.swift +++ b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/RuuviOnboardViewController.swift @@ -1,6 +1,5 @@ import UIKit import RuuviUser -import RuuviBundleUtils // swiftlint:disable file_length diff --git a/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Util/RuuviBundleUtils.swift b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Util/RuuviBundleUtils.swift new file mode 100644 index 000000000..3f6f7e798 --- /dev/null +++ b/Modules/RuuviOnboard/Sources/RuuviOnboard/Pages/Util/RuuviBundleUtils.swift @@ -0,0 +1,83 @@ +import Foundation +import UIKit + +extension Bundle { + public static func pod(_ clazz: AnyClass) -> Bundle { + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first, + let bundleURL = Bundle(for: clazz).resourceURL?.appendingPathComponent("\(module).bundle"), + let bundle = Bundle(url: bundleURL) { + return bundle + } else { + assertionFailure() + return Bundle.main + } + } +} + +extension UIImage { + public static func named(_ name: String, for clazz: AnyClass) -> UIImage? { + #if SWIFT_PACKAGE + return UIImage(named: name, in: Bundle.module, compatibleWith: nil) + #else + return UIImage(named: name, in: Bundle.pod(clazz), compatibleWith: nil) + #endif + } +} + +extension String { + public func localized(for clazz: AnyClass) -> String { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + if let module = NSStringFromClass(clazz).components(separatedBy: ".").first { + if let path = bundle.path(forResource: currentLanguage(), ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else if let path = bundle.path(forResource: "Base", ofType: "lproj"), + let bundle = Bundle(path: path) { + return bundle.localizedString(forKey: self, value: nil, table: module) + } else { + assertionFailure() + return self + } + } else { + assertionFailure() + return self + } + } + + private func currentLanguage() -> String { + if let preferred = Bundle.main.preferredLocalizations.first { + return preferred + } else { + return "Base" + } + } +} + +extension UIStoryboard { + public static func named(_ name: String, for clazz: AnyClass) -> UIStoryboard { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UIStoryboard(name: name, bundle: bundle) + } +} + +extension UINib { + public static func nibName(_ nibName: String, for clazz: AnyClass) -> UINib { + let bundle: Bundle + #if SWIFT_PACKAGE + bundle = Bundle.module + #else + bundle = Bundle.pod(clazz) + #endif + return UINib(nibName: nibName, bundle: bundle) + } +} diff --git a/Packages/RuuviAnalytics/Package.swift b/Packages/RuuviAnalytics/Package.swift index b8fb6a138..e64cd5710 100644 --- a/Packages/RuuviAnalytics/Package.swift +++ b/Packages/RuuviAnalytics/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -15,13 +15,13 @@ let package = Package( targets: ["RuuviAnalyticsImpl"]) ], dependencies: [ - .package(name: "Firebase", url: "https://github.com/firebase/firebase-ios-sdk", .upToNextMajor(from: "9.0.0")), + .package(name: "Firebase", url: "https://github.com/firebase/firebase-ios-sdk", .upToNextMajor(from: "10.0.0")), .package(path: "../RuuviStorage"), .package(path: "../RuuviLocal"), .package(path: "../RuuviOntology"), .package(path: "../RuuviVirtual"), .package(path: "../RuuviUser"), - .package(path: "../RuuviService/Alert") + .package(path: "../RuuviService") ], targets: [ .target( @@ -37,7 +37,7 @@ let package = Package( "RuuviOntology", "RuuviVirtual", "RuuviUser", - "RuuviService/Alert" + "RuuviService" ]), .testTarget( name: "RuuviAnalyticsTests", diff --git a/Packages/RuuviCloud/Package.swift b/Packages/RuuviCloud/Package.swift index 7027f00f9..37789cee2 100644 --- a/Packages/RuuviCloud/Package.swift +++ b/Packages/RuuviCloud/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviCloud", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviCloud", @@ -19,9 +19,10 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/kean/Future", .exact("1.3.0")), - .package(url: "https://github.com/rinat-enikeev/BTKit", .upToNextMinor(from: "0.3.0")), + .package(url: "https://github.com/ruuvi/BTKit", .upToNextMinor(from: "0.4.3")), .package(path: "../RuuviOntology"), - .package(path: "../RuuviUser") + .package(path: "../RuuviUser"), + .package(path: "../RuuviPool") ], targets: [ .target( @@ -29,6 +30,7 @@ let package = Package( dependencies: [ "Future", "RuuviOntology", + "RuuviPool", "RuuviUser" ] ), diff --git a/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloud.swift b/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloud.swift index 46fc4bd5e..2a67edc6c 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloud.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloud.swift @@ -18,7 +18,7 @@ public struct ShareSensorResponse { public var macId: MACIdentifier? public var invited: Bool? - init(macId: MACIdentifier? = nil, invited: Bool? = nil) { + public init(macId: MACIdentifier? = nil, invited: Bool? = nil) { self.macId = macId self.invited = invited } diff --git a/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloudApiError.swift b/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloudApiError.swift index 0174cddee..3fbc6bd3c 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloudApiError.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloudApiError.swift @@ -11,3 +11,7 @@ public enum RuuviCloudApiError: Error { case failedToGetDataFromResponse case unauthorized } + +public struct RuuviCloudApiClaimError: Decodable { + public let error, code: String? +} diff --git a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenListRequest.swift b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenListRequest.swift index 1da0e8db3..0bf6c659f 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenListRequest.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenListRequest.swift @@ -1,5 +1,5 @@ import Foundation public struct RuuviCloudPNTokenListRequest: Encodable { - + public init() {} } diff --git a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenUnregisterRequest.swift b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenUnregisterRequest.swift index 0089cfb57..e0fa273c4 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenUnregisterRequest.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Request/RuuviCloudPNTokenUnregisterRequest.swift @@ -3,4 +3,9 @@ import Foundation public struct RuuviCloudPNTokenUnregisterRequest: Encodable { let token: String? let id: Int? + + public init(token: String?, id: Int?) { + self.token = token + self.id = id + } } diff --git a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiAccountDeleteResponse.swift b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiAccountDeleteResponse.swift index 8c73b899a..fd02ba625 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiAccountDeleteResponse.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiAccountDeleteResponse.swift @@ -1,5 +1,5 @@ import Foundation public struct RuuviCloudApiAccountDeleteResponse: Codable { - let email: String? + public let email: String? } diff --git a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiBaseResponse.swift b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiBaseResponse.swift index cdcba9c0e..5ce820977 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiBaseResponse.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiBaseResponse.swift @@ -35,7 +35,7 @@ extension RuuviCloudApiBaseResponse { return .success(data) case .error: guard let code = code else { - if let description = errorDescription { + if errorDescription != nil { return .failure(.api(.erInternal)) } else { return .failure(.emptyResponse) diff --git a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiClaimResponse.swift b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiClaimResponse.swift index 2b53de7e8..e3c609963 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiClaimResponse.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudApi/URLSession/Models/Response/RuuviCloudApiClaimResponse.swift @@ -3,8 +3,5 @@ import Foundation public struct RuuviCloudApiClaimResponse: Decodable { public let sensor: String? } -public struct RuuviCloudApiClaimError: Decodable { - public let error, code: String? -} public struct RuuviCloudApiUnclaimResponse: Decodable { } diff --git a/Packages/RuuviCloud/Sources/RuuviCloudPure/RuuviCloudPure.swift b/Packages/RuuviCloud/Sources/RuuviCloudPure/RuuviCloudPure.swift index fd98d63b7..046e87bdc 100644 --- a/Packages/RuuviCloud/Sources/RuuviCloudPure/RuuviCloudPure.swift +++ b/Packages/RuuviCloud/Sources/RuuviCloudPure/RuuviCloudPure.swift @@ -752,7 +752,7 @@ public final class RuuviCloudPure: RuuviCloud { offsetHumidity: sensor.offsetHumidity, offsetPressure: sensor.offsetPressure, isCloudSensor: true, - canShare: sensor.canShare ?? false, + canShare: sensor.canShare, sharedTo: sensor.sharedTo ?? [] ), record: self?.decodeSensorRecord( diff --git a/Packages/RuuviContext/Package.swift b/Packages/RuuviContext/Package.swift index 18e746d28..589a9745f 100644 --- a/Packages/RuuviContext/Package.swift +++ b/Packages/RuuviContext/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviContext", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviContext", diff --git a/Packages/RuuviCore/Package.swift b/Packages/RuuviCore/Package.swift index e4acc05e3..7db1f8f8e 100644 --- a/Packages/RuuviCore/Package.swift +++ b/Packages/RuuviCore/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviCore", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviCore", @@ -32,7 +32,8 @@ let package = Package( targets: [ .target( name: "RuuviCore", - dependencies: []), + dependencies: ["Future"] + ), .target( name: "RuuviCoreImage", dependencies: ["RuuviCore"] diff --git a/Packages/RuuviDFU/Package.swift b/Packages/RuuviDFU/Package.swift index 4cd43d475..ba3c61b60 100644 --- a/Packages/RuuviDFU/Package.swift +++ b/Packages/RuuviDFU/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Packages/RuuviDaemon/Package.swift b/Packages/RuuviDaemon/Package.swift index 35c16729a..0a82c26d4 100644 --- a/Packages/RuuviDaemon/Package.swift +++ b/Packages/RuuviDaemon/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -37,7 +37,7 @@ let package = Package( .package(path: "../RuuviPersistence"), .package(path: "../RuuviNotifier"), .package(path: "../RuuviNotification"), - .package(url: "https://github.com/rinat-enikeev/BTKit", .upToNextMinor(from: "0.3.0")) + .package(url: "https://github.com/ruuvi/BTKit", .upToNextMinor(from: "0.4.3")) ], targets: [ .target( diff --git a/Packages/RuuviLocal/Package.swift b/Packages/RuuviLocal/Package.swift index dc5239387..2fe57a942 100644 --- a/Packages/RuuviLocal/Package.swift +++ b/Packages/RuuviLocal/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviLocal", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviLocal", diff --git a/Packages/RuuviLocation/Package.swift b/Packages/RuuviLocation/Package.swift index 78ed4d0f7..1247afef7 100644 --- a/Packages/RuuviLocation/Package.swift +++ b/Packages/RuuviLocation/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviLocation", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviLocation", diff --git a/Packages/RuuviMigration/Package.swift b/Packages/RuuviMigration/Package.swift index 3d762a217..ee361f28f 100644 --- a/Packages/RuuviMigration/Package.swift +++ b/Packages/RuuviMigration/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Packages/RuuviNotification/Package.swift b/Packages/RuuviNotification/Package.swift index a34cd8ebd..43240e514 100644 --- a/Packages/RuuviNotification/Package.swift +++ b/Packages/RuuviNotification/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Packages/RuuviNotifier/Package.swift b/Packages/RuuviNotifier/Package.swift index f5357a7d1..ccfa633a0 100644 --- a/Packages/RuuviNotifier/Package.swift +++ b/Packages/RuuviNotifier/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Packages/RuuviOntology/Package.swift b/Packages/RuuviOntology/Package.swift index be689831d..81c037975 100644 --- a/Packages/RuuviOntology/Package.swift +++ b/Packages/RuuviOntology/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviOntology", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviOntology", @@ -22,7 +22,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/rinat-enikeev/Humidity", from: "0.1.5"), - .package(url: "https://github.com/rinat-enikeev/BTKit", .upToNextMinor(from: "0.3.0")), + .package(url: "https://github.com/ruuvi/BTKit", .upToNextMinor(from: "0.4.3")), .package(name: "Realm", url: "https://github.com/realm/realm-cocoa", .upToNextMajor(from: "10.8.0")), .package(name: "GRDB", url: "https://github.com/groue/GRDB.swift", .upToNextMajor(from: "4.14.0")) ], diff --git a/Packages/RuuviPersistence/Package.swift b/Packages/RuuviPersistence/Package.swift index 5a09c6188..c311e1131 100644 --- a/Packages/RuuviPersistence/Package.swift +++ b/Packages/RuuviPersistence/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviPersistence", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviPersistence", diff --git a/Packages/RuuviPool/Package.swift b/Packages/RuuviPool/Package.swift index 073e80e75..ceee1a7e7 100644 --- a/Packages/RuuviPool/Package.swift +++ b/Packages/RuuviPool/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviPool", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviPool", diff --git a/Packages/RuuviReactor/Package.swift b/Packages/RuuviReactor/Package.swift index 29ab5a21c..56849b046 100644 --- a/Packages/RuuviReactor/Package.swift +++ b/Packages/RuuviReactor/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Packages/RuuviRepository/Package.swift b/Packages/RuuviRepository/Package.swift index 4f5fc3ec8..df13b9326 100644 --- a/Packages/RuuviRepository/Package.swift +++ b/Packages/RuuviRepository/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviRepository", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviRepository", diff --git a/Packages/RuuviService/Package.swift b/Packages/RuuviService/Package.swift index 179e2ecbb..c6639cd50 100644 --- a/Packages/RuuviService/Package.swift +++ b/Packages/RuuviService/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviService", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviService", @@ -13,6 +13,12 @@ let package = Package( .library( name: "RuuviServiceAlert", targets: ["RuuviServiceAlert"]), + .library( + name: "RuuviServiceAuth", + targets: ["RuuviServiceAuth"]), + .library( + name: "RuuviServiceCloudNotification", + targets: ["RuuviServiceCloudNotification"]), .library( name: "RuuviServiceAppSettings", targets: ["RuuviServiceAppSettings"]), @@ -48,7 +54,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/kean/Future", .exact("1.3.0")), .package(url: "https://github.com/rinat-enikeev/Humidity", from: "0.1.5"), - .package(url: "https://github.com/rinat-enikeev/BTKit", .upToNextMinor(from: "0.3.0")), + .package(url: "https://github.com/ruuvi/BTKit", .upToNextMinor(from: "0.4.3")), .package(path: "../RuuviOntology"), .package(path: "../RuuviStorage"), .package(path: "../RuuviCloud"), @@ -77,6 +83,18 @@ let package = Package( "RuuviService" ] ), + .target( + name: "RuuviServiceAuth", + dependencies: [ + "RuuviService" + ] + ), + .target( + name: "RuuviServiceCloudNotification", + dependencies: [ + "RuuviService" + ] + ), .target( name: "RuuviServiceAppSettings", dependencies: [ @@ -139,13 +157,15 @@ let package = Package( name: "RuuviServiceFactory", dependencies: [ "RuuviService", + "RuuviServiceAuth", "RuuviServiceAlert", "RuuviServiceAppSettings", "RuuviServiceCloudSync", "RuuviServiceOffsetCalibration", "RuuviServiceOwnership", "RuuviServiceSensorProperties", - "RuuviServiceSensorRecords" + "RuuviServiceSensorRecords", + "RuuviServiceCloudNotification" ] ), .testTarget( diff --git a/Packages/RuuviService/Sources/RuuviServiceAuth/RuuviServiceAuthImpl.swift b/Packages/RuuviService/Sources/RuuviServiceAuth/RuuviServiceAuthImpl.swift index 2253f4553..f0b7d5a86 100644 --- a/Packages/RuuviService/Sources/RuuviServiceAuth/RuuviServiceAuthImpl.swift +++ b/Packages/RuuviService/Sources/RuuviServiceAuth/RuuviServiceAuthImpl.swift @@ -5,6 +5,7 @@ import RuuviStorage import RuuviPool import RuuviLocal import RuuviOntology +import RuuviService public final class RuuviServiceAuthImpl: RuuviServiceAuth { private let ruuviUser: RuuviUser diff --git a/Packages/RuuviService/Sources/RuuviServiceCloudNotification/RuuviServiceCloudNotificationImpl.swift b/Packages/RuuviService/Sources/RuuviServiceCloudNotification/RuuviServiceCloudNotificationImpl.swift index dd91d4b90..5bba0fcb4 100644 --- a/Packages/RuuviService/Sources/RuuviServiceCloudNotification/RuuviServiceCloudNotificationImpl.swift +++ b/Packages/RuuviService/Sources/RuuviServiceCloudNotification/RuuviServiceCloudNotificationImpl.swift @@ -3,6 +3,9 @@ import Future import RuuviOntology import RuuviStorage import RuuviCloud +#if canImport(RuuviCloudApi) +import RuuviCloudApi +#endif import RuuviPool import RuuviLocal import RuuviService diff --git a/Packages/RuuviService/Sources/RuuviServiceFactory/RuuviServiceFactory.swift b/Packages/RuuviService/Sources/RuuviServiceFactory/RuuviServiceFactory.swift index 811c84fdb..0a668f620 100644 --- a/Packages/RuuviService/Sources/RuuviServiceFactory/RuuviServiceFactory.swift +++ b/Packages/RuuviService/Sources/RuuviServiceFactory/RuuviServiceFactory.swift @@ -7,6 +7,12 @@ import RuuviCore import RuuviRepository import RuuviService import RuuviUser +#if canImport(RuuviServiceAuth) +import RuuviServiceAuth +#endif +#if canImport(RuuviServiceCloudNotification) +import RuuviServiceCloudNotification +#endif #if canImport(RuuviServiceAlert) import RuuviServiceAlert #endif diff --git a/Packages/RuuviStorage/Package.swift b/Packages/RuuviStorage/Package.swift index 01f76fed1..01d7a9fc0 100644 --- a/Packages/RuuviStorage/Package.swift +++ b/Packages/RuuviStorage/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviStorage", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviStorage", diff --git a/Packages/RuuviUser/Package.swift b/Packages/RuuviUser/Package.swift index 494a294bb..dce01ebd6 100644 --- a/Packages/RuuviUser/Package.swift +++ b/Packages/RuuviUser/Package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "RuuviUser", - platforms: [.macOS(.v10_15), .iOS(.v11)], + platforms: [.macOS(.v10_15), .iOS(.v13)], products: [ .library( name: "RuuviUser", diff --git a/Packages/RuuviVirtual/Package.swift b/Packages/RuuviVirtual/Package.swift index db91d07ee..22e43eeed 100644 --- a/Packages/RuuviVirtual/Package.swift +++ b/Packages/RuuviVirtual/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription diff --git a/Podfile b/Podfile index 35c941a30..66d6016f0 100644 --- a/Podfile +++ b/Podfile @@ -31,7 +31,6 @@ def shared_pods pod 'RealmSwift', '~> 10.33.0' # common pod 'RuuviPresenters', :path => 'Common/RuuviPresenters/RuuviPresenters.podspec', :testspecs => ['Tests'] - pod 'RuuviBundleUtils', :path => 'Common/RuuviBundleUtils/RuuviBundleUtils.podspec', :testspecs => ['Tests'] pod 'RuuviLocalization', :path => 'Common/RuuviLocalization/RuuviLocalization.podspec', :testspecs => ['Tests'] # modules pod 'RuuviDiscover', :path => 'Modules/RuuviDiscover/RuuviDiscover.podspec', :testspecs => ['Tests'] @@ -49,6 +48,7 @@ def shared_pods pod 'RuuviCore/Permission', :path => 'Packages/RuuviCore/RuuviCore.podspec' pod 'RuuviCloud', :path => 'Packages/RuuviCloud/RuuviCloud.podspec', :testspecs => ['Tests'] pod 'RuuviCloud/Pure', :path => 'Packages/RuuviCloud/RuuviCloud.podspec' + pod 'RuuviCloud/Api', :path => 'Packages/RuuviCloud/RuuviCloud.podspec' pod 'RuuviDFU', :path => 'Packages/RuuviDFU/RuuviDFU.podspec', :testspecs => ['Tests'] pod 'RuuviDFU/Impl', :path => 'Packages/RuuviDFU/RuuviDFU.podspec' pod 'RuuviDaemon', :path => 'Packages/RuuviDaemon/RuuviDaemon.podspec', :testspecs => ['Tests'] @@ -118,7 +118,6 @@ def widget_pods pod 'RuuviCloud', :path => 'Packages/RuuviCloud/RuuviCloud.podspec', :testspecs => ['Tests'] pod 'RuuviCloud/Pure', :path => 'Packages/RuuviCloud/RuuviCloud.podspec' pod 'KeychainAccess' - pod 'RuuviBundleUtils', :path => 'Common/RuuviBundleUtils/RuuviBundleUtils.podspec', :testspecs => ['Tests'] pod 'RuuviPool', :path => 'Packages/RuuviPool/RuuviPool.podspec', :testspecs => ['Tests'] pod 'RuuviPool/Coordinator', :path => 'Packages/RuuviPool/RuuviPool.podspec' pod 'RuuviLocal/UserDefaults', :path => 'Packages/RuuviLocal/RuuviLocal.podspec' diff --git a/Podfile.lock b/Podfile.lock index 88b6a14f4..4d5399629 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -174,10 +174,6 @@ PODS: - RuuviUser - RuuviVirtual - RuuviAnalytics/Tests (0.0.3) - - RuuviBundleUtils (0.0.1): - - RuuviBundleUtils/RuuviBundleUtils (= 0.0.1) - - RuuviBundleUtils/RuuviBundleUtils (0.0.1) - - RuuviBundleUtils/Tests (0.0.1) - RuuviCloud (0.1.0): - RuuviCloud/Contract (= 0.1.0) - RuuviCloud/Api (0.1.0): @@ -353,7 +349,6 @@ PODS: - RuuviOnboard (0.0.4): - RuuviOnboard/RuuviOnboard (= 0.0.4) - RuuviOnboard/RuuviOnboard (0.0.4): - - RuuviBundleUtils - RuuviUser - RuuviOnboard/Tests (0.0.4) - RuuviOntology (0.0.6): @@ -412,8 +407,7 @@ PODS: - RuuviPool/Tests (0.0.1) - RuuviPresenters (0.0.1): - RuuviPresenters/RuuviPresenters (= 0.0.1) - - RuuviPresenters/RuuviPresenters (0.0.1): - - RuuviBundleUtils + - RuuviPresenters/RuuviPresenters (0.0.1) - RuuviPresenters/Tests (0.0.1) - RuuviReactor (0.0.1): - RuuviReactor/Contract (= 0.0.1) @@ -615,9 +609,8 @@ DEPENDENCIES: - RuuviAnalytics (from `Packages/RuuviAnalytics/RuuviAnalytics.podspec`) - RuuviAnalytics/Impl (from `Packages/RuuviAnalytics/RuuviAnalytics.podspec`) - RuuviAnalytics/Tests (from `Packages/RuuviAnalytics/RuuviAnalytics.podspec`) - - RuuviBundleUtils (from `Common/RuuviBundleUtils/RuuviBundleUtils.podspec`) - - RuuviBundleUtils/Tests (from `Common/RuuviBundleUtils/RuuviBundleUtils.podspec`) - RuuviCloud (from `Packages/RuuviCloud/RuuviCloud.podspec`) + - RuuviCloud/Api (from `Packages/RuuviCloud/RuuviCloud.podspec`) - RuuviCloud/Pure (from `Packages/RuuviCloud/RuuviCloud.podspec`) - RuuviCloud/Tests (from `Packages/RuuviCloud/RuuviCloud.podspec`) - RuuviContext (from `Packages/RuuviContext/RuuviContext.podspec`) @@ -755,8 +748,6 @@ EXTERNAL SOURCES: :git: https://github.com/rinat-enikeev/RangeSeekSlider RuuviAnalytics: :path: Packages/RuuviAnalytics/RuuviAnalytics.podspec - RuuviBundleUtils: - :path: Common/RuuviBundleUtils/RuuviBundleUtils.podspec RuuviCloud: :path: Packages/RuuviCloud/RuuviCloud.podspec RuuviContext: @@ -855,7 +846,6 @@ SPEC CHECKSUMS: Realm: d4f810e161fa2c2c589b9860b6eb09238deacd73 RealmSwift: cef9946f09f2333a8f2ac8bac4f8de52fb9f5ac3 RuuviAnalytics: 1442f702d42ca8a7c4000394a534cd54bf5fd67a - RuuviBundleUtils: b143f4bb7bbb9b173527bec8836b3a507b6ca8f2 RuuviCloud: f488ad2791dea1cee92b648e96e3eca20f5465b6 RuuviContext: 3c3a03e1791189e57d35252cac2448b30cb5c8c4 RuuviCore: c42d46fd24adec33663aa61a7b73430b448a56e4 @@ -869,11 +859,11 @@ SPEC CHECKSUMS: RuuviMigration: e2d397eba79436eef6e8b982b1e188a5f6426a2e RuuviNotification: 4907402a0962abd2513dc511ade32ee6a05da6a1 RuuviNotifier: 2fdb2579b48c2ff5ad28ae5d651b01831e8b1b90 - RuuviOnboard: a17e7b9ded33af7c7f3c622444fcf3d5b8770ad1 + RuuviOnboard: c9c5556007c56b4491df3ad8e1ef9c3c57ebbd34 RuuviOntology: 174c688dc2083e7afe1d98d941c9db0fd6c7a063 RuuviPersistence: 0be00598293866c79a94636247e9365b2a2e3da5 RuuviPool: 663c3b125b2f865b0e5174abcd88c148c4c7ed6b - RuuviPresenters: 9e7ab27726604db02b29bf8c8a8289bbc624e303 + RuuviPresenters: b883212d32138c00dd61680547ce33dcac922b37 RuuviReactor: 5fd4dcff29ba553c36e26b0a0334dc5007d26fcd RuuviRepository: 2a98401ff527bc19ec488281e5bbe5a820c405ca RuuviService: 87d15c3b9758850079b91a7823f4de41e7b90cac @@ -884,6 +874,6 @@ SPEC CHECKSUMS: Swinject: 893c9a543000ac2f10ee4cbaf0933c6992c935d5 ZIPFoundation: b1f0de4eed33e74a676f76e12559ab6b75990197 -PODFILE CHECKSUM: 217f39abb07c737f33db5c642a3168eeeaee16d7 +PODFILE CHECKSUM: 678248a5443826612f8c9f943ea15daf54e24fe5 COCOAPODS: 1.12.1 diff --git a/project.yml b/project.yml new file mode 100644 index 000000000..e62d23a76 --- /dev/null +++ b/project.yml @@ -0,0 +1,240 @@ +APP_NAME: &APP_NAME Ruuvi Station +DEVELOPMENT_TEAM: &DEVELOPMENT_TEAM 4MUYJ4YYH4 +BUNDLE_ID_PREFIX: &BUNDLE_ID_PREFIX com.ruuvi + +attributes: + ORGANIZATIONNAME: Ruuvi Innovations Oy + +settings: + base: + CURRENT_PROJECT_VERSION: 420 + MARKETING_VERSION: "2.5.0" + DEVELOPMENT_TEAM: *DEVELOPMENT_TEAM + +name: *APP_NAME + +options: + bundleIdPrefix: *BUNDLE_ID_PREFIX + developmentLanguage: en + deploymentTarget: + iOS: 14.0 + +packages: + BTKit: + url: https://github.com/ruuvi/BTKit + from: 0.4.3 + Charts: + url: https://github.com/danielgindi/Charts + from: 4.1.0 + LightRoute: + url: https://github.com/rinat-enikeev/LightRoute + from: 2.2.2 + Swinject: + url: https://github.com/Swinject/Swinject + from: 2.8.3 + Firebase: + url: https://github.com/firebase/firebase-ios-sdk + from: 10.7.0 + RangeSeekSlider: + url: https://github.com/rinat-enikeev/RangeSeekSlider + from: 1.8.2 + GestureInstructions: + url: https://github.com/rinat-enikeev/GestureInstructions + from: 0.0.2 + RuuviAnalytics: + path: Packages/RuuviAnalytics + RuuviCloud: + path: Packages/RuuviCloud + RuuviContext: + path: Packages/RuuviContext + RuuviCore: + path: Packages/RuuviCore + RuuviDaemon: + path: Packages/RuuviDaemon + RuuviDFU: + path: Packages/RuuviDFU + RuuviLocation: + path: Packages/RuuviLocation + RuuviLocal: + path: Packages/RuuviLocal + RuuviMigration: + path: Packages/RuuviMigration + RuuviNotification: + path: Packages/RuuviNotification + RuuviNotifier: + path: Packages/RuuviNotifier + RuuviOntology: + path: Packages/RuuviOntology + RuuviPersistence: + path: Packages/RuuviPersistence + RuuviPool: + path: Packages/RuuviPool + RuuviReactor: + path: Packages/RuuviReactor + RuuviRepository: + path: Packages/RuuviRepository + RuuviService: + path: Packages/RuuviService + RuuviStorage: + path: Packages/RuuviStorage + RuuviUser: + path: Packages/RuuviUser + RuuviVirtual: + path: Packages/RuuviVirtual + RuuviPresenters: + path: Common/RuuviPresenters + RuuviDiscover: + path: Modules/RuuviDiscover + RuuviLocationPicker: + path: Modules/RuuviLocationPicker + RuuviOnboard: + path: Modules/RuuviOnboard + +targets: + station: + type: application + platform: iOS + sources: + - path: station + dependencies: + - package: BTKit + - package: Charts + - package: LightRoute + - package: Swinject + - package: RangeSeekSlider + - package: GestureInstructions + - package: Firebase + product: FirebaseMessaging + - package: Firebase + product: FirebaseRemoteConfig + - package: RuuviAnalytics + - package: RuuviAnalytics + product: RuuviAnalyticsImpl + - package: RuuviCloud + - package: RuuviCloud + product: RuuviCloudPure + - package: RuuviContext + - package: RuuviContext + product: RuuviContextRealm + - package: RuuviContext + product: RuuviContextSQLite + - package: RuuviCore + - package: RuuviCore + product: RuuviCoreImage + - package: RuuviCore + product: RuuviCorePN + - package: RuuviCore + product: RuuviCorePermission + - package: RuuviCore + product: RuuviCoreLocation + - package: RuuviDaemon + - package: RuuviDaemon + product: RuuviDaemonBackground + - package: RuuviDaemon + product: RuuviDaemonVirtualTag + - package: RuuviDaemon + product: RuuviDaemonRuuviTag + - package: RuuviDaemon + product: RuuviDaemonCloudSync + - package: RuuviDFU + - package: RuuviDFU + product: RuuviDFUImpl + - package: RuuviLocation + - package: RuuviLocation + product: RuuviLocationService + - package: RuuviLocal + - package: RuuviLocal + product: RuuviLocalUserDefaults + - package: RuuviMigration + - package: RuuviMigration + product: RuuviMigrationImpl + - package: RuuviNotification + - package: RuuviNotification + product: RuuviNotificationLocal + - package: RuuviNotifier + - package: RuuviNotifier + product: RuuviNotifierImpl + - package: RuuviOntology + - package: RuuviPersistence + - package: RuuviPersistence + product: RuuviPersistenceRealm + - package: RuuviPersistence + product: RuuviPersistenceSQLite + - package: RuuviPool + - package: RuuviPool + product: RuuviPoolCoordinator + - package: RuuviReactor + - package: RuuviReactor + product: RuuviReactorImpl + - package: RuuviRepository + - package: RuuviRepository + product: RuuviRepositoryCoordinator + - package: RuuviService + - package: RuuviService + product: RuuviServiceFactory + - package: RuuviService + product: RuuviServiceMeasurement + - package: RuuviService + product: RuuviServiceOwnership + - package: RuuviService + product: RuuviServiceExport + - package: RuuviService + product: RuuviServiceGATT + - package: RuuviStorage + - package: RuuviStorage + product: RuuviStorageCoordinator + - package: RuuviUser + - package: RuuviUser + product: RuuviUserCoordinator + - package: RuuviVirtual + - package: RuuviVirtual + product: RuuviVirtualOWM + - package: RuuviVirtual + product: RuuviVirtualPersistence + - package: RuuviVirtual + product: RuuviVirtualReactor + - package: RuuviVirtual + product: RuuviVirtualRepository + - package: RuuviVirtual + product: RuuviVirtualStorage + - package: RuuviVirtual + product: RuuviVirtualService + - package: RuuviPresenters + - package: RuuviDiscover + - package: RuuviLocationPicker + - package: RuuviOnboard + info: + path: station/Resources/Plists/Info.plist + properties: + CFBundleDisplayName: Ruuvi Station + CFBundlePackageType: $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString: "$(MARKETING_VERSION)" + CFBundleVersion: $(CURRENT_PROJECT_VERSION) + UISupportedInterfaceOrientations: [UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortrait] + UILaunchStoryboardName: LaunchScreen + BGTaskSchedulerPermittedIdentifiers: [com.ruuvi.station.BackgroundTaskServiceiOS13.webTagRefresh, com.ruuvi.station.BackgroundProcessServiceiOS13.dataPruning] + FirebaseMessagingAutoInitEnabled: false + LSApplicationQueriesSchemes: [https, http, mailto] + LSRequiresIPhoneOS: true + NFCReaderUsageDescription: Allows user to claim a RuuviTag using NFC when the user has physical access to the sensor + NSBluetoothAlwaysUsageDescription: The app uses Bluetooth LE to read data from Ruuvi Sensors + NSBluetoothPeripheralUsageDescription: The app uses Bluetooth LE to read data from RuuviTag sensors. + NSCameraUsageDescription: Ruuvi Station needs to access your camera in order to be able to capture photos and use them as sensor background. + NSLocationAlwaysAndWhenInUseUsageDescription: Ruuvi Station needs to access your location in order to determine your position and show weather parameters for you live location. + NSLocationAlwaysUsageDescription: Ruuvi Station needs to access your location while being in background in order to pull data for Virtual Sensors for your current location and display alerts. + NSLocationUsageDescription: Ruuvi Station needs to access your location in order to determine your position and show weather parameters for you live location. + NSLocationWhenInUseUsageDescription: Ruuvi Station needs to access your location in order to determine your position and show weather parameters for you live location. + NSPhotoLibraryUsageDescription: Ruuvi Station needs to access your camera roll to enable selecting the background for the sensor. + NSUserActivityTypes: [RuuviTagSelectionIntent] + UIAppFonts: [Oswald-Bold.ttf,Oswald-ExtraLight.ttf,Muli-Regular.ttf,Muli-Bold.ttf,Muli-SemiBoldItalic.ttf,Muli-ExtraBold.ttf,Montserrat-Bold.ttf,Montserrat-Regular.ttf,Montserrat-ExtraBold.ttf] + UIBackgroundModes: [bluetooth-central, processing, remote-notification] + UIRequiredDeviceCapabilities: [armv7] + UIRequiresFullScreen: true + UIStatusBarStyle: UIStatusBarStyleLightContent + UISupportedInterfaceOrientations~ipad: [UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown] + UIViewControllerBasedStatusBarAppearance: true + settings: + base: + TARGETED_DEVICE_FAMILY: 1,2 + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD: true + CODE_SIGN_ENTITLEMENTS: station/station.entitlements \ No newline at end of file diff --git a/station.xcodeproj/project.pbxproj b/station.xcodeproj/project.pbxproj index 7eac17788..ac8815edc 100644 --- a/station.xcodeproj/project.pbxproj +++ b/station.xcodeproj/project.pbxproj @@ -4887,7 +4887,7 @@ mainGroup = 64333D1C20B0C45900CDF4B6; packageReferences = ( 0EE36EAD269DC70E0021B746 /* XCRemoteSwiftPackageReference "swift-algorithms" */, - 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts" */, + 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts.git" */, ); productRefGroup = 64333D2620B0C45900CDF4B6 /* Products */; projectDirPath = ""; @@ -7117,7 +7117,7 @@ minimumVersion = 1.0.0; }; }; - 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts" */ = { + 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/danielgindi/Charts.git"; requirement = { @@ -7140,12 +7140,12 @@ }; 0EE36EB3269DC7D90021B746 /* Charts */ = { isa = XCSwiftPackageProductDependency; - package = 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts" */; + package = 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts.git" */; productName = Charts; }; 0EE36EB5269DC7E40021B746 /* Charts */ = { isa = XCSwiftPackageProductDependency; - package = 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts" */; + package = 0EE36EB2269DC7D90021B746 /* XCRemoteSwiftPackageReference "Charts.git" */; productName = Charts; }; /* End XCSwiftPackageProductDependency section */ diff --git a/station/Classes/Application/AppDelegate.swift b/station/Classes/Application/AppDelegate.swift index 5cdaff68b..c5254467c 100644 --- a/station/Classes/Application/AppDelegate.swift +++ b/station/Classes/Application/AppDelegate.swift @@ -1,5 +1,6 @@ import UIKit -import Firebase +import FirebaseCore +import FirebaseMessaging #if canImport(FLEX) import FLEX #endif diff --git a/station/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift b/station/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift index 231c51efc..c55c82521 100644 --- a/station/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift +++ b/station/Classes/Presentation/Modules/About/Presenter/AboutPresenter.swift @@ -1,6 +1,7 @@ import Foundation import RuuviContext import RuuviStorage +import UIKit final class AboutPresenter: AboutModuleInput { weak var view: AboutViewInput! diff --git a/station/Classes/Presentation/Modules/About/Router/AboutRouter.swift b/station/Classes/Presentation/Modules/About/Router/AboutRouter.swift index f455a5cfd..c1b0038e3 100644 --- a/station/Classes/Presentation/Modules/About/Router/AboutRouter.swift +++ b/station/Classes/Presentation/Modules/About/Router/AboutRouter.swift @@ -1,4 +1,6 @@ +import Foundation import LightRoute +import UIKit class AboutRouter: AboutRouterInput { weak var transitionHandler: TransitionHandler! diff --git a/station/Classes/Presentation/Modules/Dashboard/Cards/Presenter/CardsPresenter.swift b/station/Classes/Presentation/Modules/Dashboard/Cards/Presenter/CardsPresenter.swift index 817de5302..02f83e92c 100644 --- a/station/Classes/Presentation/Modules/Dashboard/Cards/Presenter/CardsPresenter.swift +++ b/station/Classes/Presentation/Modules/Dashboard/Cards/Presenter/CardsPresenter.swift @@ -13,6 +13,7 @@ import RuuviNotifier import RuuviPresenters import RuuviDaemon import RuuviCore +import UIKit class CardsPresenter { weak var view: CardsViewInput? diff --git a/station/Classes/Presentation/Modules/Dashboard/Cards/View/CardsViewInput.swift b/station/Classes/Presentation/Modules/Dashboard/Cards/View/CardsViewInput.swift index 54738d57f..1e3660fd4 100644 --- a/station/Classes/Presentation/Modules/Dashboard/Cards/View/CardsViewInput.swift +++ b/station/Classes/Presentation/Modules/Dashboard/Cards/View/CardsViewInput.swift @@ -1,6 +1,7 @@ import Foundation import BTKit import RuuviOntology +import UIKit protocol CardsViewInput: ViewInput { var viewModels: [CardsViewModel] { get set } diff --git a/station/Classes/Presentation/Modules/Dashboard/Home/Interactor/DashboardInteractor.swift b/station/Classes/Presentation/Modules/Dashboard/Home/Interactor/DashboardInteractor.swift index c849207dd..44b276435 100644 --- a/station/Classes/Presentation/Modules/Dashboard/Home/Interactor/DashboardInteractor.swift +++ b/station/Classes/Presentation/Modules/Dashboard/Home/Interactor/DashboardInteractor.swift @@ -5,6 +5,9 @@ import Future import BTKit import RuuviPool import RuuviService +#if canImport(RuuviServiceOwnership) +import RuuviServiceOwnership +#endif import RuuviUser class DashboardInteractor { diff --git a/station/Classes/Presentation/Modules/Dashboard/Home/Presenter/DashboardPresenter.swift b/station/Classes/Presentation/Modules/Dashboard/Home/Presenter/DashboardPresenter.swift index ad626c0a1..8af7da595 100644 --- a/station/Classes/Presentation/Modules/Dashboard/Home/Presenter/DashboardPresenter.swift +++ b/station/Classes/Presentation/Modules/Dashboard/Home/Presenter/DashboardPresenter.swift @@ -18,6 +18,7 @@ import RuuviUser import WidgetKit import CoreBluetooth import Future +import UIKit class DashboardPresenter: DashboardModuleInput { weak var view: DashboardViewInput? diff --git a/station/Classes/Presentation/Modules/Kaltiot/Assembly/Table/KaltiotTableInitializer.swift b/station/Classes/Presentation/Modules/Kaltiot/Assembly/Table/KaltiotTableInitializer.swift deleted file mode 100644 index caef6187c..000000000 --- a/station/Classes/Presentation/Modules/Kaltiot/Assembly/Table/KaltiotTableInitializer.swift +++ /dev/null @@ -1,10 +0,0 @@ -import UIKit - -class KaltiotPickerTableInitializer: NSObject { - @IBOutlet weak var viewController: KaltiotPickerTableViewController! - - override func awakeFromNib() { - super.awakeFromNib() - KaltiotPickerTableConfigurator().configure(view: viewController) - } -} diff --git a/station/Classes/Presentation/Modules/My Ruuvi/Presenter/MyRuuviAccountPresenter.swift b/station/Classes/Presentation/Modules/My Ruuvi/Presenter/MyRuuviAccountPresenter.swift index f190968a3..791619ffe 100644 --- a/station/Classes/Presentation/Modules/My Ruuvi/Presenter/MyRuuviAccountPresenter.swift +++ b/station/Classes/Presentation/Modules/My Ruuvi/Presenter/MyRuuviAccountPresenter.swift @@ -6,6 +6,7 @@ import RuuviCloud import RuuviCore import Future import RuuviLocal +import UIKit #if canImport(WidgetKit) import WidgetKit diff --git a/station/Classes/Presentation/Modules/Settings/Submodules/Appearance/Router/AppearanceSettingsRouter.swift b/station/Classes/Presentation/Modules/Settings/Submodules/Appearance/Router/AppearanceSettingsRouter.swift index 688c29c29..f558deb24 100644 --- a/station/Classes/Presentation/Modules/Settings/Submodules/Appearance/Router/AppearanceSettingsRouter.swift +++ b/station/Classes/Presentation/Modules/Settings/Submodules/Appearance/Router/AppearanceSettingsRouter.swift @@ -1,4 +1,5 @@ import LightRoute +import UIKit class AppearanceSettingsRouter: AppearanceSettingsRouterInput { weak var transitionHandler: UIViewController? diff --git a/station/Classes/Presentation/Modules/Settings/Submodules/Notifications/Router/NotificationsSettingsRouter.swift b/station/Classes/Presentation/Modules/Settings/Submodules/Notifications/Router/NotificationsSettingsRouter.swift index 7676cfb00..93a69341a 100644 --- a/station/Classes/Presentation/Modules/Settings/Submodules/Notifications/Router/NotificationsSettingsRouter.swift +++ b/station/Classes/Presentation/Modules/Settings/Submodules/Notifications/Router/NotificationsSettingsRouter.swift @@ -1,4 +1,5 @@ import LightRoute +import UIKit class NotificationsSettingsRouter: NotificationsSettingsRouterInput { weak var transitionHandler: UIViewController? diff --git a/station/Classes/Presentation/Modules/SignIn/Presenter/SignInPresenter.swift b/station/Classes/Presentation/Modules/SignIn/Presenter/SignInPresenter.swift index 822076236..94d96a99e 100644 --- a/station/Classes/Presentation/Modules/SignIn/Presenter/SignInPresenter.swift +++ b/station/Classes/Presentation/Modules/SignIn/Presenter/SignInPresenter.swift @@ -8,6 +8,7 @@ import RuuviDaemon import FirebaseMessaging import RuuviLocal import WidgetKit +import UIKit class SignInPresenter: NSObject { enum State { diff --git a/station/Classes/Presentation/Modules/TagSettings/Presenter/TagSettingsPresenter.swift b/station/Classes/Presentation/Modules/TagSettings/Presenter/TagSettingsPresenter.swift index df4daffcc..9ce720982 100644 --- a/station/Classes/Presentation/Modules/TagSettings/Presenter/TagSettingsPresenter.swift +++ b/station/Classes/Presentation/Modules/TagSettings/Presenter/TagSettingsPresenter.swift @@ -8,6 +8,9 @@ import RuuviStorage import RuuviReactor import RuuviLocal import RuuviService +#if canImport(RuuviServiceOwnership) +import RuuviServiceOwnership +#endif import RuuviUser import RuuviCore import RuuviPresenters diff --git a/station/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/Router/SensorForceClaimRouter.swift b/station/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/Router/SensorForceClaimRouter.swift index 6e71ebc32..97e23fc30 100644 --- a/station/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/Router/SensorForceClaimRouter.swift +++ b/station/Classes/Presentation/Modules/TagSettings/Submodules/Force Claim/Router/SensorForceClaimRouter.swift @@ -1,4 +1,5 @@ import LightRoute +import UIKit class SensorForceClaimRouter: SensorForceClaimRouterInput { weak var transitionHandler: UIViewController? diff --git a/station/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift b/station/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift index 2172cfd55..7587af092 100644 --- a/station/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift +++ b/station/Classes/Presentation/Modules/TagSettings/Submodules/OffsetCorrection/View/Apple/OffsetCorrectionAppleViewController.swift @@ -1,6 +1,9 @@ import UIKit import RuuviOntology import RuuviService +#if canImport(RuuviServiceMeasurement) +import RuuviServiceMeasurement +#endif class OffsetCorrectionAppleViewController: UIViewController { var output: OffsetCorrectionViewOutput! diff --git a/station/Classes/Presentation/Modules/TagSettings/Submodules/Owner/Router/OwnerRouter.swift b/station/Classes/Presentation/Modules/TagSettings/Submodules/Owner/Router/OwnerRouter.swift index e95d93098..b32b129fc 100644 --- a/station/Classes/Presentation/Modules/TagSettings/Submodules/Owner/Router/OwnerRouter.swift +++ b/station/Classes/Presentation/Modules/TagSettings/Submodules/Owner/Router/OwnerRouter.swift @@ -1,5 +1,6 @@ import LightRoute import RuuviOntology +import UIKit final class OwnerRouter: OwnerRouterInput { weak var transitionHandler: UIViewController! diff --git a/station/Classes/Presentation/Modules/TagSettings/Submodules/Removal/Router/SensorRemovalRouter.swift b/station/Classes/Presentation/Modules/TagSettings/Submodules/Removal/Router/SensorRemovalRouter.swift index fde9e99b2..fe5af014f 100644 --- a/station/Classes/Presentation/Modules/TagSettings/Submodules/Removal/Router/SensorRemovalRouter.swift +++ b/station/Classes/Presentation/Modules/TagSettings/Submodules/Removal/Router/SensorRemovalRouter.swift @@ -1,4 +1,5 @@ import LightRoute +import UIKit class SensorRemovalRouter: SensorRemovalRouterInput { weak var transitionHandler: UIViewController? diff --git a/station/Classes/Presentation/Modules/TagsManager/Router/UserApiConfigRouter.swift b/station/Classes/Presentation/Modules/TagsManager/Router/UserApiConfigRouter.swift deleted file mode 100644 index c6b24efb8..000000000 --- a/station/Classes/Presentation/Modules/TagsManager/Router/UserApiConfigRouter.swift +++ /dev/null @@ -1,19 +0,0 @@ -import UIKit - -class TagsManagerRouter: TagsManagerRouterInput { - weak var transitionHandler: UIViewController! - - func dismiss(completion: (() -> Void)?) { - transitionHandler.dismiss(animated: true, completion: completion) - } - - func showAlert(_ viewModel: UserApiConfigAlertViewModel) { - let alertController = UIAlertController(title: viewModel.title, - message: viewModel.message, - preferredStyle: viewModel.style) - viewModel.actions.forEach({ alertController.addAction($0) }) - transitionHandler.present(alertController, - animated: true, - completion: nil) - } -} diff --git a/station/Classes/Routers/DiscoverRouter.swift b/station/Classes/Routers/DiscoverRouter.swift index 6cb5ba781..609206040 100644 --- a/station/Classes/Routers/DiscoverRouter.swift +++ b/station/Classes/Routers/DiscoverRouter.swift @@ -3,6 +3,7 @@ import RuuviDiscover import RuuviOntology import BTKit import RuuviLocationPicker +import UIKit protocol DiscoverRouterDelegate: AnyObject { func discoverRouterWantsClose(_ router: DiscoverRouter) diff --git a/station/Resources/Plists/Info.plist b/station/Resources/Plists/Info.plist index 14b727e4b..46055a497 100644 --- a/station/Resources/Plists/Info.plist +++ b/station/Resources/Plists/Info.plist @@ -20,11 +20,11 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - APPL + $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 420 + $(CURRENT_PROJECT_VERSION) FirebaseMessagingAutoInitEnabled LSApplicationQueriesSchemes diff --git a/station/Resources/Plists/Networking.plist b/station/Resources/Plists/Networking.plist index 6f70aedf4..42fcbc762 100644 --- a/station/Resources/Plists/Networking.plist +++ b/station/Resources/Plists/Networking.plist @@ -6,5 +6,7 @@ { set your API key here } RuuviCloudURL https://network.ruuvi.com + RuuviCloudURLDev + https://testnet.ruuvi.com