From e664b88dba5d008beec72c4cf33b1f06afd6eb00 Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 12:32:42 -0400 Subject: [PATCH 1/8] Release version 1.0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Bump tvOS min version to 12.0; • Update framework description; • Update README; • Update examples • Update dependencies; • Update CI; --- .travis.yml | 2 +- .../iOS/Example.xcodeproj/project.pbxproj | 4 ++- Examples/iOS/Podfile.lock | 6 ++-- .../tvOS/Example.xcodeproj/project.pbxproj | 4 ++- Examples/tvOS/Podfile.lock | 6 ++-- Gemfile | 1 + LMStorage.podspec | 12 +++---- Package.swift | 12 +++---- Project/LMStorage.xcodeproj/project.pbxproj | 31 ++++++++++++++----- README.md | 4 +-- Tests/LMStorageTests/LMCodableTests.swift | 2 +- Tests/LMStorageTests/LMDefaultsTests.swift | 2 +- Tests/LMStorageTests/LMStorageTests.swift | 2 +- 13 files changed, 55 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4718a17..69e8250 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ os: macos language: swift -osx_image: xcode14.1 +osx_image: xcode16.4 install: - bundle install script: 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/Podfile.lock b/Examples/iOS/Podfile.lock index e40f968..d3998e3 100644 --- a/Examples/iOS/Podfile.lock +++ b/Examples/iOS/Podfile.lock @@ -1,6 +1,6 @@ PODS: - KeychainSwift (20.0.0) - - LMStorage (1.0.7): + - LMStorage (1.0.8): - KeychainSwift DEPENDENCIES: @@ -16,8 +16,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: c9ed5f5f798dee0bc9147c5358273cc47f706376 + LMStorage: 5fe77fd7a27a7d56f10b32e2191b91aadaecc67c 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/Podfile.lock b/Examples/tvOS/Podfile.lock index 7ab1bbc..d3998e3 100644 --- a/Examples/tvOS/Podfile.lock +++ b/Examples/tvOS/Podfile.lock @@ -1,6 +1,6 @@ PODS: - KeychainSwift (20.0.0) - - LMStorage (1.0.6): + - LMStorage (1.0.8): - KeychainSwift DEPENDENCIES: @@ -16,8 +16,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: f231736ce408aebabcdb90b1329e7695daa91a93 + LMStorage: 5fe77fd7a27a7d56f10b32e2191b91aadaecc67c 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/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..7fa190b 100644 --- a/Package.swift +++ b/Package.swift @@ -1,20 +1,20 @@ -// swift-tools-version:5.7 +// swift-tools-version:6.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..2e51742 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,8 @@ ## ❗️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) From bf89c297d6b19ca3cbb6389ba0590ff24917d91a Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 12:49:17 -0400 Subject: [PATCH 2/8] Release version 1.0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Update .gitignore; • Update fastlane; --- .gitignore | 1 - Gemfile.lock | 293 ++++++++++++++++++++++++++++++++++++++++++++++ fastlane/Fastfile | 2 +- 3 files changed, 294 insertions(+), 2 deletions(-) create mode 100644 Gemfile.lock 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/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/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 From f6b9b41267d2a7bb8306bbbd36396e79b111823f Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 13:20:28 -0400 Subject: [PATCH 3/8] Release version 1.0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Remove Travis CI and configure GitHub Actions; --- .github/workflows/build.yml | 12 ++++++++++++ .travis.yml | 7 ------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .travis.yml 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/.travis.yml b/.travis.yml deleted file mode 100644 index 69e8250..0000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -os: macos -language: swift -osx_image: xcode16.4 -install: - - bundle install -script: - - bundle exec fastlane build \ No newline at end of file From 68f57211d4f990b40351b340b9ac5be7aa31dd3b Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 13:26:13 -0400 Subject: [PATCH 4/8] Release version 1.0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Update Package swift version; --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 7fa190b..48f42ff 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:6.0 +// swift-tools-version:5.10.0 import PackageDescription From 146a3413adeb3c593cc034818f7d6b77a99c1bb2 Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 15:40:24 -0400 Subject: [PATCH 5/8] Improve Examples --- .../Sections/General/Model/UserSecureStorage.swift | 10 ++++------ .../Example/Sections/General/Model/UserStorage.swift | 12 ++++++------ Examples/iOS/Podfile.lock | 6 +++--- Examples/tvOS/Example/Model/UserSecureStorage.swift | 10 ++++------ Examples/tvOS/Example/Model/UserStorage.swift | 12 ++++++------ Examples/tvOS/Example/ViewModel/ViewModel.swift | 8 ++------ Examples/tvOS/Podfile.lock | 6 +++--- 7 files changed, 28 insertions(+), 36 deletions(-) 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..3dff33e 100644 --- a/Examples/iOS/Example/Sections/General/Model/UserStorage.swift +++ b/Examples/iOS/Example/Sections/General/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/iOS/Podfile.lock b/Examples/iOS/Podfile.lock index d3998e3..437a126 100644 --- a/Examples/iOS/Podfile.lock +++ b/Examples/iOS/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - KeychainSwift (20.0.0) + - KeychainSwift (24.0.0) - LMStorage (1.0.8): - KeychainSwift @@ -15,8 +15,8 @@ EXTERNAL SOURCES: :path: "../../" SPEC CHECKSUMS: - KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: 5fe77fd7a27a7d56f10b32e2191b91aadaecc67c + KeychainSwift: 007c4647486e4563adca839cf02cef00deb3b670 + LMStorage: db20ad651c89cff5f0cda9ed29a8c3c7235fa829 PODFILE CHECKSUM: 208c4e2d0bc43c26e11d7fc08d1151f5fc532b17 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 d3998e3..437a126 100644 --- a/Examples/tvOS/Podfile.lock +++ b/Examples/tvOS/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - KeychainSwift (20.0.0) + - KeychainSwift (24.0.0) - LMStorage (1.0.8): - KeychainSwift @@ -15,8 +15,8 @@ EXTERNAL SOURCES: :path: "../../" SPEC CHECKSUMS: - KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - LMStorage: 5fe77fd7a27a7d56f10b32e2191b91aadaecc67c + KeychainSwift: 007c4647486e4563adca839cf02cef00deb3b670 + LMStorage: db20ad651c89cff5f0cda9ed29a8c3c7235fa829 PODFILE CHECKSUM: 208c4e2d0bc43c26e11d7fc08d1151f5fc532b17 From 34cf35f5eb0bdc20a10ca4855ece3e7f82779b9f Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 17:29:53 -0400 Subject: [PATCH 6/8] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e51742..f517b6f 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@

-💾 **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 From 057200731914d3e38602e0d75e8db4dfc23e9172 Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 17:37:20 -0400 Subject: [PATCH 7/8] Trigger CI From c0543e77a76dacf830d97c8e98eccecadeddde4c Mon Sep 17 00:00:00 2001 From: John Lima Date: Sun, 8 Jun 2025 17:46:25 -0400 Subject: [PATCH 8/8] Update Examples --- .../Sections/General/Model/UserStorage.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Examples/iOS/Example/Sections/General/Model/UserStorage.swift b/Examples/iOS/Example/Sections/General/Model/UserStorage.swift index 3dff33e..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? { - storage.getFirst() + abstractStorage.getFirst() } func create(_ register: T) -> Bool { - storage.create(register) + abstractStorage.create(register) } func update(_ register: T) -> Bool { - storage.update(register) + abstractStorage.update(register) } func getRegisters() -> [T] { - storage.getRegisters() + abstractStorage.getRegisters() } func set(registers: [T]) -> Bool { - storage.set(registers: registers) + abstractStorage.set(registers: registers) } func delete() -> Bool { - storage.delete() + abstractStorage.delete() } }