diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..53cd487 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,12 @@ +name: build +on: + pull_request: + push: + branches: + - 'main' +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - run: bundle install; bundle exec fastlane build \ No newline at end of file diff --git a/.gitignore b/.gitignore index ebf9047..8bf38f4 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ DerivedData/ .vscode vendor coverage -Gemfile.lock ## Obj-C/Swift specific *.hmap diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4718a17..0000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -os: macos -language: swift -osx_image: xcode14.1 -install: - - bundle install -script: - - bundle exec fastlane build \ No newline at end of file diff --git a/Examples/iOS/Example.xcodeproj/project.pbxproj b/Examples/iOS/Example.xcodeproj/project.pbxproj index f2663e7..f28c6f7 100644 --- a/Examples/iOS/Example.xcodeproj/project.pbxproj +++ b/Examples/iOS/Example.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -473,6 +473,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = Example/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -491,6 +492,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = Example/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/Examples/iOS/Example/Sections/General/Model/UserSecureStorage.swift b/Examples/iOS/Example/Sections/General/Model/UserSecureStorage.swift index 01e9286..15227e2 100644 --- a/Examples/iOS/Example/Sections/General/Model/UserSecureStorage.swift +++ b/Examples/iOS/Example/Sections/General/Model/UserSecureStorage.swift @@ -13,21 +13,19 @@ struct UserSecureStorage: LMStorageProtocol { private let storage = LMSecureStorage(with: Key.container) - init() {} - func getFirst() -> User? { - return storage.getFirst(key: Key.user) + storage.getFirst(key: Key.user) } func create(_ register: User) -> Bool { - return storage.create(register, key: Key.user) + storage.create(register, key: Key.user) } func update(_ register: User) -> Bool { - return storage.update(register, key: Key.user) + storage.update(register, key: Key.user) } func delete() -> Bool { - return storage.delete(key: Key.user) + storage.delete(key: Key.user) } } diff --git a/Examples/iOS/Example/Sections/General/Model/UserStorage.swift b/Examples/iOS/Example/Sections/General/Model/UserStorage.swift index a2a5fbf..dc3e2ec 100644 --- a/Examples/iOS/Example/Sections/General/Model/UserStorage.swift +++ b/Examples/iOS/Example/Sections/General/Model/UserStorage.swift @@ -11,33 +11,33 @@ import LMStorage struct UserStorage: LMStorageProtocol { typealias T = User - private let storage: LMAbstractStorage + private let abstractStorage: LMAbstractStorage init() { - storage = LMStorage(with: Key.user) + abstractStorage = LMStorage(with: Key.user) } func getFirst() -> T? { - return storage.getFirst() + abstractStorage.getFirst() } func create(_ register: T) -> Bool { - return storage.create(register) + abstractStorage.create(register) } func update(_ register: T) -> Bool { - return storage.update(register) + abstractStorage.update(register) } func getRegisters() -> [T] { - return storage.getRegisters() + abstractStorage.getRegisters() } func set(registers: [T]) -> Bool { - return storage.set(registers: registers) + abstractStorage.set(registers: registers) } func delete() -> Bool { - return storage.delete() + abstractStorage.delete() } } diff --git a/Examples/iOS/Podfile.lock b/Examples/iOS/Podfile.lock index e40f968..437a126 100644 --- a/Examples/iOS/Podfile.lock +++ b/Examples/iOS/Podfile.lock @@ -1,6 +1,6 @@ PODS: - - KeychainSwift (20.0.0) - - LMStorage (1.0.7): + - KeychainSwift (24.0.0) + - LMStorage (1.0.8): - KeychainSwift DEPENDENCIES: @@ -15,9 +15,9 @@ EXTERNAL SOURCES: :path: "../../" SPEC CHECKSUMS: - KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: c9ed5f5f798dee0bc9147c5358273cc47f706376 + KeychainSwift: 007c4647486e4563adca839cf02cef00deb3b670 + LMStorage: db20ad651c89cff5f0cda9ed29a8c3c7235fa829 PODFILE CHECKSUM: 208c4e2d0bc43c26e11d7fc08d1151f5fc532b17 -COCOAPODS: 1.15.2 +COCOAPODS: 1.10.2 diff --git a/Examples/tvOS/Example.xcodeproj/project.pbxproj b/Examples/tvOS/Example.xcodeproj/project.pbxproj index 6256185..e38fd71 100644 --- a/Examples/tvOS/Example.xcodeproj/project.pbxproj +++ b/Examples/tvOS/Example.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -405,6 +405,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Debug; }; @@ -424,6 +425,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Release; }; diff --git a/Examples/tvOS/Example/Model/UserSecureStorage.swift b/Examples/tvOS/Example/Model/UserSecureStorage.swift index 7f9599b..0adc485 100644 --- a/Examples/tvOS/Example/Model/UserSecureStorage.swift +++ b/Examples/tvOS/Example/Model/UserSecureStorage.swift @@ -13,21 +13,19 @@ struct UserSecureStorage: LMStorageProtocol { private let storage = LMSecureStorage(with: MyDefaults.Keys.container.rawValue) - init() {} - func getFirst() -> User? { - return storage.getFirst(key: MyDefaults.Keys.user.rawValue) + storage.getFirst(key: MyDefaults.Keys.user.rawValue) } func create(_ register: User) -> Bool { - return storage.create(register, key: MyDefaults.Keys.user.rawValue) + storage.create(register, key: MyDefaults.Keys.user.rawValue) } func update(_ register: User) -> Bool { - return storage.update(register, key: MyDefaults.Keys.user.rawValue) + storage.update(register, key: MyDefaults.Keys.user.rawValue) } func delete() -> Bool { - return storage.delete(key: MyDefaults.Keys.user.rawValue) + storage.delete(key: MyDefaults.Keys.user.rawValue) } } diff --git a/Examples/tvOS/Example/Model/UserStorage.swift b/Examples/tvOS/Example/Model/UserStorage.swift index bd3f85b..9a7c8c7 100644 --- a/Examples/tvOS/Example/Model/UserStorage.swift +++ b/Examples/tvOS/Example/Model/UserStorage.swift @@ -18,26 +18,26 @@ struct UserStorage: LMStorageProtocol { } func getFirst() -> T? { - return storage.getFirst() + storage.getFirst() } func create(_ register: T) -> Bool { - return storage.create(register) + storage.create(register) } func update(_ register: T) -> Bool { - return storage.update(register) + storage.update(register) } func getRegisters() -> [T] { - return storage.getRegisters() + storage.getRegisters() } func set(registers: [T]) -> Bool { - return storage.set(registers: registers) + storage.set(registers: registers) } func delete() -> Bool { - return storage.delete() + storage.delete() } } diff --git a/Examples/tvOS/Example/ViewModel/ViewModel.swift b/Examples/tvOS/Example/ViewModel/ViewModel.swift index ab219da..a106029 100644 --- a/Examples/tvOS/Example/ViewModel/ViewModel.swift +++ b/Examples/tvOS/Example/ViewModel/ViewModel.swift @@ -17,16 +17,13 @@ class ViewModel { User(id: "123", name: "John", age: nil) } - init () {} - func saveUser() { let user = User(id: "J1", name: "Yoda", age: 900) _ = storage.create(user) } func getUser() -> User? { - let user = storage.getFirst() - return user + storage.getFirst() } func deleteUser() { @@ -43,7 +40,6 @@ class ViewModel { } func getSecureUser() -> User? { - let user = secureStorage.getFirst() - return user + secureStorage.getFirst() } } diff --git a/Examples/tvOS/Podfile.lock b/Examples/tvOS/Podfile.lock index 7ab1bbc..437a126 100644 --- a/Examples/tvOS/Podfile.lock +++ b/Examples/tvOS/Podfile.lock @@ -1,6 +1,6 @@ PODS: - - KeychainSwift (20.0.0) - - LMStorage (1.0.6): + - KeychainSwift (24.0.0) + - LMStorage (1.0.8): - KeychainSwift DEPENDENCIES: @@ -15,9 +15,9 @@ EXTERNAL SOURCES: :path: "../../" SPEC CHECKSUMS: - KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: f231736ce408aebabcdb90b1329e7695daa91a93 + KeychainSwift: 007c4647486e4563adca839cf02cef00deb3b670 + LMStorage: db20ad651c89cff5f0cda9ed29a8c3c7235fa829 PODFILE CHECKSUM: 208c4e2d0bc43c26e11d7fc08d1151f5fc532b17 -COCOAPODS: 1.11.3 +COCOAPODS: 1.10.2 diff --git a/Gemfile b/Gemfile index fbfd3ad..c3c32ad 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,4 @@ source 'https://rubygems.org' +gem 'cocoapods' gem "fastlane" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..db56179 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,293 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + activesupport (5.2.8.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + artifactory (3.0.17) + atomos (0.1.3) + aws-eventstream (1.4.0) + aws-partitions (1.1113.0) + aws-sdk-core (3.225.1) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + jmespath (~> 1, >= 1.6.1) + logger + aws-sdk-kms (1.104.0) + aws-sdk-core (~> 3, >= 3.225.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.189.0) + aws-sdk-core (~> 3, >= 3.225.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.12.0) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + base64 (0.3.0) + claide (1.1.0) + cocoapods (1.10.2) + addressable (~> 2.6) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.10.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.6.6) + nap (~> 1.0) + ruby-macho (~> 1.4) + xcodeproj (>= 1.19.0, < 2.0) + cocoapods-core (1.10.2) + activesupport (> 5.0, < 6) + addressable (~> 2.6) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (1.6.3) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + concurrent-ruby (1.3.5) + declarative (0.0.20) + digest-crc (0.7.0) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.6.20240107) + dotenv (2.8.1) + emoji_regex (3.2.3) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + excon (0.112.0) + faraday (1.10.4) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.1.0) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.1) + faraday (~> 1.0) + fastimage (2.4.0) + fastlane (2.227.2) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored (~> 1.2) + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (>= 0.1.1, < 1.0.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.5) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.4.1) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) + ffi (1.17.2-arm64-darwin) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.54.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.3) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.31.0) + google-apis-core (>= 0.11.0, < 2.a) + google-cloud-core (1.8.0) + google-cloud-env (>= 1.0, < 3.a) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.5.0) + google-cloud-storage (1.47.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.31.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.8) + domain_name (~> 0.5) + httpclient (2.9.0) + mutex_m + i18n (1.14.7) + concurrent-ruby (~> 1.0) + jmespath (1.6.2) + json (2.12.2) + jwt (2.10.1) + base64 + logger (1.7.0) + mini_magick (4.13.2) + mini_mime (1.1.5) + minitest (5.25.5) + molinillo (0.6.6) + multi_json (1.15.0) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) + nap (1.1.0) + naturally (2.2.2) + netrc (0.11.0) + nkf (0.2.0) + optparse (0.6.0) + os (1.1.4) + plist (3.7.2) + public_suffix (6.0.2) + rake (13.3.0) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.4.1) + rouge (3.28.0) + ruby-macho (1.4.0) + ruby2_keywords (0.0.5) + rubyzip (2.4.1) + security (0.1.5) + signet (0.20.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + sysrandom (1.0.5) + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + thread_safe (0.3.6) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.2) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (1.2.11) + thread_safe (~> 0.1) + uber (0.1.0) + unicode-display_width (2.6.0) + word_wrap (1.0.0) + xcodeproj (1.27.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + arm64-darwin-21 + arm64-darwin-23 + arm64-darwin-24 + +DEPENDENCIES + cocoapods + fastlane + +BUNDLED WITH + 2.2.30 diff --git a/LMStorage.podspec b/LMStorage.podspec index 6f1b73d..dba41f1 100644 --- a/LMStorage.podspec +++ b/LMStorage.podspec @@ -1,15 +1,15 @@ Pod::Spec.new do |s| s.name = "LMStorage" - s.version = "1.0.7" - s.summary = "💾 LMStorage is a framework which reduces the complexity of managing a persistent layer." + s.version = "1.0.8" + s.summary = "💾 LMStorage is a lightweight Swift framework that simplifies persistent storage and leverages the power of Codable for seamless data serialization and deserialization. It reduces boilerplate and streamlines the management of your app’s data layer." s.requires_arc = true s.homepage = "https://github.com/thejohnlima/LMStorage" s.license = "MIT" s.author = { "John Lima" => "thejohnlima@icloud.com" } - s.social_media_url = "https://twitter.com/thejohnlima" - s.ios.deployment_target = "12.1" - s.tvos.deployment_target = "9.0" - s.watchos.deployment_target = "4.0" + s.social_media_url = "https://x.com/thejohnlima" + s.ios.deployment_target = "15.0" + s.tvos.deployment_target = "15.0" + s.watchos.deployment_target = "8.0" s.source = { :git => "https://github.com/thejohnlima/LMStorage.git", :tag => "#{s.version}" } s.source_files = "Sources/LMStorage/**/*.{swift}" s.resource_bundles = {'LMStorage_Privacy' => 'Sources/LMStorage/PrivacyInfo.xcprivacy'} diff --git a/Package.swift b/Package.swift index 4dc1d7f..48f42ff 100644 --- a/Package.swift +++ b/Package.swift @@ -1,20 +1,20 @@ -// swift-tools-version:5.7 +// swift-tools-version:5.10.0 import PackageDescription let package = Package( name: "LMStorage", platforms: [ - .macOS(.v10_13), - .iOS(.v12), - .watchOS(.v4), - .tvOS(.v11) + .macOS(.v11), + .iOS(.v15), + .watchOS(.v8), + .tvOS(.v15) ], products: [ .library(name: "LMStorage", targets: ["LMStorage"]) ], dependencies: [ - .package(url: "https://github.com/evgenyneu/keychain-swift.git", from: "20.0.0") + .package(url: "https://github.com/evgenyneu/keychain-swift.git", from: "24.0.0") ], targets: [ .target( diff --git a/Project/LMStorage.xcodeproj/project.pbxproj b/Project/LMStorage.xcodeproj/project.pbxproj index 828b93d..5b26775 100644 --- a/Project/LMStorage.xcodeproj/project.pbxproj +++ b/Project/LMStorage.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 63; objects = { /* Begin PBXBuildFile section */ @@ -93,7 +93,8 @@ 1BD10CBC23EE588A000C72DA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1640; ORGANIZATIONNAME = LMStorage; TargetAttributes = { 1BD10CC423EE588A000C72DA = { @@ -102,7 +103,7 @@ }; }; buildConfigurationList = 1BD10CBF23EE588A000C72DA /* Build configuration list for PBXProject "LMStorage" */; - compatibilityVersion = "Xcode 12.0"; + compatibilityVersion = "Xcode 15.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -179,6 +180,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -243,6 +245,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -267,20 +270,25 @@ isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DRIVERKIT_DEPLOYMENT_TARGET = 20.0; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; INFOPLIST_FILE = LMStorage/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0.8; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14"; PRODUCT_BUNDLE_IDENTIFIER = thejohnlima.LMStorage; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -288,6 +296,8 @@ SUPPORTS_MACCATALYST = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 15.0; + WATCHOS_DEPLOYMENT_TARGET = 8.0; }; name = Debug; }; @@ -295,20 +305,25 @@ isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; + DRIVERKIT_DEPLOYMENT_TARGET = 20.0; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; INFOPLIST_FILE = LMStorage/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.1; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0.8; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14"; PRODUCT_BUNDLE_IDENTIFIER = thejohnlima.LMStorage; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -316,6 +331,8 @@ SUPPORTS_MACCATALYST = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 15.0; + WATCHOS_DEPLOYMENT_TARGET = 8.0; }; name = Release; }; diff --git a/README.md b/README.md index a66f073..f517b6f 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,12 @@

-💾 **LMStorage** is a framework which reduces the complexity of managing a persistent layer. +💾 **LMStorage** is a lightweight Swift framework that simplifies persistent storage and leverages the power of Codable for seamless data serialization and deserialization. It reduces boilerplate and streamlines the management of your app’s data layer. ## ❗️Requirements -- iOS 12.1+ -- tvOS 9.0+ +- iOS 15.0+ +- tvOS 15.0+ - Swift 5.0+ ## ⚒ Installation diff --git a/Tests/LMStorageTests/LMCodableTests.swift b/Tests/LMStorageTests/LMCodableTests.swift index d6eaaa3..4d69a29 100644 --- a/Tests/LMStorageTests/LMCodableTests.swift +++ b/Tests/LMStorageTests/LMCodableTests.swift @@ -30,7 +30,7 @@ final class LMCodableTests: XCTestCase { private var sign: Sign? private var signs: [Sign] = [] - static var allTests = [ + static let allTests = [ ("testSuccessItemLocalParse", testSuccessItemLocalParse), ("testSuccessItemsLocalParse", testSuccessItemsLocalParse), ("testParseArrayWithSuccess", testParseArrayWithSuccess) diff --git a/Tests/LMStorageTests/LMDefaultsTests.swift b/Tests/LMStorageTests/LMDefaultsTests.swift index 5a540e4..0a8e27e 100644 --- a/Tests/LMStorageTests/LMDefaultsTests.swift +++ b/Tests/LMStorageTests/LMDefaultsTests.swift @@ -28,7 +28,7 @@ final class LMDefaultsTests: XCTestCase { // MARK: - Properties private var viewModel: ViewModelMock? - static var allTests = [ + static let allTests = [ ("testSaveObjectDataWithSuccess", testSaveObjectDataWithSuccess) ] diff --git a/Tests/LMStorageTests/LMStorageTests.swift b/Tests/LMStorageTests/LMStorageTests.swift index 44eb60b..2df3e27 100644 --- a/Tests/LMStorageTests/LMStorageTests.swift +++ b/Tests/LMStorageTests/LMStorageTests.swift @@ -28,7 +28,7 @@ final class LMStorageTests: XCTestCase { // MARK: - Properties private var storage: UserStorage! - static var allTests = [ + static let allTests = [ ("testSaveDataSuccess", testSaveDataSuccess), ("testUpdateDataSuccess", testUpdateDataSuccess), ("testGetDataSuccess", testGetDataSuccess) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 29f1d42..06bb900 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -14,7 +14,7 @@ platform :ios do configuration: "debug", enable_code_coverage: true, xcpretty_output: "simple", - build_path: "./build" + scratch_path: "./build" ) end