AutorÃa | Ultima modificación | Ver Log |
/** Copyright 2020 Google LLC** 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 "FirebaseCore/Sources/FIRFirebaseUserAgent.h"#import <GoogleUtilities/GULAppEnvironmentUtil.h>@interface FIRFirebaseUserAgent ()@property(nonatomic, readonly) NSMutableDictionary<NSString *, NSString *> *valuesByComponent;@property(nonatomic, readonly) NSDictionary<NSString *, NSString *> *environmentComponents;@property(nonatomic, readonly) NSString *firebaseUserAgent;@end@implementation FIRFirebaseUserAgent@synthesize firebaseUserAgent = _firebaseUserAgent;@synthesize environmentComponents = _environmentComponents;- (instancetype)init {self = [super init];if (self) {_valuesByComponent = [[NSMutableDictionary alloc] init];}return self;}- (NSString *)firebaseUserAgent {@synchronized(self) {if (_firebaseUserAgent == nil) {NSMutableDictionary<NSString *, NSString *> *allComponents =[self.valuesByComponent mutableCopy];[allComponents setValuesForKeysWithDictionary:self.environmentComponents];__block NSMutableArray<NSString *> *components =[[NSMutableArray<NSString *> alloc] initWithCapacity:self.valuesByComponent.count];[allComponents enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull name, NSString *_Nonnull value, BOOL *_Nonnull stop) {[components addObject:[NSString stringWithFormat:@"%@/%@", name, value]];}];[components sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];_firebaseUserAgent = [components componentsJoinedByString:@" "];}return _firebaseUserAgent;}}- (void)setValue:(nullable NSString *)value forComponent:(NSString *)componentName {@synchronized(self) {self.valuesByComponent[componentName] = value;// Reset cached user agent string._firebaseUserAgent = nil;}}- (void)reset {@synchronized(self) {// Reset components._valuesByComponent = [[[self class] environmentComponents] mutableCopy];// Reset cached user agent string._firebaseUserAgent = nil;}}#pragma mark - Environment components- (NSDictionary<NSString *, NSString *> *)environmentComponents {if (_environmentComponents == nil) {_environmentComponents = [[self class] environmentComponents];}return _environmentComponents;}+ (NSDictionary<NSString *, NSString *> *)environmentComponents {NSMutableDictionary<NSString *, NSString *> *components = [NSMutableDictionary dictionary];NSDictionary<NSString *, id> *info = [[NSBundle mainBundle] infoDictionary];NSString *xcodeVersion = info[@"DTXcodeBuild"];NSString *appleSdkVersion = info[@"DTSDKBuild"];NSString *isFromAppstoreFlagValue = [GULAppEnvironmentUtil isFromAppStore] ? @"true" : @"false";components[@"apple-platform"] = [GULAppEnvironmentUtil applePlatform];components[@"apple-sdk"] = appleSdkVersion;components[@"appstore"] = isFromAppstoreFlagValue;components[@"deploy"] = [GULAppEnvironmentUtil deploymentType];components[@"device"] = [GULAppEnvironmentUtil deviceModel];components[@"os-version"] = [GULAppEnvironmentUtil systemVersion];components[@"xcode"] = xcodeVersion;return [components copy];}@end