diff --git a/ios/sdk/base/HippyBatchedBridge.mm b/ios/sdk/base/HippyBatchedBridge.mm index 1760d5a26..f1d2d6ca6 100644 --- a/ios/sdk/base/HippyBatchedBridge.mm +++ b/ios/sdk/base/HippyBatchedBridge.mm @@ -138,7 +138,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id) { self.semaphore = dispatch_semaphore_create(0); - + self.moduleSemaphore = dispatch_semaphore_create(1); [[NSNotificationCenter defaultCenter] postNotificationName:HippyJavaScriptWillStartLoadingNotification object:_parentBridge userInfo:@{@"bridge": self}]; @@ -304,6 +304,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id) - (void)initModulesWithDispatchGroup:(__unused dispatch_group_t)dispatchGroup { //HIPPY_PROFILE_BEGIN_EVENT(0, @"-[HippyBatchedBridge initModules]", nil); + dispatch_semaphore_wait(self.moduleSemaphore, DISPATCH_TIME_FOREVER); [_performanceLogger markStartForTag:HippyPLNativeModuleInit]; NSArray> *extraModules = nil; @@ -408,7 +409,8 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id) _moduleDataByName = [moduleDataByName copy]; _moduleClassesByID = [moduleClassesByID copy]; //HIPPY_PROFILE_END_EVENT(HippyProfileTagAlways, @""); - + dispatch_semaphore_signal(self.moduleSemaphore); + // Synchronously set up the pre-initialized modules //HIPPY_PROFILE_BEGIN_EVENT(0, @"extraModules", nil); for (HippyModuleData *moduleData in _moduleDataByID) { @@ -512,6 +514,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id) - (NSString *)moduleConfig { NSMutableArray *config = [NSMutableArray new]; + dispatch_semaphore_wait(self.moduleSemaphore, DISPATCH_TIME_FOREVER); for (HippyModuleData *moduleData in _moduleDataByID) { if (self.executorClass == [HippyJSCExecutor class]) { [config addObject:@[moduleData.name]]; @@ -519,7 +522,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id) [config addObject:HippyNullIfNil(moduleData.config)]; } } - + dispatch_semaphore_signal(self.moduleSemaphore); return HippyJSONStringify(@{ @"remoteModuleConfig": config, }, NULL); diff --git a/ios/sdk/base/HippyBridge+Private.h b/ios/sdk/base/HippyBridge+Private.h index af1c68e61..31d133a3f 100644 --- a/ios/sdk/base/HippyBridge+Private.h +++ b/ios/sdk/base/HippyBridge+Private.h @@ -152,6 +152,7 @@ HIPPY_EXTERN void HippyVerifyAllModulesExported(NSArray *extraModules); @property (nonatomic, assign, readonly) BOOL moduleSetupComplete; @property (nonatomic, strong) dispatch_semaphore_t semaphore; +@property (nonatomic, strong) dispatch_semaphore_t moduleSemaphore; - (instancetype)initWithParentBridge:(HippyBridge *)bridge NS_DESIGNATED_INITIALIZER; - (void)start;