From 5a1c2dbb66f450a1d196693fa8f35ae4fbef511e Mon Sep 17 00:00:00 2001 From: mike-dydx <149746839+mike-dydx@users.noreply.github.com> Date: Tue, 2 Jul 2024 16:47:59 -0400 Subject: [PATCH] bump abacus to 1.8.20 (#207) --- dydx/Podfile.lock | 16 +- dydx/Pods/Local Podspecs/abacus.podspec.json | 6 +- dydx/Pods/Manifest.lock | 16 +- dydx/Pods/Pods.xcodeproj/project.pbxproj | 144 +++++++++--------- dydx/Pods/SDWebImage/README.md | 2 + .../SDWebImage/Core/SDAnimatedImage.h | 2 +- .../SDWebImage/Core/SDAnimatedImage.m | 10 ++ .../SDWebImage/Core/SDImageCacheDefine.m | 6 +- .../SDWebImage/Core/SDImageLoader.m | 12 +- .../SDWebImage/Core/SDWebImageDownloader.h | 2 +- .../SDWebImage/Core/SDWebImageDownloader.m | 4 +- .../Core/SDWebImageDownloaderOperation.h | 4 +- .../Core/SDWebImageDownloaderOperation.m | 4 +- .../SDWebImage/Core/UIImage+Metadata.m | 4 +- .../Classes/AnimatedImage.swift | 11 +- .../Classes/ImageManager.swift | 27 ++-- .../Classes/ImageViewWrapper.swift | 24 +-- .../SDWebImageSwiftUI/Classes/WebImage.swift | 4 +- ...rceBundle-SDWebImage-SDWebImage-Info.plist | 2 +- .../SDWebImage/SDWebImage-Info.plist | 2 +- ...bImageSwiftUI-SDWebImageSwiftUI-Info.plist | 2 +- .../SDWebImageSwiftUI-Info.plist | 2 +- podspecs/Abacus.podspec | 2 +- 23 files changed, 160 insertions(+), 148 deletions(-) diff --git a/dydx/Podfile.lock b/dydx/Podfile.lock index d1b1f9a20..39357dab4 100644 --- a/dydx/Podfile.lock +++ b/dydx/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - Abacus (1.8.12) + - Abacus (1.8.20) - Amplitude-iOS (4.10.0) - AppsFlyerFramework (6.14.4): - AppsFlyerFramework/Main (= 6.14.4) @@ -258,12 +258,12 @@ PODS: - PromisesObjC (= 2.4.0) - RDHCollectionViewGridLayout (1.2.5) - ReachabilitySwift (5.2.3) - - SDWebImage (5.19.2): - - SDWebImage/Core (= 5.19.2) - - SDWebImage/Core (5.19.2) + - SDWebImage (5.19.4): + - SDWebImage/Core (= 5.19.4) + - SDWebImage/Core (5.19.4) - SDWebImageSVGCoder (1.7.0): - SDWebImage/Core (~> 5.6) - - SDWebImageSwiftUI (3.1.0): + - SDWebImageSwiftUI (3.1.1): - SDWebImage (~> 5.10) - SimpleKeychain (0.12.5) - SnapKit (5.7.1) @@ -386,7 +386,7 @@ CHECKOUT OPTIONS: :git: https://github.com/dydxprotocol/Charts.git SPEC CHECKSUMS: - Abacus: f971f5b6033961390897f301bfc8cd6f4dc1d2a9 + Abacus: b9e71e0ef0f8e9553e82190ab164b7c00f8ffce1 Amplitude-iOS: 7d8cdc3408ba35c2e68368fc7c692cd104606b94 AppsFlyerFramework: 4d7e8c7a6d8487e2ec84b63ba3603ec985308ac4 Atributika: ecedf5259e4aa3c6278d840b6c18d60c1a8b6ca0 @@ -434,9 +434,9 @@ SPEC CHECKSUMS: PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 RDHCollectionViewGridLayout: 4b4229212ed8c136aa70101d92ecd43742ca62b6 ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 - SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a + SDWebImage: 066c47b573f408f18caa467d71deace7c0f8280d SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c - SDWebImageSwiftUI: 6a6e87226afef5a5e30e47c5be8a77a4557933fc + SDWebImageSwiftUI: dcff3d05fd0579ff280221ae8856c34ac3b67f25 SimpleKeychain: 8193a9e40967eccac933c1fde82de46c07a5ae26 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea diff --git a/dydx/Pods/Local Podspecs/abacus.podspec.json b/dydx/Pods/Local Podspecs/abacus.podspec.json index 3ec7ce66c..5b3e5fbb0 100644 --- a/dydx/Pods/Local Podspecs/abacus.podspec.json +++ b/dydx/Pods/Local Podspecs/abacus.podspec.json @@ -1,10 +1,10 @@ { "name": "Abacus", - "version": "1.8.12", + "version": "1.8.20", "homepage": "https://github.com/dydxprotocol/v4-abacus", "source": { "git": "git@github.com:dydxprotocol/v4-abacus.git", - "tag": "v1.8.12" + "tag": "v1.8.20" }, "authors": "", "license": "", @@ -20,7 +20,7 @@ "name": "Build abacus", "execution_position": "before_compile", "shell_path": "/bin/sh", - "script": " if [ \"YES\" = \"$COCOAPODS_SKIP_KOTLIN_BUILD\" ]; then\n echo \"Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"\"\n exit 0\n fi\n set -evx\n \n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \n if [ ! -f $REPO_ROOT/gradlew ]; then\n rm -rf $PRODUCT_MODULE_NAME\n git clone git@github.com:dydxprotocol/v4-abacus.git --branch v1.8.12 $PRODUCT_MODULE_NAME\n \n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n \n # We will need to overwrite the dummy framework generated by cocoapods with the actual one from Kotlin\n \n TARGET_FRAMEWORK=\"${TARGET_BUILD_DIR}/${TARGET_NAME}.framework\"\n ABACUS_FRAMEWORK=\"$REPO_ROOT/build/cocoapods/framework/$PRODUCT_MODULE_NAME.framework\"\n rm -rf $TARGET_FRAMEWORK\n mkdir $TARGET_FRAMEWORK\n cp -rf $ABACUS_FRAMEWORK/* $TARGET_FRAMEWORK\n else\n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n fi\n" + "script": " if [ \"YES\" = \"$COCOAPODS_SKIP_KOTLIN_BUILD\" ]; then\n echo \"Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"\"\n exit 0\n fi\n set -evx\n \n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \n if [ ! -f $REPO_ROOT/gradlew ]; then\n rm -rf $PRODUCT_MODULE_NAME\n git clone git@github.com:dydxprotocol/v4-abacus.git --branch v1.8.20 $PRODUCT_MODULE_NAME\n \n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n \n # We will need to overwrite the dummy framework generated by cocoapods with the actual one from Kotlin\n \n TARGET_FRAMEWORK=\"${TARGET_BUILD_DIR}/${TARGET_NAME}.framework\"\n ABACUS_FRAMEWORK=\"$REPO_ROOT/build/cocoapods/framework/$PRODUCT_MODULE_NAME.framework\"\n rm -rf $TARGET_FRAMEWORK\n mkdir $TARGET_FRAMEWORK\n cp -rf $ABACUS_FRAMEWORK/* $TARGET_FRAMEWORK\n else\n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n fi\n" } ], "platforms": { diff --git a/dydx/Pods/Manifest.lock b/dydx/Pods/Manifest.lock index d1b1f9a20..39357dab4 100644 --- a/dydx/Pods/Manifest.lock +++ b/dydx/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - Abacus (1.8.12) + - Abacus (1.8.20) - Amplitude-iOS (4.10.0) - AppsFlyerFramework (6.14.4): - AppsFlyerFramework/Main (= 6.14.4) @@ -258,12 +258,12 @@ PODS: - PromisesObjC (= 2.4.0) - RDHCollectionViewGridLayout (1.2.5) - ReachabilitySwift (5.2.3) - - SDWebImage (5.19.2): - - SDWebImage/Core (= 5.19.2) - - SDWebImage/Core (5.19.2) + - SDWebImage (5.19.4): + - SDWebImage/Core (= 5.19.4) + - SDWebImage/Core (5.19.4) - SDWebImageSVGCoder (1.7.0): - SDWebImage/Core (~> 5.6) - - SDWebImageSwiftUI (3.1.0): + - SDWebImageSwiftUI (3.1.1): - SDWebImage (~> 5.10) - SimpleKeychain (0.12.5) - SnapKit (5.7.1) @@ -386,7 +386,7 @@ CHECKOUT OPTIONS: :git: https://github.com/dydxprotocol/Charts.git SPEC CHECKSUMS: - Abacus: f971f5b6033961390897f301bfc8cd6f4dc1d2a9 + Abacus: b9e71e0ef0f8e9553e82190ab164b7c00f8ffce1 Amplitude-iOS: 7d8cdc3408ba35c2e68368fc7c692cd104606b94 AppsFlyerFramework: 4d7e8c7a6d8487e2ec84b63ba3603ec985308ac4 Atributika: ecedf5259e4aa3c6278d840b6c18d60c1a8b6ca0 @@ -434,9 +434,9 @@ SPEC CHECKSUMS: PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 RDHCollectionViewGridLayout: 4b4229212ed8c136aa70101d92ecd43742ca62b6 ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 - SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a + SDWebImage: 066c47b573f408f18caa467d71deace7c0f8280d SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c - SDWebImageSwiftUI: 6a6e87226afef5a5e30e47c5be8a77a4557933fc + SDWebImageSwiftUI: dcff3d05fd0579ff280221ae8856c34ac3b67f25 SimpleKeychain: 8193a9e40967eccac933c1fde82de46c07a5ae26 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea diff --git a/dydx/Pods/Pods.xcodeproj/project.pbxproj b/dydx/Pods/Pods.xcodeproj/project.pbxproj index 3b650d6e0..795375559 100644 --- a/dydx/Pods/Pods.xcodeproj/project.pbxproj +++ b/dydx/Pods/Pods.xcodeproj/project.pbxproj @@ -9,10 +9,10 @@ /* Begin PBXAggregateTarget section */ 2B2AD932AF1A90828B4DFC5AC6955ADA /* Abacus */ = { isa = PBXAggregateTarget; - buildConfigurationList = 1CB8E76D69265C4CB77AC911684C124F /* Build configuration list for PBXAggregateTarget "Abacus" */; + buildConfigurationList = 9892630C22CB37E1466A7082ABA0FCCD /* Build configuration list for PBXAggregateTarget "Abacus" */; buildPhases = ( - 76D319F55FEBE08C7DA28208A108E068 /* [CP-User] Build abacus */, - 9F0BB6A406B1C718F2E3A1E2D2D84EBF /* [CP] Copy dSYMs */, + CBCB97E4573E2EB9B9708681D4AD4F99 /* [CP-User] Build abacus */, + FEF6583F1DEF9BB929550F2AAB94D977 /* [CP] Copy dSYMs */, ); dependencies = ( ); @@ -24506,49 +24506,32 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 76D319F55FEBE08C7DA28208A108E068 /* [CP-User] Build abacus */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] Build abacus"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = " if [ \"YES\" = \"$COCOAPODS_SKIP_KOTLIN_BUILD\" ]; then\n echo \"Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"\"\n exit 0\n fi\n set -evx\n \n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \n if [ ! -f $REPO_ROOT/gradlew ]; then\n rm -rf $PRODUCT_MODULE_NAME\n git clone git@github.com:dydxprotocol/v4-abacus.git --branch v1.8.12 $PRODUCT_MODULE_NAME\n \n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n \n # We will need to overwrite the dummy framework generated by cocoapods with the actual one from Kotlin\n \n TARGET_FRAMEWORK=\"${TARGET_BUILD_DIR}/${TARGET_NAME}.framework\"\n ABACUS_FRAMEWORK=\"$REPO_ROOT/build/cocoapods/framework/$PRODUCT_MODULE_NAME.framework\"\n rm -rf $TARGET_FRAMEWORK\n mkdir $TARGET_FRAMEWORK\n cp -rf $ABACUS_FRAMEWORK/* $TARGET_FRAMEWORK\n else\n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n fi\n"; - }; - 9F0BB6A406B1C718F2E3A1E2D2D84EBF /* [CP] Copy dSYMs */ = { + B1176D71CA1D75BF5D4C95994F09DA88 /* [CP] Copy XCFrameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-input-files.xcfilelist", ); - name = "[CP] Copy dSYMs"; + name = "[CP] Copy XCFrameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh\"\n"; showEnvVarsInLog = 0; }; - B1176D71CA1D75BF5D4C95994F09DA88 /* [CP] Copy XCFrameworks */ = { + CBCB97E4573E2EB9B9708681D4AD4F99 /* [CP-User] Build abacus */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-input-files.xcfilelist", - ); - name = "[CP] Copy XCFrameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-output-files.xcfilelist", - ); + name = "[CP-User] Build abacus"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = " if [ \"YES\" = \"$COCOAPODS_SKIP_KOTLIN_BUILD\" ]; then\n echo \"Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\"\"\n exit 0\n fi\n set -evx\n \n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \n if [ ! -f $REPO_ROOT/gradlew ]; then\n rm -rf $PRODUCT_MODULE_NAME\n git clone git@github.com:dydxprotocol/v4-abacus.git --branch v1.8.20 $PRODUCT_MODULE_NAME\n \n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n \n # We will need to overwrite the dummy framework generated by cocoapods with the actual one from Kotlin\n \n TARGET_FRAMEWORK=\"${TARGET_BUILD_DIR}/${TARGET_NAME}.framework\"\n ABACUS_FRAMEWORK=\"$REPO_ROOT/build/cocoapods/framework/$PRODUCT_MODULE_NAME.framework\"\n rm -rf $TARGET_FRAMEWORK\n mkdir $TARGET_FRAMEWORK\n cp -rf $ABACUS_FRAMEWORK/* $TARGET_FRAMEWORK\n else\n \"$REPO_ROOT/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n fi\n"; }; CFBCDE1E4A02029F6B9D8BA85CD8967D /* [CP] Copy XCFrameworks */ = { isa = PBXShellScriptBuildPhase; @@ -24584,6 +24567,23 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/AppsFlyerFramework/AppsFlyerFramework-xcframeworks.sh\"\n"; showEnvVarsInLog = 0; }; + FEF6583F1DEF9BB929550F2AAB94D977 /* [CP] Copy dSYMs */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms-input-files.xcfilelist", + ); + name = "[CP] Copy dSYMs"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Abacus/Abacus-copy-dsyms.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -33612,6 +33612,24 @@ }; name = Release; }; + 12AEA7148A139CAF2E1AA6E5B21A0915 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4170BD5336E5EA635EB281E3CFCFD7E2 /* Abacus.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 12E753781601C20FE4A7FCFC0EF351F9 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4F1EB24489E6D99444D64E23126E0675 /* FirebaseMessaging.release.xcconfig */; @@ -35712,6 +35730,23 @@ }; name = Release; }; + 52BC8D46542F802CAD896D29F2A044C4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F05F14038FDD9DB47A257FF06AE195D /* Abacus.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; 5395CD35994CB01204B337AC73F7B216 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 20D017767C9E85269ABC59A2A76C8C56 /* RDHCollectionViewGridLayout.debug.xcconfig */; @@ -37498,24 +37533,6 @@ }; name = Debug; }; - 939592E10427A377FA7DC6E459CB445A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4170BD5336E5EA635EB281E3CFCFD7E2 /* Abacus.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 942177120F5D805AA50FD2398B1F2B3B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 19C6BE560C56D5C70FC1802E7E5FD3BC /* FirebaseCoreInternal.release.xcconfig */; @@ -40214,23 +40231,6 @@ }; name = Release; }; - E316F8100B3ACBDCFF1CD4B33B2BDB66 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8F05F14038FDD9DB47A257FF06AE195D /* Abacus.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; E3F9F68815E64D3451A4719C00A29BBB /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = BCCE8CCB6A50B45C140E51E625AD15EF /* SnapKit.debug.xcconfig */; @@ -41504,15 +41504,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1CB8E76D69265C4CB77AC911684C124F /* Build configuration list for PBXAggregateTarget "Abacus" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E316F8100B3ACBDCFF1CD4B33B2BDB66 /* Debug */, - 939592E10427A377FA7DC6E459CB445A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 1CBD4A8525E8F96EB6B48E83A7C545E5 /* Build configuration list for PBXNativeTarget "EFQRCode" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -42080,6 +42071,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9892630C22CB37E1466A7082ABA0FCCD /* Build configuration list for PBXAggregateTarget "Abacus" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 52BC8D46542F802CAD896D29F2A044C4 /* Debug */, + 12AEA7148A139CAF2E1AA6E5B21A0915 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 98CC20B1F4B0D41BCA54B12E2CFA11F9 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/dydx/Pods/SDWebImage/README.md b/dydx/Pods/SDWebImage/README.md index e67587c6f..b6a63c81e 100644 --- a/dydx/Pods/SDWebImage/README.md +++ b/dydx/Pods/SDWebImage/README.md @@ -313,6 +313,8 @@ Drag the unzipped `.xcframework` into your Xcode Project's Framework tab. From Xcode 15 Apple will verify the signature of binary XCFramework, to avoid supply chain attack. +The fingerprint currently should be `FC 3B 10 13 86 34 4C 50 DB 70 2A 9A D1 01 6F B5 1A 3E CC 8B 9D A9 B7 AE 47 A0 48 D4 D0 63 39 83` + The certificate is stored in the repo [here](https://github.com/SDWebImage/SDWebImage/blob/master/Certificate/SDWebImage%20Signing%20Certificate.cer) The public key is stored in the repo [here](https://github.com/SDWebImage/SDWebImage/blob/master/Certificate/SDWebImage%20Signing%20Certificate.pem) diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h b/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h index 78739c57f..4f5969979 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h @@ -72,7 +72,7 @@ // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding. // You should use these methods to create a new animated image. Use other methods just call super instead. -// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. +// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. For vector image(PDF/SVG), always return nil. // @note When the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback. + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support #if __has_include() diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m b/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m index e7467c479..56c63e1c4 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m @@ -141,6 +141,12 @@ - (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale options:(SDImag if (!data || data.length == 0) { return nil; } + // Vector image does not supported, guard firstly + SDImageFormat format = [NSData sd_imageFormatForImageData:data]; + if (format == SDImageFormatSVG || format == SDImageFormatPDF) { + return nil; + } + id animatedCoder = nil; SDImageCoderMutableOptions *mutableCoderOptions; if (options != nil) { @@ -167,6 +173,10 @@ - (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale options:(SDImag if (!image) { return nil; } + // Vector image does not supported, guard secondly + if (image.sd_isVector) { + return nil; + } #if SD_MAC self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:kCGImagePropertyOrientationUp]; #else diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m b/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m index 741d57cdd..a0d1628de 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m @@ -124,9 +124,9 @@ void SDSetDecodeOptionsToContext(SDWebImageMutableContext * _Nonnull mutableCont } if (image) { SDImageForceDecodePolicy policy = SDImageForceDecodePolicyAutomatic; - NSNumber *polivyValue = context[SDWebImageContextImageForceDecodePolicy]; - if (polivyValue != nil) { - policy = polivyValue.unsignedIntegerValue; + NSNumber *policyValue = context[SDWebImageContextImageForceDecodePolicy]; + if (policyValue != nil) { + policy = policyValue.unsignedIntegerValue; } // TODO: Deprecated, remove in SD 6.0... #pragma clang diagnostic push diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m b/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m index b302b5b9a..9c6c26873 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m @@ -75,9 +75,9 @@ void SDImageLoaderSetProgressiveCoder(id operation, id operation, id *downloadOperation; @property (nonatomic, assign, getter=isCancelled) BOOL cancelled; @@ -534,7 +534,7 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didRece } } -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { // Identify the operation that runs this task and pass it the delegate method NSOperation *dataOperation = [self operationWithTask:task]; diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h b/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h index b0dc07911..aec9c93d7 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h @@ -40,7 +40,7 @@ @optional @property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask; -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); +@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); // These operation-level config was inherited from downloader. See `SDWebImageDownloaderConfig` for documentation. @property (strong, nonatomic, nullable) NSURLCredential *credential; @@ -75,7 +75,7 @@ * The collected metrics from `-URLSession:task:didFinishCollectingMetrics:`. * This can be used to collect the network metrics like download duration, DNS lookup duration, SSL handshake duration, etc. See Apple's documentation: https://developer.apple.com/documentation/foundation/urlsessiontaskmetrics */ -@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); +@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); /** * The credential used for authentication challenges in `-URLSession:task:didReceiveChallenge:completionHandler:`. diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m b/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m index e9cf411e1..5b4000496 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m @@ -73,7 +73,7 @@ @interface SDWebImageDownloaderOperation () @property (strong, nonatomic, readwrite, nullable) NSURLSessionTask *dataTask; -@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)); +@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)); @property (strong, nonatomic, nonnull) NSOperationQueue *coderQueue; // the serial operation queue to do image decoding @@ -697,7 +697,7 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didRece } } -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)) { self.metrics = metrics; } diff --git a/dydx/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m b/dydx/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m index 8a8e07ea4..c6d5ed85c 100644 --- a/dydx/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +++ b/dydx/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m @@ -143,6 +143,7 @@ - (BOOL)sd_isAnimated { - (BOOL)sd_isVector { NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height); + // This may returns a NSProxy, so don't use `class` to check NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil]; if ([imageRep isKindOfClass:[NSPDFImageRep class]]) { return YES; @@ -150,7 +151,8 @@ - (BOOL)sd_isVector { if ([imageRep isKindOfClass:[NSEPSImageRep class]]) { return YES; } - if ([NSStringFromClass(imageRep.class) hasSuffix:@"NSSVGImageRep"]) { + Class NSSVGImageRepClass = NSClassFromString([NSString stringWithFormat:@"_%@", SD_NSSTRING(NSSVGImageRep)]); + if ([imageRep isKindOfClass:NSSVGImageRepClass]) { return YES; } return NO; diff --git a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift index 665437205..4e5a7a75c 100644 --- a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +++ b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift @@ -276,7 +276,7 @@ public struct AnimatedImage : PlatformViewRepresentable { self.imageHandler.failureBlock?(error ?? NSError()) } // Finished loading, async - finishUpdateView(view, context: context, image: image) + finishUpdateView(view, context: context) } } @@ -364,7 +364,7 @@ public struct AnimatedImage : PlatformViewRepresentable { } // Finished loading, sync - finishUpdateView(view, context: context, image: view.wrapped.image) + finishUpdateView(view, context: context) if let viewUpdateBlock = imageHandler.viewUpdateBlock { viewUpdateBlock(view.wrapped, context) @@ -383,13 +383,8 @@ public struct AnimatedImage : PlatformViewRepresentable { } } - func finishUpdateView(_ view: AnimatedImageViewWrapper, context: Context, image: PlatformImage?) { + func finishUpdateView(_ view: AnimatedImageViewWrapper, context: Context) { // Finished loading - if let imageSize = image?.size { - view.imageSize = imageSize - } else { - view.imageSize = nil - } configureView(view, context: context) layoutView(view, context: context) } diff --git a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift index f42eccb78..eb5ec2737 100644 --- a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +++ b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift @@ -60,6 +60,7 @@ public final class ImageManager : ObservableObject { weak var currentOperation: SDWebImageOperation? = nil var currentURL: URL? + var transaction = Transaction() var successBlock: ((PlatformImage, Data?, SDImageCacheType) -> Void)? var failureBlock: ((Error) -> Void)? var progressBlock: ((Int, Int) -> Void)? @@ -106,18 +107,20 @@ public final class ImageManager : ObservableObject { // So previous View struct call `onDisappear` and cancel the currentOperation return } - self.image = image - self.error = error - self.isIncremental = !finished - if finished { - self.imageData = data - self.cacheType = cacheType - self.indicatorStatus.isLoading = false - self.indicatorStatus.progress = 1 - if let image = image { - self.successBlock?(image, data, cacheType) - } else { - self.failureBlock?(error ?? NSError()) + withTransaction(transaction) { + self.image = image + self.error = error + self.isIncremental = !finished + if finished { + self.imageData = data + self.cacheType = cacheType + self.indicatorStatus.isLoading = false + self.indicatorStatus.progress = 1 + if let image = image { + self.successBlock?(image, data, cacheType) + } else { + self.failureBlock?(error ?? NSError()) + } } } } diff --git a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift index e019881f0..ff42fdf13 100644 --- a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +++ b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift @@ -16,11 +16,15 @@ import SwiftUI @available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) public class AnimatedImageViewWrapper : PlatformView { /// The wrapped actual image view, using SDWebImage's aniamted image view - public var wrapped = SDAnimatedImageView() + @objc dynamic public var wrapped = SDAnimatedImageView() + var observation: NSKeyValueObservation? var interpolationQuality = CGInterpolationQuality.default var shouldAntialias = false var resizingMode: Image.ResizingMode? - var imageSize: CGSize? + + deinit { + observation?.invalidate() + } public override func draw(_ rect: CGRect) { #if os(macOS) @@ -50,15 +54,7 @@ public class AnimatedImageViewWrapper : PlatformView { public override var intrinsicContentSize: CGSize { /// Match the behavior of SwiftUI.Image, only when image is resizable, use the super implementation to calculate size - var contentSize = wrapped.intrinsicContentSize - /// Sometimes, like during the transaction, the wrapped.image == nil, which cause contentSize invalid - /// Use image size as backup - /// TODO: This mixed use of UIKit/SwiftUI animation will cause visial issue because the intrinsicContentSize during animation may be changed - if let imageSize = imageSize { - if contentSize != imageSize { - contentSize = imageSize - } - } + let contentSize = wrapped.intrinsicContentSize if let _ = resizingMode { /// Keep aspect ratio if contentSize.width > 0 && contentSize.height > 0 { @@ -77,11 +73,17 @@ public class AnimatedImageViewWrapper : PlatformView { public override init(frame frameRect: CGRect) { super.init(frame: frameRect) addSubview(wrapped) + observation = observe(\.wrapped.image, options: [.new]) { _, _ in + self.invalidateIntrinsicContentSize() + } } public required init?(coder: NSCoder) { super.init(coder: coder) addSubview(wrapped) + observation = observe(\.wrapped.image, options: [.new]) { _, _ in + self.invalidateIntrinsicContentSize() + } } } diff --git a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift index 7cc6fbe2a..3dab6a3c6 100644 --- a/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +++ b/dydx/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift @@ -81,8 +81,6 @@ final class WebImageConfiguration: ObservableObject { /// A Image View type to load image from url. Supports static/animated image format. @available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *) public struct WebImage : View where Content: View { - var transaction: Transaction - var configurations: [(Image) -> Image] = [] var content: (WebImagePhase) -> Content @@ -146,10 +144,10 @@ public struct WebImage : View where Content: View { imageModel.context = context _imageModel = ObservedObject(wrappedValue: imageModel) let imageManager = ImageManager() + imageManager.transaction = transaction _imageManager = StateObject(wrappedValue: imageManager) _indicatorStatus = ObservedObject(wrappedValue: imageManager.indicatorStatus) - self.transaction = transaction self.content = { phase in content(phase) } diff --git a/dydx/Pods/Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist b/dydx/Pods/Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist index 0ca61f218..8dd1a32c7 100644 --- a/dydx/Pods/Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist +++ b/dydx/Pods/Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.19.2 + 5.19.4 CFBundleSignature ???? CFBundleVersion diff --git a/dydx/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist b/dydx/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist index cd76c5e3b..6418d2aeb 100644 --- a/dydx/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist +++ b/dydx/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 5.19.2 + 5.19.4 CFBundleSignature ???? CFBundleVersion diff --git a/dydx/Pods/Target Support Files/SDWebImageSwiftUI/ResourceBundle-SDWebImageSwiftUI-SDWebImageSwiftUI-Info.plist b/dydx/Pods/Target Support Files/SDWebImageSwiftUI/ResourceBundle-SDWebImageSwiftUI-SDWebImageSwiftUI-Info.plist index bfff448e7..0be871422 100644 --- a/dydx/Pods/Target Support Files/SDWebImageSwiftUI/ResourceBundle-SDWebImageSwiftUI-SDWebImageSwiftUI-Info.plist +++ b/dydx/Pods/Target Support Files/SDWebImageSwiftUI/ResourceBundle-SDWebImageSwiftUI-SDWebImageSwiftUI-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 3.1.0 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/dydx/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-Info.plist b/dydx/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-Info.plist index 362a435d4..56509df06 100644 --- a/dydx/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-Info.plist +++ b/dydx/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.1.0 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/podspecs/Abacus.podspec b/podspecs/Abacus.podspec index c43f69a92..fbf5359ab 100644 --- a/podspecs/Abacus.podspec +++ b/podspecs/Abacus.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'Abacus' -spec.version = '1.8.12' +spec.version = '1.8.20' spec.homepage = 'https://github.com/dydxprotocol/v4-abacus' spec.source = { :git => "git@github.com:dydxprotocol/v4-abacus.git", :tag => "v#{spec.version}" } spec.authors = ''