text: /*
   * Copyright (c) Microsoft Corporation. All rights reserved.
   */
  
  #import "MSConstants.h"
  #import <Foundation/Foundation.h>
  
  @class MSWrapperSdk;
  
  /**
   * Class comment: Some Introduction.
   */
  @interface MSMobileCenter : NSObject
  
  /**
   * Returns the singleton instance of MSMobileCenter.
   */
  + (instancetype)sharedInstance;
  
  /**
   * Configure the SDK.
   *
   * @discussion This may be called only once per application process lifetime.
   * @param appSecret A unique and secret key used to identify the application.
   */
  + (void)configureWithAppSecret:(NSString *)appSecret;
  
  /**
   * Configure the SDK with an application secret and an array of services to start.
   *
   * @discussion This may be called only once per application process lifetime.
   * @param appSecret A unique and secret key used to identify the application.
   * @param services  Array of services to start.
   */
  + (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services;
  
  /**
   * Start a service.
   * @discussion This may be called only once per service per application process lifetime.
   * @param service  A service to start.
   */
  + (void)startService:(Class)service;
  
  /**
   * Check whether the SDK has already been configured or not.
   *
   * @return YES if configured, NO otherwise.
   */
  + (BOOL)isConfigured;
  
  /**
   * Change the base URL (schema + authority + port only) used to communicate with the backend.
   *
   * @param serverUrl base URL to use for backend communication.
   */
  + (void)setServerUrl:(NSString *)serverUrl;
  
  /**
   * Enable or disable the SDK as a whole. In addition to MobileCenter resources, it will also enable or
   * disable all registered services.
   *
   * @param isEnabled YES to enable, NO to disable.
   * @see isEnabled
   */
  + (void)setEnabled:(BOOL)isEnabled;
  
  /**
   * Check whether the SDK is enabled or not as a whole.
   *
   * @return YES if enabled, NO otherwise.
   * @see setEnabled:
   */
  + (BOOL)isEnabled;
  
  /**
   * Get log level.
   *
   * @return log level.
   */
  + (MSLogLevel)logLevel;
  
  /**
   * Set log level.
   *
   * @param logLevel the log level.
   */
  + (void)setLogLevel:(MSLogLevel)logLevel;
  
  /**
   * Set log level handler.
   *
   * @param logHandler handler.
   */
  + (void)setLogHandler:(MSLogHandler)logHandler;
  
  /**
   * Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK
   * that uses the Mobile Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
   *
   * @param wrapperSdk wrapper SDK information.
   */
  + (void)setWrapperSdk:(MSWrapperSdk *)wrapperSdk;
  
  /**
   * Get unique installation identifier.
   *
   * @return unique installation identifier.
   */
  + (NSUUID *)installId;
  
  /**
   * Detect if a debugger is attached to the app process. This is only invoked once on app startup and can not detect
   * if the debugger is being attached during runtime!
   *
   * @return BOOL if the debugger is attached.
   */
  + (BOOL)isDebuggerAttached;
  
  @end
  