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()
}
}