Спасибо, Крис.Я закончил с чем-то похожим: необязательный lib2.a содержит фабричный класс, который создает объект, который реализует определенный протокол, который предоставляет дополнительные функциональные возможности.Это заголовок:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol OptionalStuffDelegate
// Delegate methods here
@end
@protocol OptionalStuff
// Methods here
@end
@interface OptionalStuffFactory : NSObject {}
+ (id<OptionalStuff>)instantiateWithDelegate:(id <OptionalStuffDelegate>)delegate baseView:(UIView *)baseView;
@end
Чтобы создать экземпляр в lib1.a, я делаю:
Class optionalStuffFactoryClass = NSClassFromString(@"OptionalStuffFactory");
if (optionalStuffFactoryClass != nil)
{
optionalStuff = [optionalStuffFactoryClass performSelector: @selector(instantiateWithDelegate:baseView:) withObject: self withObject: glView];
}
lib2.a реализует класс фабрики.Тот факт, что во время компиляции нет никаких ссылок на класс OptionalStuffFactory, гарантирует отсутствие неразрешенных проблем, если отсутствует lib2.a.
Внимание! Необходимо убедиться, что цель сборки, включающая библиотеку, используетфлаг компоновщика -ObjC, иначе класс фабрики будет оптимизирован, так как на него нет ссылок во время компиляции.