Интеграция Black-Berry в iOS

#ios #react-native #blackberry #xcode12 #blackberry-dynamics

Вопрос:

После интеграции Black-Berry в iOS(React-Native) при запуске приложения на симуляторе произошел сбой. Ошибка заключается в :-

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Delegate property not set. Either call [GDiOS authorize:] and pass an object that
implements the GDiOSDelegate protocol, or set the delegate property of the GDiOS instance prior
to calling [GDiOS authorize].
 

Используемая ссылка :- https://github.com/blackberry/BlackBerry-Dynamics-React-Native-SDK/blob/master/modules/BlackBerry-Dynamics-for-React-Native-Base/README.md

Снимок экрана с Ошибкой:-

введите описание изображения здесь

Класс Main.m :-

введите описание изображения здесь

AppDelegate.h :-

 #import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
#import <BlackBerryDynamics/GD/GDiOS.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate,GDiOSDelegate>

@property (nonatomic, strong) UIWindow *window;

@end
 

Комментарии:

1. смогли ли вы решить эту проблему?

2. @y-dolem Я обнаружил , что в нем отсутствует файл делегата iOS, поэтому просто добавьте его в проект, и он будет работать как wow. Добавление этого файла ниже.

Ответ №1:

Через несколько дней я решил эту проблему так. Поэтому публикуйте ответы в надежде, что это может кому-то помочь.

Добавьте файл objCBBGDiOSDelegate.h в проект

 @import GD.Runtime;
#import "AppDelegate.h"

@interface objCBBGDiOSDelegate : NSObject <GDiOSDelegate>

@property (weak, nonatomic) UIViewController *rootViewController;
@property (weak, nonatomic) AppDelegate *appDelegate;
@property (assign,nonatomic,readonly) BOOL hasAuthorized;
                            
 (instancetype)sharedInstance;
                        
@end
 

и файл objCBBGDiOSDelegate.m в проекте

 #import "objCBBGDiOSDelegate.h"

@interface objCBBGDiOSDelegate ()


@property (nonatomic, assign) BOOL hasAuthorized;                           
                        

-(instancetype)init;
-(void)didAuthorize;                        
                        
@end

@implementation objCBBGDiOSDelegate

  (instancetype)sharedInstance {

    static objCBBGDiOSDelegate *gdiOSDelegate = nil;
    static dispatch_once_t onceToken;
    dispatch_once(amp;onceToken, ^{
        gdiOSDelegate = [[objCBBGDiOSDelegate alloc] init];
    });
    return gdiOSDelegate;                           
                            
}


- (instancetype)init {
    self = [super init];
    if (self) {

        // Do any additional setup                      
                                
    }
    return self;
}

- (void)setRootViewController {

    [self didAuthorize];                            
                            
}


- (void)setAppDelegate:(AppDelegate *)appDelegate {

    _appDelegate = appDelegate;
    [self didAuthorize];                            
                            
}


- (void)didAuthorize {

        [self.appDelegate didAuthorize];
                            
}



#pragma mark - BlackBerry Dynamics SDK Delegate Methods
- (void)handleEvent:(GDAppEvent *)anEvent {

    /* Called from BlackBerry Dynamics SDK when events occur, such as system startup. */
    switch (anEvent.type)
    {
        case GDAppEventAuthorized:
        {
            [self onAuthorized:anEvent];
            break;
        }
        case GDAppEventNotAuthorized:
        {
            [self onNotAuthorized:anEvent];
            break;
        }
        case GDAppEventRemoteSettingsUpdate:
        {
            //A change to application-related configuration or policy settings.
            break;
        }
        case GDAppEventServicesUpdate:
        {
            //A change to services-related configuration.
            break;
        }
        case GDAppEventPolicyUpdate:
        {
            //A change to one or more application-specific policy settings has been received.
            break;
        }
        case GDAppEventEntitlementsUpdate:
        {
            //A change to the entitlements data has been received.
            break;
        }
        default:
        {
            NSLog(@"Unhandled Event");
            break;
        }
    }
}

- (void)onNotAuthorized:(GDAppEvent *)anEvent {

    /* Handle the BlackBerry Dynamics SDK not authorized event. */
    switch (anEvent.code) {
        case GDErrorActivationFailed:
        case GDErrorProvisioningFailed:
        case GDErrorPushConnectionTimeout:
        case GDErrorSecurityError:
        case GDErrorAppDenied:
        case GDErrorAppVersionNotEntitled:
        case GDErrorBlocked:
        case GDErrorWiped:
        case GDErrorRemoteLockout: 
        case GDErrorPasswordChangeRequired: {
            // an condition has occured denying authorization, an application may wish to log these events
            NSLog(@"onNotAuthorized %@", anEvent.message);
            break;
        }
        case GDErrorIdleLockout: {
            // idle lockout is benign amp; informational
            break;
        }
        default: 
            NSAssert(false, @"Unhandled not authorized event");
            break;
    }
}


- (void)onAuthorized:(GDAppEvent *)anEvent {

    /* Handle the BlackBerry Dynamics SDK authorized event. */                            
    switch (anEvent.code) {
        case GDErrorNone: {
            if (!self.hasAuthorized) {
 
        
                self.hasAuthorized = YES;
        
                [self didAuthorize];
        
            }
            break;
        }
        default:
            NSAssert(false, @"Authorized startup with an error");
            break;
    }
}


@end
 

И в файле appdelegate.m

 #import "objCBBGDiOSDelegate.h"
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey,id> *)launchOptions{
  
  [objCBBGDiOSDelegate sharedInstance].appDelegate = self;
  [[GDiOS sharedInstance] authorize:[objCBBGDiOSDelegate sharedInstance]];
  return YES;
}

- (void)didAuthorize {

    NSLog(@"%s", __FUNCTION__);
                            
}
 

В AppDelegate.h добавьте авторизованный

 @import GD.Runtime;
extern UIViewController *rootViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>

@property (nonatomic, strong) UIWindow *window;

// GD methods
- (void)didAuthorize;
@end
 

Ответ №2:

Вы пытаетесь запустить пример приложения или пытаетесь интегрировать пакет sdk Dynamics в существующий проект?

Я бы рекомендовал запустить одно из примеров приложений, представленных в репозитории.

Кроме того, эта ошибка возникает, когда Dynamics SDK неправильно связан с проектом. Попробуйте удалить базовый модуль и повторно добавить его.

Комментарии:

1. Привет @GGhangura спасибо за ваш комментарий , я попытался перелинковать его, но все равно получил ту же проблему.