From 2cd0ec9ee76c49f81a7076ed72fa3812fec59995 Mon Sep 17 00:00:00 2001 From: Aliaksandr Babrykovich Date: Wed, 15 Apr 2026 15:34:17 +0200 Subject: [PATCH] fix: replace objc_getClassList with objc_copyClassNamesForImage to avoid class realization objc_getClassList forces the ObjC runtime to realize every registered class, which crashes on iOS 16 when the host app contains @Observable classes guarded by @available(iOS 17, *). objc_copyClassNamesForImage reads class name strings from Mach-O metadata without realizing any class, avoiding the crash. Fixes #220 --- HCaptcha/Classes/HCaptchaDebugInfo.swift | 39 +++++++++++------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/HCaptcha/Classes/HCaptchaDebugInfo.swift b/HCaptcha/Classes/HCaptchaDebugInfo.swift index fc0c0031..9d9f3bf8 100644 --- a/HCaptcha/Classes/HCaptchaDebugInfo.swift +++ b/HCaptcha/Classes/HCaptchaDebugInfo.swift @@ -8,6 +8,7 @@ import Foundation import CommonCrypto import UIKit +import MachO private extension String { func jsSanitize() -> String { @@ -51,31 +52,25 @@ class HCaptchaDebugInfo { CC_MD5_Init(sysCtx) CC_MD5_Init(appCtx) - let loadedCount = Int(min(objc_getClassList(nil, 0), 1024)) - if loadedCount > 0 { - let classes = UnsafeMutablePointer.allocate(capacity: loadedCount) - defer { classes.deallocate() } + let imageCount = _dyld_image_count() + for imageIdx in 0..