app center;增加發送ping的秒

This commit is contained in:
Caiyanpeng committed 2021-11-12 16:21:13 +08:00
1 parent 1bd1ffdb5a
commit d754ff3b15
719 files changed
+34172 -2875

No files matched your search

@@ -0,0 +1,140 @@
fileFormatVersion: 2
guid: 4d7f499ac3ac1457ab2825691b1e86ff
folderAsset: yes
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
'': Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude WebGL: 1
Exclude Win: 1
Exclude Win64: 1
Exclude WindowsStoreApps: 1
Exclude iOS: 0
Exclude tvOS: 1
- first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
- first:
Facebook: Win
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Facebook: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Standalone: Linux
second:
enabled: 0
settings:
CPU: x86
- first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
- first:
Standalone: LinuxUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: OSXIntel
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Standalone: OSXIntel64
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
DontProcess: false
PlaceholderPath:
SDK: AnySDK
ScriptingBackend: AnyScriptingBackend
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
CompileFlags:
FrameworkDependencies: CoreTelephony;
- first:
tvOS: tvOS
second:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 63aaab9aaf628e244ae90893c4033933
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e873f826ffc8503449715ca3c1678105
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,44 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAppCenter.h>)
#import <AppCenter/MSACAbstractLog.h>
#import <AppCenter/MSACAppCenter.h>
#import <AppCenter/MSACAppCenterErrors.h>
#import <AppCenter/MSACChannelGroupProtocol.h>
#import <AppCenter/MSACChannelProtocol.h>
#import <AppCenter/MSACConstants+Flags.h>
#import <AppCenter/MSACConstants.h>
#import <AppCenter/MSACCustomProperties.h>
#import <AppCenter/MSACDevice.h>
#import <AppCenter/MSACEnable.h>
#import <AppCenter/MSACLog.h>
#import <AppCenter/MSACLogWithProperties.h>
#import <AppCenter/MSACLogger.h>
#import <AppCenter/MSACSerializableObject.h>
#import <AppCenter/MSACService.h>
#import <AppCenter/MSACServiceAbstract.h>
#import <AppCenter/MSACWrapperLogger.h>
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACAbstractLog.h"
#import "MSACAppCenter.h"
#import "MSACAppCenterErrors.h"
#import "MSACChannelGroupProtocol.h"
#import "MSACChannelProtocol.h"
#import "MSACConstants+Flags.h"
#import "MSACConstants.h"
#import "MSACCustomProperties.h"
#import "MSACDevice.h"
#import "MSACEnable.h"
#import "MSACLog.h"
#import "MSACLogWithProperties.h"
#import "MSACLogger.h"
#import "MSACSerializableObject.h"
#import "MSACService.h"
#import "MSACServiceAbstract.h"
#import "MSACWrapperLogger.h"
#import "MSACWrapperSdk.h"
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5afde213a96bedc408ef9ca393f75c40
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,14 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_ABSTRACT_LOG_H
#define MSAC_ABSTRACT_LOG_H
#import <Foundation/Foundation.h>
NS_SWIFT_NAME(AbstractLog)
@interface MSACAbstractLog : NSObject
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d269040c8d236c94493aa6c0fa69c34b
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,203 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_APP_CENTER
#define MSAC_APP_CENTER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
@class MSACWrapperSdk;
#if !TARGET_OS_TV
@class MSACCustomProperties;
#endif
NS_SWIFT_NAME(AppCenter)
@interface MSACAppCenter : NSObject
/**
* Returns the singleton instance of MSACAppCenter.
*/
+ (instancetype)sharedInstance;
/**
* Configure the SDK with an application secret.
*
* @param appSecret A unique and secret key used to identify the application.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configureWithAppSecret:(NSString *)appSecret NS_SWIFT_NAME(configure(withAppSecret:));
/**
* Configure the SDK.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)configure;
/**
* Configure the SDK with an application secret and an array of services to start.
*
* @param appSecret A unique and secret key used to identify the application.
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)start:(NSString *)appSecret withServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(withAppSecret:services:));
/**
* Start the SDK with an array of services.
*
* @param services Array of services to start.
*
* @discussion This may be called only once per application process lifetime.
*/
+ (void)startWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(start(services:));
/**
* Start a service.
*
* @param service A service to start.
*
* @discussion This may be called only once per service per application process lifetime.
*/
+ (void)startService:(Class)service;
/**
* Configure the SDK with an array of services to start from a library. This will not start the service at application level, it will enable
* the service only for the library.
*
* @param services Array of services to start.
*/
+ (void)startFromLibraryWithServices:(NSArray<Class> *)services NS_SWIFT_NAME(startFromLibrary(services:));
/**
* The flag indicates whether the SDK has already been configured or not.
*/
@property(class, atomic, readonly, getter=isConfigured) BOOL configured;
/**
* The flag indicates whether app is running in App Center Test Cloud.
*/
@property(class, atomic, readonly, getter=isRunningInAppCenterTestCloud) BOOL runningInAppCenterTestCloud;
/**
* The flag indicates whether or not the SDK was enabled as a whole
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
/**
* Flag indicating whether SDK can send network requests.
*
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isNetworkRequestsAllowed, setter=setNetworkRequestsAllowed:)
BOOL networkRequestsAllowed NS_SWIFT_NAME(networkRequestsAllowed);
/**
* The SDK's log level.
*/
@property(class, nonatomic) MSACLogLevel logLevel;
/**
* Base URL to use for backend communication.
*/
@property(class, nonatomic, strong) NSString *logUrl;
/**
* Set log handler.
*/
@property(class, nonatomic) MSACLogHandler logHandler;
/**
* Set wrapper SDK information to use when building device properties. This is intended in case you are building a SDK that uses the App
* Center SDK under the hood, e.g. our Xamarin SDK or ReactNative SDk.
*/
@property(class, nonatomic, strong) MSACWrapperSdk *wrapperSdk;
#if !TARGET_OS_TV
/**
* Set the custom properties.
*
* @param customProperties Custom properties object.
*/
+ (void)setCustomProperties:(MSACCustomProperties *)customProperties;
#endif
/**
* Check whether the application delegate forwarder is enabled or not.
*
* @discussion The application delegate forwarder forwards messages that target your application delegate methods via swizzling to the SDK.
* It simplifies the SDK integration but may not be suitable to any situations. For
* instance it should be disabled if you or one of your third party SDK is doing message forwarding on the application delegate. Message
* forwarding usually implies the implementation of @see NSObject#forwardingTargetForSelector: or @see NSObject#forwardInvocation: methods.
* To disable the application delegate forwarder just add the `AppCenterAppDelegateForwarderEnabled` tag to your Info .plist file and set it
* to `0`. Then you will have to forward any application delegate needed by the SDK manually.
*/
@property(class, readonly, nonatomic, getter=isAppDelegateForwarderEnabled) BOOL appDelegateForwarderEnabled;
/**
* Unique installation identifier.
*
*/
@property(class, readonly, nonatomic) 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!
*
*/
@property(class, readonly, nonatomic, getter=isDebuggerAttached) BOOL debuggerAttached;
/**
* Current version of AppCenter SDK.
*
*/
@property(class, readonly, nonatomic) NSString *sdkVersion;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started. This method is only intended for
* applications.
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 20,480 bytes (20 KiB) will be ignored.
*
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise. This parameter can be null.
*
* @discussion This only sets the maximum size of the database, but App Center modules might store additional data.
* The value passed to this method is not persisted on disk. The default maximum database size is 10485760 bytes (10 MiB).
*/
+ (void)setMaxStorageSize:(long)sizeInBytes completionHandler:(void (^)(BOOL))completionHandler;
/**
* Set the user identifier.
*
* @discussion Set the user identifier for logs sent for the default target token when the secret passed in @c
* MSACAppCenter:start:withServices: contains "target={targetToken}".
*
* For App Center backend the user identifier maximum length is 256 characters.
*
* AppCenter must be configured or started before this API can be used.
*/
@property(class, nonatomic, strong) NSString *userId;
/**
* Set country code to use when building device properties.
*
* @see https://www.iso.org/obp/ui/#search for more information.
*/
@property(class, nonatomic, strong) NSString *countryCode;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d6c0b87fe2f081c4085d18397fe5e706
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_APP_CENTER_ERRORS_H
#define MSAC_APP_CENTER_ERRORS_H
#import <Foundation/Foundation.h>
#define MSAC_APP_CENTER_BASE_DOMAIN @"com.Microsoft.AppCenter."
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Domain
static NSString *const kMSACACErrorDomain = MSAC_APP_CENTER_BASE_DOMAIN @"ErrorDomain";
#pragma mark - General
// Error codes.
NS_ENUM(NSInteger){MSACACLogInvalidContainerErrorCode = 1, MSACACCanceledErrorCode = 2, MSACACDisabledErrorCode = 3};
// Error descriptions.
static NSString const *kMSACACLogInvalidContainerErrorDesc = @"Invalid log container.";
static NSString const *kMSACACCanceledErrorDesc = @"The operation was canceled.";
static NSString const *kMSACACDisabledErrorDesc = @"The service is disabled.";
#pragma mark - Connection
// Error codes.
NS_ENUM(NSInteger){MSACACConnectionPausedErrorCode = 100, MSACACConnectionHttpErrorCode = 101};
// Error descriptions.
static NSString const *kMSACACConnectionHttpErrorDesc = @"An HTTP error occured.";
static NSString const *kMSACACConnectionPausedErrorDesc = @"Canceled, connection paused with log deletion.";
// Error user info keys.
static NSString const *kMSACACConnectionHttpCodeErrorKey = @"MSConnectionHttpCode";
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2e2ffb05ce25fa74c844373a605ebe88
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_GROUP_PROTOCOL_H
#define MSAC_CHANNEL_GROUP_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACChannelProtocol.h>)
#import <AppCenter/MSACChannelProtocol.h>
#else
#import "MSACChannelProtocol.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@class MSACChannelUnitConfiguration;
@protocol MSACIngestionProtocol;
@protocol MSACChannelUnitProtocol;
/**
* `MSACChannelGroupProtocol` represents a kind of channel that contains constituent MSACChannelUnit objects. When an operation from the
* `MSACChannelProtocol` is performed on the group, that operation should be propagated to its constituent MSACChannelUnit objects.
*/
NS_SWIFT_NAME(ChannelGroupProtocol)
@protocol MSACChannelGroupProtocol <MSACChannelProtocol>
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
NS_SWIFT_NAME(addChannelUnit(withConfiguration:));
/**
* Initialize a channel unit with the given configuration.
*
* @param configuration channel configuration.
* @param ingestion The alternative ingestion object
*
* @return The added `MSACChannelUnitProtocol`. Use this object to enqueue logs.
*/
- (id<MSACChannelUnitProtocol>)addChannelUnitWithConfiguration:(MSACChannelUnitConfiguration *)configuration
withIngestion:(nullable id<MSACIngestionProtocol>)ingestion
NS_SWIFT_NAME(addChannelUnit(_:ingestion:));
/**
* Change the base URL (schema + authority + port only) used to communicate with the backend.
*/
@property(nonatomic, strong) NSString *_Nullable logUrl;
/**
* Set the app secret.
*/
@property(nonatomic, strong) NSString *_Nullable appSecret;
/**
* Set the maximum size of the internal storage. This method must be called before App Center is started.
*
* @discussion The default maximum database size is 10485760 bytes (10 MiB).
*
* @param sizeInBytes Maximum size of the internal storage in bytes. This will be rounded up to the nearest multiple of a SQLite page size
* (default is 4096 bytes). Values below 24576 bytes (24 KiB) will be ignored.
* @param completionHandler Callback that is invoked when the database size has been set. The `BOOL` parameter is `YES` if changing the size
* is successful, and `NO` otherwise.
*/
- (void)setMaxStorageSize:(long)sizeInBytes
completionHandler:(nullable void (^)(BOOL))completionHandler NS_SWIFT_NAME(setMaxStorageSize(_:completionHandler:));
/**
* Return a channel unit instance for the given groupId.
*
* @param groupId The group ID for a channel unit.
*
* @return A channel unit instance or `nil`.
*/
- (nullable id<MSACChannelUnitProtocol>)channelUnitForGroupId:(NSString *)groupId;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 59b4c9ccf873ec14aac775ea6355576b
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,68 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CHANNEL_PROTOCOL_H
#define MSAC_CHANNEL_PROTOCOL_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACEnable.h>)
#import <AppCenter/MSACEnable.h>
#else
#import "MSACEnable.h"
#endif
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate;
/**
* `MSACChannelProtocol` contains the essential operations of a channel. Channels are broadly responsible for enqueuing logs to be sent to
* the backend and/or stored on disk.
*/
NS_SWIFT_NAME(ChannelProtocol)
@protocol MSACChannelProtocol <NSObject, MSACEnable>
/**
* Add delegate.
*
* @param delegate delegate.
*/
- (void)addDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Remove delegate.
*
* @param delegate delegate.
*/
- (void)removeDelegate:(id<MSACChannelDelegate>)delegate;
/**
* Pause operations, logs will be stored but not sent.
*
* @param identifyingObject Object used to identify the pause request.
*
* @discussion A paused channel doesn't forward logs to the ingestion. The identifying object used to pause the channel can be any unique
* object. The same identifying object must be used to call resume. For simplicity if the caller is the one owning the channel then @c self
* can be used as identifying object.
*
* @see resumeWithIdentifyingObject:
*/
- (void)pauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Resume operations, logs can be sent again.
*
* @param identifyingObject Object used to passed to the pause method.
*
* @discussion The channel only resume when all the outstanding identifying objects have been resumed.
*
* @see pauseWithIdentifyingObject:
*/
- (void)resumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
@end
NS_ASSUME_NONNULL_END
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5c86ac1e5f839b34e9fea988dde215ab
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,18 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CONSTANTS_FLAGS_H
#define MSAC_CONSTANTS_FLAGS_H
#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSUInteger, MSACFlags) {
MSACFlagsNone = (0 << 0), // => 00000000
MSACFlagsNormal = (1 << 0), // => 00000001
MSACFlagsCritical = (1 << 1), // => 00000010
MSACFlagsPersistenceNormal DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsNormal") = MSACFlagsNormal,
MSACFlagsPersistenceCritical DEPRECATED_MSG_ATTRIBUTE("please use MSACFlagsCritical") = MSACFlagsCritical,
MSACFlagsDefault = MSACFlagsNormal
} NS_SWIFT_NAME(Flags);
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 691d011af5ecef846b0bf1232358d6fd
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,170 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
/**
* Log Levels
*/
typedef NS_ENUM(NSUInteger, MSACLogLevel) {
/**
* Logging will be very chatty
*/
MSACLogLevelVerbose = 2,
/**
* Debug information will be logged
*/
MSACLogLevelDebug = 3,
/**
* Information will be logged
*/
MSACLogLevelInfo = 4,
/**
* Errors and warnings will be logged
*/
MSACLogLevelWarning = 5,
/**
* Errors will be logged
*/
MSACLogLevelError = 6,
/**
* Only critical errors will be logged
*/
MSACLogLevelAssert = 7,
/**
* Logging is disabled
*/
MSACLogLevelNone = 99
} NS_SWIFT_NAME(LogLevel);
typedef NSString * (^MSACLogMessageProvider)(void)NS_SWIFT_NAME(LogMessageProvider);
typedef void (^MSACLogHandler)(MSACLogMessageProvider messageProvider, MSACLogLevel logLevel, NSString *tag, const char *file,
const char *function, uint line) NS_SWIFT_NAME(LogHandler);
/**
* Channel priorities, check the kMSACPriorityCount if you add a new value.
* The order matters here! Values NEED to range from low priority to high priority.
*/
typedef NS_ENUM(NSInteger, MSACPriority) { MSACPriorityBackground, MSACPriorityDefault, MSACPriorityHigh } NS_SWIFT_NAME(Priority);
static short const kMSACPriorityCount = MSACPriorityHigh + 1;
/**
* The priority by which the modules are initialized.
* MSACPriorityMax is reserved for only 1 module and this needs to be Crashes.
* Crashes needs to be initialized first to catch crashes in our other SDK Modules (which will hopefully never happen) and to avoid losing
* any log at crash time.
*/
typedef NS_ENUM(NSInteger, MSACInitializationPriority) {
MSACInitializationPriorityDefault = 500,
MSACInitializationPriorityHigh = 750,
MSACInitializationPriorityMax = 999
} NS_SWIFT_NAME(InitializationPriority);
/**
* Enum with the different HTTP status codes.
*/
typedef NS_ENUM(NSInteger, MSACHTTPCodesNo) {
// Invalid
MSACHTTPCodesNo0XXInvalidUnknown = 0,
// Informational
MSACHTTPCodesNo1XXInformationalUnknown = 1,
MSACHTTPCodesNo100Continue = 100,
MSACHTTPCodesNo101SwitchingProtocols = 101,
MSACHTTPCodesNo102Processing = 102,
// Success
MSACHTTPCodesNo2XXSuccessUnknown = 2,
MSACHTTPCodesNo200OK = 200,
MSACHTTPCodesNo201Created = 201,
MSACHTTPCodesNo202Accepted = 202,
MSACHTTPCodesNo203NonAuthoritativeInformation = 203,
MSACHTTPCodesNo204NoContent = 204,
MSACHTTPCodesNo205ResetContent = 205,
MSACHTTPCodesNo206PartialContent = 206,
MSACHTTPCodesNo207MultiStatus = 207,
MSACHTTPCodesNo208AlreadyReported = 208,
MSACHTTPCodesNo209IMUsed = 209,
// Redirection
MSACHTTPCodesNo3XXSuccessUnknown = 3,
MSACHTTPCodesNo300MultipleChoices = 300,
MSACHTTPCodesNo301MovedPermanently = 301,
MSACHTTPCodesNo302Found = 302,
MSACHTTPCodesNo303SeeOther = 303,
MSACHTTPCodesNo304NotModified = 304,
MSACHTTPCodesNo305UseProxy = 305,
MSACHTTPCodesNo306SwitchProxy = 306,
MSACHTTPCodesNo307TemporaryRedirect = 307,
MSACHTTPCodesNo308PermanentRedirect = 308,
// Client error
MSACHTTPCodesNo4XXSuccessUnknown = 4,
MSACHTTPCodesNo400BadRequest = 400,
MSACHTTPCodesNo401Unauthorised = 401,
MSACHTTPCodesNo402PaymentRequired = 402,
MSACHTTPCodesNo403Forbidden = 403,
MSACHTTPCodesNo404NotFound = 404,
MSACHTTPCodesNo405MethodNotAllowed = 405,
MSACHTTPCodesNo406NotAcceptable = 406,
MSACHTTPCodesNo407ProxyAuthenticationRequired = 407,
MSACHTTPCodesNo408RequestTimeout = 408,
MSACHTTPCodesNo409Conflict = 409,
MSACHTTPCodesNo410Gone = 410,
MSACHTTPCodesNo411LengthRequired = 411,
MSACHTTPCodesNo412PreconditionFailed = 412,
MSACHTTPCodesNo413RequestEntityTooLarge = 413,
MSACHTTPCodesNo414RequestURITooLong = 414,
MSACHTTPCodesNo415UnsupportedMediaType = 415,
MSACHTTPCodesNo416RequestedRangeNotSatisfiable = 416,
MSACHTTPCodesNo417ExpectationFailed = 417,
MSACHTTPCodesNo418IamATeapot = 418,
MSACHTTPCodesNo419AuthenticationTimeout = 419,
MSACHTTPCodesNo420MethodFailureSpringFramework = 420,
MSACHTTPCodesNo420EnhanceYourCalmTwitter = 4200,
MSACHTTPCodesNo422UnprocessableEntity = 422,
MSACHTTPCodesNo423Locked = 423,
MSACHTTPCodesNo424FailedDependency = 424,
MSACHTTPCodesNo424MethodFailureWebDaw = 4240,
MSACHTTPCodesNo425UnorderedCollection = 425,
MSACHTTPCodesNo426UpgradeRequired = 426,
MSACHTTPCodesNo428PreconditionRequired = 428,
MSACHTTPCodesNo429TooManyRequests = 429,
MSACHTTPCodesNo431RequestHeaderFieldsTooLarge = 431,
MSACHTTPCodesNo444NoResponseNginx = 444,
MSACHTTPCodesNo449RetryWithMicrosoft = 449,
MSACHTTPCodesNo450BlockedByWindowsParentalControls = 450,
MSACHTTPCodesNo451RedirectMicrosoft = 451,
MSACHTTPCodesNo451UnavailableForLegalReasons = 4510,
MSACHTTPCodesNo494RequestHeaderTooLargeNginx = 494,
MSACHTTPCodesNo495CertErrorNginx = 495,
MSACHTTPCodesNo496NoCertNginx = 496,
MSACHTTPCodesNo497HTTPToHTTPSNginx = 497,
MSACHTTPCodesNo499ClientClosedRequestNginx = 499,
// Server error
MSACHTTPCodesNo5XXSuccessUnknown = 5,
MSACHTTPCodesNo500InternalServerError = 500,
MSACHTTPCodesNo501NotImplemented = 501,
MSACHTTPCodesNo502BadGateway = 502,
MSACHTTPCodesNo503ServiceUnavailable = 503,
MSACHTTPCodesNo504GatewayTimeout = 504,
MSACHTTPCodesNo505HTTPVersionNotSupported = 505,
MSACHTTPCodesNo506VariantAlsoNegotiates = 506,
MSACHTTPCodesNo507InsufficientStorage = 507,
MSACHTTPCodesNo508LoopDetected = 508,
MSACHTTPCodesNo509BandwidthLimitExceeded = 509,
MSACHTTPCodesNo510NotExtended = 510,
MSACHTTPCodesNo511NetworkAuthenticationRequired = 511,
MSACHTTPCodesNo522ConnectionTimedOut = 522,
MSACHTTPCodesNo598NetworkReadTimeoutErrorUnknown = 598,
MSACHTTPCodesNo599NetworkConnectTimeoutErrorUnknown = 599
} NS_SWIFT_NAME(HTTPCodesNo);
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 27edcc9a07a43ae4b968db5628d0d85e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,71 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_CUSTOM_PROPERTIES_H
#define MSAC_CUSTOM_PROPERTIES_H
#import <Foundation/Foundation.h>
/**
* Custom properties builder.
* Collects multiple properties to send in one log.
*/
NS_SWIFT_NAME(CustomProperties)
@interface MSACCustomProperties : NSObject
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setString:(NSString *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setNumber:(NSNumber *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setBool:(BOOL)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Set the specified property value with the specified key.
* If the properties previously contained a property for the key, the old value is replaced.
*
* @param key Key with which the specified value is to be set.
* @param value Value to be set with the specified key.
*
* @return This instance.
*/
- (instancetype)setDate:(NSDate *)value forKey:(NSString *)key NS_SWIFT_NAME(set(_:forKey:));
/**
* Clear the property for the specified key.
*
* @param key Key whose mapping is to be cleared.
*
* @return This instance.
*/
- (instancetype)clearPropertyForKey:(NSString *)key NS_SWIFT_NAME(clearProperty(forKey:));
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 007c15081409d7c4fb501d43d9c2b5ec
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,101 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_DEVICE_H
#define MSAC_DEVICE_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACWrapperSdk.h>)
#import <AppCenter/MSACWrapperSdk.h>
#else
#import "MSACWrapperSdk.h"
#endif
NS_SWIFT_NAME(Device)
@interface MSACDevice : MSACWrapperSdk
/*
* Name of the SDK. Consists of the name of the SDK and the platform, e.g. "appcenter.ios", "appcenter.android"
*/
@property(nonatomic, copy, readonly) NSString *sdkName;
/*
* Version of the SDK in semver format, e.g. "1.2.0" or "0.12.3-alpha.1".
*/
@property(nonatomic, copy, readonly) NSString *sdkVersion;
/*
* Device model (example: iPad2,3).
*/
@property(nonatomic, copy, readonly) NSString *model;
/*
* Device manufacturer (example: HTC).
*/
@property(nonatomic, copy, readonly) NSString *oemName;
/*
* OS name (example: iOS).
*/
@property(nonatomic, copy, readonly) NSString *osName;
/*
* OS version (example: 9.3.0).
*/
@property(nonatomic, copy, readonly) NSString *osVersion;
/*
* OS build code (example: LMY47X). [optional]
*/
@property(nonatomic, copy, readonly) NSString *osBuild;
/*
* API level when applicable like in Android (example: 15). [optional]
*/
@property(nonatomic, copy, readonly) NSNumber *osApiLevel;
/*
* Language code (example: en_US).
*/
@property(nonatomic, copy, readonly) NSString *locale;
/*
* The offset in minutes from UTC for the device time zone, including daylight savings time.
*/
@property(nonatomic, readonly, strong) NSNumber *timeZoneOffset;
/*
* Screen size of the device in pixels (example: 640x480).
*/
@property(nonatomic, copy, readonly) NSString *screenSize;
/*
* Application version name, e.g. 1.1.0
*/
@property(nonatomic, copy, readonly) NSString *appVersion;
/*
* Carrier name (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierName;
/*
* Carrier country code (for mobile devices). [optional]
*/
@property(nonatomic, copy, readonly) NSString *carrierCountry;
/*
* The app's build number, e.g. 42.
*/
@property(nonatomic, copy, readonly) NSString *appBuild;
/*
* The bundle identifier, package identifier, or namespace, depending on what the individual plattforms use, .e.g com.microsoft.example.
* [optional]
*/
@property(nonatomic, copy, readonly) NSString *appNamespace;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: c6090d5dc8899f94f9c57d8de12daf8d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,27 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_ENABLE_H
#define MSAC_ENABLE_H
#import <Foundation/Foundation.h>
/**
* Protocol to define an instance that can be enabled/disabled.
*/
NS_SWIFT_NAME(Enable)
@protocol MSACEnable <NSObject>
@required
/**
* Enable/disable this instance and delete data on disabled state.
*
* @param isEnabled A boolean value set to YES to enable the instance or NO to disable it.
* @param deleteData A boolean value set to YES to delete data or NO to keep it.
*/
- (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData NS_SWIFT_NAME(setEnabled(_:deleteDataOnDisabled:));
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2b55eaf557924204490676d9e484d033
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,74 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_H
#define MSAC_LOG_H
#import <Foundation/Foundation.h>
@class MSACDevice;
NS_SWIFT_NAME(Log)
@protocol MSACLog <NSObject>
/**
* Log type.
*/
@property(nonatomic, copy) NSString *type;
/**
* Log timestamp.
*/
@property(nonatomic, strong) NSDate *timestamp;
/**
* A session identifier is used to correlate logs together. A session is an abstract concept in the API and is not necessarily an analytics
* session, it can be used to only track crashes.
*/
@property(nonatomic, copy) NSString *sid;
/**
* Optional distribution group ID value.
*/
@property(nonatomic, copy) NSString *distributionGroupId;
/**
* Optional user identifier.
*/
@property(nonatomic, copy) NSString *userId;
/**
* Device properties associated to this log.
*/
@property(nonatomic, strong) MSACDevice *device;
/**
* Transient object tag. For example, a log can be tagged with a transmission target. We do this currently to prevent properties being
* applied retroactively to previous logs by comparing their tags.
*/
@property(nonatomic, strong) NSObject *tag;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
/**
* Adds a transmission target token that this log should be sent to.
*
* @param token The transmission target token.
*/
- (void)addTransmissionTargetToken:(NSString *)token;
/**
* Gets all transmission target tokens that this log should be sent to.
*
* @returns Collection of transmission target tokens that this log should be sent to.
*/
- (NSSet *)transmissionTargetTokens;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 71933501f40dc174dbb1452394fe4238
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_LOG_WITH_PROPERTIES_H
#define MSAC_LOG_WITH_PROPERTIES_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACAbstractLog.h>)
#import <AppCenter/MSACAbstractLog.h>
#else
#import "MSACAbstractLog.h"
#endif
NS_SWIFT_NAME(LogWithProperties)
@interface MSACLogWithProperties : MSACAbstractLog
/**
* Additional key/value pair parameters. [optional]
*/
@property(nonatomic, strong) NSDictionary<NSString *, NSString *> *properties;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 75a4cb55a13d80944b5d9ccf48da66da
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,54 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef MSAC_LOGGER
#define MSAC_LOGGER
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
#define MSACLog(_level, _tag, _message) \
[MSACLogger logMessage:_message level:_level tag:_tag file:__FILE__ function:__PRETTY_FUNCTION__ line:__LINE__]
#define MSACLogAssert(tag, format, ...) \
MSACLog(MSACLogLevelAssert, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogError(tag, format, ...) \
MSACLog(MSACLogLevelError, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogWarning(tag, format, ...) \
MSACLog(MSACLogLevelWarning, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogInfo(tag, format, ...) \
MSACLog(MSACLogLevelInfo, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogDebug(tag, format, ...) \
MSACLog(MSACLogLevelDebug, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
#define MSACLogVerbose(tag, format, ...) \
MSACLog(MSACLogLevelVerbose, tag, (^{ \
return [NSString stringWithFormat:(format), ##__VA_ARGS__]; \
}))
NS_SWIFT_NAME(Logger)
@interface MSACLogger : NSObject
+ (void)logMessage:(MSACLogMessageProvider)messageProvider
level:(MSACLogLevel)loglevel
tag:(NSString *)tag
file:(const char *)file
function:(const char *)function
line:(uint)line;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: dee347580c3ddf3438c1171ab7ec0aa0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#ifndef SERIALIZABLE_OBJECT_H
#define SERIALIZABLE_OBJECT_H
@protocol MSACSerializableObject <NSCoding>
/**
* Serialize this object to a dictionary.
*
* @return A dictionary representing this object.
*/
- (NSMutableDictionary *)serializeToDictionary;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4371122c1e116b444bdf89da9b5afdc9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_H
#define MSAC_SERVICE_H
#import <Foundation/Foundation.h>
/**
* Protocol declaring service logic.
*/
NS_SWIFT_NAME(Service)
@protocol MSACService <NSObject>
/**
* Indicates whether this service is enabled.
* The state is persisted in the device's storage across application launches.
*/
@property(class, nonatomic, getter=isEnabled, setter=setEnabled:) BOOL enabled NS_SWIFT_NAME(enabled);
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9c65525e380edab4490d6a46aee7c981
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,58 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_SERVICE_ABSTRACT_H
#define MSAC_SERVICE_ABSTRACT_H
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACService.h>)
#import <AppCenter/MSACService.h>
#else
#import "MSACService.h"
#endif
@protocol MSACChannelGroupProtocol;
/**
* Abstraction of services common logic.
* This class is intended to be subclassed only not instantiated directly.
*/
NS_SWIFT_NAME(ServiceAbstract)
@interface MSACServiceAbstract : NSObject <MSACService>
/**
* The flag indicates whether the service is started from application or not.
*/
@property(nonatomic, assign) BOOL startedFromApplication;
/**
* Start this service with a channel group. Also sets the flag that indicates that a service has been started.
*
* @param channelGroup channel group used to persist and send logs.
* @param appSecret app secret for the SDK.
* @param token default transmission target token for this service.
* @param fromApplication indicates whether the service started from an application or not.
*/
- (void)startWithChannelGroup:(id<MSACChannelGroupProtocol>)channelGroup
appSecret:(NSString *)appSecret
transmissionTargetToken:(NSString *)token
fromApplication:(BOOL)fromApplication;
/**
* Update configuration when the service requires to start again. This method should only be called if the service is started from libraries
* and then is being started from an application.
*
* @param appSecret app secret for the SDK.
* @param token default transmission target token for this service.
*/
- (void)updateConfigurationWithAppSecret:(NSString *)appSecret transmissionTargetToken:(NSString *)token;
/**
* The flag indicate whether the service needs the application secret or not.
*/
@property(atomic, readonly) BOOL isAppSecretRequired;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f5909332c1126f14fad70da5caf8d496
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,21 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#if __has_include(<AppCenter/MSACConstants.h>)
#import <AppCenter/MSACConstants.h>
#else
#import "MSACConstants.h"
#endif
/**
* This is a utility for producing App Center style log messages. It is only intended for use by App Center services and wrapper SDKs of App
* Center.
*/
NS_SWIFT_NAME(WrapperLogger)
@interface MSACWrapperLogger : NSObject
+ (void)MSACWrapperLog:(MSACLogMessageProvider)message tag:(NSString *)tag level:(MSACLogLevel)level;
@end
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b03b11801281aa24e922bbbb46ff78fa
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,60 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef MSAC_WRAPPER_SDK_H
#define MSAC_WRAPPER_SDK_H
#import <Foundation/Foundation.h>
NS_SWIFT_NAME(WrapperSdk)
@interface MSACWrapperSdk : NSObject
/*
* Version of the wrapper SDK. When the SDK is embedding another base SDK (for example Xamarin.Android wraps Android), the Xamarin specific
* version is populated into this field while sdkVersion refers to the original Android SDK. [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkVersion;
/*
* Name of the wrapper SDK (examples: Xamarin, Cordova). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperSdkName;
/*
* Version of the wrapper technology framework (Xamarin runtime version or ReactNative or Cordova etc...). [optional]
*/
@property(nonatomic, copy, readonly) NSString *wrapperRuntimeVersion;
/*
* Label that is used to identify application code 'version' released via Live Update beacon running on device.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateReleaseLabel;
/*
* Identifier of environment that current application release belongs to, deployment key then maps to environment like Production, Staging.
*/
@property(nonatomic, copy, readonly) NSString *liveUpdateDeploymentKey;
/*
* Hash of all files (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps identify the Release version on device or need
* to download updates in future
*/
@property(nonatomic, copy, readonly) NSString *liveUpdatePackageHash;
- (instancetype)initWithWrapperSdkVersion:(NSString *)wrapperSdkVersion
wrapperSdkName:(NSString *)wrapperSdkName
wrapperRuntimeVersion:(NSString *)wrapperRuntimeVersion
liveUpdateReleaseLabel:(NSString *)liveUpdateReleaseLabel
liveUpdateDeploymentKey:(NSString *)liveUpdateDeploymentKey
liveUpdatePackageHash:(NSString *)liveUpdatePackageHash;
/**
* Checks if the object's values are valid.
*
* @return YES, if the object is valid.
*/
- (BOOL)isValid;
@end
#endif
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 1d5d8ceddea113a43bacc8e2f7886c39
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: bfefdac84f20eff42a420ca79913b106
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 41af84fa5b977164488a92e63716da66
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,13 @@
framework module AppCenter {
umbrella header "AppCenter.h"
export *
module * { export * }
link framework "Foundation"
link framework "CoreTelephony"
link framework "SystemConfiguration"
link framework "UIKit"
link "sqlite3"
link "z"
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5da2ec48007613d4990bbb90acdc0914
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 748066203d70bfc4aafc78f80d8a18a0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,114 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#import <Foundation/Foundation.h>
#import "MSACConstants+Flags.h"
@protocol MSACChannelUnitProtocol;
@protocol MSACChannelGroupProtocol;
@protocol MSACChannelProtocol;
@protocol MSACLog;
NS_ASSUME_NONNULL_BEGIN
@protocol MSACChannelDelegate <NSObject>
@optional
/**
* A callback that is called when a channel unit is added to the channel group.
*
* @param channelGroup The channel group.
* @param channel The newly added channel.
*/
- (void)channelGroup:(id<MSACChannelGroupProtocol>)channelGroup didAddChannelUnit:(id<MSACChannelUnitProtocol>)channel;
/**
* A callback that is called when a log is just enqueued. Delegates may want to prepare the log a little more before further processing.
*
* @param log The log to prepare.
*/
- (void)channel:(id<MSACChannelProtocol>)channel prepareLog:(id<MSACLog>)log;
/**
* A callback that is called after a log is definitely prepared.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
* @param flags Options for the log.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPrepareLog:(id<MSACLog>)log internalId:(NSString *)internalId flags:(MSACFlags)flags;
/**
* A callback that is called after a log completed the enqueueing process whether it was successful or not.
*
* @param log The log.
* @param internalId An internal Id to keep track of logs.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didCompleteEnqueueingLog:(id<MSACLog>)log internalId:(NSString *)internalId;
/**
* Callback method that will be called before each log will be send to the server.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel willSendLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was able to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSucceedSendingLog:(id<MSACLog>)log;
/**
* Callback method that will be called in case the SDK was unable to send a log.
*
* @param channel The channel object.
* @param log The log to be sent.
* @param error The error that occured.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didFailSendingLog:(id<MSACLog>)log withError:(nullable NSError *)error;
/**
* A callback that is called when setEnabled has been invoked.
*
* @param channel The channel.
* @param isEnabled The boolean that indicates enabled.
* @param deletedData The boolean that indicates deleting data on disabled.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didSetEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deletedData;
/**
* A callback that is called when pause has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to pause the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didPauseWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* A callback that is called when resume has been invoked.
*
* @param channel The channel.
* @param identifyingObject The identifying object used to resume the channel.
*/
- (void)channel:(id<MSACChannelProtocol>)channel didResumeWithIdentifyingObject:(id<NSObject>)identifyingObject;
/**
* Callback method that will determine if a log should be filtered out from the usual processing pipeline. If any delegate returns true, the
* log is filtered.
*
* @param channelUnit The channel unit that is going to send the log.
* @param log The log to be filtered or not.
*
* @return `true` if the log should be filtered out.
*/
- (BOOL)channelUnit:(id<MSACChannelUnitProtocol>)channelUnit shouldFilterLog:(id<MSACLog>)log;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 152ef2246954088468276b005fe3b321
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import <Foundation/Foundation.h>
@interface AppCenterStarter : NSObject
@end
@@ -0,0 +1,31 @@
fileFormatVersion: 2
guid: 66682104049734a38a8f3114df75215f
timeCreated: 1502221064
licenseType: Pro
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,136 @@
#define APPCENTER_UNITY_USE_CRASHES
#define APPCENTER_UNITY_USE_ANALYTICS
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "AppCenterStarter.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@import AppCenter;
#ifdef APPCENTER_UNITY_USE_CRASHES
@import AppCenterCrashes;
#endif
#ifdef APPCENTER_UNITY_USE_ANALYTICS
@import AppCenterAnalytics;
#endif
#ifdef APPCENTER_UNITY_USE_DISTRIBUTE
@import AppCenterDistribute;
#import "../Distribute/DistributeDelegate.h"
#endif
enum StartupMode {
APPCENTER,
ONECOLLECTOR,
BOTH,
NONE,
SKIP
};
@implementation AppCenterStarter
static NSString *const kMSAppSecret = @"d8e69880-4b16-468e-9216-d0eec8fff482";
static NSString *const kMSTargetToken = @"appcenter-transmission-target-token";
static NSString *const kMSCustomLogUrl = @"custom-log-url";
static NSString *const kMSCustomAllowNetworkRequests = @"YES";
static NSString *const kMSCustomApiUrl = @"custom-api-url";
static NSString *const kMSCustomInstallUrl = @"custom-install-url";
static NSString *const kMSStartTargetKey = @"MSAppCenterStartTargetUnityKey";
static NSString *const kMSStorageSizeKey = @"MSAppCenterMaxStorageSizeUnityKey";
static NSString *const kMSLogUrlKey = @"MSAppCenterLogUrlUnityKey";
static NSString *const kMSAppSecretKey = @"MSAppCenterAppSecretUnityKey";
static NSString *const kMSUpdateTrackKey = @"MSAppCenterUpdateTrackUnityKey";
static const int kMSLogLevel = 0 /*LOG_LEVEL*/;
static const int kMSStartupType = 0 /*STARTUP_TYPE*/;
static const int kMSUpdateTrack = 1;
+ (void)load {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(startAppCenter)
name:UIApplicationDidFinishLaunchingNotification
object:nil];
}
+ (void)startAppCenter {
NSNumber *startTarget = [[NSUserDefaults standardUserDefaults] objectForKey:kMSStartTargetKey];
int startTargetValue = startTarget == nil ? kMSStartupType : startTarget.intValue;
[MSACAppCenter setLogLevel:(MSACLogLevel)kMSLogLevel];
if (startTargetValue == SKIP) {
return;
}
NSMutableArray<Class> *classes = [[NSMutableArray alloc] init];
NSNumber *maxStorageSize = [[NSUserDefaults standardUserDefaults] objectForKey:kMSStorageSizeKey];
if (maxStorageSize != nil) {
[MSACAppCenter setMaxStorageSize:maxStorageSize
completionHandler:^void(BOOL result) {
if (!result) {
MSACLogWarning(@"MSACAppCenter", @"setMaxStorageSize failed");
}
}];
} else {
#ifdef APPCENTER_USE_CUSTOM_MAX_STORAGE_SIZE
[MSACAppCenter setMaxStorageSize:APPCENTER_MAX_STORAGE_SIZE
completionHandler:^void(BOOL result) {
if (!result) {
MSACLogWarning(@"MSACAppCenter", @"setMaxStorageSize failed");
}
}];
#endif
}
#ifdef APPCENTER_UNITY_USE_ANALYTICS
[classes addObject:MSACAnalytics.class];
#endif
#ifdef APPCENTER_UNITY_USE_DISTRIBUTE
[MSACDistribute setUpdateTrack:(MSACUpdateTrack)kMSUpdateTrack];
#ifdef APPCENTER_UNITY_USE_CUSTOM_API_URL
[MSACDistribute setApiUrl:kMSCustomApiUrl];
#endif // APPCENTER_UNITY_USE_CUSTOM_API_URL
#ifdef APPCENTER_UNITY_USE_CUSTOM_INSTALL_URL
[MSACDistribute setInstallUrl:kMSCustomInstallUrl];
#endif // APPCENTER_UNITY_USE_CUSTOM_INSTALL_URL
#ifdef APPCENTER_DISTRIBUTE_DISABLE_AUTOMATIC_CHECK_FOR_UPDATE
[MSACDistribute disableAutomaticCheckForUpdate];
#endif // APPCENTER_DISTRIBUTE_DISABLE_AUTOMATIC_CHECK_FOR_UPDATE
#endif // APPCENTER_UNITY_USE_DISTRIBUTE
NSString *customLogUrl = [[NSUserDefaults standardUserDefaults] objectForKey:kMSLogUrlKey];
if (customLogUrl != nil) {
[MSACAppCenter setLogUrl:customLogUrl];
} else {
#ifdef APPCENTER_UNITY_USE_CUSTOM_LOG_URL
[MSACAppCenter setLogUrl:kMSCustomLogUrl];
#endif
}
[MSACAppCenter setNetworkRequestsAllowed:[kMSCustomAllowNetworkRequests boolValue]];
NSString *customAppSecret = [[NSUserDefaults standardUserDefaults] objectForKey:kMSAppSecretKey];
NSString *customAppSecretValue = customAppSecret == nil ? kMSAppSecret : customAppSecret;
switch (startTargetValue) {
case APPCENTER:
[MSACAppCenter start:customAppSecretValue withServices:classes];
break;
case ONECOLLECTOR:
[MSACAppCenter start:[NSString stringWithFormat:@"target=%@", kMSTargetToken] withServices:classes];
break;
case BOTH:
[MSACAppCenter start:[NSString stringWithFormat:@"appsecret=%@;target=%@", customAppSecretValue, kMSTargetToken] withServices:classes];
break;
case NONE:
[MSACAppCenter startWithServices:classes];
break;
}
}
@end
@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: 319e7c6587510e9448244e0315279873
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,134 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "AppCenterStarter.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@import AppCenter;
#ifdef APPCENTER_UNITY_USE_CRASHES
@import AppCenterCrashes;
#endif
#ifdef APPCENTER_UNITY_USE_ANALYTICS
@import AppCenterAnalytics;
#endif
#ifdef APPCENTER_UNITY_USE_DISTRIBUTE
@import AppCenterDistribute;
#import "../Distribute/DistributeDelegate.h"
#endif
enum StartupMode {
APPCENTER,
ONECOLLECTOR,
BOTH,
NONE,
SKIP
};
@implementation AppCenterStarter
static NSString *const kMSAppSecret = @"appcenter-app-secret";
static NSString *const kMSTargetToken = @"appcenter-transmission-target-token";
static NSString *const kMSCustomLogUrl = @"custom-log-url";
static NSString *const kMSCustomAllowNetworkRequests = @"allow-network-requests";
static NSString *const kMSCustomApiUrl = @"custom-api-url";
static NSString *const kMSCustomInstallUrl = @"custom-install-url";
static NSString *const kMSStartTargetKey = @"MSAppCenterStartTargetUnityKey";
static NSString *const kMSStorageSizeKey = @"MSAppCenterMaxStorageSizeUnityKey";
static NSString *const kMSLogUrlKey = @"MSAppCenterLogUrlUnityKey";
static NSString *const kMSAppSecretKey = @"MSAppCenterAppSecretUnityKey";
static NSString *const kMSUpdateTrackKey = @"MSAppCenterUpdateTrackUnityKey";
static const int kMSLogLevel = 0 /*LOG_LEVEL*/;
static const int kMSStartupType = 0 /*STARTUP_TYPE*/;
static const int kMSUpdateTrack = 1 /*UPDATE_TRACK*/;
+ (void)load {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(startAppCenter)
name:UIApplicationDidFinishLaunchingNotification
object:nil];
}
+ (void)startAppCenter {
NSNumber *startTarget = [[NSUserDefaults standardUserDefaults] objectForKey:kMSStartTargetKey];
int startTargetValue = startTarget == nil ? kMSStartupType : startTarget.intValue;
[MSACAppCenter setLogLevel:(MSACLogLevel)kMSLogLevel];
if (startTargetValue == SKIP) {
return;
}
NSMutableArray<Class> *classes = [[NSMutableArray alloc] init];
NSNumber *maxStorageSize = [[NSUserDefaults standardUserDefaults] objectForKey:kMSStorageSizeKey];
if (maxStorageSize != nil) {
[MSACAppCenter setMaxStorageSize:maxStorageSize
completionHandler:^void(BOOL result) {
if (!result) {
MSACLogWarning(@"MSACAppCenter", @"setMaxStorageSize failed");
}
}];
} else {
#ifdef APPCENTER_USE_CUSTOM_MAX_STORAGE_SIZE
[MSACAppCenter setMaxStorageSize:APPCENTER_MAX_STORAGE_SIZE
completionHandler:^void(BOOL result) {
if (!result) {
MSACLogWarning(@"MSACAppCenter", @"setMaxStorageSize failed");
}
}];
#endif
}
#ifdef APPCENTER_UNITY_USE_ANALYTICS
[classes addObject:MSACAnalytics.class];
#endif
#ifdef APPCENTER_UNITY_USE_DISTRIBUTE
[MSACDistribute setUpdateTrack:(MSACUpdateTrack)kMSUpdateTrack];
#ifdef APPCENTER_UNITY_USE_CUSTOM_API_URL
[MSACDistribute setApiUrl:kMSCustomApiUrl];
#endif // APPCENTER_UNITY_USE_CUSTOM_API_URL
#ifdef APPCENTER_UNITY_USE_CUSTOM_INSTALL_URL
[MSACDistribute setInstallUrl:kMSCustomInstallUrl];
#endif // APPCENTER_UNITY_USE_CUSTOM_INSTALL_URL
#ifdef APPCENTER_DISTRIBUTE_DISABLE_AUTOMATIC_CHECK_FOR_UPDATE
[MSACDistribute disableAutomaticCheckForUpdate];
#endif // APPCENTER_DISTRIBUTE_DISABLE_AUTOMATIC_CHECK_FOR_UPDATE
#endif // APPCENTER_UNITY_USE_DISTRIBUTE
NSString *customLogUrl = [[NSUserDefaults standardUserDefaults] objectForKey:kMSLogUrlKey];
if (customLogUrl != nil) {
[MSACAppCenter setLogUrl:customLogUrl];
} else {
#ifdef APPCENTER_UNITY_USE_CUSTOM_LOG_URL
[MSACAppCenter setLogUrl:kMSCustomLogUrl];
#endif
}
[MSACAppCenter setNetworkRequestsAllowed:[kMSCustomAllowNetworkRequests boolValue]];
NSString *customAppSecret = [[NSUserDefaults standardUserDefaults] objectForKey:kMSAppSecretKey];
NSString *customAppSecretValue = customAppSecret == nil ? kMSAppSecret : customAppSecret;
switch (startTargetValue) {
case APPCENTER:
[MSACAppCenter start:customAppSecretValue withServices:classes];
break;
case ONECOLLECTOR:
[MSACAppCenter start:[NSString stringWithFormat:@"target=%@", kMSTargetToken] withServices:classes];
break;
case BOTH:
[MSACAppCenter start:[NSString stringWithFormat:@"appsecret=%@;target=%@", customAppSecretValue, kMSTargetToken] withServices:classes];
break;
case NONE:
[MSACAppCenter startWithServices:classes];
break;
}
}
@end
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 108740626ae994147a6859d8bc3232ed
timeCreated: 1512519361
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,27 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import <AppCenter/AppCenter.h>
extern "C" void appcenter_unity_set_log_level(int logLevel);
extern "C" int appcenter_unity_get_log_level();
extern "C" bool appcenter_unity_is_configured();
extern "C" void appcenter_unity_set_log_url(const char* logUrl);
extern "C" void appcenter_unity_set_user_id(char* userId);
extern "C" void appcenter_unity_set_enabled(bool isEnabled);
extern "C" void appcenter_unity_set_network_requests_allowed(bool isAllowed);
extern "C" bool appcenter_unity_is_network_requests_allowed();
extern "C" bool appcenter_unity_is_enabled();
extern "C" const char* appcenter_unity_get_sdk_version();
extern "C" const char* appcenter_unity_get_install_id();
extern "C" void appcenter_unity_start(const char* appSecret, void** services, int count);
extern "C" void appcenter_unity_start_no_secret(void** services, int count);
extern "C" void appcenter_unity_start_from_library(void** services, int count);
extern "C" void appcenter_unity_set_custom_properties(MSACCustomProperties* properties);
extern "C" void appcenter_unity_set_wrapper_sdk(const char* wrapperSdkVersion,
const char* wrapperSdkName,
const char* wrapperRuntimeVersion,
const char* liveUpdateReleaseLabel,
const char* liveUpdateDeploymentKey,
const char* liveUpdatePackageHash);
extern "C" void appcenter_unity_set_storage_size(long size, void(* completionHandler)(bool));
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 5c100da765363433c9bef3b81d036625
timeCreated: 1497286029
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,115 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "AppCenterUnity.h"
#import "Utility/NSStringHelper.h"
#import <AppCenter/AppCenter.h>
#import <Foundation/Foundation.h>
NSMutableArray<Class>* get_services_array(void** services, int count) {
NSMutableArray<Class>* servicesArray = [NSMutableArray new];
for (int i = 0; i < count; i++) {
[servicesArray addObject:(Class)CFBridgingRelease(services[i])];
}
return servicesArray;
}
void appcenter_unity_set_log_level(int logLevel)
{
[MSACAppCenter setLogLevel:(MSACLogLevel)logLevel];
}
int appcenter_unity_get_log_level()
{
return (int)MSACAppCenter.logLevel;
}
bool appcenter_unity_is_configured()
{
return [MSACAppCenter isConfigured];
}
void appcenter_unity_set_log_url(const char* logUrl)
{
[MSACAppCenter setLogUrl:appcenter_unity_cstr_to_ns_string(logUrl)];
}
void appcenter_unity_set_user_id(char* userId)
{
[MSACAppCenter setUserId: appcenter_unity_cstr_to_ns_string(userId)];
}
void appcenter_unity_set_enabled(bool isEnabled)
{
[MSACAppCenter setEnabled:isEnabled];
}
void appcenter_unity_set_network_requests_allowed(bool isAllowed)
{
[MSACAppCenter setNetworkRequestsAllowed:isAllowed];
}
bool appcenter_unity_is_network_requests_allowed()
{
return [MSACAppCenter isNetworkRequestsAllowed];
}
void appcenter_unity_start(const char* appSecret, void** services, int count) {
NSMutableArray<Class>* servicesArray = get_services_array(services, count);
[MSACAppCenter start:appcenter_unity_cstr_to_ns_string(appSecret) withServices:servicesArray];
}
void appcenter_unity_start_no_secret(void** services, int count) {
NSMutableArray<Class>* servicesArray = get_services_array(services, count);
[MSACAppCenter startWithServices:servicesArray];
}
void appcenter_unity_start_from_library(void** services, int count) {
NSMutableArray<Class>* servicesArray = get_services_array(services, count);
[MSACAppCenter startFromLibraryWithServices:servicesArray];
}
bool appcenter_unity_is_enabled()
{
return [MSACAppCenter isEnabled];
}
const char* appcenter_unity_get_install_id()
{
NSString *uuidString = [[MSACAppCenter installId] UUIDString];
return appcenter_unity_ns_string_to_cstr(uuidString);
}
const char* appcenter_unity_get_sdk_version()
{
return appcenter_unity_ns_string_to_cstr([MSACAppCenter sdkVersion]);
}
void appcenter_unity_set_custom_properties(MSACCustomProperties* properties)
{
[MSACAppCenter setCustomProperties:properties];
}
void appcenter_unity_set_wrapper_sdk(const char* wrapperSdkVersion,
const char* wrapperSdkName,
const char* wrapperRuntimeVersion,
const char* liveUpdateReleaseLabel,
const char* liveUpdateDeploymentKey,
const char* liveUpdatePackageHash)
{
MSACWrapperSdk *wrapperSdk = [[MSACWrapperSdk alloc]
initWithWrapperSdkVersion:appcenter_unity_cstr_to_ns_string(wrapperSdkVersion)
wrapperSdkName:appcenter_unity_cstr_to_ns_string(wrapperSdkName)
wrapperRuntimeVersion:appcenter_unity_cstr_to_ns_string(wrapperRuntimeVersion)
liveUpdateReleaseLabel:appcenter_unity_cstr_to_ns_string(liveUpdateReleaseLabel)
liveUpdateDeploymentKey:appcenter_unity_cstr_to_ns_string(liveUpdateDeploymentKey)
liveUpdatePackageHash:appcenter_unity_cstr_to_ns_string(liveUpdatePackageHash)];
[MSACAppCenter setWrapperSdk:wrapperSdk];
}
void appcenter_unity_set_storage_size(long size, void(* completionHandler)(bool))
{
[MSACAppCenter setMaxStorageSize:size completionHandler:^void(BOOL result){
completionHandler(result);
}];
}
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 3b5db8253bf544e5c98f4452295247d7
timeCreated: 1497286025
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,13 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import <AppCenter/AppCenter.h>
#import <Foundation/Foundation.h>
// Don't need to return value because reference is kept by wrapper
extern "C" MSACCustomProperties* appcenter_unity_custom_properties_create();
extern "C" void appcenter_unity_custom_properties_set_string(MSACCustomProperties* properties, char* key, char* val);
extern "C" void appcenter_unity_custom_properties_set_number(MSACCustomProperties* properties, char* key, NSNumber* val);
extern "C" void appcenter_unity_custom_properties_set_bool(MSACCustomProperties* properties, char* key, bool val);
extern "C" void appcenter_unity_custom_properties_set_date(MSACCustomProperties* properties, char* key, NSDate* val);
extern "C" void appcenter_unity_custom_properties_clear(MSACCustomProperties* properties, char* key);
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 3b9806201870a40199602233a9b5a765
timeCreated: 1498515104
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,36 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "CustomProperties.h"
#import <AppCenter/AppCenter.h>
#import <Foundation/Foundation.h>
MSACCustomProperties* appcenter_unity_custom_properties_create()
{
return [[MSACCustomProperties alloc] init];
}
void appcenter_unity_custom_properties_set_string(MSACCustomProperties* properties, char* key, char* val)
{
[properties setString:[NSString stringWithUTF8String:val] forKey:[NSString stringWithUTF8String:key]];
}
void appcenter_unity_custom_properties_set_number(MSACCustomProperties* properties, char* key, NSNumber* val)
{
[properties setNumber:val forKey:[NSString stringWithUTF8String:key]];
}
void appcenter_unity_custom_properties_set_bool(MSACCustomProperties* properties, char* key, bool val)
{
[properties setBool:val forKey:[NSString stringWithUTF8String:key]];
}
void appcenter_unity_custom_properties_set_date(MSACCustomProperties* properties, char* key, NSDate* val)
{
[properties setDate:val forKey:[NSString stringWithUTF8String:key]];
}
void appcenter_unity_custom_properties_clear(MSACCustomProperties* properties, char* key)
{
[properties clearPropertyForKey:[NSString stringWithUTF8String:key]];
}
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 6cee2815ee4e04655909ecaba350282c
timeCreated: 1498515094
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 57b1dd6d6806d452d9dd3c180ce26a1f
folderAsset: yes
timeCreated: 1498062770
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,88 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#if UNITY_IOS && !UNITY_EDITOR
using System;
using System.Runtime.InteropServices;
namespace Microsoft.AppCenter.Unity
{
public static class DeviceHelper
{
public static Device Convert(IntPtr devicePtr)
{
if (devicePtr == IntPtr.Zero)
{
return null;
}
var sdkName = app_center_unity_device_sdk_name(devicePtr);
var sdkVersion = app_center_unity_device_sdk_version(devicePtr);
var model = app_center_unity_device_model(devicePtr);
var oemName = app_center_unity_device_oem_name(devicePtr);
var osName = app_center_unity_device_os_name(devicePtr);
var osVersion = app_center_unity_device_os_version(devicePtr);
var osBuild = app_center_unity_device_os_build(devicePtr);
var osApiLevel = app_center_unity_device_os_api_level(devicePtr);
var locale = app_center_unity_device_locale(devicePtr);
var timeZoneOffset = app_center_unity_device_time_zone_offset(devicePtr);
var screenSize = app_center_unity_device_screen_size(devicePtr);
var appVersion = app_center_unity_device_app_version(devicePtr);
var carrierName = app_center_unity_device_carrier_name(devicePtr);
var carrierCountry = app_center_unity_device_carrier_country(devicePtr);
var appBuild = app_center_unity_device_app_build(devicePtr);
var appNamespace = app_center_unity_device_app_namespace(devicePtr);
return new Device(sdkName, sdkVersion, model, oemName, osName, osVersion, osBuild, osApiLevel,
locale, timeZoneOffset, screenSize, appVersion, carrierName, carrierCountry,
appBuild, appNamespace);
}
[DllImport("__Internal")]
private static extern string app_center_unity_device_sdk_name(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_sdk_version(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_model(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_oem_name(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_os_name(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_os_version(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_os_build(IntPtr device);
[DllImport("__Internal")]
private static extern int app_center_unity_device_os_api_level(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_locale(IntPtr device);
[DllImport("__Internal")]
private static extern int app_center_unity_device_time_zone_offset(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_screen_size(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_app_version(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_carrier_name(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_carrier_country(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_app_build(IntPtr device);
[DllImport("__Internal")]
private static extern string app_center_unity_device_app_namespace(IntPtr device);
}
}
#endif
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1cbedebc3603346ccba2733a839112d0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
extern "C" const char* app_center_unity_device_sdk_name(void* device);
extern "C" const char* app_center_unity_device_sdk_version(void* device);
extern "C" const char* app_center_unity_device_model(void* device);
extern "C" const char* app_center_unity_device_oem_name(void* device);
extern "C" const char* app_center_unity_device_os_name(void* device);
extern "C" const char* app_center_unity_device_os_version(void* device);
extern "C" const char* app_center_unity_device_os_build(void* device);
extern "C" int app_center_unity_device_os_api_level(void* device);
extern "C" const char* app_center_unity_device_locale(void* device);
extern "C" int app_center_unity_device_time_zone_offset(void* device);
extern "C" const char* app_center_unity_device_screen_size(void* device);
extern "C" const char* app_center_unity_device_app_version(void* device);
extern "C" const char* app_center_unity_device_carrier_name(void* device);
extern "C" const char* app_center_unity_device_carrier_country(void* device);
extern "C" const char* app_center_unity_device_app_build(void* device);
extern "C" const char* app_center_unity_device_app_namespace(void* device);
@@ -0,0 +1,24 @@
fileFormatVersion: 2
guid: bad688f7eba404cc4a90a8a0e0a1263f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,102 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import <AppCenter/AppCenter.h>
#import "DeviceHelper.h"
#import "NSStringHelper.h"
const char* app_center_unity_device_sdk_name(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo sdkName]);
}
const char* app_center_unity_device_sdk_version(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo sdkVersion]);
}
const char* app_center_unity_device_model(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo model]);
}
const char* app_center_unity_device_oem_name(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo oemName]);
}
const char* app_center_unity_device_os_name(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo osName]);
}
const char* app_center_unity_device_os_version(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo osVersion]);
}
const char* app_center_unity_device_os_build(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo osBuild]);
}
int app_center_unity_device_os_api_level(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return [[deviceInfo osApiLevel] intValue];
}
const char* app_center_unity_device_locale(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo locale]);
}
int app_center_unity_device_time_zone_offset(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return [[deviceInfo timeZoneOffset] intValue];
}
const char* app_center_unity_device_screen_size(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo screenSize]);
}
const char* app_center_unity_device_app_version(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo appVersion]);
}
const char* app_center_unity_device_carrier_name(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo carrierName]);
}
const char* app_center_unity_device_carrier_country(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo carrierCountry]);
}
const char* app_center_unity_device_app_build(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo appBuild]);
}
const char* app_center_unity_device_app_namespace(void* device)
{
MSACDevice *deviceInfo = (__bridge MSACDevice*)device;
return appcenter_unity_ns_string_to_cstr([deviceInfo appNamespace]);
}
@@ -0,0 +1,34 @@
fileFormatVersion: 2
guid: 03b9cfe7b6a4b4b70acf8694de18052e
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#if UNITY_IOS
using System;
using System.Runtime.InteropServices;
using UnityEngine;
namespace Microsoft.AppCenter.Unity.Internal.Utility
{
public class NSDateHelper
{
public static IntPtr DateTimeConvert(DateTime date)
{
var unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
var timeSpan = date - unixStartTime;
var interval = (long)(timeSpan.TotalSeconds);
return appcenter_unity_ns_date_convert(interval);
}
[DllImport("__Internal")]
private static extern IntPtr appcenter_unity_ns_date_convert(long interval);
}
}
#endif
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 3efba9dacbfa347588fdde9d1cd911ac
timeCreated: 1498578955
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,11 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#ifndef NS_DATE_HELPER_H
#define NS_DATE_HELPER_H
#import <Foundation/Foundation.h>
extern "C" void* appcenter_unity_ns_date_convert(long interval);
#endif
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: ab35984e9d22f4c5a93a2dd4af548412
timeCreated: 1498584208
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "NSDateHelper.h"
#import <Foundation/Foundation.h>
void* appcenter_unity_ns_date_convert(long interval)
{
return (void *)CFBridgingRetain([[NSDate alloc] initWithTimeIntervalSince1970:interval]);
}
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: dc5f65baccfe345be8fd3b0531c51edd
timeCreated: 1498584195
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,34 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#if UNITY_IOS && !UNITY_EDITOR
using System;
using System.Runtime.InteropServices;
namespace Microsoft.AppCenter.Unity.Internal.Utility
{
public static partial class NSErrorHelper
{
public static Exception ToSystemException(IntPtr nsErrorPtr)
{
if (nsErrorPtr == IntPtr.Zero)
{
return null;
}
var domain = app_center_unity_nserror_domain(nsErrorPtr);
var errorCode = app_center_unity_nserror_code(nsErrorPtr);
var description = app_center_unity_nserror_description(nsErrorPtr);
return new Exception(string.Format("Domain: {0}, error code: {1}, description: {2}", domain, errorCode, description));
}
[DllImport("__Internal")]
private static extern string app_center_unity_nserror_domain(IntPtr error);
[DllImport("__Internal")]
private static extern long app_center_unity_nserror_code(IntPtr error);
[DllImport("__Internal")]
private static extern string app_center_unity_nserror_description(IntPtr error);
}
}
#endif
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f73030502bdd74d458f10a7c1a597e3b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
extern "C" const char* app_center_unity_nserror_domain(void* error);
extern "C" long app_center_unity_nserror_code(void* error);
extern "C" const char* app_center_unity_nserror_description(void* error);
@@ -0,0 +1,24 @@
fileFormatVersion: 2
guid: 23252b01a9d2f4f40ba6f2f0db9efbd5
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "NSStringHelper.h"
#import "NSErrorHelper.h"
const char* app_center_unity_nserror_domain(void* error)
{
NSError *nsError = (__bridge NSError*)error;
return appcenter_unity_ns_string_to_cstr([nsError domain]);
}
long app_center_unity_nserror_code(void* error)
{
NSError *nsError = (__bridge NSError*)error;
return [nsError code];
}
const char* app_center_unity_nserror_description(void* error)
{
NSError *nsError = (__bridge NSError*)error;
return appcenter_unity_ns_string_to_cstr([nsError localizedDescription]);
}
@@ -0,0 +1,34 @@
fileFormatVersion: 2
guid: b122ae60c2ba54e659d9568ad78400e7
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,48 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#if UNITY_IOS
using System;
using System.Runtime.InteropServices;
namespace Microsoft.AppCenter.Unity.Internal.Utility
{
public class NSNumberHelper
{
[DllImport("__Internal")]
private static extern IntPtr appcenter_unity_nsnumber_convert_int(int val);
[DllImport("__Internal")]
private static extern IntPtr appcenter_unity_nsnumber_convert_long(long val);
[DllImport("__Internal")]
private static extern IntPtr appcenter_unity_nsnumber_convert_float(float val);
[DllImport("__Internal")]
private static extern IntPtr appcenter_unity_nsnumber_convert_double(double val);
public static IntPtr Convert(int val)
{
return appcenter_unity_nsnumber_convert_int(val);
}
public static IntPtr Convert(long val)
{
return appcenter_unity_nsnumber_convert_long(val);
}
public static IntPtr Convert(float val)
{
return appcenter_unity_nsnumber_convert_float(val);
}
public static IntPtr Convert(double val)
{
return appcenter_unity_nsnumber_convert_double(val);
}
//TODO how to support 'decimal'?
}
}
#endif
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f53b041fddc194840aae7635b39bfde6
timeCreated: 1498578955
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,14 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#ifndef NS_NUMBER_HELPER_H
#define NS_NUMBER_HELPER_H
#import <Foundation/Foundation.h>
extern "C" void* appcenter_unity_nsnumber_convert_int(int val);
extern "C" NSNumber* appcenter_unity_nsnumber_convert_long(long val);
extern "C" NSNumber* appcenter_unity_nsnumber_convert_float(float val);
extern "C" NSNumber* appcenter_unity_nsnumber_convert_double(double val);
#endif
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 80eab99a01c404cea937a54c788f7f0c
timeCreated: 1498583134
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "NSNumberHelper.h"
#import <Foundation/Foundation.h>
void* appcenter_unity_nsnumber_convert_int(int val)
{
return (__bridge void*)[NSNumber numberWithInt:val];
}
NSNumber* appcenter_unity_nsnumber_convert_long(long val)
{
return [NSNumber numberWithLong:val];
}
NSNumber* appcenter_unity_nsnumber_convert_float(float val)
{
return [NSNumber numberWithFloat:val];
}
NSNumber* appcenter_unity_nsnumber_convert_double(double val)
{
return [NSNumber numberWithDouble:val];
}
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 0eecac2606cb14ec6a20fd15ec08feb2
timeCreated: 1498583125
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,36 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#if UNITY_IOS
using System.Runtime.InteropServices;
using System;
using System.Collections.Generic;
namespace Microsoft.AppCenter.Unity.Internal.Utility
{
public class NSStringDictionaryHelper
{
public static Dictionary<string, string> NSDictionaryConvert(IntPtr nsDictionary)
{
var length = appcenter_unity_ns_dictionary_get_length(nsDictionary);
var dictionary = new Dictionary<string, string>();
for (int i = 0; i < length; ++i)
{
var key = appcenter_unity_ns_string_dictionary_get_key_at_idx(nsDictionary, i);
var value = appcenter_unity_ns_string_dictionary_get_value_for_key(nsDictionary, key);
dictionary[key] = value;
}
return dictionary;
}
[DllImport("__Internal")]
private static extern string appcenter_unity_ns_string_dictionary_get_key_at_idx(IntPtr dictionary, int idx);
[DllImport("__Internal")]
private static extern string appcenter_unity_ns_string_dictionary_get_value_for_key(IntPtr dictionary, string key);
[DllImport("__Internal")]
private static extern uint appcenter_unity_ns_dictionary_get_length(IntPtr dictionary);
}
}
#endif
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 4b38da4320f354ed2af0a1af947badd9
timeCreated: 1498075853
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,17 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#ifndef NS_STRING_DICTIONARY_HELPER_H
#define NS_STRING_DICTIONARY_HELPER_H
#import <Foundation/Foundation.h>
extern "C" const char* appcenter_unity_ns_string_dictionary_get_key_at_idx(NSDictionary *dictionary, int idx);
extern "C" const char* appcenter_unity_ns_string_dictionary_get_value_for_key(NSDictionary *dictionary, char* key);
extern "C" size_t appcenter_unity_ns_dictionary_get_length(NSDictionary *dictionary);
extern "C" NSDictionary* appcenter_unity_create_ns_string_dictionary(char** keys, char** values, int count);
#endif
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 5d5be32a195b94d58b0410f7d8eb3e82
timeCreated: 1498062779
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,36 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "NSStringDictionaryHelper.h"
#import "NSStringHelper.h"
#import <Foundation/Foundation.h>
const char *appcenter_unity_ns_string_dictionary_get_key_at_idx(NSDictionary *dictionary, int idx) {
id sortKeys = ^(NSString *key1, NSString *key2) {
return [key1 compare:key2];
};
NSArray *keys = [[dictionary allKeys] sortedArrayUsingComparator:sortKeys];
return appcenter_unity_ns_string_to_cstr(keys[idx]);
}
const char *appcenter_unity_ns_string_dictionary_get_value_for_key(NSDictionary *dictionary, char *key) {
NSString *keyString = [NSString stringWithUTF8String:key];
return appcenter_unity_ns_string_to_cstr([dictionary objectForKey:keyString]);
}
NSDictionary *appcenter_unity_create_ns_string_dictionary(char **keys, char **values, int count) {
if (count == 0) {
return nil;
}
// Convert the two arrays to a single dictionary
NSMutableDictionary<NSString *, NSString *> *nsdictionary = [[NSMutableDictionary alloc] initWithCapacity:count];
for (int i = 0; i < count; ++i) {
NSString *key = appcenter_unity_cstr_to_ns_string(keys[i]);
NSString *value = appcenter_unity_cstr_to_ns_string(values[i]);
[nsdictionary setValue:value forKey:key];
}
return nsdictionary;
}
size_t appcenter_unity_ns_dictionary_get_length(NSDictionary *dictionary) { return [dictionary count]; }
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 21e289077520b433ca6d72c25f19bcbb
timeCreated: 1498062777
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,12 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#ifndef NS_STRING_HELPER_H
#define NS_STRING_HELPER_H
#import <Foundation/Foundation.h>
extern "C" const char* appcenter_unity_ns_string_to_cstr(NSString* nsstring);
extern "C" NSString* appcenter_unity_cstr_to_ns_string(const char* str);
#endif
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 90801404dc9c24b02802066bad5dc732
timeCreated: 1498063641
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,28 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
#import "NSStringHelper.h"
#import <Foundation/Foundation.h>
const char* appcenter_unity_ns_string_to_cstr(NSString* nsstring)
{
if (!nsstring)
{
return NULL;
}
// It seems that with (at least) IL2CPP, when returning a char* that is to be
// converted to a System.String in C#, the char array is freed - which causes
// a double-deallocation if ARC also tries to free it. To prevent this, we
// must return a manually allocated copy of the string returned by "UTF8String"
const char *cstring = [nsstring UTF8String];
size_t cstringLength = strlen(cstring) + 1; // +1 for '\0'
char *cstring_copy = (char*)malloc(cstringLength);
strncpy(cstring_copy, cstring, cstringLength);
return cstring_copy;
}
NSString* appcenter_unity_cstr_to_ns_string(const char* str)
{
return str ? [NSString stringWithUTF8String:str] : nil;
}
@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 690b05b14d3e640429af5eaacfdec2ca
timeCreated: 1498063660
licenseType: Pro
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
data:
first:
Any:
second:
enabled: 0
settings: {}
data:
first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
data:
first:
iPhone: iOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant: