diff --git a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj index dc7fa6e..3338b29 100644 --- a/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/Example/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 07DFC5C28671829D0C3EA583 /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33E5ED2426DFF5E06C9A2FAB /* Pods_SDWebImageSwiftUIDemo_macOS.framework */; }; + 1794840F9DF6D50ADA448C9B /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.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 */; }; @@ -45,9 +45,9 @@ 32E7F122236CAAB8001688BC /* ActivityBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E7F120236CAAB8001688BC /* ActivityBar.swift */; }; 32E7F123236CAAB8001688BC /* ActivityBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E7F120236CAAB8001688BC /* ActivityBar.swift */; }; 32E7F124236CAAB8001688BC /* ActivityBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32E7F120236CAAB8001688BC /* ActivityBar.swift */; }; - 6AE7BEBA0EA1DD0FD6F99D99 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B1D3C77C4221915C839DC78 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */; }; - CECA1658ECBAF54E3FF3EF58 /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A371F81C3B5BD6972F7A0E2 /* Pods_SDWebImageSwiftUIDemo.framework */; }; - E8596B8000E7DC96D492333B /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 188B93ED6CBDC186E30A49C8 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */; }; + 68543C9252A5BD46E9573195 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79C3538209F8065DCCFBE205 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */; }; + 8E29022B4DCBF0EFF9CF82F9 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E25DB0256669F3B7EE7C566D /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */; }; + E61581A5A1063B0E6795157D /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0FCDD95C695D2F914DC9B3B /* Pods_SDWebImageSwiftUIDemo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -93,13 +93,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 188B93ED6CBDC186E30A49C8 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C113F92A346F2C2B4D00E49 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig"; sourceTree = ""; }; - 22A15897C644900446CE0307 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig"; sourceTree = ""; }; 28546D27CDA9666E64C183FD /* SDWebImageSwiftUI.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = SDWebImageSwiftUI.podspec; path = ../SDWebImageSwiftUI.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 28C85182565C40D6F59EBA0B /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig"; sourceTree = ""; }; - 2B1D3C77C4221915C839DC78 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B61BB55EA822C103AF2D02E /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo.debug.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.debug.xcconfig"; sourceTree = ""; }; 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 = ""; }; @@ -135,19 +129,20 @@ 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 = ""; }; 32E7F120236CAAB8001688BC /* ActivityBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityBar.swift; sourceTree = ""; }; - 33E5ED2426DFF5E06C9A2FAB /* Pods_SDWebImageSwiftUIDemo_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3E9F8B5F06960FFFBD1A5F99 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; - 48BE9486C7BDF4F74C8BA94D /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-tvOS/Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig"; sourceTree = ""; }; - 4A371F81C3B5BD6972F7A0E2 /* Pods_SDWebImageSwiftUIDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUIDemo_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 54859B427E0A79E823713963 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; - 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; - 634231DC44BF70699947EBE1 /* Pods-SDWebImageSwiftUI_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUI_Tests.debug.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUI_Tests/Pods-SDWebImageSwiftUI_Tests.debug.xcconfig"; sourceTree = ""; }; - 6D7C7D6005DDAE3BAD556D21 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.release.xcconfig"; sourceTree = ""; }; - B9244835FE5DB725797BEBAD /* Pods_SDWebImageSwiftUI_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SDWebImageSwiftUI_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D045ACE2208F8EB3BA7D6B0E /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-macOS/Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig"; sourceTree = ""; }; - ECA1A31DDD23635C747E66CA /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig"; sourceTree = ""; }; - F26D347B0E1A9E7D08609032 /* Pods-SDWebImageSwiftUI_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUI_Tests.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUI_Tests/Pods-SDWebImageSwiftUI_Tests.release.xcconfig"; sourceTree = ""; }; + 5864FFEDE62A0630EDF26A56 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo.release.xcconfig"; path = "Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.release.xcconfig"; sourceTree = ""; }; + 746AF60263F54FD7E16AA7D5 /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig"; path = "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 = "Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig"; sourceTree = ""; }; + 89B11BBDBAA86F760DF1EE2D /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig"; path = "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 = "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 = "Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo.debug.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 = "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 = "Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -155,7 +150,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CECA1658ECBAF54E3FF3EF58 /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */, + E61581A5A1063B0E6795157D /* Pods_SDWebImageSwiftUIDemo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -163,7 +158,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 07DFC5C28671829D0C3EA583 /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */, + 1794840F9DF6D50ADA448C9B /* Pods_SDWebImageSwiftUIDemo_macOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -171,7 +166,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E8596B8000E7DC96D492333B /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */, + 68543C9252A5BD46E9573195 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -179,7 +174,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6AE7BEBA0EA1DD0FD6F99D99 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */, + 8E29022B4DCBF0EFF9CF82F9 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -203,16 +198,14 @@ 1DEE67F18F512F2F2F78E283 /* Pods */ = { isa = PBXGroup; children = ( - 634231DC44BF70699947EBE1 /* Pods-SDWebImageSwiftUI_Tests.debug.xcconfig */, - F26D347B0E1A9E7D08609032 /* Pods-SDWebImageSwiftUI_Tests.release.xcconfig */, - 2B61BB55EA822C103AF2D02E /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */, - 6D7C7D6005DDAE3BAD556D21 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */, - D045ACE2208F8EB3BA7D6B0E /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */, - 28C85182565C40D6F59EBA0B /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */, - 48BE9486C7BDF4F74C8BA94D /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */, - 1C113F92A346F2C2B4D00E49 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */, - 22A15897C644900446CE0307 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */, - ECA1A31DDD23635C747E66CA /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */, + 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 */, ); path = Pods; sourceTree = ""; @@ -322,10 +315,9 @@ 32E529212348A0D300EA46FF /* SDWebImageSwiftUIDemo-tvOS */, 32E5293B2348A0DD00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit App */, 32E5294A2348A0DE00EA46FF /* SDWebImageSwiftUIDemo-watchOS WatchKit Extension */, - 607FACE81AFB9204008FA782 /* Tests */, 607FACD11AFB9204008FA782 /* Products */, 1DEE67F18F512F2F2F78E283 /* Pods */, - E002CC61A0DED479B525E4AC /* Frameworks */, + F1EB66AFCE0A1C6D551D02DD /* Frameworks */, ); sourceTree = ""; }; @@ -342,23 +334,6 @@ name = Products; sourceTree = ""; }; - 607FACE81AFB9204008FA782 /* Tests */ = { - isa = PBXGroup; - children = ( - 607FACEB1AFB9204008FA782 /* Tests.swift */, - 607FACE91AFB9204008FA782 /* Supporting Files */, - ); - path = Tests; - sourceTree = ""; - }; - 607FACE91AFB9204008FA782 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 607FACEA1AFB9204008FA782 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { isa = PBXGroup; children = ( @@ -369,14 +344,13 @@ name = "Podspec Metadata"; sourceTree = ""; }; - E002CC61A0DED479B525E4AC /* Frameworks */ = { + F1EB66AFCE0A1C6D551D02DD /* Frameworks */ = { isa = PBXGroup; children = ( - B9244835FE5DB725797BEBAD /* Pods_SDWebImageSwiftUI_Tests.framework */, - 4A371F81C3B5BD6972F7A0E2 /* Pods_SDWebImageSwiftUIDemo.framework */, - 33E5ED2426DFF5E06C9A2FAB /* Pods_SDWebImageSwiftUIDemo_macOS.framework */, - 188B93ED6CBDC186E30A49C8 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */, - 2B1D3C77C4221915C839DC78 /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */, + F0FCDD95C695D2F914DC9B3B /* Pods_SDWebImageSwiftUIDemo.framework */, + 473D7886C23B6FC5AFE35842 /* Pods_SDWebImageSwiftUIDemo_macOS.framework */, + 79C3538209F8065DCCFBE205 /* Pods_SDWebImageSwiftUIDemo_tvOS.framework */, + E25DB0256669F3B7EE7C566D /* Pods_SDWebImageSwiftUIDemo_watchOS_WatchKit_Extension.framework */, ); name = Frameworks; sourceTree = ""; @@ -388,11 +362,11 @@ isa = PBXNativeTarget; buildConfigurationList = 320CDC3C22FADB45007CF858 /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo" */; buildPhases = ( - D33D7F64977949E059E5FE83 /* [CP] Check Pods Manifest.lock */, + 58D483FABAB44B4EC2E538D0 /* [CP] Check Pods Manifest.lock */, 320CDC2522FADB44007CF858 /* Sources */, 320CDC2622FADB44007CF858 /* Frameworks */, 320CDC2722FADB44007CF858 /* Resources */, - 5715C064F9E143CD6CD77706 /* [CP] Embed Pods Frameworks */, + 0B5ABDA8213E875CE5FCC890 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -407,11 +381,11 @@ isa = PBXNativeTarget; buildConfigurationList = 32E5291B2348A0C900EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-macOS" */; buildPhases = ( - A1B83A68ED44B21DFE618214 /* [CP] Check Pods Manifest.lock */, + 78426DFA5212E5496802AC58 /* [CP] Check Pods Manifest.lock */, 32E529052348A0C700EA46FF /* Sources */, 32E529062348A0C700EA46FF /* Frameworks */, 32E529072348A0C700EA46FF /* Resources */, - 40EC67FD97366203CC0BA9F0 /* [CP] Embed Pods Frameworks */, + 4577A2F4A5DEBBDBB766F1CF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -426,11 +400,11 @@ isa = PBXNativeTarget; buildConfigurationList = 32E5292F2348A0D400EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-tvOS" */; buildPhases = ( - DC8EC1EA494B9A276387538E /* [CP] Check Pods Manifest.lock */, + FB46C9F77AA45C7DA1D71F7B /* [CP] Check Pods Manifest.lock */, 32E5291C2348A0D300EA46FF /* Sources */, 32E5291D2348A0D300EA46FF /* Frameworks */, 32E5291E2348A0D300EA46FF /* Resources */, - 13686D32C33D0CB127EA3954 /* [CP] Embed Pods Frameworks */, + A6F5B1BDEE1460B7F20E55C6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -481,11 +455,11 @@ isa = PBXNativeTarget; buildConfigurationList = 32E529572348A0DF00EA46FF /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUIDemo-watchOS WatchKit Extension" */; buildPhases = ( - BB4E0CD7DA3CF32B4323AEE3 /* [CP] Check Pods Manifest.lock */, + B9B631F1DB90E98FCAE3E196 /* [CP] Check Pods Manifest.lock */, 32E529422348A0DE00EA46FF /* Sources */, 32E529432348A0DE00EA46FF /* Frameworks */, 32E529442348A0DE00EA46FF /* Resources */, - A7B7DAE228DDA0BD003E65B0 /* [CP] Embed Pods Frameworks */, + 756F0513F095D448FCCD78A2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -614,63 +588,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13686D32C33D0CB127EA3954 /* [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; - }; - 40EC67FD97366203CC0BA9F0 /* [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; - }; - 5715C064F9E143CD6CD77706 /* [CP] Embed Pods Frameworks */ = { + 0B5ABDA8213E875CE5FCC890 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -698,7 +616,35 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo/Pods-SDWebImageSwiftUIDemo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - A1B83A68ED44B21DFE618214 /* [CP] Check Pods Manifest.lock */ = { + 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 = ( @@ -713,14 +659,14 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SDWebImageSwiftUIDemo-macOS-checkManifestLockResult.txt", + "$(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; }; - A7B7DAE228DDA0BD003E65B0 /* [CP] Embed Pods Frameworks */ = { + 756F0513F095D448FCCD78A2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -748,7 +694,57 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension/Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - BB4E0CD7DA3CF32B4323AEE3 /* [CP] Check Pods Manifest.lock */ = { + 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; + }; + 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 = ( @@ -770,29 +766,7 @@ 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; }; - D33D7F64977949E059E5FE83 /* [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; - }; - DC8EC1EA494B9A276387538E /* [CP] Check Pods Manifest.lock */ = { + FB46C9F77AA45C7DA1D71F7B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -920,7 +894,7 @@ /* Begin XCBuildConfiguration section */ 320CDC3A22FADB45007CF858 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B61BB55EA822C103AF2D02E /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */; + baseConfigurationReference = A78BA7FB5AFF53CBDD4C4CBD /* Pods-SDWebImageSwiftUIDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -955,7 +929,7 @@ }; 320CDC3B22FADB45007CF858 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D7C7D6005DDAE3BAD556D21 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */; + baseConfigurationReference = 5864FFEDE62A0630EDF26A56 /* Pods-SDWebImageSwiftUIDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -987,7 +961,7 @@ }; 32E529192348A0C900EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D045ACE2208F8EB3BA7D6B0E /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */; + baseConfigurationReference = 89B11BBDBAA86F760DF1EE2D /* Pods-SDWebImageSwiftUIDemo-macOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1020,7 +994,7 @@ }; 32E5291A2348A0C900EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28C85182565C40D6F59EBA0B /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */; + baseConfigurationReference = F3AACDC116F5598BC39A8573 /* Pods-SDWebImageSwiftUIDemo-macOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; @@ -1050,7 +1024,7 @@ }; 32E529302348A0D400EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 48BE9486C7BDF4F74C8BA94D /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */; + baseConfigurationReference = 746AF60263F54FD7E16AA7D5 /* Pods-SDWebImageSwiftUIDemo-tvOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_ANALYZER_NONNULL = YES; @@ -1082,7 +1056,7 @@ }; 32E529312348A0D400EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C113F92A346F2C2B4D00E49 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */; + baseConfigurationReference = 95C9E0D9CE4113E5A82480B9 /* Pods-SDWebImageSwiftUIDemo-tvOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CLANG_ANALYZER_NONNULL = YES; @@ -1111,7 +1085,7 @@ }; 32E529582348A0DF00EA46FF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22A15897C644900446CE0307 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */; + baseConfigurationReference = FEED4964309E241D2FD8A544 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; CLANG_ANALYZER_NONNULL = YES; @@ -1144,7 +1118,7 @@ }; 32E529592348A0DF00EA46FF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ECA1A31DDD23635C747E66CA /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */; + baseConfigurationReference = 7B0D9182CAD02B73E6F208F3 /* Pods-SDWebImageSwiftUIDemo-watchOS WatchKit Extension.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; CLANG_ANALYZER_NONNULL = YES; diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift deleted file mode 100644 index beb472a..0000000 --- a/Example/Tests/Tests.swift +++ /dev/null @@ -1,28 +0,0 @@ -import XCTest -import SDWebImageSwiftUI - -class Tests: XCTestCase { - - override func setUp() { - super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // This is an example of a functional test case. - XCTAssert(true, "Pass") - } - - func testPerformanceExample() { - // This is an example of a performance test case. - self.measure() { - // Put the code you want to measure the time of here. - } - } - -} diff --git a/SDWebImageSwiftUI.xcodeproj/project.pbxproj b/SDWebImageSwiftUI.xcodeproj/project.pbxproj index 6aefb55..15cb5d8 100644 --- a/SDWebImageSwiftUI.xcodeproj/project.pbxproj +++ b/SDWebImageSwiftUI.xcodeproj/project.pbxproj @@ -3,10 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + 3211F84723DE984D00FC757F /* AnimatedImageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3211F84623DE984D00FC757F /* AnimatedImageTests.swift */; }; + 3211F84923DE984D00FC757F /* SDWebImageSwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C43DCC22FD540D00BE87F5 /* SDWebImageSwiftUI.framework */; }; + 3211F85023DE98E300FC757F /* WebImageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3211F84F23DE98E300FC757F /* WebImageTests.swift */; }; + 3211F85323DE996700FC757F /* ViewInspector in Frameworks */ = {isa = PBXBuildFile; productRef = 3211F85223DE996700FC757F /* ViewInspector */; }; + 321C1D3223DE9FD1009CF62A /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = 321C1D3123DE9FD1009CF62A /* Introspect */; }; + 321C1D3323DEA28E009CF62A /* SDWebImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C43DE922FD577300BE87F5 /* SDWebImage.framework */; }; + 321C1D3623DEA9E8009CF62A /* Images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3211F85423DE9D2700FC757F /* Images.bundle */; }; 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 */; }; @@ -57,6 +64,16 @@ 32C43E3522FD5DF400BE87F5 /* SDWebImageSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C43E3122FD5DE100BE87F5 /* SDWebImageSwiftUI.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 3211F84A23DE984D00FC757F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 32C43DC322FD540D00BE87F5 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 32C43DCB22FD540D00BE87F5; + remoteInfo = SDWebImageSwiftUI; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 32C43DEC22FD577300BE87F5 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -105,6 +122,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 3211F84423DE984D00FC757F /* SDWebImageSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SDWebImageSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3211F84623DE984D00FC757F /* AnimatedImageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedImageTests.swift; sourceTree = ""; }; + 3211F84823DE984D00FC757F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 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 = ""; }; 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 = ""; }; @@ -127,6 +149,17 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 3211F84123DE984D00FC757F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 321C1D3323DEA28E009CF62A /* SDWebImage.framework in Frameworks */, + 3211F84923DE984D00FC757F /* SDWebImageSwiftUI.framework in Frameworks */, + 321C1D3223DE9FD1009CF62A /* Introspect in Frameworks */, + 3211F85323DE996700FC757F /* ViewInspector in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DC922FD540D00BE87F5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -162,6 +195,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3211F84523DE984D00FC757F /* Tests */ = { + isa = PBXGroup; + children = ( + 3211F85423DE9D2700FC757F /* Images.bundle */, + 3211F84823DE984D00FC757F /* Info.plist */, + 3211F84623DE984D00FC757F /* AnimatedImageTests.swift */, + 3211F84F23DE98E300FC757F /* WebImageTests.swift */, + ); + path = Tests; + sourceTree = ""; + }; 326099472362E09E006EBB22 /* Indicator */ = { isa = PBXGroup; children = ( @@ -186,6 +230,7 @@ 32C43DCE22FD540D00BE87F5 /* SDWebImageSwiftUI */, 32C43DE522FD54CD00BE87F5 /* Info.plist */, 32C43DE422FD54CD00BE87F5 /* SDWebImageSwiftUI.h */, + 3211F84523DE984D00FC757F /* Tests */, 32C43DCD22FD540D00BE87F5 /* Products */, 32C43DE822FD577300BE87F5 /* Frameworks */, ); @@ -198,6 +243,7 @@ 32C43DF422FD57FD00BE87F5 /* SDWebImageSwiftUI.framework */, 32C43E0122FD581400BE87F5 /* SDWebImageSwiftUI.framework */, 32C43E0E22FD581C00BE87F5 /* SDWebImageSwiftUI.framework */, + 3211F84423DE984D00FC757F /* SDWebImageSwiftUITests.xctest */, ); name = Products; sourceTree = ""; @@ -273,6 +319,29 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 3211F84323DE984D00FC757F /* SDWebImageSwiftUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3211F84E23DE984D00FC757F /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUITests" */; + buildPhases = ( + 3211F84023DE984D00FC757F /* Sources */, + 3211F84123DE984D00FC757F /* Frameworks */, + 3211F84223DE984D00FC757F /* Resources */, + 321C1D3523DEA309009CF62A /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 3211F84B23DE984D00FC757F /* PBXTargetDependency */, + ); + name = SDWebImageSwiftUITests; + packageProductDependencies = ( + 3211F85223DE996700FC757F /* ViewInspector */, + 321C1D3123DE9FD1009CF62A /* Introspect */, + ); + productName = SDWebImageSwiftUITests; + productReference = 3211F84423DE984D00FC757F /* SDWebImageSwiftUITests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 32C43DCB22FD540D00BE87F5 /* SDWebImageSwiftUI */ = { isa = PBXNativeTarget; buildConfigurationList = 32C43DD422FD540D00BE87F5 /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUI" */; @@ -355,9 +424,13 @@ 32C43DC322FD540D00BE87F5 /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1130; LastUpgradeCheck = 1100; ORGANIZATIONNAME = SDWebImage; TargetAttributes = { + 3211F84323DE984D00FC757F = { + CreatedOnToolsVersion = 11.3.1; + }; 32C43DCB22FD540D00BE87F5 = { CreatedOnToolsVersion = 11.0; LastSwiftMigration = 1100; @@ -385,6 +458,10 @@ Base, ); mainGroup = 32C43DC222FD540D00BE87F5; + packageReferences = ( + 3211F85123DE996700FC757F /* XCRemoteSwiftPackageReference "ViewInspector" */, + 321C1D3023DE9FD1009CF62A /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */, + ); productRefGroup = 32C43DCD22FD540D00BE87F5 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -393,11 +470,20 @@ 32C43DF322FD57FD00BE87F5 /* SDWebImageSwiftUI macOS */, 32C43E0022FD581400BE87F5 /* SDWebImageSwiftUI tvOS */, 32C43E0D22FD581C00BE87F5 /* SDWebImageSwiftUI watchOS */, + 3211F84323DE984D00FC757F /* SDWebImageSwiftUITests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 3211F84223DE984D00FC757F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 321C1D3623DEA9E8009CF62A /* Images.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DCA22FD540D00BE87F5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -428,7 +514,38 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 321C1D3523DEA309009CF62A /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/Carthage/Build/iOS/SDWebImage.framework", + ); + outputFileListPaths = ( + ); + outputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SDWebImage.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/usr/local/bin/carthage copy-frameworks\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ + 3211F84023DE984D00FC757F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3211F85023DE98E300FC757F /* WebImageTests.swift in Sources */, + 3211F84723DE984D00FC757F /* AnimatedImageTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32C43DC822FD540D00BE87F5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -495,7 +612,59 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 3211F84B23DE984D00FC757F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 32C43DCB22FD540D00BE87F5 /* SDWebImageSwiftUI */; + targetProxy = 3211F84A23DE984D00FC757F /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ + 3211F84C23DE984D00FC757F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = Tests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.dreampiggy.SDWebImageSwiftUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3211F84D23DE984D00FC757F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + INFOPLIST_FILE = Tests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.2; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.dreampiggy.SDWebImageSwiftUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; 32C43DD222FD540D00BE87F5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -879,6 +1048,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 3211F84E23DE984D00FC757F /* Build configuration list for PBXNativeTarget "SDWebImageSwiftUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3211F84C23DE984D00FC757F /* Debug */, + 3211F84D23DE984D00FC757F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 32C43DC622FD540D00BE87F5 /* Build configuration list for PBXProject "SDWebImageSwiftUI" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -925,6 +1103,38 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 3211F85123DE996700FC757F /* XCRemoteSwiftPackageReference "ViewInspector" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/nalexn/ViewInspector.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.0.0; + }; + }; + 321C1D3023DE9FD1009CF62A /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/siteline/SwiftUI-Introspect.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.0.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 3211F85223DE996700FC757F /* ViewInspector */ = { + isa = XCSwiftPackageProductDependency; + package = 3211F85123DE996700FC757F /* XCRemoteSwiftPackageReference "ViewInspector" */; + productName = ViewInspector; + }; + 321C1D3123DE9FD1009CF62A /* Introspect */ = { + isa = XCSwiftPackageProductDependency; + package = 321C1D3023DE9FD1009CF62A /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */; + productName = Introspect; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 32C43DC322FD540D00BE87F5 /* Project object */; } diff --git a/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 8c78f63..919434a 100644 --- a/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..99213b3 --- /dev/null +++ b/SDWebImageSwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "Introspect", + "repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git", + "state": { + "branch": null, + "revision": "732316ac5957675eac2ed8ef9c0a5b95a353f9ff", + "version": "0.0.6" + } + }, + { + "package": "ViewInspector", + "repositoryURL": "https://github.com/nalexn/ViewInspector.git", + "state": { + "branch": null, + "revision": "2f83ea202c9d80f0fdb959ed5e0e52c1cc97e411", + "version": "0.3.3" + } + } + ] + }, + "version": 1 +} diff --git a/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUITests.xcscheme b/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUITests.xcscheme new file mode 100644 index 0000000..6622575 --- /dev/null +++ b/SDWebImageSwiftUI.xcodeproj/xcshareddata/xcschemes/SDWebImageSwiftUITests.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/AnimatedImageTests.swift b/Tests/AnimatedImageTests.swift new file mode 100644 index 0000000..e3e7ec3 --- /dev/null +++ b/Tests/AnimatedImageTests.swift @@ -0,0 +1,132 @@ +import XCTest +import SwiftUI +import ViewInspector +import Introspect +@testable import SDWebImageSwiftUI + +extension AnimatedImage : Inspectable {} + +extension View { + func introspectAnimatedImage(customize: @escaping (SDAnimatedImageView) -> ()) -> some View { + return inject(IntrospectionView( + selector: { introspectionView in + guard let viewHost = Introspect.findViewHost(from: introspectionView) else { + return nil + } + return Introspect.previousSibling(containing: SDAnimatedImageView.self, from: viewHost) + }, + customize: customize + )) + } +} + +class AnimatedImageTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testAnimatedImageWithName() throws { + let expectation = self.expectation(description: "AnimatedImage name initializer") + let imageView = AnimatedImage(name: "TestImage.gif", bundle: testImageBundle()) + let introspectView = imageView.introspectAnimatedImage { animatedImageView in + if let animatedImage = animatedImageView.image as? SDAnimatedImage { + XCTAssertEqual(animatedImage.animatedImageLoopCount, 0) + XCTAssertEqual(animatedImage.animatedImageFrameCount, 5) + } else { + XCTFail("SDAnimatedImageView.image invalid") + } + expectation.fulfill() + } + _ = try introspectView.inspect(AnimatedImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + + func testAnimatedImageWithData() throws { + let expectation = self.expectation(description: "AnimatedImage data initializer") + let imageData = try XCTUnwrap(testImageData(name: "TestImageAnimated.apng")) + let imageView = AnimatedImage(data: imageData) + let introspectView = imageView.introspectAnimatedImage { animatedImageView in + if let animatedImage = animatedImageView.image as? SDAnimatedImage { + XCTAssertEqual(animatedImage.animatedImageLoopCount, 0) + XCTAssertEqual(animatedImage.animatedImageFrameCount, 101) + } else { + XCTFail("SDAnimatedImageView.image invalid") + } + expectation.fulfill() + } + _ = try introspectView.inspect(AnimatedImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + + func testAnimatedImageWithURL() throws { + let expectation = self.expectation(description: "AnimatedImage url initializer") + let imageUrl = URL(string: "https://raw.githubusercontent.com/liyong03/YLGIFImage/master/YLGIFImageDemo/YLGIFImageDemo/joy.gif") + let imageView = AnimatedImage(url: imageUrl) + let introspectView = imageView.onSuccess { image, cacheType in + if let animatedImage = image as? SDAnimatedImage { + XCTAssertEqual(animatedImage.animatedImageLoopCount, 0) + XCTAssertEqual(animatedImage.animatedImageFrameCount, 389) + } else { + XCTFail("SDAnimatedImageView.image invalid") + } + expectation.fulfill() + }.onFailure { error in + XCTFail(error.localizedDescription) + } + _ = try introspectView.inspect(AnimatedImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + + func testAnimatedImageBinding() throws { + let expectation = self.expectation(description: "AnimatedImage binding control") + let binding = Binding(wrappedValue: true) + let imageView = AnimatedImage(name: "TestLoopCount.gif", bundle: testImageBundle(), isAnimating: binding) + let introspectView = imageView.introspectAnimatedImage { animatedImageView in + if let animatedImage = animatedImageView.image as? SDAnimatedImage { + XCTAssertEqual(animatedImage.animatedImageLoopCount, 1) + XCTAssertEqual(animatedImage.animatedImageFrameCount, 2) + } else { + XCTFail("SDAnimatedImageView.image invalid") + } + XCTAssertTrue(animatedImageView.isAnimating) + binding.wrappedValue = false + XCTAssertFalse(binding.wrappedValue) + XCTAssertFalse(imageView.isAnimating) + // TODO: current the Binding value can not been mocked, hardcode here to call `SDAnimatedImageView.stopAnimating` + animatedImageView.stopAnimating() + XCTAssertFalse(animatedImageView.isAnimating) + expectation.fulfill() + } + _ = try introspectView.inspect(AnimatedImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + + // MARK: Helper + func testBundle() -> Bundle { + Bundle(for: type(of: self)) + } + + func testImageBundle() -> Bundle { + let imagePath = (testBundle().bundlePath as NSString).appendingPathComponent("Images.bundle") + return Bundle(path: imagePath)! + } + + func testImageData(name: String) -> Data? { + guard let url = testImageBundle().url(forResource: name, withExtension: nil) else { + return nil + } + return try? Data(contentsOf: url) + } + +} diff --git a/Tests/Images.bundle/MonochromeTestImage.jpg b/Tests/Images.bundle/MonochromeTestImage.jpg new file mode 100644 index 0000000..169bae0 Binary files /dev/null and b/Tests/Images.bundle/MonochromeTestImage.jpg differ diff --git a/Tests/Images.bundle/TestEXIF.png b/Tests/Images.bundle/TestEXIF.png new file mode 100644 index 0000000..e3d6bb6 Binary files /dev/null and b/Tests/Images.bundle/TestEXIF.png differ diff --git a/Tests/Images.bundle/TestImage.gif b/Tests/Images.bundle/TestImage.gif new file mode 100644 index 0000000..a47fd4b Binary files /dev/null and b/Tests/Images.bundle/TestImage.gif differ diff --git a/Tests/Images.bundle/TestImage.heic b/Tests/Images.bundle/TestImage.heic new file mode 100644 index 0000000..f0bfa22 Binary files /dev/null and b/Tests/Images.bundle/TestImage.heic differ diff --git a/Tests/Images.bundle/TestImage.heif b/Tests/Images.bundle/TestImage.heif new file mode 100644 index 0000000..b16f92b Binary files /dev/null and b/Tests/Images.bundle/TestImage.heif differ diff --git a/Tests/Images.bundle/TestImage.jpg b/Tests/Images.bundle/TestImage.jpg new file mode 100644 index 0000000..8145c8c Binary files /dev/null and b/Tests/Images.bundle/TestImage.jpg differ diff --git a/Tests/Images.bundle/TestImage.png b/Tests/Images.bundle/TestImage.png new file mode 100644 index 0000000..a528ffc Binary files /dev/null and b/Tests/Images.bundle/TestImage.png differ diff --git a/Tests/Images.bundle/TestImageAnimated.apng b/Tests/Images.bundle/TestImageAnimated.apng new file mode 100644 index 0000000..54f7373 Binary files /dev/null and b/Tests/Images.bundle/TestImageAnimated.apng differ diff --git a/Tests/Images.bundle/TestImageAnimated.heic b/Tests/Images.bundle/TestImageAnimated.heic new file mode 100644 index 0000000..0dd3180 Binary files /dev/null and b/Tests/Images.bundle/TestImageAnimated.heic differ diff --git a/Tests/Images.bundle/TestImageLarge.jpg b/Tests/Images.bundle/TestImageLarge.jpg new file mode 100644 index 0000000..9b636ee Binary files /dev/null and b/Tests/Images.bundle/TestImageLarge.jpg differ diff --git a/Tests/Images.bundle/TestLoopCount.gif b/Tests/Images.bundle/TestLoopCount.gif new file mode 100644 index 0000000..2bb5451 Binary files /dev/null and b/Tests/Images.bundle/TestLoopCount.gif differ diff --git a/Example/Tests/Info.plist b/Tests/Info.plist similarity index 86% rename from Example/Tests/Info.plist rename to Tests/Info.plist index ba72822..64d65ca 100644 --- a/Example/Tests/Info.plist +++ b/Tests/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,11 +13,9 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - BNDL + $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 diff --git a/Tests/WebImageTests.swift b/Tests/WebImageTests.swift new file mode 100644 index 0000000..69857eb --- /dev/null +++ b/Tests/WebImageTests.swift @@ -0,0 +1,63 @@ +import XCTest +import SwiftUI +import ViewInspector +@testable import SDWebImageSwiftUI + +extension WebImage : Inspectable {} + +class WebImageTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testWebImageWithStaticURL() throws { + let expectation = self.expectation(description: "WebImage static url initializer") + let imageUrl = URL(string: "https://nr-platform.s3.amazonaws.com/uploads/platform/published_extension/branding_icon/275/AmazonS3.png") + let imageView = WebImage(url: imageUrl) + let introspectView = imageView.onSuccess { image, cacheType in + let displayImage = try? imageView.inspect().group().image(0).uiImage() + XCTAssertNotNil(displayImage) + expectation.fulfill() + }.onFailure { error in + XCTFail(error.localizedDescription) + } + _ = try introspectView.inspect(WebImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + + func testWebImageWithAnimatedURL() throws { + let expectation = self.expectation(description: "WebImage animated url initializer") + let imageUrl = URL(string: "http://apng.onevcat.com/assets/elephant.png") + let binding = Binding(wrappedValue: true) + let imageView = WebImage(url: imageUrl, isAnimating: binding) + let introspectView = imageView.onSuccess { image, cacheType in + if let animatedImage = image as? SDAnimatedImage { + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + XCTAssertTrue(imageView.isAnimating) + let displayImage = try? imageView.inspect().group().image(0).uiImage() + XCTAssertNotNil(displayImage) + // Check display image should match the animated poster frame + let posterImage = animatedImage.animatedImageFrame(at: 0) + XCTAssertEqual(displayImage?.size, posterImage?.size) + expectation.fulfill() + } + } else { + XCTFail("WebImage animated image invalid") + } + }.onFailure { error in + XCTFail(error.localizedDescription) + } + _ = try introspectView.inspect(WebImage.self) + ViewHosting.host(view: introspectView) + self.waitForExpectations(timeout: 5, handler: nil) + } + +}