From 2d4839a195b5fadd61a741a330fb41620c66c459 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Thu, 22 Jun 2023 19:20:01 +0800 Subject: [PATCH 1/7] Added visionOS support Add visionOS Demo The scale using traitCollection.displayScale --- .../project.pbxproj | 721 +++++++----------- .../contents.xcworkspacedata | 2 +- .../SDWebImageSwiftUIDemo-visionOS.xcscheme | 77 ++ ...eSwiftUIDemo-watchOS WatchKit App.xcscheme | 25 +- .../AppDelegate.swift | 41 + .../Content.imageset/Contents.json | 12 + .../Back.solidimagestacklayer/Contents.json | 6 + .../AppIcon.solidimagestack/Contents.json | 17 + .../Content.imageset/Contents.json | 12 + .../Front.solidimagestacklayer/Contents.json | 6 + .../Content.imageset/Contents.json | 12 + .../Middle.solidimagestacklayer/Contents.json | 6 + .../Assets.xcassets/Contents.json | 6 + .../SDWebImageSwiftUIDemo-visionOS/Info.plist | 11 + .../Preview Assets.xcassets/Contents.json | 6 + .../SDWebImageSwiftUIDemo/ContentView.swift | 16 +- .../SDWebImageSwiftUIDemo/DetailView.swift | 6 +- SDWebImageSwiftUI.xcodeproj/project.pbxproj | 2 - .../contents.xcworkspacedata | 3 - SDWebImageSwiftUI/Classes/AnimatedImage.swift | 16 +- SDWebImageSwiftUI/Classes/Image.swift | 2 +- .../Classes/ImageViewWrapper.swift | 2 +- .../Classes/Indicator/ActivityIndicator.swift | 6 +- .../Classes/Indicator/Indicator.swift | 2 +- .../Classes/Indicator/ProgressIndicator.swift | 6 +- .../Classes/SDWebImageSwiftUI.swift | 6 +- .../Classes/SwiftUICompatibility.swift | 4 +- SDWebImageSwiftUI/Classes/WebImage.swift | 12 +- 28 files changed, 537 insertions(+), 506 deletions(-) create mode 100644 Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-visionOS.xcscheme create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/Contents.json create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Info.plist create mode 100644 Example/SDWebImageSwiftUIDemo-visionOS/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj index c370771a..7f76fcef 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -3,12 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 1794840F9DF6D50ADA448C9B /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.framework */; }; - 2E3D81A12C757E01A3C420F2 /* Pods_SDWebImageSwiftUITests_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83FA763A8587C065798A274B /* Pods_SDWebImageSwiftUITests_tvOS.framework */; }; 320CDC2C22FADB44007CF858 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2B22FADB44007CF858 /* AppDelegate.swift */; }; 320CDC2E22FADB44007CF858 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2D22FADB44007CF858 /* SceneDelegate.swift */; }; 320CDC3022FADB44007CF858 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2F22FADB44007CF858 /* ContentView.swift */; }; @@ -34,9 +32,21 @@ 322E0E2228D332130003A55F /* Images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 322E0DF228D331A20003A55F /* Images.bundle */; }; 322E0E2328D332130003A55F /* Images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 322E0DF228D331A20003A55F /* Images.bundle */; }; 326B0D712345C01900D28269 /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; - 327B90F228DC4EBB003E8BD9 /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 327B90F128DC4EBB003E8BD9 /* ViewInspector */; }; - 327B90F428DC4EC0003E8BD9 /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 327B90F328DC4EC0003E8BD9 /* ViewInspector */; }; - 32DCFE9528D333E8001A17BF /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 32DCFE9428D333E8001A17BF /* ViewInspector */; }; + 32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */; }; + 32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E822AA368B900BE9B5B /* SDWebImage */; }; + 32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */; }; + 32B13E872AA368C900BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E862AA368C900BE9B5B /* SDWebImage */; }; + 32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E882AA368CC00BE9B5B /* SDWebImage */; }; + 32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */; }; + 32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E902AA368E300BE9B5B /* SDWebImage */; }; + 32B13E932AA368EF00BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */; }; + 32B13E952AA368F300BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E942AA368F300BE9B5B /* SDWebImage */; }; + 32D5D1672A445B260098BDFC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32D5D1662A445B260098BDFC /* AppDelegate.swift */; }; + 32D5D16B2A445B260098BDFC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16A2A445B260098BDFC /* Assets.xcassets */; }; + 32D5D16E2A445B260098BDFC /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16D2A445B260098BDFC /* Preview Assets.xcassets */; }; + 32D5D1722A445BF00098BDFC /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; + 32D5D1732A445BF00098BDFC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2F22FADB44007CF858 /* ContentView.swift */; }; + 32D5D1762A445C8F0098BDFC /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */; }; 32E5290C2348A0C700EA46FF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E5290B2348A0C700EA46FF /* AppDelegate.swift */; }; 32E529102348A0C900EA46FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32E5290F2348A0C900EA46FF /* Assets.xcassets */; }; 32E529132348A0C900EA46FF /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32E529122348A0C900EA46FF /* Preview Assets.xcassets */; }; @@ -59,11 +69,6 @@ 32E529662348A10B00EA46FF /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; 32E529682348A10C00EA46FF /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2F22FADB44007CF858 /* ContentView.swift */; }; 32E529692348A10C00EA46FF /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; - 68543C9252A5BD46E9573195 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79C3538209F8065DCCFBE205 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */; }; - 833A61715BAAB31702D867CC /* Pods_SDWebImageSwiftUITests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1A272DB5547C37A41C1238E /* Pods_SDWebImageSwiftUITests_macOS.framework */; }; - 8E29022B4DCBF0EFF9CF82F9 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E25DB0256669F3B7EE7C566D /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */; }; - 9E3892775FC4E348DFA66FCA /* Pods_SDWebImageSwiftUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEDED19F84B1D678B12077A /* Pods_SDWebImageSwiftUITests.framework */; }; - E61581A5A1063B0E6795157D /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0FCDD95C695D2F914DC9B3B /* Pods_SDWebImageSwiftUIDemo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -130,9 +135,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0EEE88A04A9B191BD966EFC2 /* Pods-SDWebImageSwiftUITests macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests macOS.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests macOS/Pods-SDWebImageSwiftUITests macOS.release.xcconfig"; sourceTree = ""; }; 28546D27CDA9666E64C183FD /* SDWebImageSwiftUI.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SDWebImageSwiftUI.podspec; path = ../SDWebImageSwiftUI.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 2FEDED19F84B1D678B12077A /* Pods_SDWebImageSwiftUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 320CDC2922FADB44007CF858 /* SDWebImageSwiftUIDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SDWebImageSwiftUIDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 320CDC2B22FADB44007CF858 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 320CDC2D22FADB44007CF858 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -152,6 +155,13 @@ 322E0E0228D331F00003A55F /* SDWebImageSwiftUITests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDWebImageSwiftUITests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 322E0E0F28D332050003A55F /* SDWebImageSwiftUITests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDWebImageSwiftUITests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 326B0D702345C01900D28269 /* DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailView.swift; sourceTree = ""; }; + 3294617D2AA36759009E391B /* SDWebImage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SDWebImage; path = ../../SDWebImage; sourceTree = ""; }; + 3294617E2AA36761009E391B /* SDWebImageSwiftUI */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SDWebImageSwiftUI; path = ..; sourceTree = ""; }; + 32D5D1602A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDWebImageSwiftUIDemo-visionOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 32D5D1662A445B260098BDFC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; wrapsLines = 0; }; + 32D5D16A2A445B260098BDFC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 32D5D16D2A445B260098BDFC /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 32D5D17F2A4463170098BDFC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 32E529092348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDWebImageSwiftUIDemo-macOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 32E5290B2348A0C700EA46FF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 32E5290F2348A0C900EA46FF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -177,26 +187,7 @@ 32E529542348A0DF00EA46FF /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 32E529562348A0DF00EA46FF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3E9F8B5F06960FFFBD1A5F99 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 487B2863C76EC4CE36CEC4EA /* Pods-SDWebImageSwiftUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests/Pods-SDWebImageSwiftUITests.debug.xcconfig"; sourceTree = ""; }; 54859B427E0A79E823713963 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - 5864FFEDE62A0630EDF26A56 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.release.xcconfig"; sourceTree = ""; }; - 5ABE9344AF344CCC70056CD5 /* Pods-SDWebImageSwiftUITests tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests tvOS.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests tvOS/Pods-SDWebImageSwiftUITests tvOS.debug.xcconfig"; sourceTree = ""; }; - 746AF60263F54FD7E16AA7D5 /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig"; sourceTree = ""; }; - 79C3538209F8065DCCFBE205 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B0D9182CAD02B73E6F208F3 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig"; sourceTree = ""; }; - 83FA763A8587C065798A274B /* Pods_SDWebImageSwiftUITests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUITests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 89B11BBDBAA86F760DF1EE2D /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig"; sourceTree = ""; }; - 95C9E0D9CE4113E5A82480B9 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig"; sourceTree = ""; }; - A78BA7FB5AFF53CBDD4C4CBD /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.debug.xcconfig"; sourceTree = ""; }; - A7CD2F7825F1936052B2C65E /* Pods-SDWebImageSwiftUITests macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests macOS.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests macOS/Pods-SDWebImageSwiftUITests macOS.debug.xcconfig"; sourceTree = ""; }; - B6E12746E84E9ED7FA910A24 /* Pods-SDWebImageSwiftUITests tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests tvOS.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests tvOS/Pods-SDWebImageSwiftUITests tvOS.release.xcconfig"; sourceTree = ""; }; - C1A272DB5547C37A41C1238E /* Pods_SDWebImageSwiftUITests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUITests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DDE527DE0EF6B6D9B7CD8C97 /* Pods-SDWebImageSwiftUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUITests.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUITests/Pods-SDWebImageSwiftUITests.release.xcconfig"; sourceTree = ""; }; - E25DB0256669F3B7EE7C566D /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F0FCDD95C695D2F914DC9B3B /* Pods_SDWebImageSwiftUIDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F3AACDC116F5598BC39A8573 /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig"; sourceTree = ""; }; - FEED4964309E241D2FD8A544 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig"; path = "../../Pods/Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -204,7 +195,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E61581A5A1063B0E6795157D /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */, + 32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */, + 32D5D1762A445C8F0098BDFC /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -212,8 +204,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E3892775FC4E348DFA66FCA /* Pods_SDWebImageSwiftUITests.framework in Frameworks */, - 32DCFE9528D333E8001A17BF /* ViewInspector in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -221,8 +211,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 833A61715BAAB31702D867CC /* Pods_SDWebImageSwiftUITests_macOS.framework in Frameworks */, - 327B90F228DC4EBB003E8BD9 /* ViewInspector in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -230,8 +218,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E3D81A12C757E01A3C420F2 /* Pods_SDWebImageSwiftUITests_tvOS.framework in Frameworks */, - 327B90F428DC4EC0003E8BD9 /* ViewInspector in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 32D5D15D2A445B250098BDFC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */, + 32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -239,7 +234,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1794840F9DF6D50ADA448C9B /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */, + 32B13E872AA368C900BE9B5B /* SDWebImage in Frameworks */, + 32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -247,7 +243,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 68543C9252A5BD46E9573195 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */, + 32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */, + 32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -255,7 +252,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8E29022B4DCBF0EFF9CF82F9 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -270,33 +266,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32B13E952AA368F300BE9B5B /* SDWebImage in Frameworks */, + 32B13E932AA368EF00BE9B5B /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1DEE67F18F512F2F2F78E283 /* Pods */ = { - isa = PBXGroup; - children = ( - A78BA7FB5AFF53CBDD4C4CBD /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */, - 5864FFEDE62A0630EDF26A56 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */, - 89B11BBDBAA86F760DF1EE2D /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */, - F3AACDC116F5598BC39A8573 /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */, - 746AF60263F54FD7E16AA7D5 /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */, - 95C9E0D9CE4113E5A82480B9 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */, - FEED4964309E241D2FD8A544 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */, - 7B0D9182CAD02B73E6F208F3 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */, - 487B2863C76EC4CE36CEC4EA /* Pods-SDWebImageSwiftUITests.debug.xcconfig */, - DDE527DE0EF6B6D9B7CD8C97 /* Pods-SDWebImageSwiftUITests.release.xcconfig */, - A7CD2F7825F1936052B2C65E /* Pods-SDWebImageSwiftUITests macOS.debug.xcconfig */, - 0EEE88A04A9B191BD966EFC2 /* Pods-SDWebImageSwiftUITests macOS.release.xcconfig */, - 5ABE9344AF344CCC70056CD5 /* Pods-SDWebImageSwiftUITests tvOS.debug.xcconfig */, - B6E12746E84E9ED7FA910A24 /* Pods-SDWebImageSwiftUITests tvOS.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; 320CDC2A22FADB44007CF858 /* SDWebImageSwiftUIDemo */ = { isa = PBXGroup; children = ( @@ -335,6 +312,32 @@ path = ../Tests; sourceTree = ""; }; + 32D5D1612A445B260098BDFC /* SDWebImageSwiftUIDemo-visionOS */ = { + isa = PBXGroup; + children = ( + 32D5D17F2A4463170098BDFC /* Info.plist */, + 32D5D1662A445B260098BDFC /* AppDelegate.swift */, + 32D5D16A2A445B260098BDFC /* Assets.xcassets */, + 32D5D16C2A445B260098BDFC /* Preview Content */, + ); + path = "SDWebImageSwiftUIDemo-visionOS"; + sourceTree = ""; + }; + 32D5D16C2A445B260098BDFC /* Preview Content */ = { + isa = PBXGroup; + children = ( + 32D5D16D2A445B260098BDFC /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 32D5D17A2A445D220098BDFC /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; 32E5290A2348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS */ = { isa = PBXGroup; children = ( @@ -409,16 +412,18 @@ 607FACC71AFB9204008FA782 = { isa = PBXGroup; children = ( + 3294617D2AA36759009E391B /* SDWebImage */, + 3294617E2AA36761009E391B /* SDWebImageSwiftUI */, 607FACF51AFB993E008FA782 /* Podspec Metadata */, 320CDC2A22FADB44007CF858 /* SDWebImageSwiftUIDemo */, 32E5290A2348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS */, 32E529212348A0D300EA46FF /* SDWebImageSwiftUIDemo-tvOS */, 32E5293B2348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit App */, 32E5294A2348A0DE00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit Extension */, + 32D5D1612A445B260098BDFC /* SDWebImageSwiftUIDemo-visionOS */, 322E0DEF28D331A20003A55F /* Tests */, 607FACD11AFB9204008FA782 /* Products */, - 1DEE67F18F512F2F2F78E283 /* Pods */, - F1EB66AFCE0A1C6D551D02DD /* Frameworks */, + 32D5D17A2A445D220098BDFC /* Frameworks */, ); sourceTree = ""; }; @@ -434,6 +439,7 @@ 322E0DE628D3318B0003A55F /* SDWebImageSwiftUITests.xctest */, 322E0E0228D331F00003A55F /* SDWebImageSwiftUITests macOS.xctest */, 322E0E0F28D332050003A55F /* SDWebImageSwiftUITests tvOS.xctest */, + 32D5D1602A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS.app */, ); name = Products; sourceTree = ""; @@ -448,20 +454,6 @@ name = "Podspec Metadata"; sourceTree = ""; }; - F1EB66AFCE0A1C6D551D02DD /* Frameworks */ = { - isa = PBXGroup; - children = ( - F0FCDD95C695D2F914DC9B3B /* Pods_SDWebImageSwiftUIDemo.framework */, - 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.framework */, - 79C3538209F8065DCCFBE205 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */, - E25DB0256669F3B7EE7C566D /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */, - 2FEDED19F84B1D678B12077A /* Pods_SDWebImageSwiftUITests.framework */, - C1A272DB5547C37A41C1238E /* Pods_SDWebImageSwiftUITests_macOS.framework */, - 83FA763A8587C065798A274B /* Pods_SDWebImageSwiftUITests_tvOS.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -469,17 +461,19 @@ isa = PBXNativeTarget; buildConfigurationList = 320CDC3C22FADB45007CF858 /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo" */; buildPhases = ( - 58D483FABAB44B4EC2E538D0 /* [CP] Check Pods Manifest.lock */, 320CDC2522FADB44007CF858 /* Sources */, 320CDC2622FADB44007CF858 /* Frameworks */, 320CDC2722FADB44007CF858 /* Resources */, - 0B5ABDA8213E875CE5FCC890 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SDWebImageSwiftUIDemo; + packageProductDependencies = ( + 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */, + 32B13E882AA368CC00BE9B5B /* SDWebImage */, + ); productName = SDWebImageSwiftUIDemo; productReference = 320CDC2922FADB44007CF858 /* SDWebImageSwiftUIDemo.app */; productType = "com.apple.product-type.application"; @@ -488,11 +482,9 @@ isa = PBXNativeTarget; buildConfigurationList = 322E0DEE28D3318B0003A55F /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUITests" */; buildPhases = ( - C7AF6D10A677FCEBE3437F0D /* [CP] Check Pods Manifest.lock */, 322E0DE228D3318B0003A55F /* Sources */, 322E0DE328D3318B0003A55F /* Frameworks */, 322E0DE428D3318B0003A55F /* Resources */, - FBC7E7B3AE428B3A9E53818E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -502,7 +494,6 @@ ); name = SDWebImageSwiftUITests; packageProductDependencies = ( - 32DCFE9428D333E8001A17BF /* ViewInspector */, ); productName = SDWebImageSwiftUITests; productReference = 322E0DE628D3318B0003A55F /* SDWebImageSwiftUITests.xctest */; @@ -512,11 +503,9 @@ isa = PBXNativeTarget; buildConfigurationList = 322E0E0828D331F00003A55F /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUITests macOS" */; buildPhases = ( - C82E8A3FDE233B48BF0E7FD0 /* [CP] Check Pods Manifest.lock */, 322E0DFE28D331F00003A55F /* Sources */, 322E0DFF28D331F00003A55F /* Frameworks */, 322E0E0028D331F00003A55F /* Resources */, - 8D8B832471DE6E5EE5ABE934 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -526,7 +515,6 @@ ); name = "SDWebImageSwiftUITests macOS"; packageProductDependencies = ( - 327B90F128DC4EBB003E8BD9 /* ViewInspector */, ); productName = "SDWebImageSwiftUITests macOS"; productReference = 322E0E0228D331F00003A55F /* SDWebImageSwiftUITests macOS.xctest */; @@ -536,11 +524,9 @@ isa = PBXNativeTarget; buildConfigurationList = 322E0E1528D332050003A55F /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUITests tvOS" */; buildPhases = ( - 8C3AFE728247BB6B9A847044 /* [CP] Check Pods Manifest.lock */, 322E0E0B28D332050003A55F /* Sources */, 322E0E0C28D332050003A55F /* Frameworks */, 322E0E0D28D332050003A55F /* Resources */, - 5EA97551EBAEA1D25997F2AB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -550,27 +536,49 @@ ); name = "SDWebImageSwiftUITests tvOS"; packageProductDependencies = ( - 327B90F328DC4EC0003E8BD9 /* ViewInspector */, ); productName = "SDWebImageSwiftUITests tvOS"; productReference = 322E0E0F28D332050003A55F /* SDWebImageSwiftUITests tvOS.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + 32D5D15F2A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 32D5D1712A445B260098BDFC /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-visionOS" */; + buildPhases = ( + 32D5D15C2A445B250098BDFC /* Sources */, + 32D5D15D2A445B250098BDFC /* Frameworks */, + 32D5D15E2A445B250098BDFC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SDWebImageSwiftUIDemo-visionOS"; + packageProductDependencies = ( + 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */, + 32B13E822AA368B900BE9B5B /* SDWebImage */, + ); + productName = "SDWebImageSwiftUIDemo-visionOS"; + productReference = 32D5D1602A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS.app */; + productType = "com.apple.product-type.application"; + }; 32E529082348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS */ = { isa = PBXNativeTarget; buildConfigurationList = 32E5291B2348A0C900EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-macOS" */; buildPhases = ( - 78426DFA5212E5496802AC58 /* [CP] Check Pods Manifest.lock */, 32E529052348A0C700EA46FF /* Sources */, 32E529062348A0C700EA46FF /* Frameworks */, 32E529072348A0C700EA46FF /* Resources */, - 4577A2F4A5DEBBDBB766F1CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "SDWebImageSwiftUIDemo-macOS"; + packageProductDependencies = ( + 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */, + 32B13E862AA368C900BE9B5B /* SDWebImage */, + ); productName = "SDWebImageSwiftUIDemo-macOS"; productReference = 32E529092348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS.app */; productType = "com.apple.product-type.application"; @@ -579,17 +587,19 @@ isa = PBXNativeTarget; buildConfigurationList = 32E5292F2348A0D400EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-tvOS" */; buildPhases = ( - FB46C9F77AA45C7DA1D71F7B /* [CP] Check Pods Manifest.lock */, 32E5291C2348A0D300EA46FF /* Sources */, 32E5291D2348A0D300EA46FF /* Frameworks */, 32E5291E2348A0D300EA46FF /* Resources */, - A6F5B1BDEE1460B7F20E55C6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "SDWebImageSwiftUIDemo-tvOS"; + packageProductDependencies = ( + 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */, + 32B13E902AA368E300BE9B5B /* SDWebImage */, + ); productName = "SDWebImageSwiftUIDemo-tvOS"; productReference = 32E529202348A0D300EA46FF /* SDWebImageSwiftUIDemo-tvOS.app */; productType = "com.apple.product-type.application"; @@ -626,6 +636,10 @@ 32E529492348A0DE00EA46FF /* PBXTargetDependency */, ); name = "SDWebImageSwiftUIDemo-watchOS WatchKit App"; + packageProductDependencies = ( + 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */, + 32B13E942AA368F300BE9B5B /* SDWebImage */, + ); productName = "SDWebImageSwiftUIDemo-watchOS WatchKit App"; productReference = 32E529372348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit App.app */; productType = "com.apple.product-type.application.watchapp2"; @@ -634,11 +648,9 @@ isa = PBXNativeTarget; buildConfigurationList = 32E529572348A0DF00EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-watchOS WatchKit Extension" */; buildPhases = ( - B9B631F1DB90E98FCAE3E196 /* [CP] Check Pods Manifest.lock */, 32E529422348A0DE00EA46FF /* Sources */, 32E529432348A0DE00EA46FF /* Frameworks */, 32E529442348A0DE00EA46FF /* Resources */, - 756F0513F095D448FCCD78A2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -655,7 +667,7 @@ 607FACC81AFB9204008FA782 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1340; + LastSwiftUpdateCheck = 1500; LastUpgradeCheck = 0830; ORGANIZATIONNAME = CocoaPods; TargetAttributes = { @@ -677,6 +689,9 @@ ProvisioningStyle = Automatic; TestTargetID = 32E5291F2348A0D300EA46FF; }; + 32D5D15F2A445B250098BDFC = { + CreatedOnToolsVersion = 15.0; + }; 32E529082348A0C700EA46FF = { CreatedOnToolsVersion = 11.0; ProvisioningStyle = Automatic; @@ -710,7 +725,7 @@ ); mainGroup = 607FACC71AFB9204008FA782; packageReferences = ( - 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */, + 3294617A2AA36734009E391B /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */, ); productRefGroup = 607FACD11AFB9204008FA782 /* Products */; projectDirPath = ""; @@ -722,6 +737,7 @@ 32E529332348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS */, 32E529362348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit App */, 32E529452348A0DE00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit Extension */, + 32D5D15F2A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS */, 322E0DE528D3318B0003A55F /* SDWebImageSwiftUITests */, 322E0E0128D331F00003A55F /* SDWebImageSwiftUITests macOS */, 322E0E0E28D332050003A55F /* SDWebImageSwiftUITests tvOS */, @@ -764,6 +780,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 32D5D15E2A445B250098BDFC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D5D16E2A445B260098BDFC /* Preview Assets.xcassets in Resources */, + 32D5D16B2A445B260098BDFC /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32E529072348A0C700EA46FF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -811,335 +836,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 0B5ABDA8213E875CE5FCC890 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-iOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImagePDFCoder-iOS/SDWebImagePDFCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSVGCoder-iOS/SDWebImageSVGCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-iOS/SDWebImageSwiftUI.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder-iOS/SDWebImageWebPCoder.framework", - "${BUILT_PRODUCTS_DIR}/libwebp-iOS/libwebp.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImagePDFCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSVGCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 4577A2F4A5DEBBDBB766F1CF /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-macOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImagePDFCoder-macOS/SDWebImagePDFCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSVGCoder-macOS/SDWebImageSVGCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-macOS/SDWebImageSwiftUI.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder-macOS/SDWebImageWebPCoder.framework", - "${BUILT_PRODUCTS_DIR}/libwebp-macOS/libwebp.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImagePDFCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSVGCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 58D483FABAB44B4EC2E538D0 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUIDemo-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 5EA97551EBAEA1D25997F2AB /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests tvOS/Pods-SDWebImageSwiftUITests tvOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-tvOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-tvOS/SDWebImageSwiftUI.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests tvOS/Pods-SDWebImageSwiftUITests tvOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 756F0513F095D448FCCD78A2 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-watchOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImagePDFCoder-watchOS/SDWebImagePDFCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSVGCoder-watchOS/SDWebImageSVGCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-watchOS/SDWebImageSwiftUI.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder-watchOS/SDWebImageWebPCoder.framework", - "${BUILT_PRODUCTS_DIR}/libwebp-watchOS/libwebp.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImagePDFCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSVGCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 78426DFA5212E5496802AC58 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUIDemo-macOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8C3AFE728247BB6B9A847044 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUITests tvOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8D8B832471DE6E5EE5ABE934 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests macOS/Pods-SDWebImageSwiftUITests macOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-macOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-macOS/SDWebImageSwiftUI.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests macOS/Pods-SDWebImageSwiftUITests macOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A6F5B1BDEE1460B7F20E55C6 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-tvOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImagePDFCoder-tvOS/SDWebImagePDFCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSVGCoder-tvOS/SDWebImageSVGCoder.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-tvOS/SDWebImageSwiftUI.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder-tvOS/SDWebImageWebPCoder.framework", - "${BUILT_PRODUCTS_DIR}/libwebp-tvOS/libwebp.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImagePDFCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSVGCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/libwebp.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - B9B631F1DB90E98FCAE3E196 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C7AF6D10A677FCEBE3437F0D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUITests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C82E8A3FDE233B48BF0E7FD0 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUITests macOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FB46C9F77AA45C7DA1D71F7B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUIDemo-tvOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FBC7E7B3AE428B3A9E53818E /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests/Pods-SDWebImageSwiftUITests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage-iOS/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SDWebImageSwiftUI-iOS/SDWebImageSwiftUI.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageSwiftUI.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUITests/Pods-SDWebImageSwiftUITests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 320CDC2522FADB44007CF858 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -1188,6 +884,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 32D5D15C2A445B250098BDFC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32D5D1672A445B260098BDFC /* AppDelegate.swift in Sources */, + 32D5D1722A445BF00098BDFC /* DetailView.swift in Sources */, + 32D5D1732A445BF00098BDFC /* ContentView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32E529052348A0C700EA46FF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1299,7 +1005,6 @@ /* Begin XCBuildConfiguration section */ 320CDC3A22FADB45007CF858 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A78BA7FB5AFF53CBDD4C4CBD /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1337,7 +1042,6 @@ }; 320CDC3B22FADB45007CF858 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5864FFEDE62A0630EDF26A56 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1372,7 +1076,6 @@ }; 322E0DEC28D3318B0003A55F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 487B2863C76EC4CE36CEC4EA /* Pods-SDWebImageSwiftUITests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1404,7 +1107,6 @@ }; 322E0DED28D3318B0003A55F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDE527DE0EF6B6D9B7CD8C97 /* Pods-SDWebImageSwiftUITests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1433,7 +1135,6 @@ }; 322E0E0928D331F00003A55F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7CD2F7825F1936052B2C65E /* Pods-SDWebImageSwiftUITests macOS.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1465,7 +1166,6 @@ }; 322E0E0A28D331F00003A55F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0EEE88A04A9B191BD966EFC2 /* Pods-SDWebImageSwiftUITests macOS.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1494,7 +1194,6 @@ }; 322E0E1628D332050003A55F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5ABE9344AF344CCC70056CD5 /* Pods-SDWebImageSwiftUITests tvOS.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1527,7 +1226,6 @@ }; 322E0E1728D332050003A55F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B6E12746E84E9ED7FA910A24 /* Pods-SDWebImageSwiftUITests tvOS.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1555,9 +1253,95 @@ }; name = Release; }; + 32D5D16F2A445B260098BDFC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_ASSET_PATHS = "\"SDWebImageSwiftUIDemo-visionOS/Preview Content\""; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "SDWebImageSwiftUIDemo-visionOS/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.SDWebImageSwiftUIDemo-visionOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = xros; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Debug; + }; + 32D5D1702A445B260098BDFC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"SDWebImageSwiftUIDemo-visionOS/Preview Content\""; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "SDWebImageSwiftUIDemo-visionOS/Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.SDWebImageSwiftUIDemo-visionOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = xros; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = Release; + }; 32E529192348A0C900EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89B11BBDBAA86F760DF1EE2D /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1593,7 +1377,6 @@ }; 32E5291A2348A0C900EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F3AACDC116F5598BC39A8573 /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1626,7 +1409,6 @@ }; 32E529302348A0D400EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 746AF60263F54FD7E16AA7D5 /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_ANALYZER_NONNULL = YES; @@ -1661,7 +1443,6 @@ }; 32E529312348A0D400EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95C9E0D9CE4113E5A82480B9 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_ANALYZER_NONNULL = YES; @@ -1693,7 +1474,6 @@ }; 32E529582348A0DF00EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FEED4964309E241D2FD8A544 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; CLANG_ANALYZER_NONNULL = YES; @@ -1730,7 +1510,6 @@ }; 32E529592348A0DF00EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B0D9182CAD02B73E6F208F3 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; CLANG_ANALYZER_NONNULL = YES; @@ -2007,6 +1786,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 32D5D1712A445B260098BDFC /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-visionOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 32D5D16F2A445B260098BDFC /* Debug */, + 32D5D1702A445B260098BDFC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 32E5291B2348A0C900EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2064,6 +1852,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 3294617A2AA36734009E391B /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SDWebImage/SDWebImageSwiftUI.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.2.3; + }; + }; 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/nalexn/ViewInspector.git"; @@ -2085,20 +1881,45 @@ package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; productName = ViewInspector; }; - 327B90F128DC4EBB003E8BD9 /* ViewInspector */ = { + 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; - productName = ViewInspector; + productName = SDWebImageSwiftUI; }; - 327B90F328DC4EC0003E8BD9 /* ViewInspector */ = { + 32B13E822AA368B900BE9B5B /* SDWebImage */ = { isa = XCSwiftPackageProductDependency; - package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; - productName = ViewInspector; + productName = SDWebImage; }; - 32DCFE9428D333E8001A17BF /* ViewInspector */ = { + 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */ = { isa = XCSwiftPackageProductDependency; - package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; - productName = ViewInspector; + productName = SDWebImageSwiftUI; + }; + 32B13E862AA368C900BE9B5B /* SDWebImage */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImage; + }; + 32B13E882AA368CC00BE9B5B /* SDWebImage */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImage; + }; + 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImageSwiftUI; + }; + 32B13E902AA368E300BE9B5B /* SDWebImage */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImage; + }; + 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImageSwiftUI; + }; + 32B13E942AA368F300BE9B5B /* SDWebImage */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImage; + }; + 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImageSwiftUI; }; 32DCFE9628D333F1001A17BF /* ViewInspector */ = { isa = XCSwiftPackageProductDependency; diff --git a/Example/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 8c78f63a..919434a6 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Example/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-visionOS.xcscheme b/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-visionOS.xcscheme new file mode 100644 index 00000000..96453419 --- /dev/null +++ b/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-visionOS.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-watchOS WatchKit App.xcscheme b/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-watchOS WatchKit App.xcscheme index 3d1f081f..65df20bc 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-watchOS WatchKit App.xcscheme +++ b/Example/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUIDemo-watchOS WatchKit App.xcscheme @@ -54,10 +54,8 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> - + - + - + - - - - - + diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift b/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift new file mode 100644 index 00000000..0939fca7 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift @@ -0,0 +1,41 @@ +/* + * This file is part of the SDWebImage package. + * (c) DreamPiggy + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +import SwiftUI +import UIKit +import SDWebImage + +// no changes in your AppDelegate class +class AppDelegate: NSObject, UIApplicationDelegate { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + // Add WebP/SVG/PDF support + SDImageCodersManager.shared.addCoder(SDImageAWebPCoder.shared) + // Dynamic check to support vector format for both WebImage/AnimatedImage + SDWebImageManager.shared.optionsProcessor = SDWebImageOptionsProcessor { url, options, context in + var options = options + if let _ = context?[.animatedImageClass] as? SDAnimatedImage.Type { + // AnimatedImage supports vector rendering, should not force decode + options.insert(.avoidDecodeImage) + } + return SDWebImageOptionsResult(options: options, context: context) + } + return true + } +} + +@main +struct SDWebImageSwiftUIDemo: App { + // inject into SwiftUI life-cycle via adaptor + @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json new file mode 100644 index 00000000..0c7eecb9 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "reality", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json new file mode 100644 index 00000000..950af4d8 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json @@ -0,0 +1,17 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "layers" : [ + { + "filename" : "Front.solidimagestacklayer" + }, + { + "filename" : "Middle.solidimagestacklayer" + }, + { + "filename" : "Back.solidimagestacklayer" + } + ] +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json new file mode 100644 index 00000000..0c7eecb9 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "reality", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json new file mode 100644 index 00000000..0c7eecb9 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "reality", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Info.plist b/Example/SDWebImageSwiftUIDemo-visionOS/Info.plist new file mode 100644 index 00000000..6a6654d9 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Info.plist @@ -0,0 +1,11 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/Preview Content/Preview Assets.xcassets/Contents.json b/Example/SDWebImageSwiftUIDemo-visionOS/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Example/SDWebImageSwiftUIDemo-visionOS/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SDWebImageSwiftUIDemo/ContentView.swift b/Example/SDWebImageSwiftUIDemo/ContentView.swift index a3619c90..1fd39279 100644 --- a/Example/SDWebImageSwiftUIDemo/ContentView.swift +++ b/Example/SDWebImageSwiftUIDemo/ContentView.swift @@ -112,7 +112,7 @@ struct ContentView: View { NavigationLink(destination: DetailView(url: url, animated: self.animated)) { HStack { if self.animated { - #if os(macOS) || os(iOS) || os(tvOS) + #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) AnimatedImage(url: URL(string:url), isAnimating: .constant(true)) .onViewUpdate { view, context in #if os(macOS) @@ -157,6 +157,20 @@ struct ContentView: View { var body: some View { + #if os(visionOS) + return NavigationView { + contentView() + .navigationBarTitle(animated ? "AnimatedImage" : "WebImage") + .navigationBarItems(leading: + Button(action: { self.reloadCache() }) { + Text("Reload") + }, trailing: + Button(action: { self.switchView() }) { + Text("Switch") + } + ) + } + #endif #if os(iOS) return NavigationView { contentView() diff --git a/Example/SDWebImageSwiftUIDemo/DetailView.swift b/Example/SDWebImageSwiftUIDemo/DetailView.swift index f9e7dea0..74032170 100644 --- a/Example/SDWebImageSwiftUIDemo/DetailView.swift +++ b/Example/SDWebImageSwiftUIDemo/DetailView.swift @@ -44,7 +44,7 @@ struct DetailView: View { var body: some View { VStack { - #if os(iOS) || os(tvOS) + #if os(iOS) || os(tvOS) || os(visionOS) zoomView() .navigationBarItems(trailing: Button(isAnimating ? "Stop" : "Start") { self.isAnimating.toggle() @@ -62,7 +62,7 @@ struct DetailView: View { } func zoomView() -> some View { - #if os(macOS) || os(iOS) + #if os(macOS) || os(iOS) || os(visionOS) return contentView() .scaleEffect(self.scale) .gesture(MagnificationGesture(minimumScaleDelta: 0.1).onChanged { value in @@ -94,7 +94,7 @@ struct DetailView: View { func contentView() -> some View { HStack { if animated { - #if os(macOS) || os(iOS) || os(tvOS) + #if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) AnimatedImage(url: URL(string:url), options: [.progressiveLoad, .delayPlaceholder], isAnimating: $isAnimating) .resizable() .placeholder(.wifiExclamationmark) diff --git a/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/SDWebImageSwiftUI.xcodeproj/project.pbxproj index 1fbde810..dcbdb696 100644 --- a/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -403,8 +403,6 @@ Base, ); mainGroup = 32C43DC222FD540D00BE87F5; - packageReferences = ( - ); productRefGroup = 32C43DCD22FD540D00BE87F5 /* Products */; projectDirPath = ""; projectRoot = ""; diff --git a/SDWebImageSwiftUI.xcworkspace/contents.xcworkspacedata b/SDWebImageSwiftUI.xcworkspace/contents.xcworkspacedata index 496425a8..9b0b7f6b 100644 --- a/SDWebImageSwiftUI.xcworkspace/contents.xcworkspacedata +++ b/SDWebImageSwiftUI.xcworkspace/contents.xcworkspacedata @@ -4,7 +4,4 @@ - - diff --git a/SDWebImageSwiftUI/Classes/AnimatedImage.swift b/SDWebImageSwiftUI/Classes/AnimatedImage.swift index e454432f..59a50a28 100644 --- a/SDWebImageSwiftUI/Classes/AnimatedImage.swift +++ b/SDWebImageSwiftUI/Classes/AnimatedImage.swift @@ -9,7 +9,7 @@ import SwiftUI import SDWebImage -#if os(iOS) || os(tvOS) || os(macOS) +#if !os(watchOS) /// A coordinator object used for `AnimatedImage`native view bridge for UIKit/AppKit. @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) @@ -183,7 +183,7 @@ public struct AnimatedImage : PlatformViewRepresentable { #if os(macOS) public typealias NSViewType = AnimatedImageViewWrapper - #elseif os(iOS) || os(tvOS) + #else public typealias UIViewType = AnimatedImageViewWrapper #endif @@ -205,7 +205,7 @@ public struct AnimatedImage : PlatformViewRepresentable { public static func dismantleNSView(_ nsView: AnimatedImageViewWrapper, coordinator: Coordinator) { dismantleView(nsView, coordinator: coordinator) } - #elseif os(iOS) || os(tvOS) + #else public func makeUIView(context: Context) -> AnimatedImageViewWrapper { makeView(context: context) } @@ -373,14 +373,14 @@ public struct AnimatedImage : PlatformViewRepresentable { // AspectRatio && ContentMode #if os(macOS) let contentMode: NSImageScaling - #elseif os(iOS) || os(tvOS) + #else let contentMode: UIView.ContentMode #endif if let _ = imageLayout.aspectRatio { // If `aspectRatio` is not `nil`, always scale to fill and SwiftUI will layout the container with custom aspect ratio. #if os(macOS) contentMode = .scaleAxesIndependently - #elseif os(iOS) || os(tvOS) + #else contentMode = .scaleToFill #endif } else { @@ -391,20 +391,20 @@ public struct AnimatedImage : PlatformViewRepresentable { // Actually, NSImageView have no `.aspectFill` unlike UIImageView, only `CALayerContentsGravity.resizeAspectFill` have the same concept // However, using `.scaleProportionallyUpOrDown`, SwiftUI still layout the HostingView correctly, so this is OK contentMode = .scaleProportionallyUpOrDown - #elseif os(iOS) || os(tvOS) + #else contentMode = .scaleAspectFill #endif case .fit: #if os(macOS) contentMode = .scaleProportionallyUpOrDown - #elseif os(iOS) || os(tvOS) + #else contentMode = .scaleAspectFit #endif case .none: // If `contentMode` is not set at all, using scale to fill as SwiftUI default value #if os(macOS) contentMode = .scaleAxesIndependently - #elseif os(iOS) || os(tvOS) + #else contentMode = .scaleToFill #endif } diff --git a/SDWebImageSwiftUI/Classes/Image.swift b/SDWebImageSwiftUI/Classes/Image.swift index 28ba9697..c4b46b86 100644 --- a/SDWebImageSwiftUI/Classes/Image.swift +++ b/SDWebImageSwiftUI/Classes/Image.swift @@ -25,7 +25,7 @@ extension PlatformImage { static var empty = PlatformImage() } -#if os(iOS) || os(tvOS) || os(watchOS) +#if !os(macOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) extension PlatformImage.Orientation { @inlinable var toSwiftUI: Image.Orientation { diff --git a/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift b/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift index 80f936ee..51de9ca7 100644 --- a/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +++ b/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift @@ -9,7 +9,7 @@ import Foundation import SDWebImage -#if os(iOS) || os(tvOS) || os(macOS) +#if !os(watchOS) /// Use wrapper to solve tne `UIImageView`/`NSImageView` frame size become image size issue (SwiftUI's Bug) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) diff --git a/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift b/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift index 7103c77e..0b737b3d 100644 --- a/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +++ b/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift @@ -8,7 +8,7 @@ import SwiftUI -#if os(macOS) || os(iOS) || os(tvOS) +#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) /// An activity indicator (system style) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public struct ActivityIndicator: PlatformViewRepresentable { @@ -26,11 +26,11 @@ public struct ActivityIndicator: PlatformViewRepresentable { #if os(macOS) public typealias NSViewType = NSProgressIndicator - #elseif os(iOS) || os(tvOS) + #else public typealias UIViewType = UIActivityIndicatorView #endif - #if os(iOS) || os(tvOS) + #if os(iOS) || os(tvOS) || os(visionOS) public func makeUIView(context: UIViewRepresentableContext) -> UIActivityIndicatorView { let activityStyle: UIActivityIndicatorView.Style switch style { diff --git a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift index 37eb9030..925fd6a2 100644 --- a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +++ b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift @@ -58,7 +58,7 @@ public struct IndicatorViewModifier : ViewModifier where T : View { } } -#if os(macOS) || os(iOS) || os(tvOS) +#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) extension Indicator where T == ActivityIndicator { /// Activity Indicator diff --git a/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift b/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift index 1256ee87..6f1acba4 100644 --- a/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +++ b/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift @@ -8,7 +8,7 @@ import SwiftUI -#if os(macOS) || os(iOS) || os(tvOS) +#if os(macOS) || os(iOS) || os(tvOS) || os(visionOS) /// A progress bar indicator (system style) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public struct ProgressIndicator: PlatformViewRepresentable { @@ -29,11 +29,11 @@ public struct ProgressIndicator: PlatformViewRepresentable { #if os(macOS) public typealias NSViewType = ProgressIndicatorWrapper - #elseif os(iOS) || os(tvOS) + #else public typealias UIViewType = ProgressIndicatorWrapper #endif - #if os(iOS) || os(tvOS) + #if os(iOS) || os(tvOS) || os(visionOS) public func makeUIView(context: UIViewRepresentableContext) -> ProgressIndicatorWrapper { let progressStyle: UIProgressView.Style switch style { diff --git a/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift b/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift index 9c0e71ad..3e06e6ee 100644 --- a/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +++ b/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift @@ -22,7 +22,7 @@ public typealias PlatformImage = UIImage @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public typealias PlatformView = NSView #endif -#if os(iOS) || os(tvOS) +#if os(iOS) || os(tvOS) || os(visionOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public typealias PlatformView = UIView #endif @@ -35,7 +35,7 @@ public typealias PlatformView = WKInterfaceObject @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public typealias PlatformViewRepresentable = NSViewRepresentable #endif -#if os(iOS) || os(tvOS) +#if os(iOS) || os(tvOS) || os(visionOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public typealias PlatformViewRepresentable = UIViewRepresentable #endif @@ -50,7 +50,7 @@ extension NSViewRepresentable { typealias PlatformViewType = NSViewType } #endif -#if os(iOS) || os(tvOS) +#if os(iOS) || os(tvOS) || os(visionOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) extension UIViewRepresentable { typealias PlatformViewType = UIViewType diff --git a/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift b/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift index e7a46393..b285b7d5 100644 --- a/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +++ b/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift @@ -9,14 +9,14 @@ import Foundation import SwiftUI -#if os(iOS) || os(tvOS) || os(macOS) +#if !os(watchOS) @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) struct PlatformAppear: PlatformViewRepresentable { let appearAction: () -> Void let disappearAction: () -> Void - #if os(iOS) || os(tvOS) + #if os(iOS) || os(tvOS) || os(visionOS) func makeUIView(context: Context) -> some UIView { let view = PlatformAppearView() view.appearAction = appearAction diff --git a/SDWebImageSwiftUI/Classes/WebImage.swift b/SDWebImageSwiftUI/Classes/WebImage.swift index 65fdf15e..940edf99 100644 --- a/SDWebImageSwiftUI/Classes/WebImage.swift +++ b/SDWebImageSwiftUI/Classes/WebImage.swift @@ -64,10 +64,10 @@ public struct WebImage : View { @ObservedObject var indicatorStatus : IndicatorStatus // FIXME: Use SwiftUI StateObject and remove onPlatformAppear once drop iOS 13 support - @Backport.StateObject var imagePlayer = ImagePlayer() + @StateObject var imagePlayer = ImagePlayer() // FIXME: Use SwiftUI StateObject and remove onPlatformAppear once drop iOS 13 support - @Backport.StateObject var imageManager : ImageManager + @StateObject var imageManager : ImageManager /// Create a web image with url, placeholder, custom options and context. Optional can support animated image using Binding. /// - Parameter url: The image url @@ -89,7 +89,7 @@ public struct WebImage : View { imageModel.context = context _imageModel = ObservedObject(wrappedValue: imageModel) let imageManager = ImageManager() - _imageManager = Backport.StateObject(wrappedValue: imageManager) + _imageManager = StateObject(wrappedValue: imageManager) _indicatorStatus = ObservedObject(wrappedValue: imageManager.indicatorStatus) } @@ -160,9 +160,11 @@ public struct WebImage : View { // ensure CGImage is nil if image.cgImage == nil { // draw vector into bitmap with the screen scale (behavior like AppKit) - #if os(iOS) || os(tvOS) + #if os(visionOS) + let scale = UITraitCollection.current.displayScale + #elseif os(iOS) || os(tvOS) || os(visionOS) let scale = UIScreen.main.scale - #else + #elseif os(watchOS) let scale = WKInterfaceDevice.current().screenScale #endif UIGraphicsBeginImageContextWithOptions(image.size, false, scale) From 2c24b7f2b7029da5a4d97cf9f74c6f18bd5cd504 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 21:28:07 +0800 Subject: [PATCH 2/7] Added readme about visionOS --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index d64f3c3f..ba983fda 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,14 @@ It brings all your favorite features from SDWebImage, like async image loading, The framework provide the different View structs, which API match the SwiftUI framework guideline. If you're familiar with `Image`, you'll find it easy to use `WebImage` and `AnimatedImage`. +## Apple VisionOS + +SDWebImageSwiftUI can compiled for visionOS platform. However, due to the package manager support, we can not integrate using the exists function. + +So, in [visionOS branch](https://github.com/SDWebImage/SDWebImageSwiftUI/tree/feature/visionOS), our demo use the Xcode's built-in dependency to build. + +You can build and run to see the example (still need improvement) + ## Features Since SDWebImageSwiftUI is built on top of SDWebImage, it provide both the out-of-box features as well as advanced powerful features you may want in real world Apps. Check our [Wiki](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage) when you need: From 8b7ab6f3af387269ee7e5b746386c7b2f42e1934 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 21:56:56 +0800 Subject: [PATCH 3/7] Update the Demo with SPM instead of CocoaPods --- .../project.pbxproj | 179 ++++++++++++++++-- .../AppDelegate.swift | 7 +- README.md | 8 +- 3 files changed, 175 insertions(+), 19 deletions(-) diff --git a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj index e7e62e29..7083664c 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -29,6 +29,23 @@ 322E0E2228D332130003A55F /* Images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 322E0DF228D331A20003A55F /* Images.bundle */; }; 322E0E2328D332130003A55F /* Images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 322E0DF228D331A20003A55F /* Images.bundle */; }; 326B0D712345C01900D28269 /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; + 32ABE4D92AA3753300331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4D82AA3753300331406 /* SDWebImageWebPCoder */; }; + 32ABE4DC2AA3755D00331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4DB2AA3755D00331406 /* SDWebImageSVGCoder */; }; + 32ABE4DF2AA3756A00331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4DE2AA3756A00331406 /* SDWebImagePDFCoder */; }; + 32ABE4E12AA3757B00331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4E02AA3757B00331406 /* SDWebImageWebPCoder */; }; + 32ABE4E32AA3757B00331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4E22AA3757B00331406 /* SDWebImageSVGCoder */; }; + 32ABE4E52AA3757B00331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4E42AA3757B00331406 /* SDWebImagePDFCoder */; }; + 32ABE4E72AA3758400331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4E62AA3758400331406 /* SDWebImageWebPCoder */; }; + 32ABE4E92AA3758400331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4E82AA3758400331406 /* SDWebImageSVGCoder */; }; + 32ABE4EB2AA3758400331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4EA2AA3758400331406 /* SDWebImagePDFCoder */; }; + 32ABE4F32AA3759900331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F22AA3759900331406 /* SDWebImageWebPCoder */; }; + 32ABE4F52AA3759900331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F42AA3759900331406 /* SDWebImageSVGCoder */; }; + 32ABE4F72AA3759900331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F62AA3759900331406 /* SDWebImagePDFCoder */; }; + 32ABE4F92AA375A500331406 /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F82AA375A500331406 /* SDWebImage */; }; + 32ABE4FD2AA375A500331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */; }; + 32ABE4FF2AA375A500331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4FE2AA375A500331406 /* SDWebImageSVGCoder */; }; + 32ABE5012AA375A500331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE5002AA375A500331406 /* SDWebImagePDFCoder */; }; + 32ABE5032AA375B400331406 /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE5022AA375B400331406 /* SDWebImageSwiftUI */; }; 32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */; }; 32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E822AA368B900BE9B5B /* SDWebImage */; }; 32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */; }; @@ -36,8 +53,6 @@ 32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E882AA368CC00BE9B5B /* SDWebImage */; }; 32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */; }; 32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E902AA368E300BE9B5B /* SDWebImage */; }; - 32B13E932AA368EF00BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */; }; - 32B13E952AA368F300BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E942AA368F300BE9B5B /* SDWebImage */; }; 32D5D1672A445B260098BDFC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32D5D1662A445B260098BDFC /* AppDelegate.swift */; }; 32D5D16B2A445B260098BDFC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16A2A445B260098BDFC /* Assets.xcassets */; }; 32D5D16E2A445B260098BDFC /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16D2A445B260098BDFC /* Preview Assets.xcassets */; }; @@ -193,6 +208,9 @@ files = ( 32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */, 32D5D1762A445C8F0098BDFC /* SDWebImageSwiftUI in Frameworks */, + 32ABE4D92AA3753300331406 /* SDWebImageWebPCoder in Frameworks */, + 32ABE4DF2AA3756A00331406 /* SDWebImagePDFCoder in Frameworks */, + 32ABE4DC2AA3755D00331406 /* SDWebImageSVGCoder in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -223,6 +241,9 @@ files = ( 32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */, 32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */, + 32ABE4F32AA3759900331406 /* SDWebImageWebPCoder in Frameworks */, + 32ABE4F72AA3759900331406 /* SDWebImagePDFCoder in Frameworks */, + 32ABE4F52AA3759900331406 /* SDWebImageSVGCoder in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -232,6 +253,9 @@ files = ( 32B13E872AA368C900BE9B5B /* SDWebImage in Frameworks */, 32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */, + 32ABE4E12AA3757B00331406 /* SDWebImageWebPCoder in Frameworks */, + 32ABE4E52AA3757B00331406 /* SDWebImagePDFCoder in Frameworks */, + 32ABE4E32AA3757B00331406 /* SDWebImageSVGCoder in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -241,6 +265,9 @@ files = ( 32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */, 32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */, + 32ABE4E72AA3758400331406 /* SDWebImageWebPCoder in Frameworks */, + 32ABE4EB2AA3758400331406 /* SDWebImagePDFCoder in Frameworks */, + 32ABE4E92AA3758400331406 /* SDWebImageSVGCoder in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -248,6 +275,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32ABE5032AA375B400331406 /* SDWebImageSwiftUI in Frameworks */, + 32ABE4F92AA375A500331406 /* SDWebImage in Frameworks */, + 32ABE4FD2AA375A500331406 /* SDWebImageWebPCoder in Frameworks */, + 32ABE5012AA375A500331406 /* SDWebImagePDFCoder in Frameworks */, + 32ABE4FF2AA375A500331406 /* SDWebImageSVGCoder in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -262,8 +294,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 32B13E952AA368F300BE9B5B /* SDWebImage in Frameworks */, - 32B13E932AA368EF00BE9B5B /* SDWebImageSwiftUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -468,6 +498,9 @@ packageProductDependencies = ( 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */, 32B13E882AA368CC00BE9B5B /* SDWebImage */, + 32ABE4D82AA3753300331406 /* SDWebImageWebPCoder */, + 32ABE4DB2AA3755D00331406 /* SDWebImageSVGCoder */, + 32ABE4DE2AA3756A00331406 /* SDWebImagePDFCoder */, ); productName = SDWebImageSwiftUIDemo; productReference = 320CDC2922FADB44007CF858 /* SDWebImageSwiftUIDemo.app */; @@ -552,6 +585,9 @@ packageProductDependencies = ( 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */, 32B13E822AA368B900BE9B5B /* SDWebImage */, + 32ABE4F22AA3759900331406 /* SDWebImageWebPCoder */, + 32ABE4F42AA3759900331406 /* SDWebImageSVGCoder */, + 32ABE4F62AA3759900331406 /* SDWebImagePDFCoder */, ); productName = "SDWebImageSwiftUIDemo-visionOS"; productReference = 32D5D1602A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS.app */; @@ -573,6 +609,9 @@ packageProductDependencies = ( 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */, 32B13E862AA368C900BE9B5B /* SDWebImage */, + 32ABE4E02AA3757B00331406 /* SDWebImageWebPCoder */, + 32ABE4E22AA3757B00331406 /* SDWebImageSVGCoder */, + 32ABE4E42AA3757B00331406 /* SDWebImagePDFCoder */, ); productName = "SDWebImageSwiftUIDemo-macOS"; productReference = 32E529092348A0C700EA46FF /* SDWebImageSwiftUIDemo-macOS.app */; @@ -594,6 +633,9 @@ packageProductDependencies = ( 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */, 32B13E902AA368E300BE9B5B /* SDWebImage */, + 32ABE4E62AA3758400331406 /* SDWebImageWebPCoder */, + 32ABE4E82AA3758400331406 /* SDWebImageSVGCoder */, + 32ABE4EA2AA3758400331406 /* SDWebImagePDFCoder */, ); productName = "SDWebImageSwiftUIDemo-tvOS"; productReference = 32E529202348A0D300EA46FF /* SDWebImageSwiftUIDemo-tvOS.app */; @@ -632,8 +674,6 @@ ); name = "SDWebImageSwiftUIDemo-watchOS WatchKit App"; packageProductDependencies = ( - 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */, - 32B13E942AA368F300BE9B5B /* SDWebImage */, ); productName = "SDWebImageSwiftUIDemo-watchOS WatchKit App"; productReference = 32E529372348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit App.app */; @@ -652,6 +692,13 @@ dependencies = ( ); name = "SDWebImageSwiftUIDemo-watchOS WatchKit Extension"; + packageProductDependencies = ( + 32ABE4F82AA375A500331406 /* SDWebImage */, + 32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */, + 32ABE4FE2AA375A500331406 /* SDWebImageSVGCoder */, + 32ABE5002AA375A500331406 /* SDWebImagePDFCoder */, + 32ABE5022AA375B400331406 /* SDWebImageSwiftUI */, + ); productName = "SDWebImageSwiftUIDemo-watchOS WatchKit Extension"; productReference = 32E529462348A0DE00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit Extension.appex */; productType = "com.apple.product-type.watchkit2-extension"; @@ -721,6 +768,9 @@ mainGroup = 607FACC71AFB9204008FA782; packageReferences = ( 3294617A2AA36734009E391B /* XCRemoteSwiftPackageReference "SDWebImageSwiftUI" */, + 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */, + 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */, + 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */, ); productRefGroup = 607FACD11AFB9204008FA782 /* Products */; projectDirPath = ""; @@ -1852,6 +1902,30 @@ minimumVersion = 2.2.3; }; }; + 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SDWebImage/SDWebImageWebPCoder.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.9.1; + }; + }; + 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SDWebImage/SDWebImageSVGCoder"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SDWebImage/SDWebImagePDFCoder"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/nalexn/ViewInspector.git"; @@ -1873,6 +1947,89 @@ package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; productName = ViewInspector; }; + 32ABE4D82AA3753300331406 /* SDWebImageWebPCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */; + productName = SDWebImageWebPCoder; + }; + 32ABE4DB2AA3755D00331406 /* SDWebImageSVGCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */; + productName = SDWebImageSVGCoder; + }; + 32ABE4DE2AA3756A00331406 /* SDWebImagePDFCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */; + productName = SDWebImagePDFCoder; + }; + 32ABE4E02AA3757B00331406 /* SDWebImageWebPCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */; + productName = SDWebImageWebPCoder; + }; + 32ABE4E22AA3757B00331406 /* SDWebImageSVGCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */; + productName = SDWebImageSVGCoder; + }; + 32ABE4E42AA3757B00331406 /* SDWebImagePDFCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */; + productName = SDWebImagePDFCoder; + }; + 32ABE4E62AA3758400331406 /* SDWebImageWebPCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */; + productName = SDWebImageWebPCoder; + }; + 32ABE4E82AA3758400331406 /* SDWebImageSVGCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */; + productName = SDWebImageSVGCoder; + }; + 32ABE4EA2AA3758400331406 /* SDWebImagePDFCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */; + productName = SDWebImagePDFCoder; + }; + 32ABE4F22AA3759900331406 /* SDWebImageWebPCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */; + productName = SDWebImageWebPCoder; + }; + 32ABE4F42AA3759900331406 /* SDWebImageSVGCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */; + productName = SDWebImageSVGCoder; + }; + 32ABE4F62AA3759900331406 /* SDWebImagePDFCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */; + productName = SDWebImagePDFCoder; + }; + 32ABE4F82AA375A500331406 /* SDWebImage */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImage; + }; + 32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */; + productName = SDWebImageWebPCoder; + }; + 32ABE4FE2AA375A500331406 /* SDWebImageSVGCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */; + productName = SDWebImageSVGCoder; + }; + 32ABE5002AA375A500331406 /* SDWebImagePDFCoder */ = { + isa = XCSwiftPackageProductDependency; + package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */; + productName = SDWebImagePDFCoder; + }; + 32ABE5022AA375B400331406 /* SDWebImageSwiftUI */ = { + isa = XCSwiftPackageProductDependency; + productName = SDWebImageSwiftUI; + }; 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */ = { isa = XCSwiftPackageProductDependency; productName = SDWebImageSwiftUI; @@ -1901,14 +2058,6 @@ isa = XCSwiftPackageProductDependency; productName = SDWebImage; }; - 32B13E922AA368EF00BE9B5B /* SDWebImageSwiftUI */ = { - isa = XCSwiftPackageProductDependency; - productName = SDWebImageSwiftUI; - }; - 32B13E942AA368F300BE9B5B /* SDWebImage */ = { - isa = XCSwiftPackageProductDependency; - productName = SDWebImage; - }; 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */ = { isa = XCSwiftPackageProductDependency; productName = SDWebImageSwiftUI; diff --git a/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift b/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift index 0939fca7..82035803 100644 --- a/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift +++ b/Example/SDWebImageSwiftUIDemo-visionOS/AppDelegate.swift @@ -9,12 +9,17 @@ import SwiftUI import UIKit import SDWebImage +import SDWebImageWebPCoder +import SDWebImageSVGCoder +import SDWebImagePDFCoder // no changes in your AppDelegate class class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { // Add WebP/SVG/PDF support - SDImageCodersManager.shared.addCoder(SDImageAWebPCoder.shared) + SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared) + SDImageCodersManager.shared.addCoder(SDImageSVGCoder.shared) + SDImageCodersManager.shared.addCoder(SDImagePDFCoder.shared) // Dynamic check to support vector format for both WebImage/AnimatedImage SDWebImageManager.shared.optionsProcessor = SDWebImageOptionsProcessor { url, options, context in var options = options diff --git a/README.md b/README.md index f2d24ed6..155aea30 100644 --- a/README.md +++ b/README.md @@ -618,9 +618,10 @@ struct ContentView : View { To run the example using SwiftUI, following the steps: -1. Run `pod install` on root directory to install the dependency. -2. Open `SDWebImageSwiftUI.xcworkspace`, wait for SwiftPM finishing downloading the test dependency. -3. Choose `SDWebImageSwiftUIDemo` scheme and run the demo application. +1. Open `SDWebImageSwiftUI.xcworkspace`, wait for SwiftPM finishing downloading the test dependency. +2. Choose `SDWebImageSwiftUIDemo` (or other platforms) scheme and run the demo application. + +Note: The `Podfile` here is because history we use CocoaPods to integrate libs into Demo, but now we use SPM. Since SwiftUI is aimed to support all Apple platforms, our demo does this as well, one codebase including: @@ -628,6 +629,7 @@ Since SwiftUI is aimed to support all Apple platforms, our demo does this as wel + macOS + tvOS + watchOS ++ visionOS Demo Tips: From 81810e31af3dc30486b035905585c352c58e61d3 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 22:04:34 +0800 Subject: [PATCH 4/7] Revert the ViewInspector for unit test, fixed version to 0.9.2 --- .../project.pbxproj | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj index 7083664c..5b905c2d 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -59,6 +59,9 @@ 32D5D1722A445BF00098BDFC /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B0D702345C01900D28269 /* DetailView.swift */; }; 32D5D1732A445BF00098BDFC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320CDC2F22FADB44007CF858 /* ContentView.swift */; }; 32D5D1762A445C8F0098BDFC /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */; }; + 32DAC2392AA3784800A085AE /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 32DAC2382AA3784800A085AE /* ViewInspector */; }; + 32DAC23B2AA3784D00A085AE /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 32DAC23A2AA3784D00A085AE /* ViewInspector */; }; + 32DAC23D2AA3785100A085AE /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 32DAC23C2AA3785100A085AE /* ViewInspector */; }; 32E5290C2348A0C700EA46FF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E5290B2348A0C700EA46FF /* AppDelegate.swift */; }; 32E529102348A0C900EA46FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32E5290F2348A0C900EA46FF /* Assets.xcassets */; }; 32E529132348A0C900EA46FF /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32E529122348A0C900EA46FF /* Preview Assets.xcassets */; }; @@ -218,6 +221,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32DAC2392AA3784800A085AE /* ViewInspector in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -225,6 +229,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32DAC23B2AA3784D00A085AE /* ViewInspector in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -232,6 +237,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 32DAC23D2AA3785100A085AE /* ViewInspector in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -522,6 +528,7 @@ ); name = SDWebImageSwiftUITests; packageProductDependencies = ( + 32DAC2382AA3784800A085AE /* ViewInspector */, ); productName = SDWebImageSwiftUITests; productReference = 322E0DE628D3318B0003A55F /* SDWebImageSwiftUITests.xctest */; @@ -543,6 +550,7 @@ ); name = "SDWebImageSwiftUITests macOS"; packageProductDependencies = ( + 32DAC23A2AA3784D00A085AE /* ViewInspector */, ); productName = "SDWebImageSwiftUITests macOS"; productReference = 322E0E0228D331F00003A55F /* SDWebImageSwiftUITests macOS.xctest */; @@ -564,6 +572,7 @@ ); name = "SDWebImageSwiftUITests tvOS"; packageProductDependencies = ( + 32DAC23C2AA3785100A085AE /* ViewInspector */, ); productName = "SDWebImageSwiftUITests tvOS"; productReference = 322E0E0F28D332050003A55F /* SDWebImageSwiftUITests tvOS.xctest */; @@ -771,6 +780,7 @@ 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */, 32ABE4DA2AA3755D00331406 /* XCRemoteSwiftPackageReference "SDWebImageSVGCoder" */, 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */, + 32B13EB12AA377F600BE9B5B /* XCRemoteSwiftPackageReference "ViewInspector" */, ); productRefGroup = 607FACD11AFB9204008FA782 /* Products */; projectDirPath = ""; @@ -1926,6 +1936,14 @@ minimumVersion = 1.0.0; }; }; + 32B13EB12AA377F600BE9B5B /* XCRemoteSwiftPackageReference "ViewInspector" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/nalexn/ViewInspector.git"; + requirement = { + kind = exactVersion; + version = 0.9.2; + }; + }; 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/nalexn/ViewInspector.git"; @@ -2062,6 +2080,21 @@ isa = XCSwiftPackageProductDependency; productName = SDWebImageSwiftUI; }; + 32DAC2382AA3784800A085AE /* ViewInspector */ = { + isa = XCSwiftPackageProductDependency; + package = 32B13EB12AA377F600BE9B5B /* XCRemoteSwiftPackageReference "ViewInspector" */; + productName = ViewInspector; + }; + 32DAC23A2AA3784D00A085AE /* ViewInspector */ = { + isa = XCSwiftPackageProductDependency; + package = 32B13EB12AA377F600BE9B5B /* XCRemoteSwiftPackageReference "ViewInspector" */; + productName = ViewInspector; + }; + 32DAC23C2AA3785100A085AE /* ViewInspector */ = { + isa = XCSwiftPackageProductDependency; + package = 32B13EB12AA377F600BE9B5B /* XCRemoteSwiftPackageReference "ViewInspector" */; + productName = ViewInspector; + }; 32DCFE9628D333F1001A17BF /* ViewInspector */ = { isa = XCSwiftPackageProductDependency; package = 32DCFE8D28D333B0001A17BF /* XCRemoteSwiftPackageReference "ViewInspector" */; From 0e88e1433965d5434f9d31bcf567017c936c9823 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 22:11:32 +0800 Subject: [PATCH 5/7] Update the readme for visionOS platform --- README.md | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 155aea30..e6c55c38 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,11 @@ The framework provide the different View structs, which API match the SwiftUI fr ## Apple VisionOS -SDWebImageSwiftUI can compiled for visionOS platform. However, due to the package manager support, we can not integrate using the exists function. +From v3.0.0 (beta), SDWebImageSwiftUI can be compiled for visionOS platform. However, due to the lacking package manager support (need tools update), we don't support CocoaPods/SPM yet. -So, in [visionOS branch](https://github.com/SDWebImage/SDWebImageSwiftUI/tree/feature/visionOS), our demo use the Xcode's built-in dependency to build. +You can only use the Xcode's built-in package manager dependency to build on visionOS. -You can build and run to see the example (still need improvement) +To run the visionOS example, you need to clone and add both `SDWebImage` and `SDWebImageSwiftUI`, open the `SDWebImageSwiftUI.xcworkspace` and drag those folders to become local package dependency, see: [Editing a package dependency as a local package](https://developer.apple.com/documentation/xcode/editing-a-package-dependency-as-a-local-package) ## Features @@ -58,32 +58,17 @@ All issue reports, feature requests, contributions, and GitHub stars are welcome ## Requirements -+ Xcode 12+ ++ Xcode 14+ + iOS 14+ + macOS 11+ + tvOS 14+ + watchOS 7+ -## SwiftUI 2.0 Compatibility +## for SwiftUI 1.0 (iOS 13) iOS 14(macOS 11) introduce the SwiftUI 2.0, which keep the most API compatible, but changes many internal behaviors, which breaks the SDWebImageSwiftUI's function. -From v2.0.0, we adopt SwiftUI 2.0 and iOS 14(macOS 11)'s behavior. You can use `WebImage` and `AnimatedImage` inside the new `LazyVStack`. - -```swift -var body: some View { - ScrollView { - LazyVStack { - ForEach(urls, id: \.self) { url in - AnimatedImage(url: url) - } - } - } -} -``` - -Note: However, many differences behavior between iOS 13/14 is hard to fixup. Due to maintain issue, from SDWebImageSwiftUI v3.0, iOS 13 is no longer supported. We always match SwiftUI 2.0's behavior. - +From v3.0.0 (Beta), SDWebImageSwiftUI drop iOS 13 support. To use on iOS 13, checkout the latest v2.x version (or using `2.x` branch) instead. ## Installation From 75fff6c46ee6dd0e839405b2091d31eba942ba63 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 22:22:04 +0800 Subject: [PATCH 6/7] Update github action to Xcode 14 && macOS 12 environment --- .github/workflows/CI.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index eb220a2c..8be7306b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -14,9 +14,9 @@ permissions: jobs: Pods: name: Cocoapods Lint - runs-on: macos-11 + runs-on: macos-12 env: - DEVELOPER_DIR: /Applications/Xcode_13.2.1.app + DEVELOPER_DIR: /Applications/Xcode_14.1.app steps: - name: Checkout uses: actions/checkout@v2 @@ -34,9 +34,9 @@ jobs: Demo: name: Run Demo - runs-on: macos-11 + runs-on: macos-12 env: - DEVELOPER_DIR: /Applications/Xcode_13.2.1.app + DEVELOPER_DIR: /Applications/Xcode_14.1.app WORKSPACE_NAME: SDWebImageSwiftUI.xcworkspace OSXSCHEME: SDWebImageSwiftUIDemo-macOS iOSSCHEME: SDWebImageSwiftUIDemo @@ -45,7 +45,7 @@ jobs: strategy: matrix: iosDestination: ["name=iPhone 13 Pro"] - tvOSDestination: ["name=Apple TV 4K"] + tvOSDestination: ["name=Apple TV"] watchOSDestination: ["platform=watchOS Simulator,name=Apple Watch Series 7 - 45mm"] macOSDestination: ["platform=macOS"] macCatalystDestination: ["platform=macOS,arch=x86_64,variant=Mac Catalyst"] @@ -92,9 +92,9 @@ jobs: Test: name: Unit Test - runs-on: macos-11 + runs-on: macos-12 env: - DEVELOPER_DIR: /Applications/Xcode_13.2.1.app + DEVELOPER_DIR: /Applications/Xcode_14.1.app WORKSPACE_NAME: SDWebImageSwiftUI.xcworkspace OSXSCHEME: SDWebImageSwiftUITests macOS iOSSCHEME: SDWebImageSwiftUITests @@ -154,9 +154,9 @@ jobs: Build: name: Build Library - runs-on: macos-11 + runs-on: macos-12 env: - DEVELOPER_DIR: /Applications/Xcode_13.2.1.app + DEVELOPER_DIR: /Applications/Xcode_14.1.app PROJECT_NAME: SDWebImageSwiftUI.xcodeproj OSXSCHEME: SDWebImageSwiftUI macOS iOSSCHEME: SDWebImageSwiftUI From 15990ac34f6cdaac0b9b5ecb27918437c1b2b230 Mon Sep 17 00:00:00 2001 From: DreamPiggy Date: Sat, 2 Sep 2023 22:43:10 +0800 Subject: [PATCH 7/7] Added the temp Carthage support to build visionOS framework Fix some new warning on Swift 5.9 --- README.md | 6 + SDWebImageSwiftUI.xcodeproj/project.pbxproj | 194 ++++++++++++++++-- SDWebImageSwiftUI/Classes/ImageManager.swift | 1 + SDWebImageSwiftUI/Classes/ImagePlayer.swift | 1 + .../Classes/Indicator/Indicator.swift | 2 +- 5 files changed, 181 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index e6c55c38..e749b607 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,12 @@ You can only use the Xcode's built-in package manager dependency to build on vis To run the visionOS example, you need to clone and add both `SDWebImage` and `SDWebImageSwiftUI`, open the `SDWebImageSwiftUI.xcworkspace` and drag those folders to become local package dependency, see: [Editing a package dependency as a local package](https://developer.apple.com/documentation/xcode/editing-a-package-dependency-as-a-local-package) +If you really want to build framework instead of using Xcode's package dependency, following the manual steps below: + +1. Clone SDWebImage, open `SDWebImage.xcodeproj` and build `SDWebImage` target for visionOS platform (Change `MACH_O_TYPE` to static library if you need) +2. Clone SDWebImageSwiftUI, create directory at `Carthage/Build/visionOS` and copy `SDWebImage.framework` into it +3. Open `SDWebImageSwiftUI.xcodeproj` and build `SDWebImageSwiftUI visionOS` target + ## Features Since SDWebImageSwiftUI is built on top of SDWebImage, it provide both the out-of-box features as well as advanced powerful features you may want in real world Apps. Check our [Wiki](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage) when you need: diff --git a/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/SDWebImageSwiftUI.xcodeproj/project.pbxproj index 1a2286cf..d3e5a45d 100644 --- a/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -7,22 +7,25 @@ objects = { /* Begin PBXBuildFile section */ + 3243AFE62AA37EFF0049A43B /* SwiftUICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B79C9428DB40430088C432 /* SwiftUICompatibility.swift */; }; + 3243AFE72AA37EFF0049A43B /* WebImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C43DDE22FD54C600BE87F5 /* WebImage.swift */; }; + 3243AFE82AA37EFF0049A43B /* ImagePlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32CBA77E25E4D7D800C6A8DC /* ImagePlayer.swift */; }; + 3243AFE92AA37EFF0049A43B /* ImageViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */; }; + 3243AFEA2AA37EFF0049A43B /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32D26A012446B546005905DA /* Image.swift */; }; + 3243AFEB2AA37EFF0049A43B /* AnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C43DDF22FD54C600BE87F5 /* AnimatedImage.swift */; }; + 3243AFEC2AA37EFF0049A43B /* ImageManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C43DDC22FD54C600BE87F5 /* ImageManager.swift */; }; + 3243AFED2AA37EFF0049A43B /* SDWebImageSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C43E3122FD5DE100BE87F5 /* SDWebImageSwiftUI.swift */; }; + 3243AFEE2AA37F010049A43B /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B84812363350C0011BDFB /* Indicator.swift */; }; + 3243AFEF2AA37F030049A43B /* Transition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B933E423659A1900BB7CAD /* Transition.swift */; }; 326B84822363350C0011BDFB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B84812363350C0011BDFB /* Indicator.swift */; }; 326B84832363350C0011BDFB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B84812363350C0011BDFB /* Indicator.swift */; }; 326B84842363350C0011BDFB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B84812363350C0011BDFB /* Indicator.swift */; }; 326B84852363350C0011BDFB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B84812363350C0011BDFB /* Indicator.swift */; }; - 326B8487236335110011BDFB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B8486236335110011BDFB /* ActivityIndicator.swift */; }; - 326B8488236335110011BDFB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B8486236335110011BDFB /* ActivityIndicator.swift */; }; - 326B8489236335110011BDFB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B8486236335110011BDFB /* ActivityIndicator.swift */; }; - 326B848A236335110011BDFB /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B8486236335110011BDFB /* ActivityIndicator.swift */; }; - 326B848C236335400011BDFB /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B848B236335400011BDFB /* ProgressIndicator.swift */; }; - 326B848D236335400011BDFB /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B848B236335400011BDFB /* ProgressIndicator.swift */; }; - 326B848E236335400011BDFB /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B848B236335400011BDFB /* ProgressIndicator.swift */; }; - 326B848F236335400011BDFB /* ProgressIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B848B236335400011BDFB /* ProgressIndicator.swift */; }; 326E480A23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */; }; 326E480B23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */; }; 326E480C23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */; }; 326E480D23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */; }; + 329885EE2AA37FCB0071F2BA /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 329885ED2AA37FCB0071F2BA /* SDWebImage.framework */; }; 32B79C9528DB40430088C432 /* SwiftUICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B79C9428DB40430088C432 /* SwiftUICompatibility.swift */; }; 32B79C9628DB40430088C432 /* SwiftUICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B79C9428DB40430088C432 /* SwiftUICompatibility.swift */; }; 32B79C9728DB40430088C432 /* SwiftUICompatibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B79C9428DB40430088C432 /* SwiftUICompatibility.swift */; }; @@ -71,13 +74,12 @@ 3211F84F23DE98E300FC757F /* WebImageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebImageTests.swift; sourceTree = ""; }; 3211F85423DE9D2700FC757F /* Images.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Images.bundle; sourceTree = ""; }; 322E0F4723E57F09006836DC /* TestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUtils.swift; sourceTree = ""; }; + 3243AFDF2AA37EE90049A43B /* SDWebImageSwiftUI_visionOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSwiftUI_visionOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 326B84812363350C0011BDFB /* Indicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Indicator.swift; sourceTree = ""; }; - 326B8486236335110011BDFB /* ActivityIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityIndicator.swift; sourceTree = ""; }; - 326B848B236335400011BDFB /* ProgressIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressIndicator.swift; sourceTree = ""; }; 326E480923431C0F00C633E9 /* ImageViewWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageViewWrapper.swift; sourceTree = ""; }; + 329885ED2AA37FCB0071F2BA /* SDWebImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDWebImage.framework; path = Carthage/Build/visionOS/SDWebImage.framework; sourceTree = ""; }; 32B79C9428DB40430088C432 /* SwiftUICompatibility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftUICompatibility.swift; sourceTree = ""; }; 32B933E423659A1900BB7CAD /* Transition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Transition.swift; sourceTree = ""; }; - 32BD9C4623E03B08008D5F6A /* IndicatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndicatorTests.swift; sourceTree = ""; }; 32C43DCC22FD540D00BE87F5 /* SDWebImageSwiftUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImageSwiftUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 32C43DDC22FD54C600BE87F5 /* ImageManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageManager.swift; sourceTree = ""; }; 32C43DDE22FD54C600BE87F5 /* WebImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebImage.swift; sourceTree = ""; }; @@ -98,6 +100,14 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 3243AFDC2AA37EE90049A43B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 329885EE2AA37FCB0071F2BA /* SDWebImage.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DC922FD540D00BE87F5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -140,7 +150,6 @@ 3211F84823DE984D00FC757F /* Info.plist */, 3211F84623DE984D00FC757F /* AnimatedImageTests.swift */, 3211F84F23DE98E300FC757F /* WebImageTests.swift */, - 32BD9C4623E03B08008D5F6A /* IndicatorTests.swift */, 32ED4825242A13030053338E /* ImageManagerTests.swift */, 322E0F4723E57F09006836DC /* TestUtils.swift */, ); @@ -151,8 +160,6 @@ isa = PBXGroup; children = ( 326B84812363350C0011BDFB /* Indicator.swift */, - 326B8486236335110011BDFB /* ActivityIndicator.swift */, - 326B848B236335400011BDFB /* ProgressIndicator.swift */, ); path = Indicator; sourceTree = ""; @@ -184,6 +191,7 @@ 32C43DF422FD57FD00BE87F5 /* SDWebImageSwiftUI.framework */, 32C43E0122FD581400BE87F5 /* SDWebImageSwiftUI.framework */, 32C43E0E22FD581C00BE87F5 /* SDWebImageSwiftUI.framework */, + 3243AFDF2AA37EE90049A43B /* SDWebImageSwiftUI_visionOS.framework */, ); name = Products; sourceTree = ""; @@ -216,6 +224,7 @@ 32C43DE822FD577300BE87F5 /* Frameworks */ = { isa = PBXGroup; children = ( + 329885ED2AA37FCB0071F2BA /* SDWebImage.framework */, 32C43E2D22FD586E00BE87F5 /* SDWebImage.framework */, 32C43E2922FD586200BE87F5 /* SDWebImage.framework */, 32C43E2522FD585300BE87F5 /* SDWebImage.framework */, @@ -227,6 +236,13 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 3243AFDA2AA37EE90049A43B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DC722FD540D00BE87F5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -262,6 +278,24 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 3243AFDE2AA37EE90049A43B /* SDWebImageSwiftUI visionOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3243AFE32AA37EEA0049A43B /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUI visionOS" */; + buildPhases = ( + 3243AFDA2AA37EE90049A43B /* Headers */, + 3243AFDB2AA37EE90049A43B /* Sources */, + 3243AFDC2AA37EE90049A43B /* Frameworks */, + 3243AFDD2AA37EE90049A43B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SDWebImageSwiftUI visionOS"; + productName = "SDWebImageSwiftUI visionOS"; + productReference = 3243AFDF2AA37EE90049A43B /* SDWebImageSwiftUI_visionOS.framework */; + productType = "com.apple.product-type.framework"; + }; 32C43DCB22FD540D00BE87F5 /* SDWebImageSwiftUI */ = { isa = PBXNativeTarget; buildConfigurationList = 32C43DD422FD540D00BE87F5 /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUI" */; @@ -344,6 +378,9 @@ LastUpgradeCheck = 1100; ORGANIZATIONNAME = SDWebImage; TargetAttributes = { + 3243AFDE2AA37EE90049A43B = { + CreatedOnToolsVersion = 15.0; + }; 32C43DCB22FD540D00BE87F5 = { CreatedOnToolsVersion = 11.0; LastSwiftMigration = 1100; @@ -379,11 +416,19 @@ 32C43DF322FD57FD00BE87F5 /* SDWebImageSwiftUI macOS */, 32C43E0022FD581400BE87F5 /* SDWebImageSwiftUI tvOS */, 32C43E0D22FD581C00BE87F5 /* SDWebImageSwiftUI watchOS */, + 3243AFDE2AA37EE90049A43B /* SDWebImageSwiftUI visionOS */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 3243AFDD2AA37EE90049A43B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DCA22FD540D00BE87F5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -415,6 +460,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 3243AFDB2AA37EE90049A43B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3243AFEF2AA37F030049A43B /* Transition.swift in Sources */, + 3243AFE92AA37EFF0049A43B /* ImageViewWrapper.swift in Sources */, + 3243AFE72AA37EFF0049A43B /* WebImage.swift in Sources */, + 3243AFEC2AA37EFF0049A43B /* ImageManager.swift in Sources */, + 3243AFEB2AA37EFF0049A43B /* AnimatedImage.swift in Sources */, + 3243AFE82AA37EFF0049A43B /* ImagePlayer.swift in Sources */, + 3243AFED2AA37EFF0049A43B /* SDWebImageSwiftUI.swift in Sources */, + 3243AFE62AA37EFF0049A43B /* SwiftUICompatibility.swift in Sources */, + 3243AFEE2AA37F010049A43B /* Indicator.swift in Sources */, + 3243AFEA2AA37EFF0049A43B /* Image.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DC822FD540D00BE87F5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -422,12 +484,10 @@ 32B933E523659A1900BB7CAD /* Transition.swift in Sources */, 32CBA78025E4D7D800C6A8DC /* ImagePlayer.swift in Sources */, 32C43E1722FD583700BE87F5 /* WebImage.swift in Sources */, - 326B848C236335400011BDFB /* ProgressIndicator.swift in Sources */, 326B84822363350C0011BDFB /* Indicator.swift in Sources */, 32C43E3222FD5DE100BE87F5 /* SDWebImageSwiftUI.swift in Sources */, 326E480A23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */, 32B79C9528DB40430088C432 /* SwiftUICompatibility.swift in Sources */, - 326B8487236335110011BDFB /* ActivityIndicator.swift in Sources */, 32C43E1622FD583700BE87F5 /* ImageManager.swift in Sources */, 32C43E1822FD583700BE87F5 /* AnimatedImage.swift in Sources */, 32D26A022446B546005905DA /* Image.swift in Sources */, @@ -441,12 +501,10 @@ 32B933E623659A1900BB7CAD /* Transition.swift in Sources */, 32CBA78125E4D7D800C6A8DC /* ImagePlayer.swift in Sources */, 32C43E1A22FD583700BE87F5 /* WebImage.swift in Sources */, - 326B848D236335400011BDFB /* ProgressIndicator.swift in Sources */, 326B84832363350C0011BDFB /* Indicator.swift in Sources */, 32C43E3322FD5DF400BE87F5 /* SDWebImageSwiftUI.swift in Sources */, 326E480B23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */, 32B79C9628DB40430088C432 /* SwiftUICompatibility.swift in Sources */, - 326B8488236335110011BDFB /* ActivityIndicator.swift in Sources */, 32C43E1922FD583700BE87F5 /* ImageManager.swift in Sources */, 32C43E1B22FD583700BE87F5 /* AnimatedImage.swift in Sources */, 32D26A032446B546005905DA /* Image.swift in Sources */, @@ -460,12 +518,10 @@ 32B933E723659A1900BB7CAD /* Transition.swift in Sources */, 32CBA78225E4D7D800C6A8DC /* ImagePlayer.swift in Sources */, 32C43E1D22FD583800BE87F5 /* WebImage.swift in Sources */, - 326B848E236335400011BDFB /* ProgressIndicator.swift in Sources */, 326B84842363350C0011BDFB /* Indicator.swift in Sources */, 32C43E3422FD5DF400BE87F5 /* SDWebImageSwiftUI.swift in Sources */, 326E480C23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */, 32B79C9728DB40430088C432 /* SwiftUICompatibility.swift in Sources */, - 326B8489236335110011BDFB /* ActivityIndicator.swift in Sources */, 32C43E1C22FD583800BE87F5 /* ImageManager.swift in Sources */, 32C43E1E22FD583800BE87F5 /* AnimatedImage.swift in Sources */, 32D26A042446B546005905DA /* Image.swift in Sources */, @@ -479,12 +535,10 @@ 32B933E823659A1900BB7CAD /* Transition.swift in Sources */, 32CBA78325E4D7D800C6A8DC /* ImagePlayer.swift in Sources */, 32C43E2022FD583800BE87F5 /* WebImage.swift in Sources */, - 326B848F236335400011BDFB /* ProgressIndicator.swift in Sources */, 326B84852363350C0011BDFB /* Indicator.swift in Sources */, 32C43E3522FD5DF400BE87F5 /* SDWebImageSwiftUI.swift in Sources */, 326E480D23431C0F00C633E9 /* ImageViewWrapper.swift in Sources */, 32B79C9828DB40430088C432 /* SwiftUICompatibility.swift in Sources */, - 326B848A236335110011BDFB /* ActivityIndicator.swift in Sources */, 32C43E1F22FD583800BE87F5 /* ImageManager.swift in Sources */, 32C43E2122FD583800BE87F5 /* AnimatedImage.swift in Sources */, 32D26A052446B546005905DA /* Image.swift in Sources */, @@ -494,6 +548,91 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ + 3243AFE42AA37EEA0049A43B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/visionOS", + ); + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 SDWebImage. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "com.dreampiggy.SDWebImageSwiftUI-visionOS"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = xros; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + }; + name = Debug; + }; + 3243AFE52AA37EEA0049A43B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/visionOS", + ); + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 SDWebImage. All rights reserved."; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = "com.dreampiggy.SDWebImageSwiftUI-visionOS"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = xros; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "xros xrsimulator"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,7"; + }; + name = Release; + }; 32C43DD222FD540D00BE87F5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -564,6 +703,7 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 7.0; + XROS_DEPLOYMENT_TARGET = 1.0; }; name = Debug; }; @@ -631,6 +771,7 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; WATCHOS_DEPLOYMENT_TARGET = 7.0; + XROS_DEPLOYMENT_TARGET = 1.0; }; name = Release; }; @@ -875,6 +1016,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 3243AFE32AA37EEA0049A43B /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUI visionOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3243AFE42AA37EEA0049A43B /* Debug */, + 3243AFE52AA37EEA0049A43B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 32C43DC622FD540D00BE87F5 /* Build configuration list for PBXProject "SDWebImageSwiftUI" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/SDWebImageSwiftUI/Classes/ImageManager.swift b/SDWebImageSwiftUI/Classes/ImageManager.swift index 2c134ce7..008b0a39 100644 --- a/SDWebImageSwiftUI/Classes/ImageManager.swift +++ b/SDWebImageSwiftUI/Classes/ImageManager.swift @@ -7,6 +7,7 @@ */ import SwiftUI +import Combine import SDWebImage /// A Image observable object for handle image load process. This drive the Source of Truth for image loading status. diff --git a/SDWebImageSwiftUI/Classes/ImagePlayer.swift b/SDWebImageSwiftUI/Classes/ImagePlayer.swift index c00f8e92..8e5820c8 100644 --- a/SDWebImageSwiftUI/Classes/ImagePlayer.swift +++ b/SDWebImageSwiftUI/Classes/ImagePlayer.swift @@ -7,6 +7,7 @@ */ import SwiftUI +import Combine import SDWebImage /// A Image observable object for handle aniamted image playback. This is used to avoid `@State` update may capture the View struct type and cause memory leak. diff --git a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift index 76113ced..26f0162a 100644 --- a/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +++ b/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift @@ -6,8 +6,8 @@ * file that was distributed with this source code. */ -import Foundation import SwiftUI +import Combine /// A type to build the indicator @available(iOS 14.0, OSX 11.0, tvOS 14.0, watchOS 7.0, *)