1// Copyright 2018-present 650 Industries. All rights reserved. 2 3#import <UMAppLoader/UMAppLoaderProvider.h> 4#import <UMAppLoader/UMAppLoaderInterface.h> 5 6static NSMutableDictionary<NSString *, Class> *UMProvidedAppLoaderClasses; 7 8extern void UMRegisterAppLoader(NSString *, Class); 9extern void UMRegisterAppLoader(NSString *loaderName, Class loaderClass) 10{ 11 if ([loaderClass conformsToProtocol:@protocol(UMAppLoaderInterface)]) { 12 if (!UMProvidedAppLoaderClasses) { 13 UMProvidedAppLoaderClasses = [NSMutableDictionary new]; 14 } 15 UMProvidedAppLoaderClasses[loaderName] = loaderClass; 16 } else { 17 NSLog(@"UMAppLoader class (%@) doesn't conform to the UMAppLoaderInterface protocol.", NSStringFromClass(loaderClass)); 18 } 19} 20 21@implementation UMAppLoaderProvider 22 23- (nullable id<UMAppLoaderInterface>)createAppLoader:(NSString *)loaderName 24{ 25 Class loaderClass = UMProvidedAppLoaderClasses[loaderName]; 26 return [loaderClass new]; 27} 28 29# pragma mark - static 30 31+ (nonnull instancetype)sharedInstance 32{ 33 static UMAppLoaderProvider *loaderProvider; 34 static dispatch_once_t once; 35 36 dispatch_once(&once, ^{ 37 loaderProvider = [[UMAppLoaderProvider alloc] init]; 38 }); 39 return loaderProvider; 40} 41 42@end 43