From 3380c594b263ec6d8910999b6cd26e53af14339a Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:21:11 -0500 Subject: [PATCH 01/11] Make PINRemoteImageManagerConfiguration public ## Summary PINRemoteImageManagerConfiguration is needed in order to configure PINRemoteImageManager, but the header isn't public. This means Swift code `import PINRemoteImage` can't see or use it. Apparently Objective-C code just imported the header directly. ## Testplan Just a compile time change, so make sure everything builds. --- PINRemoteImage.xcodeproj/project.pbxproj | 6 +++--- Source/Classes/include/PINRemoteImage/PINRemoteImage.h | 1 + .../PINRemoteImage}/PINRemoteImageManagerConfiguration.h | 0 3 files changed, 4 insertions(+), 3 deletions(-) rename Source/Classes/{ => include/PINRemoteImage}/PINRemoteImageManagerConfiguration.h (100%) diff --git a/PINRemoteImage.xcodeproj/project.pbxproj b/PINRemoteImage.xcodeproj/project.pbxproj index 83b22d27..cac0ba98 100644 --- a/PINRemoteImage.xcodeproj/project.pbxproj +++ b/PINRemoteImage.xcodeproj/project.pbxproj @@ -139,9 +139,9 @@ 68F0EA951CB32EC900F1FD41 /* PINRemoteImageMemoryContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F0EA911CB32EC900F1FD41 /* PINRemoteImageMemoryContainer.m */; }; 84CA25F929FB269F0038CFA1 /* PINRemoteImageManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 680B83C71ECE5F9D00210A55 /* PINRemoteImageManager+Private.h */; }; 926E01641F0DFEE800874D01 /* PINRequestRetryStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 926E015D1F0DFCAE00874D01 /* PINRequestRetryStrategy.m */; }; - 938E98D52224775600029E4D /* PINRemoteImageManagerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */; }; + 938E98D52224775600029E4D /* PINRemoteImageManagerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 938E98DA2224775B00029E4D /* PINRemoteImageManagerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 939546BF2220AF84006031BB /* PINRemoteImageManagerConfiguration.m */; }; - 939546C02220AF84006031BB /* PINRemoteImageManagerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */; }; + 939546C02220AF84006031BB /* PINRemoteImageManagerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 939546C12220AF84006031BB /* PINRemoteImageManagerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 939546BF2220AF84006031BB /* PINRemoteImageManagerConfiguration.m */; }; 9DD47F9D1C699F4B00F12CA0 /* PINButton+PINRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD47F991C699F4B00F12CA0 /* PINButton+PINRemoteImage.m */; }; 9DD47F9F1C699F4B00F12CA0 /* PINImageView+PINRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD47F9B1C699F4B00F12CA0 /* PINImageView+PINRemoteImage.m */; }; @@ -368,6 +368,7 @@ 445C571D2BF26B6A0005D70F /* PINURLSessionManager.h */, 445C571E2BF26B6A0005D70F /* PINWebPAnimatedImage.h */, 447F707C2BF4FD1300C5C956 /* NSHTTPURLResponse+MaxAge.h */, + 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */, 447F707D2BF4FD1300C5C956 /* PINImage+DecodedImage.h */, 447F707B2BF4FD1300C5C956 /* PINImage+ScaledImage.h */, ); @@ -469,7 +470,6 @@ F1B918EE1BCF23C800710963 /* PINProgressiveImage.m */, F1B918DC1BCF23C800710963 /* PINRemoteImageCategoryManager.m */, F1B918F61BCF23C800710963 /* PINRemoteImageManager.m */, - 939546BE2220AF84006031BB /* PINRemoteImageManagerConfiguration.h */, 939546BF2220AF84006031BB /* PINRemoteImageManagerConfiguration.m */, F1B918F81BCF23C800710963 /* PINRemoteImageManagerResult.m */, F1B918FE1BCF23C900710963 /* PINURLSessionManager.m */, diff --git a/Source/Classes/include/PINRemoteImage/PINRemoteImage.h b/Source/Classes/include/PINRemoteImage/PINRemoteImage.h index 11a0db44..57a7d339 100644 --- a/Source/Classes/include/PINRemoteImage/PINRemoteImage.h +++ b/Source/Classes/include/PINRemoteImage/PINRemoteImage.h @@ -32,3 +32,4 @@ #import #import #import +#import diff --git a/Source/Classes/PINRemoteImageManagerConfiguration.h b/Source/Classes/include/PINRemoteImage/PINRemoteImageManagerConfiguration.h similarity index 100% rename from Source/Classes/PINRemoteImageManagerConfiguration.h rename to Source/Classes/include/PINRemoteImage/PINRemoteImageManagerConfiguration.h From c3e427332a151c8765fd9e0927ebffeb8d15b253 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:37:30 -0500 Subject: [PATCH 02/11] Xcode 16.2 --- .github/workflows/ci.yaml | 2 +- .github/workflows/publish_release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 11c7f873..f43ca5d6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,7 +12,7 @@ on: env: # Use Xcode 15.2 or newer to support VisionOS - DEVELOPER_DIR: /Applications/Xcode_15.2.app + DEVELOPER_DIR: /Applications/Xcode_16.2.app jobs: analyze: diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml index cac7c402..eb095a0d 100644 --- a/.github/workflows/publish_release.yml +++ b/.github/workflows/publish_release.yml @@ -8,7 +8,7 @@ on: env: # Use Xcode 15.2 or newer to support VisionOS - DEVELOPER_DIR: /Applications/Xcode_15.2.app + DEVELOPER_DIR: /Applications/Xcode_16.2.app jobs: create_release: From d044a32128c8e9d2295e73033cd2258db4178730 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:43:52 -0500 Subject: [PATCH 03/11] Fix the includes to make SPM happy --- Source/Classes/PINRemoteImageManagerConfiguration.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Classes/PINRemoteImageManagerConfiguration.m b/Source/Classes/PINRemoteImageManagerConfiguration.m index 2904b31d..88896fd0 100644 --- a/Source/Classes/PINRemoteImageManagerConfiguration.m +++ b/Source/Classes/PINRemoteImageManagerConfiguration.m @@ -6,8 +6,7 @@ // // -#import "PINRemoteImageManagerConfiguration.h" - +#import #import @implementation PINRemoteImageManagerConfiguration From 5352b661cdf794ea5f2520be69495a9540f515bf Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:46:22 -0500 Subject: [PATCH 04/11] Debug CI --- .github/workflows/ci.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f43ca5d6..a47a701b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,6 +15,12 @@ env: DEVELOPER_DIR: /Applications/Xcode_16.2.app jobs: + debuggithub: + name: Debug Github + runs-on: macos-latest + steps: + - name: List available simulators (debug) + run: xcrun simctl list devices analyze: name: Analyze runs-on: macos-latest From 3c62d17ab484812dd8e2b6ad8f7b6a4f3137563e Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:48:04 -0500 Subject: [PATCH 05/11] Missed another include --- Source/Classes/PINRemoteImageManager.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Classes/PINRemoteImageManager.m b/Source/Classes/PINRemoteImageManager.m index cfd1b5b8..aa48d0da 100644 --- a/Source/Classes/PINRemoteImageManager.m +++ b/Source/Classes/PINRemoteImageManager.m @@ -19,7 +19,7 @@ #import #import -#import "PINRemoteImageManagerConfiguration.h" +#import #import "PINRemoteLock.h" #import #import "PINRemoteImageCallbacks.h" From 78b66d103fbb76e148c744b3f0c30bb5be0b2f17 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:49:53 -0500 Subject: [PATCH 06/11] Update to iPhone 16 simulator --- .github/workflows/ci.yaml | 4 ++-- Makefile | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a47a701b..1a23b7c6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -26,7 +26,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 15'] + platform: ['iOS Simulator,name=iPhone 16'] steps: - uses: actions/checkout@v2 - name: Analyze @@ -36,7 +36,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 15'] + platform: ['iOS Simulator,name=iPhone 16'] steps: - uses: actions/checkout@v2 - name: Test diff --git a/Makefile b/Makefile index 09e2cdb2..93e63fbb 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORM="platform=iOS Simulator,name=iPhone 15" +PLATFORM="platform=iOS Simulator,name=iPhone 16" SDK="iphonesimulator" SHELL=/bin/bash -o pipefail XCODE_MAJOR_VERSION=$(shell xcodebuild -version | HEAD -n 1 | sed -E 's/Xcode ([0-9]+).*/\1/') @@ -30,8 +30,8 @@ spm: swift build example: - if [ ${XCODE_MAJOR_VERSION} -lt 15 ] ; then \ - echo "Xcode 15 and Swift 5.9 reqiured to build example project"; \ + if [ ${XCODE_MAJOR_VERSION} -lt 16 ] ; then \ + echo "Xcode 16 and Swift 5.9 required to build example project"; \ exit 1; \ fi xcodebuild clean build -project ${IOS_EXAMPLE_PROJECT} -scheme ${EXAMPLE_SCHEME} -destination ${PLATFORM} -sdk ${SDK} \ From 5385f24ec908230858b01539377fc538d7570470 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 13:56:58 -0500 Subject: [PATCH 07/11] More debug and trying to iterate on SDK --- .github/workflows/ci.yaml | 4 ++++ Makefile | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1a23b7c6..0054c44c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,6 +21,10 @@ jobs: steps: - name: List available simulators (debug) run: xcrun simctl list devices + - name: List available Runtimes (debug) + run: xcrun simctl list runtimes + - name: List available SDKs (debug) + run: xcodebuild -showsdks analyze: name: Analyze runs-on: macos-latest diff --git a/Makefile b/Makefile index 93e63fbb..2d4c3284 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PLATFORM="platform=iOS Simulator,name=iPhone 16" -SDK="iphonesimulator" +SDK="iphonesimulator18.2" SHELL=/bin/bash -o pipefail XCODE_MAJOR_VERSION=$(shell xcodebuild -version | HEAD -n 1 | sed -E 's/Xcode ([0-9]+).*/\1/') IOS_EXAMPLE_PROJECT="Examples/Example-Xcode-SPM/Example-Xcode-SPM.xcodeproj" From 59fa2ddbdfe2d259089899aa882290313ac416f6 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 14:05:43 -0500 Subject: [PATCH 08/11] Let's try an iPhone 17 simulator --- .github/workflows/ci.yaml | 4 ++-- Makefile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0054c44c..0775891b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,7 +30,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 16'] + platform: ['iOS Simulator,name=iPhone 17'] steps: - uses: actions/checkout@v2 - name: Analyze @@ -40,7 +40,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 16'] + platform: ['iOS Simulator,name=iPhone 17'] steps: - uses: actions/checkout@v2 - name: Test diff --git a/Makefile b/Makefile index 2d4c3284..de51821d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -PLATFORM="platform=iOS Simulator,name=iPhone 16" -SDK="iphonesimulator18.2" +PLATFORM="platform=iOS Simulator,name=iPhone 17" +SDK="iphonesimulator" SHELL=/bin/bash -o pipefail XCODE_MAJOR_VERSION=$(shell xcodebuild -version | HEAD -n 1 | sed -E 's/Xcode ([0-9]+).*/\1/') IOS_EXAMPLE_PROJECT="Examples/Example-Xcode-SPM/Example-Xcode-SPM.xcodeproj" From 6ec4ba7428eb9a97bac74b0c6ae652237ae50c4f Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 14:10:26 -0500 Subject: [PATCH 09/11] Specify the iOS version --- .github/workflows/ci.yaml | 4 ++-- Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0775891b..1433b7ee 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,7 +30,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 17'] + platform: ['iOS Simulator,name=iPhone 16,OS=18.4'] steps: - uses: actions/checkout@v2 - name: Analyze @@ -40,7 +40,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 17'] + platform: ['iOS Simulator,name=iPhone 16,OS=18.4'] steps: - uses: actions/checkout@v2 - name: Test diff --git a/Makefile b/Makefile index de51821d..582de793 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORM="platform=iOS Simulator,name=iPhone 17" +PLATFORM="platform=iOS Simulator,name=iPhone 16,OS=18.4" SDK="iphonesimulator" SHELL=/bin/bash -o pipefail XCODE_MAJOR_VERSION=$(shell xcodebuild -version | HEAD -n 1 | sed -E 's/Xcode ([0-9]+).*/\1/') From f250a39cf18e3ff5875f0f24dde323e73650a19d Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 14:15:55 -0500 Subject: [PATCH 10/11] Try to align with what Github says is installed. --- .github/workflows/ci.yaml | 6 +++--- .github/workflows/publish_release.yml | 2 +- Makefile | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1433b7ee..67f517ed 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,7 +12,7 @@ on: env: # Use Xcode 15.2 or newer to support VisionOS - DEVELOPER_DIR: /Applications/Xcode_16.2.app + DEVELOPER_DIR: /Applications/Xcode_16.4.app jobs: debuggithub: @@ -30,7 +30,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 16,OS=18.4'] + platform: ['iOS Simulator,name=iPhone 16,OS=18.5'] steps: - uses: actions/checkout@v2 - name: Analyze @@ -40,7 +40,7 @@ jobs: runs-on: macos-latest strategy: matrix: - platform: ['iOS Simulator,name=iPhone 16,OS=18.4'] + platform: ['iOS Simulator,name=iPhone 16,OS=18.5'] steps: - uses: actions/checkout@v2 - name: Test diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml index eb095a0d..021f4de1 100644 --- a/.github/workflows/publish_release.yml +++ b/.github/workflows/publish_release.yml @@ -8,7 +8,7 @@ on: env: # Use Xcode 15.2 or newer to support VisionOS - DEVELOPER_DIR: /Applications/Xcode_16.2.app + DEVELOPER_DIR: /Applications/Xcode_16.4.app jobs: create_release: diff --git a/Makefile b/Makefile index 582de793..cf21392a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -PLATFORM="platform=iOS Simulator,name=iPhone 16,OS=18.4" -SDK="iphonesimulator" +PLATFORM="platform=iOS Simulator,name=iPhone 16,OS=18.5" +SDK="iphonesimulator18.5" SHELL=/bin/bash -o pipefail XCODE_MAJOR_VERSION=$(shell xcodebuild -version | HEAD -n 1 | sed -E 's/Xcode ([0-9]+).*/\1/') IOS_EXAMPLE_PROJECT="Examples/Example-Xcode-SPM/Example-Xcode-SPM.xcodeproj" From 89f4be769f5e54c2f02b136707a4b56538fccd57 Mon Sep 17 00:00:00 2001 From: Andrew Finnell Date: Tue, 6 Jan 2026 14:33:15 -0500 Subject: [PATCH 11/11] Medium sized images are now 564 These are forced now, so if you request 600 you'll get 564 --- Tests/PINRemoteImageTests.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/PINRemoteImageTests.m b/Tests/PINRemoteImageTests.m index 3e3eb60d..4d56e181 100644 --- a/Tests/PINRemoteImageTests.m +++ b/Tests/PINRemoteImageTests.m @@ -1034,7 +1034,7 @@ - (void)testQOS completion:^(PINRemoteImageManagerResult *result) { image = result.image; - XCTAssert(image.size.width == 600, @"Medium image should be now downloaded"); + XCTAssert(image.size.width == 564, @"Medium image should be now downloaded"); dispatch_semaphore_signal(semaphore); }]; XCTAssert(dispatch_semaphore_wait(semaphore, [self timeout]) == 0, @"Semaphore timed out.");