//////////////////////////////////////////////////////////////////////////// // // Copyright 2016 Realm Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////// #import #import "RLMSyncUtil.h" @class RLMSyncSession; /// An enum representing different levels of sync-related logging that can be configured. typedef RLM_CLOSED_ENUM(NSUInteger, RLMSyncLogLevel) { /// Nothing will ever be logged. RLMSyncLogLevelOff, /// Only fatal errors will be logged. RLMSyncLogLevelFatal, /// Only errors will be logged. RLMSyncLogLevelError, /// Warnings and errors will be logged. RLMSyncLogLevelWarn, /// Information about sync events will be logged. Fewer events will be logged in order to avoid overhead. RLMSyncLogLevelInfo, /// Information about sync events will be logged. More events will be logged than with `RLMSyncLogLevelInfo`. RLMSyncLogLevelDetail, /// Log information that can aid in debugging. /// /// - warning: Will incur a measurable performance impact. RLMSyncLogLevelDebug, /// Log information that can aid in debugging. More events will be logged than with `RLMSyncLogLevelDebug`. /// /// - warning: Will incur a measurable performance impact. RLMSyncLogLevelTrace, /// Log information that can aid in debugging. More events will be logged than with `RLMSyncLogLevelTrace`. /// /// - warning: Will incur a measurable performance impact. RLMSyncLogLevelAll }; NS_ASSUME_NONNULL_BEGIN /// A block type representing a block which can be used to report a sync-related error to the application. If the error /// pertains to a specific session, that session will also be passed into the block. typedef void(^RLMSyncErrorReportingBlock)(NSError *, RLMSyncSession * _Nullable); /** A singleton manager which serves as a central point for sync-related configuration. */ @interface RLMSyncManager : NSObject /** A block which can optionally be set to report sync-related errors to your application. Any error reported through this block will be of the `RLMSyncError` type, and marked with the `RLMSyncErrorDomain` domain. Errors reported through this mechanism are fatal, with several exceptions. Please consult `RLMSyncError` for information about the types of errors that can be reported through the block, and for for suggestions on handling recoverable error codes. @see `RLMSyncError` */ @property (nullable, nonatomic, copy) RLMSyncErrorReportingBlock errorHandler; /** A reverse-DNS string uniquely identifying this application. In most cases this is automatically set by the SDK, and does not have to be explicitly configured. */ @property (nonatomic, copy) NSString *appID; /** A string identifying this application which is included in the User-Agent header of sync connections. By default, this will be the application's bundle identifier. This property must be set prior to opening a synchronized Realm for the first time. Any modifications made after opening a Realm will be ignored. */ @property (nonatomic, copy) NSString *userAgent; /** The logging threshold which newly opened synced Realms will use. Defaults to `RLMSyncLogLevelInfo`. Logging strings are output to Apple System Logger. @warning This property must be set before any synced Realms are opened. Setting it after opening any synced Realm will do nothing. */ @property (nonatomic) RLMSyncLogLevel logLevel; /** The name of the HTTP header to send authorization data in when making requests to a Realm Object Server which has been configured to expect a custom authorization header. */ @property (nullable, nonatomic, copy) NSString *authorizationHeaderName; /** Extra HTTP headers to append to every request to a Realm Object Server. Modifying this property while sync sessions are active will result in all sessions disconnecting and reconnecting using the new headers. */ @property (nullable, nonatomic, copy) NSDictionary *customRequestHeaders; /** A map of hostname to file URL for pinned certificates to use for HTTPS requests. When initiating a HTTPS connection to a server, if this dictionary contains an entry for the server's hostname, only the certificates stored in the file (or any certificates signed by it, if the file contains a CA cert) will be accepted when initiating a connection to a server. This prevents certain certain kinds of man-in-the-middle (MITM) attacks, and can also be used to trust a self-signed certificate which would otherwise be untrusted. On macOS, the certificate files may be in any of the formats supported by SecItemImport(), including PEM and .cer (see SecExternalFormat for a complete list of possible formats). On iOS and other platforms, only DER .cer files are supported. For example, to pin example.com to a .cer file included in your bundle:
 RLMSyncManager.sharedManager.pinnedCertificatePaths = @{
    @"example.com": [NSBundle.mainBundle pathForResource:@"example.com" ofType:@"cer"]
 };
 
*/ @property (nullable, nonatomic, copy) NSDictionary *pinnedCertificatePaths; /// The sole instance of the singleton. + (instancetype)sharedManager NS_REFINED_FOR_SWIFT; /// :nodoc: - (instancetype)init __attribute__((unavailable("RLMSyncManager cannot be created directly"))); /// :nodoc: + (instancetype)new __attribute__((unavailable("RLMSyncManager cannot be created directly"))); NS_ASSUME_NONNULL_END @end