[release] Revert "Migrate darwin common "framework_shared" target to ARC (#37049)" (#37195)

* Revert "Use iOS 16 APIs to rotate orientation (#36874)" (#37165)

* Revert "Migrate darwin common "framework_shared" target to ARC (#37049)"

This reverts commit 866b670c1afe084feadbc05631910ac1aa857c7a.
diff --git a/shell/platform/darwin/BUILD.gn b/shell/platform/darwin/BUILD.gn
index f11a8b7..23c8e40 100644
--- a/shell/platform/darwin/BUILD.gn
+++ b/shell/platform/darwin/BUILD.gn
@@ -26,20 +26,6 @@
   sources = [
     "common/buffer_conversions.h",
     "common/buffer_conversions.mm",
-  ]
-
-  deps = [ "//flutter/fml" ]
-
-  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",
@@ -50,12 +36,13 @@
     "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",
+    "//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 72e3a80..45a9e30 100644
--- a/shell/platform/darwin/common/BUILD.gn
+++ b/shell/platform/darwin/common/BUILD.gn
@@ -16,7 +16,15 @@
     "command_line.mm",
   ]
 
-  deps = [ "//flutter/fml" ]
+  deps = [
+    "//flutter/common",
+    "//flutter/flow",
+    "//flutter/fml",
+    "//flutter/runtime",
+    "//flutter/shell/common",
+    "//third_party/dart/runtime:dart_api",
+    "//third_party/skia",
+  ]
 
   public_configs = [ "//flutter:config" ]
 }
@@ -30,8 +38,8 @@
 
 # Framework code shared between iOS and macOS.
 source_set("framework_shared") {
-  cflags_objc = flutter_cflags_objc_arc
-  cflags_objcc = flutter_cflags_objcc_arc
+  cflags_objc = flutter_cflags_objc
+  cflags_objcc = flutter_cflags_objcc
 
   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 f7117f0..3ba5d4e 100644
--- a/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h
+++ b/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h
@@ -344,17 +344,17 @@
 /**
  * The type of the encoded values.
  */
-@property(readonly, nonatomic, assign) FlutterStandardDataType type;
+@property(readonly, nonatomic) FlutterStandardDataType type;
 
 /**
  * The number of value items encoded.
  */
-@property(readonly, nonatomic, assign) UInt32 elementCount;
+@property(readonly, nonatomic) UInt32 elementCount;
 
 /**
  * The number of bytes used by the encoding of a single value item.
  */
-@property(readonly, nonatomic, assign) UInt8 elementSize;
+@property(readonly, nonatomic) UInt8 elementSize;
 @end
 
 /**
diff --git a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm
index 1b4f87f..30b306a 100644
--- a/shell/platform/darwin/common/framework/Source/FlutterChannels.mm
+++ b/shell/platform/darwin/common/framework/Source/FlutterChannels.mm
@@ -4,8 +4,6 @@
 
 #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";
@@ -53,9 +51,9 @@
 + (instancetype)messageChannelWithName:(NSString*)name
                        binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
                                  codec:(NSObject<FlutterMessageCodec>*)codec {
-  return [[FlutterBasicMessageChannel alloc] initWithName:name
-                                          binaryMessenger:messenger
-                                                    codec:codec];
+  return [[[FlutterBasicMessageChannel alloc] initWithName:name
+                                           binaryMessenger:messenger
+                                                     codec:codec] autorelease];
 }
 
 - (instancetype)initWithName:(NSString*)name
@@ -71,13 +69,21 @@
                    taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _name = [name copy];
-  _messenger = messenger;
-  _codec = codec;
-  _taskQueue = taskQueue;
+  _name = [name retain];
+  _messenger = [messenger retain];
+  _codec = [codec retain];
+  _taskQueue = [taskQueue retain];
   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]];
 }
@@ -102,7 +108,7 @@
     return;
   }
   // Grab reference to avoid retain on self.
-  __weak NSObject<FlutterMessageCodec>* codec = _codec;
+  NSObject<FlutterMessageCodec>* codec = _codec;
   FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) {
     handler([codec decode:message], ^(id reply) {
       callback([codec encode:reply]);
@@ -122,19 +128,26 @@
 ////////////////////////////////////////////////////////////////////////////////
 @implementation FlutterError
 + (instancetype)errorWithCode:(NSString*)code message:(NSString*)message details:(id)details {
-  return [[FlutterError alloc] initWithCode:code message:message details:details];
+  return [[[FlutterError alloc] initWithCode:code message:message details:details] autorelease];
 }
 
 - (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 copy];
-  _message = [message copy];
-  _details = details;
+  _code = [code retain];
+  _message = [message retain];
+  _details = [details retain];
   return self;
 }
 
+- (void)dealloc {
+  [_code release];
+  [_message release];
+  [_details release];
+  [super dealloc];
+}
+
 - (BOOL)isEqual:(id)object {
   if (self == object) {
     return YES;
@@ -156,18 +169,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 @implementation FlutterMethodCall
 + (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id)arguments {
-  return [[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments];
+  return [[[FlutterMethodCall alloc] initWithMethodName:method arguments:arguments] autorelease];
 }
 
 - (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 copy];
-  _arguments = arguments;
+  _method = [method retain];
+  _arguments = [arguments retain];
   return self;
 }
 
+- (void)dealloc {
+  [_method release];
+  [_arguments release];
+  [super dealloc];
+}
+
 - (BOOL)isEqual:(id)object {
   if (self == object) {
     return YES;
@@ -205,7 +224,8 @@
 + (instancetype)methodChannelWithName:(NSString*)name
                       binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
                                 codec:(NSObject<FlutterMethodCodec>*)codec {
-  return [[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger codec:codec];
+  return [[[FlutterMethodChannel alloc] initWithName:name binaryMessenger:messenger
+                                               codec:codec] autorelease];
 }
 
 - (instancetype)initWithName:(NSString*)name
@@ -220,13 +240,21 @@
                    taskQueue:(NSObject<FlutterTaskQueue>*)taskQueue {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _name = [name copy];
-  _messenger = messenger;
-  _codec = codec;
-  _taskQueue = taskQueue;
+  _name = [name retain];
+  _messenger = [messenger retain];
+  _codec = [codec retain];
+  _taskQueue = [taskQueue retain];
   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];
@@ -257,7 +285,7 @@
     return;
   }
   // Make sure the block captures the codec, not self.
-  __weak NSObject<FlutterMethodCodec>* codec = _codec;
+  NSObject<FlutterMethodCodec>* codec = _codec;
   FlutterBinaryMessageHandler messageHandler = ^(NSData* message, FlutterBinaryReply callback) {
     FlutterMethodCall* call = [codec decodeMethodCall:message];
     handler(call, ^(id result) {
@@ -300,7 +328,8 @@
 + (instancetype)eventChannelWithName:(NSString*)name
                      binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger
                                codec:(NSObject<FlutterMethodCodec>*)codec {
-  return [[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger codec:codec];
+  return [[[FlutterEventChannel alloc] initWithName:name binaryMessenger:messenger
+                                              codec:codec] autorelease];
 }
 
 - (instancetype)initWithName:(NSString*)name
@@ -315,13 +344,21 @@
                    taskQueue:(NSObject<FlutterTaskQueue>* _Nullable)taskQueue {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _name = [name copy];
-  _messenger = messenger;
-  _codec = codec;
-  _taskQueue = taskQueue;
+  _name = [name retain];
+  _messenger = [messenger retain];
+  _codec = [codec retain];
+  _taskQueue = [taskQueue retain];
   return self;
 }
 
+- (void)dealloc {
+  [_name release];
+  [_codec release];
+  [_messenger release];
+  [_taskQueue release];
+  [super dealloc];
+}
+
 static FlutterBinaryMessengerConnection SetStreamHandlerMessageHandlerOnChannel(
     NSObject<FlutterStreamHandler>* handler,
     NSString* name,
diff --git a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm
index 57ef1eb..8ea26cc 100644
--- a/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm
+++ b/shell/platform/darwin/common/framework/Source/FlutterCodecs.mm
@@ -6,8 +6,6 @@
 
 #include <cstring>
 
-FLUTTER_ASSERT_ARC
-
 @implementation FlutterBinaryCodec
 + (instancetype)sharedInstance {
   static id _sharedInstance = nil;
@@ -50,7 +48,7 @@
   if (message == nil) {
     return nil;
   }
-  return [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding];
+  return [[[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding] autorelease];
 }
 @end
 
diff --git a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm
index 62e85e6..eeb3ef9 100644
--- a/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm
+++ b/shell/platform/darwin/common/framework/Source/FlutterStandardCodec.mm
@@ -4,8 +4,6 @@
 
 #import "flutter/shell/platform/darwin/common/framework/Source/FlutterStandardCodec_Internal.h"
 
-FLUTTER_ASSERT_ARC
-
 #pragma mark - Codec for basic message channel
 
 @implementation FlutterStandardMessageCodec {
@@ -14,23 +12,29 @@
 + (instancetype)sharedInstance {
   static id _sharedInstance = nil;
   if (!_sharedInstance) {
-    FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init];
+    FlutterStandardReaderWriter* readerWriter =
+        [[[FlutterStandardReaderWriter alloc] init] autorelease];
     _sharedInstance = [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter];
   }
   return _sharedInstance;
 }
 
 + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter {
-  return [[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter];
+  return [[[FlutterStandardMessageCodec alloc] initWithReaderWriter:readerWriter] autorelease];
 }
 
 - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _readerWriter = readerWriter;
+  _readerWriter = [readerWriter retain];
   return self;
 }
 
+- (void)dealloc {
+  [_readerWriter release];
+  [super dealloc];
+}
+
 - (NSData*)encode:(id)message {
   if (message == nil) {
     return nil;
@@ -60,23 +64,29 @@
 + (instancetype)sharedInstance {
   static id _sharedInstance = nil;
   if (!_sharedInstance) {
-    FlutterStandardReaderWriter* readerWriter = [[FlutterStandardReaderWriter alloc] init];
+    FlutterStandardReaderWriter* readerWriter =
+        [[[FlutterStandardReaderWriter alloc] init] autorelease];
     _sharedInstance = [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter];
   }
   return _sharedInstance;
 }
 
 + (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter {
-  return [[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter];
+  return [[[FlutterStandardMethodCodec alloc] initWithReaderWriter:readerWriter] autorelease];
 }
 
 - (instancetype)initWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _readerWriter = readerWriter;
+  _readerWriter = [readerWriter retain];
   return self;
 }
 
+- (void)dealloc {
+  [_readerWriter release];
+  [super dealloc];
+}
+
 - (NSData*)encodeMethodCall:(FlutterMethodCall*)call {
   NSMutableData* data = [NSMutableData dataWithCapacity:32];
   FlutterStandardWriter* writer = [_readerWriter writerWithData:data];
@@ -163,7 +173,7 @@
 }
 
 + (instancetype)typedDataWithData:(NSData*)data type:(FlutterStandardDataType)type {
-  return [[FlutterStandardTypedData alloc] initWithData:data type:type];
+  return [[[FlutterStandardTypedData alloc] initWithData:data type:type] autorelease];
 }
 
 - (instancetype)initWithData:(NSData*)data type:(FlutterStandardDataType)type {
@@ -172,13 +182,18 @@
   NSAssert(data.length % elementSize == 0, @"Data must contain integral number of elements");
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _data = [data copy];
+  _data = [data retain];
   _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;
@@ -205,10 +220,15 @@
 - (instancetype)initWithData:(NSMutableData*)data {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _data = data;
+  _data = [data retain];
   return self;
 }
 
+- (void)dealloc {
+  [_data release];
+  [super dealloc];
+}
+
 - (void)writeByte:(UInt8)value {
   [_data appendBytes:&value length:1];
 }
@@ -253,7 +273,7 @@
   if (value == nil || value == [NSNull null]) {
     [self writeByte:FlutterStandardFieldNil];
   } else if ([value isKindOfClass:[NSNumber class]]) {
-    CFNumberRef number = (__bridge CFNumberRef)value;
+    CFNumberRef number = (CFNumberRef)value;
     BOOL success = NO;
     if (CFGetTypeID(number) == CFBooleanGetTypeID()) {
       BOOL b = CFBooleanGetValue((CFBooleanRef)number);
@@ -328,11 +348,16 @@
 - (instancetype)initWithData:(NSData*)data {
   self = [super init];
   NSAssert(self, @"Super init cannot be nil");
-  _data = [data copy];
+  _data = [data retain];
   _range = NSMakeRange(0, 0);
   return self;
 }
 
+- (void)dealloc {
+  [_data release];
+  [super dealloc];
+}
+
 - (BOOL)hasMore {
   return _range.location < _data.length;
 }
@@ -373,7 +398,7 @@
 
 - (NSString*)readUTF8 {
   NSData* bytes = [self readData:[self readSize]];
-  return [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding];
+  return [[[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding] autorelease];
 }
 
 - (void)readAlignment:(UInt8)alignment {
@@ -457,10 +482,10 @@
 
 @implementation FlutterStandardReaderWriter
 - (FlutterStandardWriter*)writerWithData:(NSMutableData*)data {
-  return [[FlutterStandardWriter alloc] initWithData:data];
+  return [[[FlutterStandardWriter alloc] initWithData:data] autorelease];
 }
 
 - (FlutterStandardReader*)readerWithData:(NSData*)data {
-  return [[FlutterStandardReader alloc] initWithData:data];
+  return [[[FlutterStandardReader alloc] initWithData:data] autorelease];
 }
 @end
diff --git a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm
index d61a29e..36de96d 100644
--- a/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm
+++ b/shell/platform/darwin/ios/framework/Source/FlutterRestorationPluginTest.mm
@@ -80,7 +80,7 @@
   [restorationPlugin setRestorationData:data];
   XCTAssertEqual([capturedResult count], 2u);
   XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES);
-  XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data);
+  XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data);
 }
 
 - (void)testRestorationDisabledRespondsRightAway {
@@ -112,7 +112,7 @@
                                }];
   XCTAssertEqual([capturedResult count], 2u);
   XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES);
-  XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data);
+  XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data);
 }
 
 - (void)testRespondsWithNoDataWhenRestorationIsCompletedWithoutData {
@@ -161,7 +161,7 @@
                                result:^(id _Nullable result) {
                                  XCTAssertNil(result);
                                }];
-  XCTAssertEqualObjects([restorationPlugin restorationData], data);
+  XCTAssertEqual([restorationPlugin restorationData], data);
 }
 
 - (void)testRespondsWithDataSetByFramework {
@@ -177,7 +177,7 @@
                                result:^(id _Nullable result) {
                                  XCTAssertNil(result);
                                }];
-  XCTAssertEqualObjects([restorationPlugin restorationData], data);
+  XCTAssertEqual([restorationPlugin restorationData], data);
 
   __block id capturedResult;
   methodCall = [FlutterMethodCall methodCallWithMethodName:@"get" arguments:nil];
@@ -187,7 +187,7 @@
                                }];
   XCTAssertEqual([capturedResult count], 2u);
   XCTAssertEqual([capturedResult objectForKey:@"enabled"], @YES);
-  XCTAssertEqualObjects([[capturedResult objectForKey:@"data"] data], data);
+  XCTAssertEqual([[capturedResult objectForKey:@"data"] data], data);
 }
 
 - (void)testResetClearsData {
@@ -203,7 +203,7 @@
                                result:^(id _Nullable result) {
                                  XCTAssertNil(result);
                                }];
-  XCTAssertEqualObjects([restorationPlugin restorationData], data);
+  XCTAssertEqual([restorationPlugin restorationData], data);
 
   [restorationPlugin reset];
   XCTAssertNil([restorationPlugin restorationData]);