Я сделал простой собственный модуль ios для аутентификации в игровом центре, который хорошо работает, пока я не перезагружу свое приложение cmd + r
в симуляторе ios. После того, как я обновляю свое приложение и этот источник событий называется, мое приложение вылетает со следующей ошибкой.
Мост не установлен. Вероятно, это связано с тем, что вы явно синтезировали мост в ASQGameCenter, даже если он унаследован от RCTEventEmitter. '
Здесь находится модуль
#import "ASQGameCenter.h"
@implementation ASQGameCenter
/**
* Globals
*/
NSString *eventName = @"ASQGameCenter:event";
BOOL isSubscribed = NO;
/**
* Utalise main queue
*/
- (dispatch_queue_t)methodQueue {
return dispatch_get_main_queue();
}
RCT_EXPORT_MODULE();
/**
* Declare events
*/
- (NSArray<NSString *> *)supportedEvents {
return @[ eventName ];
}
/**
* Authenticate user
*/
RCT_EXPORT_METHOD(authenticate
: (RCTPromiseResolveBlock)resolve rejecter
: (RCTPromiseRejectBlock)reject) {
if (!isSubscribed) {
isSubscribed = YES;
[self subscribe];
}
resolve(@"ASQGameCenter:subscribe");
}
/**
* Subscribe to auth changes
*/
- (void)subscribe {
__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
UIViewController *rnView = [UIApplication sharedApplication].keyWindow.rootViewController;
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) {
if (error) {
[self sendEventWithName:eventName body:@{@"error" : error.description}];
}
else if (viewController != nil) {
[rnView presentViewController:viewController animated:YES completion:nil];
} else if (localPlayer.isAuthenticated) {
[self sendEventWithName:eventName body:@{@"playerID" : localPlayer.playerID}];
} else {
[self sendEventWithName:eventName body:@{@"error" : error.description}];
}
};
}
@end
и связанный заголовочный файл
#import <React/RCTEventEmitter.h>
#import "GameKit/GameKit.h"
@interface ASQGameCenter : RCTEventEmitter
@end