From 425aea411f0fe6907806d52ce3309d9484e93716 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 12:04:00 -0700 Subject: [PATCH 01/14] fix --- shell/platform/darwin/common/BUILD.gn | 4 +- .../common/framework/Headers/FlutterCodecs.h | 12 +-- .../framework/Source/FlutterChannels.mm | 91 ++++++------------- .../common/framework/Source/FlutterCodecs.mm | 2 +- .../framework/Source/FlutterStandardCodec.mm | 55 +++-------- 5 files changed, 49 insertions(+), 115 deletions(-) diff --git a/shell/platform/darwin/common/BUILD.gn b/shell/platform/darwin/common/BUILD.gn index 45a9e3092b2bc..eea8c0c74f512 100644 --- a/shell/platform/darwin/common/BUILD.gn +++ b/shell/platform/darwin/common/BUILD.gn @@ -38,8 +38,8 @@ config("framework_relative_headers") { # Framework code shared between iOS and macOS. source_set("framework_shared") { - cflags_objc = flutter_cflags_objc - cflags_objcc = flutter_cflags_objcc + cflags_objc = flutter_cflags_objc_arc + cflags_objcc = flutter_cflags_objcc_arc sources = [ "framework/Source/FlutterChannels.mm", diff --git a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h index 3ba5d4e9c2580..815d881ec4de0 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h @@ -230,7 +230,7 @@ FLUTTER_DARWIN_EXPORT /** * The method name. */ -@property(readonly, nonatomic) NSString* method; +@property(readonly, nonatomic, copy) NSString* method; /** * The arguments. @@ -257,12 +257,12 @@ FLUTTER_DARWIN_EXPORT /** The error code. */ -@property(readonly, nonatomic) NSString* code; +@property(readonly, nonatomic, copy) NSString* code; /** The error message. */ -@property(readonly, nonatomic, nullable) NSString* message; +@property(readonly, nonatomic, nullable, copy) NSString* message; /** The error details. @@ -344,17 +344,17 @@ FLUTTER_DARWIN_EXPORT /** * The type of the encoded values. */ -@property(readonly, nonatomic) FlutterStandardDataType type; +@property(readonly, nonatomic, assign) FlutterStandardDataType type; /** * The number of value items encoded. */ -@property(readonly, nonatomic) UInt32 elementCount; +@property(readonly, nonatomic, assign) UInt32 elementCount; /** * The number of bytes used by the encoding of a single value item. */ -@property(readonly, nonatomic) UInt8 elementSize; +@property(readonly, nonatomic, assign) UInt8 elementSize; @end /** diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 30b306a301f39..47e54cb3501c6 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -51,9 +51,9 @@ + (instancetype)messageChannelWithName:(NSString*)name + (instancetype)messageChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterBasicMessageChannel alloc] initWithName:name - binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterBasicMessageChannel alloc] initWithName:name + binaryMessenger:messenger + codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -69,21 +69,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_messenger release]; - [_codec release]; - [_taskQueue release]; - [super dealloc]; -} - - (void)sendMessage:(id)message { [_messenger sendOnChannel:_name message:[_codec encode:message]]; } @@ -108,7 +100,7 @@ - (void)setMessageHandler:(FlutterMessageHandler)handler { return; } // Grab reference to avoid retain on self. - NSObject* codec = _codec; + __weak NSObject* codec = _codec; FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) { handler([codec decode:message], ^(id reply) { callback([codec encode:reply]); @@ -128,26 +120,19 @@ - (void)resizeChannelBuffer:(NSInteger)newSize { //////////////////////////////////////////////////////////////////////////////// @implementation FlutterError + (instancetype)errorWithCode:(NSString*)code message:(NSString*)message details:(id)details { - return [[[FlutterError alloc] initWithCode:code message:message details:details] autorelease]; + return [[FlutterError alloc] initWithCode:code message:message details:details]; } - (instancetype)initWithCode:(NSString*)code message:(NSString*)message details:(id)details { NSAssert(code, @"Code cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _code = [code retain]; - _message = [message retain]; - _details = [details retain]; + _code = code; + _message = message; + _details = details; return self; } -- (void)dealloc { - [_code release]; - [_message release]; - [_details release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -169,24 +154,18 @@ - (NSUInteger)hash { //////////////////////////////////////////////////////////////////////////////// @implementation FlutterMethodCall + (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id)arguments { - return [[[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments] autorelease]; + return [[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments]; } - (instancetype)initWithMethodName:(NSString*)method arguments:(id)arguments { NSAssert(method, @"Method name cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _method = [method retain]; - _arguments = [arguments retain]; + _method = method; + _arguments = arguments; return self; } -- (void)dealloc { - [_method release]; - [_arguments release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -224,8 +203,7 @@ + (instancetype)methodChannelWithName:(NSString*)name + (instancetype)methodChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -240,21 +218,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_messenger release]; - [_codec release]; - [_taskQueue release]; - [super dealloc]; -} - - (void)invokeMethod:(NSString*)method arguments:(id)arguments { FlutterMethodCall* methodCall = [FlutterMethodCall methodCallWithMethodName:method arguments:arguments]; @@ -285,7 +255,7 @@ - (void)setMethodCallHandler:(FlutterMethodCallHandler)handler { return; } // Make sure the block captures the codec, not self. - NSObject* codec = _codec; + __weak NSObject* codec = _codec; FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) { FlutterMethodCall* call = [codec decodeMethodCall:message]; handler(call, ^(id result) { @@ -328,8 +298,7 @@ + (instancetype)eventChannelWithName:(NSString*)name + (instancetype)eventChannelWithName:(NSString*)name binaryMessenger:(NSObject*)messenger codec:(NSObject*)codec { - return [[[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger - codec:codec] autorelease]; + return [[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger codec:codec]; } - (instancetype)initWithName:(NSString*)name @@ -344,21 +313,13 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject* _Nullable)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = [name retain]; - _messenger = [messenger retain]; - _codec = [codec retain]; - _taskQueue = [taskQueue retain]; + _name = name; + _messenger = messenger; + _codec = codec; + _taskQueue = taskQueue; return self; } -- (void)dealloc { - [_name release]; - [_codec release]; - [_messenger release]; - [_taskQueue release]; - [super dealloc]; -} - static FlutterBinaryMessengerConnection SetStreamHandlerMessageHandlerOnChannel( NSObject* handler, NSString* name, diff --git a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm index 8ea26cc258063..e63315880e71a 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm @@ -48,7 +48,7 @@ - (NSString*)decode:(NSData*)message { if (message == nil) { return nil; } - return [[[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding] autorelease]; + return [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding]; } @end diff --git a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm index eeb3ef918b0c3..3151082779f1f 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm @@ -12,29 +12,23 @@ @implementation FlutterStandardMessageCodec { + (instancetype)sharedInstance { static id _sharedInstance = nil; if (!_sharedInstance) { - FlutterStandardReaderWriter* readerWriter = - [[[FlutterStandardReaderWriter alloc] init] autorelease]; + FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init]; _sharedInstance = [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter]; } return _sharedInstance; } + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { - return [[[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter] autorelease]; + return [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter]; } - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _readerWriter = [readerWriter retain]; + _readerWriter = readerWriter; return self; } -- (void)dealloc { - [_readerWriter release]; - [super dealloc]; -} - - (NSData*)encode:(id)message { if (message == nil) { return nil; @@ -64,29 +58,23 @@ @implementation FlutterStandardMethodCodec { + (instancetype)sharedInstance { static id _sharedInstance = nil; if (!_sharedInstance) { - FlutterStandardReaderWriter* readerWriter = - [[[FlutterStandardReaderWriter alloc] init] autorelease]; + FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init]; _sharedInstance = [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter]; } return _sharedInstance; } + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { - return [[[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter] autorelease]; + return [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter]; } - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _readerWriter = [readerWriter retain]; + _readerWriter = readerWriter; return self; } -- (void)dealloc { - [_readerWriter release]; - [super dealloc]; -} - - (NSData*)encodeMethodCall:(FlutterMethodCall*)call { NSMutableData* data = [NSMutableData dataWithCapacity:32]; FlutterStandardWriter* writer = [_readerWriter writerWithData:data]; @@ -173,7 +161,7 @@ + (instancetype)typedDataWithFloat64:(NSData*)data { } + (instancetype)typedDataWithData:(NSData*)data type:(FlutterStandardDataType)type { - return [[[FlutterStandardTypedData alloc] initWithData:data type:type] autorelease]; + return [[FlutterStandardTypedData alloc] initWithData:data type:type]; } - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type { @@ -182,18 +170,13 @@ - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type { NSAssert(data.length % elementSize == 0, @"Data must contain integral number of elements"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; _type = type; _elementSize = elementSize; _elementCount = data.length / elementSize; return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (BOOL)isEqual:(id)object { if (self == object) { return YES; @@ -220,15 +203,10 @@ @implementation FlutterStandardWriter { - (instancetype)initWithData:(NSMutableData*)data { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (void)writeByte:(UInt8)value { [_data appendBytes:&value length:1]; } @@ -273,7 +251,7 @@ - (void)writeValue:(id)value { if (value == nil || value == [NSNull null]) { [self writeByte:FlutterStandardFieldNil]; } else if ([value isKindOfClass:[NSNumber class]]) { - CFNumberRef number = (CFNumberRef)value; + CFNumberRef number = (__bridge CFNumberRef)value; BOOL success = NO; if (CFGetTypeID(number) == CFBooleanGetTypeID()) { BOOL b = CFBooleanGetValue((CFBooleanRef)number); @@ -348,16 +326,11 @@ @implementation FlutterStandardReader { - (instancetype)initWithData:(NSData*)data { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = [data retain]; + _data = data; _range = NSMakeRange(0, 0); return self; } -- (void)dealloc { - [_data release]; - [super dealloc]; -} - - (BOOL)hasMore { return _range.location < _data.length; } @@ -398,7 +371,7 @@ - (NSData*)readData:(NSUInteger)length { - (NSString*)readUTF8 { NSData* bytes = [self readData:[self readSize]]; - return [[[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding] autorelease]; + return [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding]; } - (void)readAlignment:(UInt8)alignment { @@ -482,10 +455,10 @@ - (nullable id)readValueOfType:(UInt8)type { @implementation FlutterStandardReaderWriter - (FlutterStandardWriter*)writerWithData:(NSMutableData*)data { - return [[[FlutterStandardWriter alloc] initWithData:data] autorelease]; + return [[FlutterStandardWriter alloc] initWithData:data]; } - (FlutterStandardReader*)readerWithData:(NSData*)data { - return [[[FlutterStandardReader alloc] initWithData:data] autorelease]; + return [[FlutterStandardReader alloc] initWithData:data]; } @end From 3f5368cb9eb8338742c01d6e39a27fb2935065a1 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 12:22:17 -0700 Subject: [PATCH 02/14] update darwin/BUILD.gn --- shell/platform/darwin/BUILD.gn | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/shell/platform/darwin/BUILD.gn b/shell/platform/darwin/BUILD.gn index 23c8e4055acf7..09af75114448a 100644 --- a/shell/platform/darwin/BUILD.gn +++ b/shell/platform/darwin/BUILD.gn @@ -26,6 +26,27 @@ source_set("flutter_channels") { sources = [ "common/buffer_conversions.h", "common/buffer_conversions.mm", + ] + + deps = [ + "//flutter/common", + "//flutter/flow", + "//flutter/fml", + "//flutter/runtime", + "//flutter/shell/common", + "//third_party/skia", + ] + + public_deps = [ ":flutter_channels_arc" ] + + public_configs = [ "//flutter:config" ] +} + +source_set("flutter_channels_arc") { + cflags_objc = flutter_cflags_objc_arc + cflags_objcc = flutter_cflags_objcc_arc + + sources = [ "common/framework/Headers/FlutterBinaryMessenger.h", "common/framework/Headers/FlutterChannels.h", "common/framework/Headers/FlutterCodecs.h", @@ -36,6 +57,14 @@ source_set("flutter_channels") { "common/framework/Source/FlutterStandardCodec_Internal.h", ] + public = [ + "common/framework/Headers/FlutterBinaryMessenger.h", + "common/framework/Headers/FlutterChannels.h", + "common/framework/Headers/FlutterCodecs.h", + "common/framework/Headers/FlutterMacros.h", + "common/framework/Source/FlutterStandardCodec_Internal.h", + ] + deps = [ "//flutter/common", "//flutter/flow", From a92065a8c9eea84576d791215791ff2bcf4362db Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 13:29:45 -0700 Subject: [PATCH 03/14] remove unused deps --- shell/platform/darwin/BUILD.gn | 19 +++++-------------- shell/platform/darwin/common/BUILD.gn | 10 +--------- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/shell/platform/darwin/BUILD.gn b/shell/platform/darwin/BUILD.gn index 09af75114448a..4512d31cfb9d6 100644 --- a/shell/platform/darwin/BUILD.gn +++ b/shell/platform/darwin/BUILD.gn @@ -29,12 +29,12 @@ source_set("flutter_channels") { ] deps = [ - "//flutter/common", - "//flutter/flow", + # "//flutter/common", + # "//flutter/flow", "//flutter/fml", - "//flutter/runtime", - "//flutter/shell/common", - "//third_party/skia", + # "//flutter/runtime", + # "//flutter/shell/common", + # "//third_party/skia", ] public_deps = [ ":flutter_channels_arc" ] @@ -65,15 +65,6 @@ source_set("flutter_channels_arc") { "common/framework/Source/FlutterStandardCodec_Internal.h", ] - deps = [ - "//flutter/common", - "//flutter/flow", - "//flutter/fml", - "//flutter/runtime", - "//flutter/shell/common", - "//third_party/skia", - ] - public_configs = [ "//flutter:config" ] } diff --git a/shell/platform/darwin/common/BUILD.gn b/shell/platform/darwin/common/BUILD.gn index eea8c0c74f512..72e3a807f1d85 100644 --- a/shell/platform/darwin/common/BUILD.gn +++ b/shell/platform/darwin/common/BUILD.gn @@ -16,15 +16,7 @@ source_set("common") { "command_line.mm", ] - deps = [ - "//flutter/common", - "//flutter/flow", - "//flutter/fml", - "//flutter/runtime", - "//flutter/shell/common", - "//third_party/dart/runtime:dart_api", - "//third_party/skia", - ] + deps = [ "//flutter/fml" ] public_configs = [ "//flutter:config" ] } From 126579691863da8a9c6c5067e7e5576f12359c7f Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 14:05:41 -0700 Subject: [PATCH 04/14] more unnecessary deps --- shell/platform/darwin/BUILD.gn | 5 ----- 1 file changed, 5 deletions(-) diff --git a/shell/platform/darwin/BUILD.gn b/shell/platform/darwin/BUILD.gn index 4512d31cfb9d6..2941520d37108 100644 --- a/shell/platform/darwin/BUILD.gn +++ b/shell/platform/darwin/BUILD.gn @@ -29,12 +29,7 @@ source_set("flutter_channels") { ] deps = [ - # "//flutter/common", - # "//flutter/flow", "//flutter/fml", - # "//flutter/runtime", - # "//flutter/shell/common", - # "//third_party/skia", ] public_deps = [ ":flutter_channels_arc" ] From 3f8c2fb7b022448b3b9bde0becfa2eb45511482d Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 14:06:29 -0700 Subject: [PATCH 05/14] gn format --- shell/platform/darwin/BUILD.gn | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/shell/platform/darwin/BUILD.gn b/shell/platform/darwin/BUILD.gn index 2941520d37108..f11a8b7aa1cb1 100644 --- a/shell/platform/darwin/BUILD.gn +++ b/shell/platform/darwin/BUILD.gn @@ -28,9 +28,7 @@ source_set("flutter_channels") { "common/buffer_conversions.mm", ] - deps = [ - "//flutter/fml", - ] + deps = [ "//flutter/fml" ] public_deps = [ ":flutter_channels_arc" ] From 7b6a5a46ea6d6f4466d61f440d42195109a1b4ff Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 14:45:07 -0700 Subject: [PATCH 06/14] copy --- .../darwin/common/framework/Source/FlutterChannels.mm | 8 ++++---- .../common/framework/Source/FlutterStandardCodec.mm | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 47e54cb3501c6..17d600e78af20 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -69,7 +69,7 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = name; + _name = [name copy]; _messenger = messenger; _codec = codec; _taskQueue = taskQueue; @@ -161,7 +161,7 @@ - (instancetype)initWithMethodName:(NSString*)method arguments:(id)arguments { NSAssert(method, @"Method name cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _method = method; + _method = [method copy]; _arguments = arguments; return self; } @@ -218,7 +218,7 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject*)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = name; + _name = [name copy]; _messenger = messenger; _codec = codec; _taskQueue = taskQueue; @@ -313,7 +313,7 @@ - (instancetype)initWithName:(NSString*)name taskQueue:(NSObject* _Nullable)taskQueue { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _name = name; + _name = [name copy]; _messenger = messenger; _codec = codec; _taskQueue = taskQueue; diff --git a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm index 3151082779f1f..caaf7e5a8dfd5 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm @@ -170,7 +170,7 @@ - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type { NSAssert(data.length % elementSize == 0, @"Data must contain integral number of elements"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = data; + _data = [data copy]; _type = type; _elementSize = elementSize; _elementCount = data.length / elementSize; @@ -326,7 +326,7 @@ @implementation FlutterStandardReader { - (instancetype)initWithData:(NSData*)data { self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _data = data; + _data = [data copy]; _range = NSMakeRange(0, 0); return self; } From 6157ddff4d1f8e42643bef5023ef3455b57d7550 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 14:46:49 -0700 Subject: [PATCH 07/14] copy --- .../darwin/common/framework/Source/FlutterChannels.mm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 17d600e78af20..9a146f85b14c4 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -127,9 +127,9 @@ - (instancetype)initWithCode:(NSString*)code message:(NSString*)message details: NSAssert(code, @"Code cannot be nil"); self = [super init]; NSAssert(self, @"Super init cannot be nil"); - _code = code; - _message = message; - _details = details; + _code = [code copy]; + _message = [message copy]; + _details = [details copy]; return self; } From 35559e17633b751cb0b10a621e8ca7e71f1eb82f Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 15:49:00 -0700 Subject: [PATCH 08/14] NSData also made to copy --- shell/platform/darwin/common/framework/Headers/FlutterCodecs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h index 815d881ec4de0..7d170b42155b7 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h @@ -339,7 +339,7 @@ FLUTTER_DARWIN_EXPORT /** * The raw underlying data buffer. */ -@property(readonly, nonatomic) NSData* data; +@property(readonly, nonatomic, copy) NSData* data; /** * The type of the encoded values. From ea06e4e7017147b0f12be4e5db4cf8838951da8f Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 16:33:00 -0700 Subject: [PATCH 09/14] revert copy --- .../darwin/common/framework/Headers/FlutterCodecs.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h index 7d170b42155b7..f7117f01ffb7a 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h @@ -230,7 +230,7 @@ FLUTTER_DARWIN_EXPORT /** * The method name. */ -@property(readonly, nonatomic, copy) NSString* method; +@property(readonly, nonatomic) NSString* method; /** * The arguments. @@ -257,12 +257,12 @@ FLUTTER_DARWIN_EXPORT /** The error code. */ -@property(readonly, nonatomic, copy) NSString* code; +@property(readonly, nonatomic) NSString* code; /** The error message. */ -@property(readonly, nonatomic, nullable, copy) NSString* message; +@property(readonly, nonatomic, nullable) NSString* message; /** The error details. @@ -339,7 +339,7 @@ FLUTTER_DARWIN_EXPORT /** * The raw underlying data buffer. */ -@property(readonly, nonatomic, copy) NSData* data; +@property(readonly, nonatomic) NSData* data; /** * The type of the encoded values. From 1fde705dcf07f5b536532993a6db0077243d7e98 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 26 Oct 2022 16:35:47 -0700 Subject: [PATCH 10/14] revert details copy --- .../platform/darwin/common/framework/Source/FlutterChannels.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 9a146f85b14c4..5e73f90779a60 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -129,7 +129,7 @@ - (instancetype)initWithCode:(NSString*)code message:(NSString*)message details: NSAssert(self, @"Super init cannot be nil"); _code = [code copy]; _message = [message copy]; - _details = [details copy]; + _details = details; return self; } From 700da71a25661abe414aa066cf6d3da5206f5d10 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 27 Oct 2022 09:49:01 -0700 Subject: [PATCH 11/14] use equal objects to compare data --- .../framework/Source/FlutterRestorationPluginTest.mm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm index 36de96d451a8d..9b8bed5ed9699 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm @@ -80,7 +80,7 @@ - (void)testRestorationEnabledWaitsForData { [restorationPlugin setRestorationData:data]; XCTAssertEqual([capturedResult count], 2u); XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES); - XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data); + XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data); } - (void)testRestorationDisabledRespondsRightAway { @@ -161,7 +161,7 @@ - (void)testReturnsDataSetByFramework { result:^(id _Nullable result) { XCTAssertNil(result); }]; - XCTAssertEqual([restorationPlugin restorationData], data); + XCTAssertEqualObjects([restorationPlugin restorationData], data); } - (void)testRespondsWithDataSetByFramework { @@ -177,7 +177,7 @@ - (void)testRespondsWithDataSetByFramework { result:^(id _Nullable result) { XCTAssertNil(result); }]; - XCTAssertEqual([restorationPlugin restorationData], data); + XCTAssertEqualObjects([restorationPlugin restorationData], data); __block id capturedResult; methodCall = [FlutterMethodCall methodCallWithMethodName:@"get" arguments:nil]; @@ -187,7 +187,7 @@ - (void)testRespondsWithDataSetByFramework { }]; XCTAssertEqual([capturedResult count], 2u); XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES); - XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data); + XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data); } - (void)testResetClearsData { @@ -203,7 +203,7 @@ - (void)testResetClearsData { result:^(id _Nullable result) { XCTAssertNil(result); }]; - XCTAssertEqual([restorationPlugin restorationData], data); + XCTAssertEqualObjects([restorationPlugin restorationData], data); [restorationPlugin reset]; XCTAssertNil([restorationPlugin restorationData]); From 0dd00d511881a680d620e1c2313cc4ccef13e6d0 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 27 Oct 2022 09:58:45 -0700 Subject: [PATCH 12/14] assert arc --- .../platform/darwin/common/framework/Headers/FlutterChannels.h | 2 ++ shell/platform/darwin/common/framework/Source/FlutterCodecs.mm | 2 ++ .../darwin/common/framework/Source/FlutterStandardCodec.mm | 2 ++ 3 files changed, 6 insertions(+) diff --git a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h index 9b84cd64c7178..ed6622715a511 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h @@ -8,6 +8,8 @@ #import "FlutterBinaryMessenger.h" #import "FlutterCodecs.h" +FLUTTER_ASSERT_ARC + @protocol FlutterTaskQueue; NS_ASSUME_NONNULL_BEGIN diff --git a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm index e63315880e71a..57ef1eb752a4a 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm @@ -6,6 +6,8 @@ #include +FLUTTER_ASSERT_ARC + @implementation FlutterBinaryCodec + (instancetype)sharedInstance { static id _sharedInstance = nil; diff --git a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm index caaf7e5a8dfd5..62e85e66a2440 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm @@ -4,6 +4,8 @@ #import "flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodec_Internal.h" +FLUTTER_ASSERT_ARC + #pragma mark - Codec for basic message channel @implementation FlutterStandardMessageCodec { From 12a7fd75120276a7b1030cfe82b58b58ecd06b67 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 27 Oct 2022 10:17:41 -0700 Subject: [PATCH 13/14] fix wrong assert_arc --- .../platform/darwin/common/framework/Headers/FlutterChannels.h | 2 -- .../platform/darwin/common/framework/Source/FlutterChannels.mm | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h index ed6622715a511..9b84cd64c7178 100644 --- a/shell/platform/darwin/common/framework/Headers/FlutterChannels.h +++ b/shell/platform/darwin/common/framework/Headers/FlutterChannels.h @@ -8,8 +8,6 @@ #import "FlutterBinaryMessenger.h" #import "FlutterCodecs.h" -FLUTTER_ASSERT_ARC - @protocol FlutterTaskQueue; NS_ASSUME_NONNULL_BEGIN diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm index 5e73f90779a60..1b4f87fd15814 100644 --- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm +++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm @@ -4,6 +4,8 @@ #import "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h" +FLUTTER_ASSERT_ARC + #pragma mark - Basic message channel static NSString* const kFlutterChannelBuffersChannel = @"dev.flutter/channel-buffers"; From 0a5aec46dacc0fbdcb70862a8261a25c2e86cfa6 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 27 Oct 2022 12:10:09 -0700 Subject: [PATCH 14/14] fix one more equal objects --- .../darwin/ios/framework/Source/FlutterRestorationPluginTest.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm index 9b8bed5ed9699..d61a29e0f31fd 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm @@ -112,7 +112,7 @@ - (void)testRespondsRightAwayWhenDataIsSet { }]; XCTAssertEqual([capturedResult count], 2u); XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES); - XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data); + XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data); } - (void)testRespondsWithNoDataWhenRestorationIsCompletedWithoutData {