From fe340f032b80c04854f0a5768479fd493278f77e Mon Sep 17 00:00:00 2001 From: Danila Shikulin Date: Mon, 17 Feb 2020 00:32:30 +0300 Subject: [PATCH] Fixed classes collection when library is build as a framework Returned to original non-optimized implementation and fixed it. --- .../Private/Collectors/BMClassCollector.mm | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/BloodMagic/Sources/Modules/Core/Private/Collectors/BMClassCollector.mm b/BloodMagic/Sources/Modules/Core/Private/Collectors/BMClassCollector.mm index 543935c..146bb20 100644 --- a/BloodMagic/Sources/Modules/Core/Private/Collectors/BMClassCollector.mm +++ b/BloodMagic/Sources/Modules/Core/Private/Collectors/BMClassCollector.mm @@ -40,25 +40,14 @@ - (void)dealloc - (void)collectClasses { -#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED - uint classesCount; - const char *imageName = class_getImageName(object_getClass(self)); - const char **classNames = objc_copyClassNamesForImage(imageName, &classesCount); - for (uint index = 0; index < classesCount; index++) { - Class nextClass = objc_getClass(classNames[index]); - _cachedClasses.push_back(nextClass); - } - free(classNames); -#else Class parentClass = [NSObject class]; + int numClasses = objc_getClassList(NULL, 0); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wvla-extension" - Class classes[sizeof(Class) * numClasses]; -#pragma clang diagnostic pop - + if (numClasses == 0) return; + + Class *classes = (Class *)malloc(sizeof(Class) * numClasses); numClasses = objc_getClassList(classes, numClasses); + for (NSInteger i = 0; i < numClasses; i++) { Class superClass = classes[i]; do { @@ -76,7 +65,7 @@ - (void)collectClasses } _cachedClasses.push_back(klass); } -#endif + free(classes); } - (class_list_t *)collectForProtocol:(Protocol *)protocol