Как получить статическое/перемещаемое имя фреймворка из имени класса в target-c

У меня есть строка с именем класса, и я пытаюсь получить имя фреймворка, которому принадлежит класс.

Что я пробовал:

  1. пакетForClass
Class *myClass = NSClassFromString(@"ClassName");
[NSBundle bundleForClass:myClass];

Но я не могу заставить его работать с перемещаемым/статическим типом mach-o.

  1. Добавление нового метода в NSObject с использованием категорий
// This is on NSObject+ModuleID.h
@interface NSObject (ModuleID)
- (NSString *) moduleIdentifier;
@end

// This is on NSObject+ModuleID.m
@implementation NSObject (ModuleID)
- (NSString *) moduleIdentifier { return @"Framework Name"; }
@end

Class *myClass = NSClassFromString(@"ClassName");
[myClass moduleIdentifier];

Это не работает, так как проект включает более 1 фреймворка.

  1. Добавление нового строкового свойства, содержащего имя фреймворка, в каждый класс в фреймворках
-(NSString *)moduleIdentifier
{ return @"Framework Name"; }

Это невозможно, учитывая, что количество классов легко превышает сотню.

Есть какой-либо способ сделать это? Любой вклад будет оценен, спасибо!


person 702    schedule 17.04.2020    source источник
comment
Итак, концептуально вы хотите что-то, что дает здесь lldb stackoverflow.com/a/40120375/5329717?   -  person Kamil.S    schedule 19.04.2020


Ответы (1)


Пытаться

-(NSString *)moduleIdentifier
{
    return [NSBundle bundleForClass:self.class].bundleIdentifier;
}
person Cy-4AH    schedule 17.04.2020
comment
Хотя этот код может решить проблему, хороший ответ должен также объяснять, что делает код и как он помогает. - person BDL; 17.04.2020
comment
К сожалению, это не работает, так как bundleForClass всегда возвращает mainBundle вместо фреймворка при использовании перемещаемого/статического типа mach-o. - person 702; 18.04.2020