diff --git a/Foundation/BUILD b/Foundation/BUILD index 97a10d9d..e84a76ae 100644 --- a/Foundation/BUILD +++ b/Foundation/BUILD @@ -50,7 +50,7 @@ objc_library( hdrs = [ "GTMLogger.h", ], - non_arc_srcs = [ + srcs = [ "GTMLogger.m", ], visibility = ["//visibility:public"], @@ -78,7 +78,7 @@ objc_library( hdrs = [ "GTMStringEncoding.h", ], - non_arc_srcs = [ + srcs = [ "GTMStringEncoding.m", ], visibility = ["//visibility:public"], diff --git a/Foundation/GTMLogger.m b/Foundation/GTMLogger.m index ae91c099..467cce2b 100644 --- a/Foundation/GTMLogger.m +++ b/Foundation/GTMLogger.m @@ -16,6 +16,10 @@ // the License. // +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + #import "GTMLogger.h" #import #import @@ -45,16 +49,15 @@ @implementation GTMLogger + (instancetype)sharedLogger { @synchronized(self) { if (gSharedLogger == nil) { - gSharedLogger = [[self standardLogger] retain]; + gSharedLogger = [self standardLogger]; } - return [[gSharedLogger retain] autorelease]; + return gSharedLogger; } } + (void)setSharedLogger:(GTMLogger *)logger { @synchronized(self) { - [gSharedLogger autorelease]; - gSharedLogger = [logger retain]; + gSharedLogger = logger; } } @@ -62,12 +65,11 @@ + (instancetype)standardLogger { // Don't trust NSFileHandle not to throw @try { id writer = [NSFileHandle fileHandleWithStandardOutput]; - id fr = [[[GTMLogStandardFormatter alloc] init] - autorelease]; - id filter = [[[GTMLogLevelFilter alloc] init] autorelease]; - return [[[self alloc] initWithWriter:writer + id fr = [[GTMLogStandardFormatter alloc] init]; + id filter = [[GTMLogLevelFilter alloc] init]; + return [[self alloc] initWithWriter:writer formatter:fr - filter:filter] autorelease]; + filter:filter]; } @catch (id e) { // Ignored @@ -97,25 +99,23 @@ + (instancetype)standardLoggerWithStdoutAndStderr { // Don't trust NSFileHandle not to throw @try { - GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init] - autorelease]; + GTMLogBasicFormatter *formatter = [[GTMLogBasicFormatter alloc] init]; GTMLogger *stdoutLogger = [self loggerWithWriter:[NSFileHandle fileHandleWithStandardOutput] formatter:formatter - filter:[[[GTMLogMaximumLevelFilter alloc] + filter:[[GTMLogMaximumLevelFilter alloc] initWithMaximumLevel:kGTMLoggerLevelInfo] - autorelease]]; + ]; GTMLogger *stderrLogger = [self loggerWithWriter:[NSFileHandle fileHandleWithStandardError] formatter:formatter - filter:[[[GTMLogMininumLevelFilter alloc] - initWithMinimumLevel:kGTMLoggerLevelError] - autorelease]]; + filter:[[GTMLogMininumLevelFilter alloc] + initWithMinimumLevel:kGTMLoggerLevelError]]; GTMLogger *compositeWriter = [self loggerWithWriter:[NSArray arrayWithObjects: stdoutLogger, stderrLogger, nil] formatter:formatter - filter:[[[GTMLogNoFilter alloc] init] autorelease]]; + filter:[[GTMLogNoFilter alloc] init]]; GTMLogger *outerLogger = [self standardLogger]; [outerLogger setWriter:compositeWriter]; return outerLogger; @@ -143,13 +143,13 @@ + (instancetype)standardLoggerWithPath:(NSString *)path { + (instancetype)loggerWithWriter:(id)writer formatter:(id)formatter filter:(id)filter { - return [[[self alloc] initWithWriter:writer + return [[self alloc] initWithWriter:writer formatter:formatter - filter:filter] autorelease]; + filter:filter]; } + (instancetype)logger { - return [[[self alloc] init] autorelease]; + return [[self alloc] init]; } - (instancetype)init { @@ -170,46 +170,38 @@ - (instancetype)initWithWriter:(id)writer - (void)dealloc { // Unlikely, but |writer_| may be an NSFileHandle, which can throw @try { - [formatter_ release]; [self notifyFilterBeforeDetachIfNeeded]; - [filter_ release]; - [writer_ release]; } @catch (id e) { // Ignored } - [super dealloc]; } - (id)writer { - return [[writer_ retain] autorelease]; + return writer_; } - (void)setWriter:(id)writer { @synchronized(self) { - [writer_ autorelease]; writer_ = nil; if (writer == nil) { // Try to use stdout, but don't trust NSFileHandle @try { - writer_ = [[NSFileHandle fileHandleWithStandardOutput] retain]; + writer_ = [NSFileHandle fileHandleWithStandardOutput]; } @catch (id e) { // Leave |writer_| nil } - } else { - writer_ = [writer retain]; } } } - (id)formatter { - return [[formatter_ retain] autorelease]; + return formatter_; } - (void)setFormatter:(id)formatter { @synchronized(self) { - [formatter_ autorelease]; formatter_ = nil; if (formatter == nil) { @try { @@ -218,20 +210,17 @@ - (void)setFormatter:(id)formatter { @catch (id e) { // Leave |formatter_| nil } - } else { - formatter_ = [formatter retain]; } } } - (id)filter { - return [[filter_ retain] autorelease]; + return filter_; } - (void)setFilter:(id)filter { @synchronized(self) { [self notifyFilterBeforeDetachIfNeeded]; - [filter_ autorelease]; filter_ = nil; if (filter == nil) { @try { @@ -240,8 +229,6 @@ - (void)setFilter:(id)filter { @catch (id e) { // Leave |filter_| nil } - } else { - filter_ = [filter retain]; } [self notifyFilterAfterAttachIfNeeded]; } @@ -357,8 +344,8 @@ + (instancetype)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode { fd = open([path fileSystemRepresentation], flags, mode); } if (fd == -1) return nil; - return [[[self alloc] initWithFileDescriptor:fd - closeOnDealloc:YES] autorelease]; + return [[self alloc] initWithFileDescriptor:fd + closeOnDealloc:YES]; } - (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { @@ -446,7 +433,7 @@ - (NSString *)stringForFunc:(NSString *)func // Performance note: We may want to do a quick check here to see if |fmt| // contains a '%', and if not, simply return 'fmt'. if (!(fmt && args)) return nil; - return [[[NSString alloc] initWithFormat:fmt arguments:args] autorelease]; + return [[NSString alloc] initWithFormat:fmt arguments:args]; } @end // GTMLogBasicFormatter @@ -462,19 +449,12 @@ - (instancetype)init { pname_ = [[[NSProcessInfo processInfo] processName] copy]; pid_ = [[NSProcessInfo processInfo] processIdentifier]; if (!(dateFormatter_ && pname_)) { - [self release]; return nil; } } return self; } -- (void)dealloc { - [dateFormatter_ release]; - [pname_ release]; - [super dealloc]; -} - - (NSString *)stringForFunc:(NSString *)func withFormat:(NSString *)fmt valist:(va_list)args @@ -542,8 +522,6 @@ - (void)dealloc { @"`willDetachFromLogger` call because those methods " @"register/unregister the `GTMLogLevelFilter` instance as an " @"observer of the user defaults instance."); - - [super dealloc]; } // In DEBUG builds, log everything. If we're not in a debug build we'll assume @@ -610,7 +588,7 @@ - (void)startObservingUserDefaultsIfNeeded { // clear settings: // https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/clm/NSUserDefaults/resetStandardUserDefaults // and so should only be called in test code if necessary. - userDefaults_ = [[NSUserDefaults standardUserDefaults] retain]; + userDefaults_ = [NSUserDefaults standardUserDefaults]; [userDefaults_ addObserver:self forKeyPath:kVerboseLoggingKey options:NSKeyValueObservingOptionInitial @@ -623,7 +601,6 @@ - (void)stopObservingUserDefaultsIfNeeded { } [userDefaults_ removeObserver:self forKeyPath:kVerboseLoggingKey]; - [userDefaults_ release]; userDefaults_ = nil; } @@ -655,7 +632,6 @@ @implementation GTMLogAllowedLevelFilter - (instancetype)initWithAllowedLevels:(NSIndexSet *)levels { self = [super init]; if (self != nil) { - allowedLevels_ = [levels retain]; // Cap min/max level if (!allowedLevels_ || // NSIndexSet is unsigned so only check the high bound, but need to @@ -663,7 +639,6 @@ - (instancetype)initWithAllowedLevels:(NSIndexSet *)levels { // wraparound. ([allowedLevels_ firstIndex] > kGTMLoggerLevelAssert) || ([allowedLevels_ lastIndex] > kGTMLoggerLevelAssert)) { - [self release]; return nil; } } @@ -677,11 +652,6 @@ - (instancetype)init { (kGTMLoggerLevelAssert - kGTMLoggerLevelUnknown + 1))]]; } -- (void)dealloc { - [allowedLevels_ release]; - [super dealloc]; -} - - (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { return [allowedLevels_ containsIndex:level]; } diff --git a/Foundation/GTMStringEncoding.m b/Foundation/GTMStringEncoding.m index 89a590bf..0d901fac 100644 --- a/Foundation/GTMStringEncoding.m +++ b/Foundation/GTMStringEncoding.m @@ -16,6 +16,10 @@ // the License. // +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + #import "GTMStringEncoding.h" NSString *const GTMStringEncodingErrorDomain = @"com.google.GTMStringEncodingErrorDomain"; @@ -92,22 +96,20 @@ GTM_INLINE int lcm(int a, int b) { } + (instancetype)stringEncodingWithString:(NSString *)string { - return [[[self alloc] initWithString:string] autorelease]; + return [[self alloc] initWithString:string]; } - (instancetype)initWithString:(NSString *)string { if ((self = [super init])) { - charMapData_ = [[string dataUsingEncoding:NSASCIIStringEncoding] retain]; + charMapData_ = [string dataUsingEncoding:NSASCIIStringEncoding]; if (!charMapData_) { _GTMDevLog(@"Unable to convert string to ASCII"); - [self release]; return nil; } charMap_ = (char *)[charMapData_ bytes]; NSUInteger length = [charMapData_ length]; if (length < 2 || length > 128 || length & (length - 1)) { _GTMDevLog(@"Length not a power of 2 between 2 and 128"); - [self release]; return nil; } @@ -115,7 +117,6 @@ - (instancetype)initWithString:(NSString *)string { for (unsigned int i = 0; i < length; i++) { if (reverseCharMap_[(int)charMap_[i]] != kUnknownChar) { _GTMDevLog(@"Duplicate character at pos %d", i); - [self release]; return nil; } reverseCharMap_[(int)charMap_[i]] = i; @@ -129,11 +130,6 @@ - (instancetype)initWithString:(NSString *)string { return self; } -- (void)dealloc { - [charMapData_ release]; - [super dealloc]; -} - - (NSString *)description { // TODO(iwade) track synonyms return [NSString stringWithFormat:@"", @@ -218,8 +214,8 @@ - (NSString *)encode:(NSData *)inData error:(NSError **)error { [outData setLength:outPos]; - NSString *value = [[[NSString alloc] initWithData:outData - encoding:NSASCIIStringEncoding] autorelease]; + NSString *value = [[NSString alloc] initWithData:outData + encoding:NSASCIIStringEncoding]; if (!value) { if (error) { *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain @@ -328,8 +324,7 @@ - (NSString *)stringByDecoding:(NSString *)inString error:(NSError **)error { NSData *ret = [self decode:inString error:error]; NSString *value = nil; if (ret) { - value = [[[NSString alloc] initWithData:ret - encoding:NSUTF8StringEncoding] autorelease]; + value = [[NSString alloc] initWithData:ret encoding:NSUTF8StringEncoding]; } return value; } diff --git a/GoogleToolboxForMac.podspec b/GoogleToolboxForMac.podspec index af68560b..21e0794f 100644 --- a/GoogleToolboxForMac.podspec +++ b/GoogleToolboxForMac.podspec @@ -75,6 +75,7 @@ Pod::Spec.new do |s| s.subspec 'Logger' do |sp| sp.source_files = 'Foundation/GTMLogger.{h,m}' + sp.requires_arc = 'Foundation/GTMLogger.{h,m}' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" sp.resource_bundle = { "GoogleToolboxForMac_Logger_Privacy" => "Resources/Logger/PrivacyInfo.xcprivacy" @@ -98,6 +99,7 @@ Pod::Spec.new do |s| s.subspec 'StringEncoding' do |sp| sp.source_files = 'Foundation/GTMStringEncoding.{h,m}' + sp.requires_arc = 'Foundation/GTMStringEncoding.{h,m}' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" end diff --git a/Package.swift b/Package.swift new file mode 100644 index 00000000..21a07f20 --- /dev/null +++ b/Package.swift @@ -0,0 +1,56 @@ +// swift-tools-version:6.0 +import PackageDescription + +let package = Package( + name: "GoogleToolboxForMac", + platforms: [ + .iOS(.v13), + .macOS(.v10_15), + .tvOS(.v13), + ], + products: [ + .library( + name: "GTMLogger", + targets: ["GTMLogger"] + ), + .library( + name: "GTMNSData_zlib", + targets: ["GTMNSData_zlib"] + ), + .library( + name: "GTMStringEncoding", + targets: ["GTMStringEncoding"] + ), + ], + targets: [ + .target( + name: "GTMDefines", + path: "spm/GTMDefines" + ), + .target( + name: "GTMLogger", + dependencies: [ + "GTMDefines" + ], + path: "spm/GTMLogger" + + ), + .target( + name: "GTMNSData_zlib", + dependencies: [ + "GTMDefines" + ], + path: "spm/GTMNSData_zlib", + linkerSettings: [ + .linkedLibrary("z") + ] + ), + .target( + name: "GTMStringEncoding", + dependencies: [ + "GTMDefines" + ], + path: "spm/GTMStringEncoding" + ), + ] +) diff --git a/spm/GTMDefines/GTMDefines.m b/spm/GTMDefines/GTMDefines.m new file mode 100644 index 00000000..c49c6839 --- /dev/null +++ b/spm/GTMDefines/GTMDefines.m @@ -0,0 +1 @@ +#import "GTMDefines.h" diff --git a/spm/GTMDefines/include/GTMDefines.h b/spm/GTMDefines/include/GTMDefines.h new file mode 120000 index 00000000..e8bf00b4 --- /dev/null +++ b/spm/GTMDefines/include/GTMDefines.h @@ -0,0 +1 @@ +../../../GTMDefines.h \ No newline at end of file diff --git a/spm/GTMLogger/GTMLogger.m b/spm/GTMLogger/GTMLogger.m new file mode 120000 index 00000000..f7b83c3e --- /dev/null +++ b/spm/GTMLogger/GTMLogger.m @@ -0,0 +1 @@ +../../Foundation/GTMLogger.m \ No newline at end of file diff --git a/spm/GTMLogger/include/GTMLogger.h b/spm/GTMLogger/include/GTMLogger.h new file mode 120000 index 00000000..da377375 --- /dev/null +++ b/spm/GTMLogger/include/GTMLogger.h @@ -0,0 +1 @@ +../../../Foundation/GTMLogger.h \ No newline at end of file diff --git a/spm/GTMNSData_zlib/GTMNSData+zlib.m b/spm/GTMNSData_zlib/GTMNSData+zlib.m new file mode 120000 index 00000000..b750715f --- /dev/null +++ b/spm/GTMNSData_zlib/GTMNSData+zlib.m @@ -0,0 +1 @@ +../../Foundation/GTMNSData+zlib.m \ No newline at end of file diff --git a/spm/GTMNSData_zlib/include/GTMNSData+zlib.h b/spm/GTMNSData_zlib/include/GTMNSData+zlib.h new file mode 120000 index 00000000..07009467 --- /dev/null +++ b/spm/GTMNSData_zlib/include/GTMNSData+zlib.h @@ -0,0 +1 @@ +../../../Foundation/GTMNSData+zlib.h \ No newline at end of file diff --git a/spm/GTMStringEncoding/GTMStringEncoding.m b/spm/GTMStringEncoding/GTMStringEncoding.m new file mode 120000 index 00000000..5446598e --- /dev/null +++ b/spm/GTMStringEncoding/GTMStringEncoding.m @@ -0,0 +1 @@ +../../Foundation/GTMStringEncoding.m \ No newline at end of file diff --git a/spm/GTMStringEncoding/include/GTMStringEncoding.h b/spm/GTMStringEncoding/include/GTMStringEncoding.h new file mode 120000 index 00000000..476ce5db --- /dev/null +++ b/spm/GTMStringEncoding/include/GTMStringEncoding.h @@ -0,0 +1 @@ +../../../Foundation/GTMStringEncoding.h \ No newline at end of file