Wrap WebRTC OBJC API types with RTC_OBJC_TYPE.

This CL introduced 2 new macros that affect the WebRTC OBJC API symbols:

- RTC_OBJC_TYPE_PREFIX:
  Macro used to prepend a prefix to the API types that are exported with
  RTC_OBJC_EXPORT.

  Clients can patch the definition of this macro locally and build
  WebRTC.framework with their own prefix in case symbol clashing is a
  problem.

  This macro must only be defined by changing the value in
  sdk/objc/base/RTCMacros.h  and not on via compiler flag to ensure
  it has a unique value.

- RCT_OBJC_TYPE:
  Macro used internally to reference API types. Declaring an API type
  without using this macro will not include the declared type in the
  set of types that will be affected by the configurable
  RTC_OBJC_TYPE_PREFIX.

Manual changes:
https://webrtc-review.googlesource.com/c/src/+/173781/5..10

The auto-generated changes in PS#5 have been done with:
https://webrtc-review.googlesource.com/c/src/+/174061.

Bug: None
Change-Id: I0d54ca94db764fb3b6cb4365873f79e14cd879b8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173781
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31153}
diff --git a/sdk/objc/api/RTCVideoRendererAdapter+Private.h b/sdk/objc/api/RTCVideoRendererAdapter+Private.h
index d983ae6..9b123d2 100644
--- a/sdk/objc/api/RTCVideoRendererAdapter+Private.h
+++ b/sdk/objc/api/RTCVideoRendererAdapter+Private.h
@@ -23,7 +23,7 @@
  * Calls made to the webrtc::VideoRenderInterface will be adapted and passed to
  * this video renderer.
  */
-@property(nonatomic, readonly) id<RTCVideoRenderer> videoRenderer;
+@property(nonatomic, readonly) id<RTC_OBJC_TYPE(RTCVideoRenderer)> videoRenderer;
 
 /**
  * The native VideoSinkInterface surface exposed by this adapter. Calls made
@@ -33,7 +33,7 @@
 @property(nonatomic, readonly) rtc::VideoSinkInterface<webrtc::VideoFrame> *nativeVideoRenderer;
 
 /** Initialize an RTCVideoRendererAdapter with an RTCVideoRenderer. */
-- (instancetype)initWithNativeRenderer:(id<RTCVideoRenderer>)videoRenderer
+- (instancetype)initWithNativeRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)videoRenderer
     NS_DESIGNATED_INITIALIZER;
 
 @end
diff --git a/sdk/objc/api/RTCVideoRendererAdapter.mm b/sdk/objc/api/RTCVideoRendererAdapter.mm
index 27dd6c2..ef02f72 100644
--- a/sdk/objc/api/RTCVideoRendererAdapter.mm
+++ b/sdk/objc/api/RTCVideoRendererAdapter.mm
@@ -26,7 +26,7 @@
   }
 
   void OnFrame(const webrtc::VideoFrame& nativeVideoFrame) override {
-    RTCVideoFrame* videoFrame = NativeToObjCVideoFrame(nativeVideoFrame);
+    RTC_OBJC_TYPE(RTCVideoFrame)* videoFrame = NativeToObjCVideoFrame(nativeVideoFrame);
 
     CGSize current_size = (videoFrame.rotation % 180 == 0)
                               ? CGSizeMake(videoFrame.width, videoFrame.height)
@@ -51,7 +51,7 @@
 
 @synthesize videoRenderer = _videoRenderer;
 
-- (instancetype)initWithNativeRenderer:(id<RTCVideoRenderer>)videoRenderer {
+- (instancetype)initWithNativeRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)videoRenderer {
   NSParameterAssert(videoRenderer);
   if (self = [super init]) {
     _videoRenderer = videoRenderer;
diff --git a/sdk/objc/api/logging/RTCCallbackLogger.h b/sdk/objc/api/logging/RTCCallbackLogger.h
index 2bce03f..c1aeb82 100644
--- a/sdk/objc/api/logging/RTCCallbackLogger.h
+++ b/sdk/objc/api/logging/RTCCallbackLogger.h
@@ -22,7 +22,7 @@
 // This class intercepts WebRTC logs and forwards them to a registered block.
 // This class is not threadsafe.
 RTC_OBJC_EXPORT
-@interface RTCCallbackLogger : NSObject
+@interface RTC_OBJC_TYPE (RTCCallbackLogger) : NSObject
 
 // The severity level to capture. The default is kRTCLoggingSeverityInfo.
 @property(nonatomic, assign) RTCLoggingSeverity severity;
diff --git a/sdk/objc/api/logging/RTCCallbackLogger.mm b/sdk/objc/api/logging/RTCCallbackLogger.mm
index e58b03b..443fee1 100644
--- a/sdk/objc/api/logging/RTCCallbackLogger.mm
+++ b/sdk/objc/api/logging/RTCCallbackLogger.mm
@@ -64,7 +64,7 @@
   RTCCallbackLoggerMessageAndSeverityHandler callback_handler_;
 };
 
-@implementation RTCCallbackLogger {
+@implementation RTC_OBJC_TYPE (RTCCallbackLogger) {
   BOOL _hasStarted;
   std::unique_ptr<rtc::LogSink> _logSink;
 }
diff --git a/sdk/objc/api/peerconnection/RTCAudioSource+Private.h b/sdk/objc/api/peerconnection/RTCAudioSource+Private.h
index bf1ea62..2c333f9 100644
--- a/sdk/objc/api/peerconnection/RTCAudioSource+Private.h
+++ b/sdk/objc/api/peerconnection/RTCAudioSource+Private.h
@@ -12,20 +12,22 @@
 
 #import "RTCMediaSource+Private.h"
 
-@interface RTCAudioSource ()
+@interface RTC_OBJC_TYPE (RTCAudioSource)
+()
 
-/**
- * The AudioSourceInterface object passed to this RTCAudioSource during
- * construction.
- */
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::AudioSourceInterface> nativeAudioSource;
+    /**
+     * The AudioSourceInterface object passed to this RTCAudioSource during
+     * construction.
+     */
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::AudioSourceInterface> nativeAudioSource;
 
 /** Initialize an RTCAudioSource from a native AudioSourceInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory*)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeAudioSource:(rtc::scoped_refptr<webrtc::AudioSourceInterface>)nativeAudioSource
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory*)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCAudioSource.h b/sdk/objc/api/peerconnection/RTCAudioSource.h
index d1030e3..9f78dcd 100644
--- a/sdk/objc/api/peerconnection/RTCAudioSource.h
+++ b/sdk/objc/api/peerconnection/RTCAudioSource.h
@@ -16,7 +16,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCAudioSource : RTCMediaSource
+@interface RTC_OBJC_TYPE (RTCAudioSource) : RTC_OBJC_TYPE(RTCMediaSource)
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCAudioSource.mm b/sdk/objc/api/peerconnection/RTCAudioSource.mm
index a6822f6..b56c6e9 100644
--- a/sdk/objc/api/peerconnection/RTCAudioSource.mm
+++ b/sdk/objc/api/peerconnection/RTCAudioSource.mm
@@ -12,13 +12,13 @@
 
 #include "rtc_base/checks.h"
 
-@implementation RTCAudioSource {
+@implementation RTC_OBJC_TYPE (RTCAudioSource) {
 }
 
 @synthesize volume = _volume;
 @synthesize nativeAudioSource = _nativeAudioSource;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeAudioSource:
                   (rtc::scoped_refptr<webrtc::AudioSourceInterface>)nativeAudioSource {
   RTC_DCHECK(factory);
@@ -32,7 +32,7 @@
   return self;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type {
   RTC_NOTREACHED();
@@ -41,7 +41,7 @@
 
 - (NSString *)description {
   NSString *stateString = [[self class] stringForState:self.state];
-  return [NSString stringWithFormat:@"RTCAudioSource( %p ): %@", self, stateString];
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCAudioSource)( %p ): %@", self, stateString];
 }
 
 - (void)setVolume:(double)volume {
diff --git a/sdk/objc/api/peerconnection/RTCAudioTrack+Private.h b/sdk/objc/api/peerconnection/RTCAudioTrack+Private.h
index 88dd971..6495500 100644
--- a/sdk/objc/api/peerconnection/RTCAudioTrack+Private.h
+++ b/sdk/objc/api/peerconnection/RTCAudioTrack+Private.h
@@ -14,15 +14,16 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
-@interface RTCAudioTrack ()
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
+@interface RTC_OBJC_TYPE (RTCAudioTrack)
+()
 
-/** AudioTrackInterface created or passed in at construction. */
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::AudioTrackInterface> nativeAudioTrack;
+    /** AudioTrackInterface created or passed in at construction. */
+    @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::AudioTrackInterface> nativeAudioTrack;
 
 /** Initialize an RTCAudioTrack with an id. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                         source:(RTCAudioSource *)source
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                         source:(RTC_OBJC_TYPE(RTCAudioSource) *)source
                         trackId:(NSString *)trackId;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCAudioTrack.h b/sdk/objc/api/peerconnection/RTCAudioTrack.h
index 501ef92..95eb5d3 100644
--- a/sdk/objc/api/peerconnection/RTCAudioTrack.h
+++ b/sdk/objc/api/peerconnection/RTCAudioTrack.h
@@ -13,15 +13,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCAudioSource;
+@class RTC_OBJC_TYPE(RTCAudioSource);
 
 RTC_OBJC_EXPORT
-@interface RTCAudioTrack : RTCMediaStreamTrack
+@interface RTC_OBJC_TYPE (RTCAudioTrack) : RTC_OBJC_TYPE(RTCMediaStreamTrack)
 
 - (instancetype)init NS_UNAVAILABLE;
 
 /** The audio source for this audio track. */
-@property(nonatomic, readonly) RTCAudioSource *source;
+@property(nonatomic, readonly) RTC_OBJC_TYPE(RTCAudioSource) * source;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCAudioTrack.mm b/sdk/objc/api/peerconnection/RTCAudioTrack.mm
index 3389b76..6a97f46 100644
--- a/sdk/objc/api/peerconnection/RTCAudioTrack.mm
+++ b/sdk/objc/api/peerconnection/RTCAudioTrack.mm
@@ -17,12 +17,12 @@
 
 #include "rtc_base/checks.h"
 
-@implementation RTCAudioTrack
+@implementation RTC_OBJC_TYPE (RTCAudioTrack)
 
 @synthesize source = _source;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                         source:(RTCAudioSource *)source
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                         source:(RTC_OBJC_TYPE(RTCAudioSource) *)source
                         trackId:(NSString *)trackId {
   RTC_DCHECK(factory);
   RTC_DCHECK(source);
@@ -37,7 +37,7 @@
   return self;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
                            type:(RTCMediaStreamTrackType)type {
   NSParameterAssert(factory);
@@ -46,14 +46,13 @@
   return [super initWithFactory:factory nativeTrack:nativeTrack type:type];
 }
 
-
-- (RTCAudioSource *)source {
+- (RTC_OBJC_TYPE(RTCAudioSource) *)source {
   if (!_source) {
     rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
         self.nativeAudioTrack->GetSource();
     if (source) {
-      _source =
-          [[RTCAudioSource alloc] initWithFactory:self.factory nativeAudioSource:source.get()];
+      _source = [[RTC_OBJC_TYPE(RTCAudioSource) alloc] initWithFactory:self.factory
+                                                     nativeAudioSource:source.get()];
     }
   }
   return _source;
diff --git a/sdk/objc/api/peerconnection/RTCCertificate.h b/sdk/objc/api/peerconnection/RTCCertificate.h
index 50c1ca5..5ac8984 100644
--- a/sdk/objc/api/peerconnection/RTCCertificate.h
+++ b/sdk/objc/api/peerconnection/RTCCertificate.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCCertificate : NSObject <NSCopying>
+@interface RTC_OBJC_TYPE (RTCCertificate) : NSObject <NSCopying>
 
 /** Private key in PEM. */
 @property(nonatomic, readonly, copy) NSString *private_key;
@@ -37,7 +37,7 @@
  *  provided.
  *  - name: "ECDSA" or "RSASSA-PKCS1-v1_5"
  */
-+ (nullable RTCCertificate *)generateCertificateWithParams:(NSDictionary *)params;
++ (nullable RTC_OBJC_TYPE(RTCCertificate) *)generateCertificateWithParams:(NSDictionary *)params;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCCertificate.mm b/sdk/objc/api/peerconnection/RTCCertificate.mm
index 250cfc4..e5c33e4 100644
--- a/sdk/objc/api/peerconnection/RTCCertificate.mm
+++ b/sdk/objc/api/peerconnection/RTCCertificate.mm
@@ -16,7 +16,7 @@
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/ssl_identity.h"
 
-@implementation RTCCertificate
+@implementation RTC_OBJC_TYPE (RTCCertificate)
 
 @synthesize private_key = _private_key;
 @synthesize certificate = _certificate;
@@ -35,7 +35,7 @@
   return self;
 }
 
-+ (nullable RTCCertificate *)generateCertificateWithParams:(NSDictionary *)params {
++ (nullable RTC_OBJC_TYPE(RTCCertificate) *)generateCertificateWithParams:(NSDictionary *)params {
   rtc::KeyType keyType = rtc::KT_ECDSA;
   NSString *keyTypeString = [params valueForKey:@"name"];
   if (keyTypeString && [keyTypeString isEqualToString:@"RSASSA-PKCS1-v1_5"]) {
@@ -63,8 +63,9 @@
   RTC_LOG(LS_INFO) << "CERT PEM ";
   RTC_LOG(LS_INFO) << pem_certificate;
 
-  RTCCertificate *cert = [[RTCCertificate alloc] initWithPrivateKey:@(pem_private_key.c_str())
-                                                        certificate:@(pem_certificate.c_str())];
+  RTC_OBJC_TYPE(RTCCertificate) *cert =
+      [[RTC_OBJC_TYPE(RTCCertificate) alloc] initWithPrivateKey:@(pem_private_key.c_str())
+                                                    certificate:@(pem_certificate.c_str())];
   return cert;
 }
 
diff --git a/sdk/objc/api/peerconnection/RTCConfiguration+Native.h b/sdk/objc/api/peerconnection/RTCConfiguration+Native.h
index 54783f0..07c0da6 100644
--- a/sdk/objc/api/peerconnection/RTCConfiguration+Native.h
+++ b/sdk/objc/api/peerconnection/RTCConfiguration+Native.h
@@ -14,14 +14,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCConfiguration ()
+@interface RTC_OBJC_TYPE (RTCConfiguration)
+()
 
-/** Optional TurnCustomizer.
- *  With this class one can modify outgoing TURN messages.
- *  The object passed in must remain valid until PeerConnection::Close() is
- * called.
- */
-@property(nonatomic, nullable) webrtc::TurnCustomizer* turnCustomizer;
+    /** Optional TurnCustomizer.
+     *  With this class one can modify outgoing TURN messages.
+     *  The object passed in must remain valid until PeerConnection::Close() is
+     * called.
+     */
+    @property(nonatomic, nullable) webrtc::TurnCustomizer* turnCustomizer;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCConfiguration+Private.h b/sdk/objc/api/peerconnection/RTCConfiguration+Private.h
index 845f779..70a6532 100644
--- a/sdk/objc/api/peerconnection/RTCConfiguration+Private.h
+++ b/sdk/objc/api/peerconnection/RTCConfiguration+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCConfiguration ()
+@interface RTC_OBJC_TYPE (RTCConfiguration)
+()
 
-+ (webrtc::PeerConnectionInterface::IceTransportsType)nativeTransportsTypeForTransportPolicy:
-        (RTCIceTransportPolicy)policy;
+    + (webrtc::PeerConnectionInterface::IceTransportsType)nativeTransportsTypeForTransportPolicy
+    : (RTCIceTransportPolicy)policy;
 
 + (RTCIceTransportPolicy)transportPolicyForTransportsType:
         (webrtc::PeerConnectionInterface::IceTransportsType)nativeType;
@@ -65,8 +66,8 @@
 + (NSString *)stringForSdpSemantics:(RTCSdpSemantics)sdpSemantics;
 
 /**
- * RTCConfiguration struct representation of this RTCConfiguration. This is
- * needed to pass to the underlying C++ APIs.
+ * RTCConfiguration struct representation of this RTCConfiguration.
+ * This is needed to pass to the underlying C++ APIs.
  */
 - (nullable webrtc::PeerConnectionInterface::RTCConfiguration *)createNativeConfiguration;
 
diff --git a/sdk/objc/api/peerconnection/RTCConfiguration.h b/sdk/objc/api/peerconnection/RTCConfiguration.h
index 44d09228..4e9c674 100644
--- a/sdk/objc/api/peerconnection/RTCConfiguration.h
+++ b/sdk/objc/api/peerconnection/RTCConfiguration.h
@@ -14,7 +14,7 @@
 #import "RTCCryptoOptions.h"
 #import "RTCMacros.h"
 
-@class RTCIceServer;
+@class RTC_OBJC_TYPE(RTCIceServer);
 
 /**
  * Represents the ice transport policy. This exposes the same states in C++,
@@ -70,7 +70,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCConfiguration : NSObject
+@interface RTC_OBJC_TYPE (RTCConfiguration) : NSObject
 
 /** If true, allows DSCP codes to be set on outgoing packets, configured using
  *  networkPriority field of RTCRtpEncodingParameters. Defaults to false.
@@ -78,10 +78,10 @@
 @property(nonatomic, assign) BOOL enableDscp;
 
 /** An array of Ice Servers available to be used by ICE. */
-@property(nonatomic, copy) NSArray<RTCIceServer *> *iceServers;
+@property(nonatomic, copy) NSArray<RTC_OBJC_TYPE(RTCIceServer) *> *iceServers;
 
 /** An RTCCertificate for 're' use. */
-@property(nonatomic, nullable) RTCCertificate *certificate;
+@property(nonatomic, nullable) RTC_OBJC_TYPE(RTCCertificate) * certificate;
 
 /** Which candidates the ICE agent is allowed to use. The W3C calls it
  * |iceTransportPolicy|, while in C++ it is called |type|. */
@@ -173,9 +173,9 @@
  *
  *  UnifiedPlan will cause RTCPeerConnection to create offers and answers with
  *  multiple m= sections where each m= section maps to one RTCRtpSender and one
- *  RTCRtpReceiver (an RTCRtpTransceiver), either both audio or both video. This
- *  will also cause RTCPeerConnection to ignore all but the first a=ssrc lines
- *  that form a Plan B stream.
+ *  RTCRtpReceiver (an RTCRtpTransceiver), either both audio or both
+ *  video. This will also cause RTCPeerConnection) to ignore all but the first a=ssrc
+ *  lines that form a Plan B stream.
  *
  *  For users who wish to send multiple audio/video streams and need to stay
  *  interoperable with legacy WebRTC implementations or use legacy APIs,
@@ -214,7 +214,7 @@
  * frame encryption for native WebRTC. Setting this will overwrite any
  * options set through the PeerConnectionFactory (which is deprecated).
  */
-@property(nonatomic, nullable) RTCCryptoOptions *cryptoOptions;
+@property(nonatomic, nullable) RTC_OBJC_TYPE(RTCCryptoOptions) * cryptoOptions;
 
 /**
  * Time interval between audio RTCP reports.
diff --git a/sdk/objc/api/peerconnection/RTCConfiguration.mm b/sdk/objc/api/peerconnection/RTCConfiguration.mm
index eeb9493..52c1450 100644
--- a/sdk/objc/api/peerconnection/RTCConfiguration.mm
+++ b/sdk/objc/api/peerconnection/RTCConfiguration.mm
@@ -20,7 +20,7 @@
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/ssl_identity.h"
 
-@implementation RTCConfiguration
+@implementation RTC_OBJC_TYPE (RTCConfiguration)
 
 @synthesize enableDscp = _enableDscp;
 @synthesize iceServers = _iceServers;
@@ -70,7 +70,8 @@
     _enableDscp = config.dscp();
     NSMutableArray *iceServers = [NSMutableArray array];
     for (const webrtc::PeerConnectionInterface::IceServer& server : config.servers) {
-      RTCIceServer *iceServer = [[RTCIceServer alloc] initWithNativeServer:server];
+      RTC_OBJC_TYPE(RTCIceServer) *iceServer =
+          [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithNativeServer:server];
       [iceServers addObject:iceServer];
     }
     _iceServers = iceServers;
@@ -78,9 +79,9 @@
       rtc::scoped_refptr<rtc::RTCCertificate> native_cert;
       native_cert = config.certificates[0];
       rtc::RTCCertificatePEM native_pem = native_cert->ToPEM();
-      _certificate =
-          [[RTCCertificate alloc] initWithPrivateKey:@(native_pem.private_key().c_str())
-                                         certificate:@(native_pem.certificate().c_str())];
+      _certificate = [[RTC_OBJC_TYPE(RTCCertificate) alloc]
+          initWithPrivateKey:@(native_pem.private_key().c_str())
+                 certificate:@(native_pem.certificate().c_str())];
     }
     _iceTransportPolicy =
         [[self class] transportPolicyForTransportsType:config.type];
@@ -122,7 +123,7 @@
     _turnCustomizer = config.turn_customizer;
     _activeResetSrtpParams = config.active_reset_srtp_params;
     if (config.crypto_options) {
-      _cryptoOptions = [[RTCCryptoOptions alloc]
+      _cryptoOptions = [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc]
                initWithSrtpEnableGcmCryptoSuites:config.crypto_options->srtp
                                                      .enable_gcm_crypto_suites
              srtpEnableAes128Sha1_32CryptoCipher:config.crypto_options->srtp
@@ -140,7 +141,7 @@
 }
 
 - (NSString *)description {
-  static NSString *formatString = @"RTCConfiguration: "
+  static NSString *formatString = @"RTC_OBJC_TYPE(RTCConfiguration): "
                                   @"{\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n"
                                   @"%d\n%@\n%d\n%d\n%d\n%d\n%d\n%@\n%d\n}\n";
 
@@ -181,7 +182,7 @@
           webrtc::PeerConnectionInterface::RTCConfigurationType::kAggressive));
 
   nativeConfig->set_dscp(_enableDscp);
-  for (RTCIceServer *iceServer in _iceServers) {
+  for (RTC_OBJC_TYPE(RTCIceServer) * iceServer in _iceServers) {
     nativeConfig->servers.push_back(iceServer.nativeServer);
   }
   nativeConfig->type =
diff --git a/sdk/objc/api/peerconnection/RTCCryptoOptions.h b/sdk/objc/api/peerconnection/RTCCryptoOptions.h
index b465bb5..759a45e 100644
--- a/sdk/objc/api/peerconnection/RTCCryptoOptions.h
+++ b/sdk/objc/api/peerconnection/RTCCryptoOptions.h
@@ -19,7 +19,7 @@
  * as Objective-C doesn't support nested structures.
  */
 RTC_OBJC_EXPORT
-@interface RTCCryptoOptions : NSObject
+@interface RTC_OBJC_TYPE (RTCCryptoOptions) : NSObject
 
 /**
  * Enable GCM crypto suites from RFC 7714 for SRTP. GCM will only be used
diff --git a/sdk/objc/api/peerconnection/RTCCryptoOptions.mm b/sdk/objc/api/peerconnection/RTCCryptoOptions.mm
index a059f75..fbaa1de 100644
--- a/sdk/objc/api/peerconnection/RTCCryptoOptions.mm
+++ b/sdk/objc/api/peerconnection/RTCCryptoOptions.mm
@@ -10,7 +10,7 @@
 
 #import "RTCCryptoOptions.h"
 
-@implementation RTCCryptoOptions
+@implementation RTC_OBJC_TYPE (RTCCryptoOptions)
 
 @synthesize srtpEnableGcmCryptoSuites = _srtpEnableGcmCryptoSuites;
 @synthesize srtpEnableAes128Sha1_32CryptoCipher = _srtpEnableAes128Sha1_32CryptoCipher;
diff --git a/sdk/objc/api/peerconnection/RTCDataChannel+Private.h b/sdk/objc/api/peerconnection/RTCDataChannel+Private.h
index e327fb4..2cdbdab 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannel+Private.h
+++ b/sdk/objc/api/peerconnection/RTCDataChannel+Private.h
@@ -15,27 +15,29 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
-@interface RTCDataBuffer ()
+@interface RTC_OBJC_TYPE (RTCDataBuffer)
+()
 
-/**
- * The native DataBuffer representation of this RTCDatabuffer object. This is
- * needed to pass to the underlying C++ APIs.
- */
-@property(nonatomic, readonly) const webrtc::DataBuffer *nativeDataBuffer;
+    /**
+     * The native DataBuffer representation of this RTCDatabuffer object. This is
+     * needed to pass to the underlying C++ APIs.
+     */
+    @property(nonatomic, readonly) const webrtc::DataBuffer *nativeDataBuffer;
 
 /** Initialize an RTCDataBuffer from a native DataBuffer. */
 - (instancetype)initWithNativeBuffer:(const webrtc::DataBuffer &)nativeBuffer;
 
 @end
 
-@interface RTCDataChannel ()
+@interface RTC_OBJC_TYPE (RTCDataChannel)
+()
 
-/** Initialize an RTCDataChannel from a native DataChannelInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-              nativeDataChannel:(rtc::scoped_refptr<webrtc::DataChannelInterface>)nativeDataChannel
-    NS_DESIGNATED_INITIALIZER;
+    /** Initialize an RTCDataChannel from a native DataChannelInterface. */
+    - (instancetype)initWithFactory
+    : (RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory nativeDataChannel
+    : (rtc::scoped_refptr<webrtc::DataChannelInterface>)nativeDataChannel NS_DESIGNATED_INITIALIZER;
 
 + (webrtc::DataChannelInterface::DataState)nativeDataChannelStateForState:
         (RTCDataChannelState)state;
diff --git a/sdk/objc/api/peerconnection/RTCDataChannel.h b/sdk/objc/api/peerconnection/RTCDataChannel.h
index 0cc2de8..2d0661f 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannel.h
+++ b/sdk/objc/api/peerconnection/RTCDataChannel.h
@@ -16,7 +16,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCDataBuffer : NSObject
+@interface RTC_OBJC_TYPE (RTCDataBuffer) : NSObject
 
 /** NSData representation of the underlying buffer. */
 @property(nonatomic, readonly) NSData *data;
@@ -34,20 +34,22 @@
 
 @end
 
-@class RTCDataChannel;
+@class RTC_OBJC_TYPE(RTCDataChannel);
 RTC_OBJC_EXPORT
-@protocol RTCDataChannelDelegate <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCDataChannelDelegate)<NSObject>
 
-/** The data channel state changed. */
-- (void)dataChannelDidChangeState:(RTCDataChannel *)dataChannel;
+    /** The data channel state changed. */
+    - (void)dataChannelDidChangeState : (RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel;
 
 /** The data channel successfully received a data buffer. */
-- (void)dataChannel:(RTCDataChannel *)dataChannel
-    didReceiveMessageWithBuffer:(RTCDataBuffer *)buffer;
+- (void)dataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel
+    didReceiveMessageWithBuffer:(RTC_OBJC_TYPE(RTCDataBuffer) *)buffer;
 
 @optional
 /** The data channel's |bufferedAmount| changed. */
-- (void)dataChannel:(RTCDataChannel *)dataChannel didChangeBufferedAmount:(uint64_t)amount;
+- (void)dataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel
+    didChangeBufferedAmount:(uint64_t)amount;
 
 @end
 
@@ -60,7 +62,7 @@
 };
 
 RTC_OBJC_EXPORT
-@interface RTCDataChannel : NSObject
+@interface RTC_OBJC_TYPE (RTCDataChannel) : NSObject
 
 /**
  * A label that can be used to distinguish this data channel from other data
@@ -115,7 +117,7 @@
 @property(nonatomic, readonly) uint64_t bufferedAmount;
 
 /** The delegate for this data channel. */
-@property(nonatomic, weak) id<RTCDataChannelDelegate> delegate;
+@property(nonatomic, weak) id<RTC_OBJC_TYPE(RTCDataChannelDelegate)> delegate;
 
 - (instancetype)init NS_UNAVAILABLE;
 
@@ -123,7 +125,7 @@
 - (void)close;
 
 /** Attempt to send |data| on this data channel's underlying data transport. */
-- (BOOL)sendData:(RTCDataBuffer *)data;
+- (BOOL)sendData:(RTC_OBJC_TYPE(RTCDataBuffer) *)data;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCDataChannel.mm b/sdk/objc/api/peerconnection/RTCDataChannel.mm
index 35c009e..4a79cef 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannel.mm
+++ b/sdk/objc/api/peerconnection/RTCDataChannel.mm
@@ -18,21 +18,21 @@
 
 class DataChannelDelegateAdapter : public DataChannelObserver {
  public:
-  DataChannelDelegateAdapter(RTCDataChannel *channel) { channel_ = channel; }
+  DataChannelDelegateAdapter(RTC_OBJC_TYPE(RTCDataChannel) * channel) { channel_ = channel; }
 
   void OnStateChange() override {
     [channel_.delegate dataChannelDidChangeState:channel_];
   }
 
   void OnMessage(const DataBuffer& buffer) override {
-    RTCDataBuffer *data_buffer =
-        [[RTCDataBuffer alloc] initWithNativeBuffer:buffer];
+    RTC_OBJC_TYPE(RTCDataBuffer) *data_buffer =
+        [[RTC_OBJC_TYPE(RTCDataBuffer) alloc] initWithNativeBuffer:buffer];
     [channel_.delegate dataChannel:channel_
        didReceiveMessageWithBuffer:data_buffer];
   }
 
   void OnBufferedAmountChange(uint64_t previousAmount) override {
-    id<RTCDataChannelDelegate> delegate = channel_.delegate;
+    id<RTC_OBJC_TYPE(RTCDataChannelDelegate)> delegate = channel_.delegate;
     SEL sel = @selector(dataChannel:didChangeBufferedAmount:);
     if ([delegate respondsToSelector:sel]) {
       [delegate dataChannel:channel_ didChangeBufferedAmount:previousAmount];
@@ -40,12 +40,11 @@
   }
 
  private:
-  __weak RTCDataChannel *channel_;
+  __weak RTC_OBJC_TYPE(RTCDataChannel) * channel_;
 };
 }
 
-
-@implementation RTCDataBuffer {
+@implementation RTC_OBJC_TYPE (RTCDataBuffer) {
   std::unique_ptr<webrtc::DataBuffer> _dataBuffer;
 }
 
@@ -83,9 +82,8 @@
 
 @end
 
-
-@implementation RTCDataChannel {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCDataChannel) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   rtc::scoped_refptr<webrtc::DataChannelInterface> _nativeDataChannel;
   std::unique_ptr<webrtc::DataChannelDelegateAdapter> _observer;
   BOOL _isObserverRegistered;
@@ -152,21 +150,20 @@
   _nativeDataChannel->Close();
 }
 
-- (BOOL)sendData:(RTCDataBuffer *)data {
+- (BOOL)sendData:(RTC_OBJC_TYPE(RTCDataBuffer) *)data {
   return _nativeDataChannel->Send(*data.nativeDataBuffer);
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCDataChannel:\n%ld\n%@\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCDataChannel):\n%ld\n%@\n%@",
                                     (long)self.channelId,
                                     self.label,
-                                    [[self class]
-                                        stringForState:self.readyState]];
+                                    [[self class] stringForState:self.readyState]];
 }
 
 #pragma mark - Private
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeDataChannel:
                   (rtc::scoped_refptr<webrtc::DataChannelInterface>)nativeDataChannel {
   NSParameterAssert(nativeDataChannel);
diff --git a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration+Private.h b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration+Private.h
index 244f742..5aef10f 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration+Private.h
+++ b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration+Private.h
@@ -14,9 +14,10 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCDataChannelConfiguration ()
+@interface RTC_OBJC_TYPE (RTCDataChannelConfiguration)
+()
 
-@property(nonatomic, readonly) webrtc::DataChannelInit nativeDataChannelInit;
+    @property(nonatomic, readonly) webrtc::DataChannelInit nativeDataChannelInit;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.h b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.h
index 96d33f4..9459ae0 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.h
+++ b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.h
@@ -16,7 +16,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCDataChannelConfiguration : NSObject
+@interface RTC_OBJC_TYPE (RTCDataChannelConfiguration) : NSObject
 
 /** Set to YES if ordered delivery is required. */
 @property(nonatomic, assign) BOOL isOrdered;
diff --git a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.mm b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.mm
index 198bfbb..bf775b1 100644
--- a/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.mm
+++ b/sdk/objc/api/peerconnection/RTCDataChannelConfiguration.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCDataChannelConfiguration
+@implementation RTC_OBJC_TYPE (RTCDataChannelConfiguration)
 
 @synthesize nativeDataChannelInit = _nativeDataChannelInit;
 
diff --git a/sdk/objc/api/peerconnection/RTCDtmfSender+Private.h b/sdk/objc/api/peerconnection/RTCDtmfSender+Private.h
index ec05481..49a6216 100644
--- a/sdk/objc/api/peerconnection/RTCDtmfSender+Private.h
+++ b/sdk/objc/api/peerconnection/RTCDtmfSender+Private.h
@@ -14,7 +14,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCDtmfSender : NSObject <RTCDtmfSender>
+@interface RTC_OBJC_TYPE (RTCDtmfSender) : NSObject <RTC_OBJC_TYPE(RTCDtmfSender)>
 
 @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender;
 
diff --git a/sdk/objc/api/peerconnection/RTCDtmfSender.h b/sdk/objc/api/peerconnection/RTCDtmfSender.h
index 5d86d01..0f1b6ba 100644
--- a/sdk/objc/api/peerconnection/RTCDtmfSender.h
+++ b/sdk/objc/api/peerconnection/RTCDtmfSender.h
@@ -15,14 +15,15 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@protocol RTCDtmfSender <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCDtmfSender)<NSObject>
 
-/**
- * Returns true if this RTCDtmfSender is capable of sending DTMF. Otherwise
- * returns false. To be able to send DTMF, the associated RTCRtpSender must be
- * able to send packets, and a "telephone-event" codec must be negotiated.
- */
-@property(nonatomic, readonly) BOOL canInsertDtmf;
+    /**
+     * Returns true if this RTCDtmfSender is capable of sending DTMF. Otherwise
+     * returns false. To be able to send DTMF, the associated RTCRtpSender must be
+     * able to send packets, and a "telephone-event" codec must be negotiated.
+     */
+    @property(nonatomic, readonly) BOOL canInsertDtmf;
 
 /**
  * Queues a task that sends the DTMF tones. The tones parameter is treated
diff --git a/sdk/objc/api/peerconnection/RTCDtmfSender.mm b/sdk/objc/api/peerconnection/RTCDtmfSender.mm
index 77d0678..ee3b79c 100644
--- a/sdk/objc/api/peerconnection/RTCDtmfSender.mm
+++ b/sdk/objc/api/peerconnection/RTCDtmfSender.mm
@@ -15,7 +15,7 @@
 
 #include "rtc_base/time_utils.h"
 
-@implementation RTCDtmfSender {
+@implementation RTC_OBJC_TYPE (RTCDtmfSender) {
   rtc::scoped_refptr<webrtc::DtmfSenderInterface> _nativeDtmfSender;
 }
 
@@ -48,12 +48,11 @@
 }
 
 - (NSString *)description {
-  return [NSString
-      stringWithFormat:
-          @"RTCDtmfSender {\n  remainingTones: %@\n  duration: %f sec\n  interToneGap: %f sec\n}",
-          [self remainingTones],
-          [self duration],
-          [self interToneGap]];
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCDtmfSender) {\n  remainingTones: %@\n  "
+                                    @"duration: %f sec\n  interToneGap: %f sec\n}",
+                                    [self remainingTones],
+                                    [self duration],
+                                    [self interToneGap]];
 }
 
 #pragma mark - Private
@@ -67,7 +66,8 @@
   NSParameterAssert(nativeDtmfSender);
   if (self = [super init]) {
     _nativeDtmfSender = nativeDtmfSender;
-    RTCLogInfo(@"RTCDtmfSender(%p): created DTMF sender: %@", self, self.description);
+    RTCLogInfo(
+        @"RTC_OBJC_TYPE(RTCDtmfSender)(%p): created DTMF sender: %@", self, self.description);
   }
   return self;
 }
diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h
index e96ce7b..a078b0a 100644
--- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h
+++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h
@@ -15,9 +15,10 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /* Interfaces for converting to/from internal C++ formats. */
-@interface RTCEncodedImage (Private)
+@interface RTC_OBJC_TYPE (RTCEncodedImage)
+(Private)
 
-- (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage;
+    - (instancetype)initWithNativeEncodedImage : (const webrtc::EncodedImage &)encodedImage;
 - (webrtc::EncodedImage)nativeEncodedImage;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
index 36d4d5a..f9e4346 100644
--- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
@@ -56,9 +56,10 @@
 }
 @end
 
-@implementation RTCEncodedImage (Private)
+@implementation RTC_OBJC_TYPE (RTCEncodedImage)
+(Private)
 
-- (rtc::scoped_refptr<webrtc::EncodedImageBufferInterface>)encodedData {
+    - (rtc::scoped_refptr<webrtc::EncodedImageBufferInterface>)encodedData {
   RTCWrappedEncodedImageBuffer *wrappedBuffer =
       objc_getAssociatedObject(self, @selector(encodedData));
   return wrappedBuffer.buffer;
diff --git a/sdk/objc/api/peerconnection/RTCFileLogger.h b/sdk/objc/api/peerconnection/RTCFileLogger.h
index cd5c1c4..853e673 100644
--- a/sdk/objc/api/peerconnection/RTCFileLogger.h
+++ b/sdk/objc/api/peerconnection/RTCFileLogger.h
@@ -34,7 +34,7 @@
 // For kRTCFileLoggerTypeApp, the oldest log is overwritten.
 // This class is not threadsafe.
 RTC_OBJC_EXPORT
-@interface RTCFileLogger : NSObject
+@interface RTC_OBJC_TYPE (RTCFileLogger) : NSObject
 
 // The severity level to capture. The default is kRTCFileLoggerSeverityInfo.
 @property(nonatomic, assign) RTCFileLoggerSeverity severity;
diff --git a/sdk/objc/api/peerconnection/RTCFileLogger.mm b/sdk/objc/api/peerconnection/RTCFileLogger.mm
index 2532fcf..9562245 100644
--- a/sdk/objc/api/peerconnection/RTCFileLogger.mm
+++ b/sdk/objc/api/peerconnection/RTCFileLogger.mm
@@ -21,7 +21,7 @@
 NSUInteger const kDefaultMaxFileSize = 10 * 1024 * 1024; // 10MB.
 const char *kRTCFileLoggerRotatingLogPrefix = "rotating_log";
 
-@implementation RTCFileLogger {
+@implementation RTC_OBJC_TYPE (RTCFileLogger) {
   BOOL _hasStarted;
   NSString *_dirPath;
   NSUInteger _maxFileSize;
diff --git a/sdk/objc/api/peerconnection/RTCIceCandidate+Private.h b/sdk/objc/api/peerconnection/RTCIceCandidate+Private.h
index 8c9156c..409e16b 100644
--- a/sdk/objc/api/peerconnection/RTCIceCandidate+Private.h
+++ b/sdk/objc/api/peerconnection/RTCIceCandidate+Private.h
@@ -16,13 +16,14 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCIceCandidate ()
+@interface RTC_OBJC_TYPE (RTCIceCandidate)
+()
 
-/**
- * The native IceCandidateInterface representation of this RTCIceCandidate
- * object. This is needed to pass to the underlying C++ APIs.
- */
-@property(nonatomic, readonly) std::unique_ptr<webrtc::IceCandidateInterface> nativeCandidate;
+    /**
+     * The native IceCandidateInterface representation of this RTCIceCandidate
+     * object. This is needed to pass to the underlying C++ APIs.
+     */
+    @property(nonatomic, readonly) std::unique_ptr<webrtc::IceCandidateInterface> nativeCandidate;
 
 /**
  * Initialize an RTCIceCandidate from a native IceCandidateInterface. No
diff --git a/sdk/objc/api/peerconnection/RTCIceCandidate.h b/sdk/objc/api/peerconnection/RTCIceCandidate.h
index 3e305cc..f84843a 100644
--- a/sdk/objc/api/peerconnection/RTCIceCandidate.h
+++ b/sdk/objc/api/peerconnection/RTCIceCandidate.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCIceCandidate : NSObject
+@interface RTC_OBJC_TYPE (RTCIceCandidate) : NSObject
 
 /**
  * If present, the identifier of the "media stream identification" for the media
diff --git a/sdk/objc/api/peerconnection/RTCIceCandidate.mm b/sdk/objc/api/peerconnection/RTCIceCandidate.mm
index cbae3f3..48385ef 100644
--- a/sdk/objc/api/peerconnection/RTCIceCandidate.mm
+++ b/sdk/objc/api/peerconnection/RTCIceCandidate.mm
@@ -15,7 +15,7 @@
 #import "base/RTCLogging.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCIceCandidate
+@implementation RTC_OBJC_TYPE (RTCIceCandidate)
 
 @synthesize sdpMid = _sdpMid;
 @synthesize sdpMLineIndex = _sdpMLineIndex;
@@ -35,7 +35,7 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCIceCandidate:\n%@\n%d\n%@\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCIceCandidate):\n%@\n%d\n%@\n%@",
                                     _sdpMid,
                                     _sdpMLineIndex,
                                     _sdp,
@@ -50,7 +50,7 @@
   std::string sdp;
   candidate->ToString(&sdp);
 
-  RTCIceCandidate *rtcCandidate =
+  RTC_OBJC_TYPE(RTCIceCandidate) *rtcCandidate =
       [self initWithSdp:[NSString stringForStdString:sdp]
           sdpMLineIndex:candidate->sdp_mline_index()
                  sdpMid:[NSString stringForStdString:candidate->sdp_mid()]];
diff --git a/sdk/objc/api/peerconnection/RTCIceServer+Private.h b/sdk/objc/api/peerconnection/RTCIceServer+Private.h
index 53fbb45..3eee8199 100644
--- a/sdk/objc/api/peerconnection/RTCIceServer+Private.h
+++ b/sdk/objc/api/peerconnection/RTCIceServer+Private.h
@@ -14,13 +14,14 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCIceServer ()
+@interface RTC_OBJC_TYPE (RTCIceServer)
+()
 
-/**
- * IceServer struct representation of this RTCIceServer object's data.
- * This is needed to pass to the underlying C++ APIs.
- */
-@property(nonatomic, readonly) webrtc::PeerConnectionInterface::IceServer nativeServer;
+    /**
+     * IceServer struct representation of this RTCIceServer object's data.
+     * This is needed to pass to the underlying C++ APIs.
+     */
+    @property(nonatomic, readonly) webrtc::PeerConnectionInterface::IceServer nativeServer;
 
 /** Initialize an RTCIceServer from a native IceServer. */
 - (instancetype)initWithNativeServer:(webrtc::PeerConnectionInterface::IceServer)nativeServer;
diff --git a/sdk/objc/api/peerconnection/RTCIceServer.h b/sdk/objc/api/peerconnection/RTCIceServer.h
index ab5fc4a..dd66c61 100644
--- a/sdk/objc/api/peerconnection/RTCIceServer.h
+++ b/sdk/objc/api/peerconnection/RTCIceServer.h
@@ -20,7 +20,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCIceServer : NSObject
+@interface RTC_OBJC_TYPE (RTCIceServer) : NSObject
 
 /** URI(s) for this server represented as NSStrings. */
 @property(nonatomic, readonly) NSArray<NSString *> *urlStrings;
diff --git a/sdk/objc/api/peerconnection/RTCIceServer.mm b/sdk/objc/api/peerconnection/RTCIceServer.mm
index 2138e4c..19a0a7e 100644
--- a/sdk/objc/api/peerconnection/RTCIceServer.mm
+++ b/sdk/objc/api/peerconnection/RTCIceServer.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCIceServer
+@implementation RTC_OBJC_TYPE (RTCIceServer)
 
 @synthesize urlStrings = _urlStrings;
 @synthesize username = _username;
@@ -97,7 +97,7 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCIceServer:\n%@\n%@\n%@\n%@\n%@\n%@\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCIceServer):\n%@\n%@\n%@\n%@\n%@\n%@\n%@",
                                     _urlStrings,
                                     _username,
                                     _credential,
diff --git a/sdk/objc/api/peerconnection/RTCLegacyStatsReport+Private.h b/sdk/objc/api/peerconnection/RTCLegacyStatsReport+Private.h
index d87659d..faa7962 100644
--- a/sdk/objc/api/peerconnection/RTCLegacyStatsReport+Private.h
+++ b/sdk/objc/api/peerconnection/RTCLegacyStatsReport+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCLegacyStatsReport ()
+@interface RTC_OBJC_TYPE (RTCLegacyStatsReport)
+()
 
-/** Initialize an RTCLegacyStatsReport object from a native StatsReport. */
-- (instancetype)initWithNativeReport:(const webrtc::StatsReport &)nativeReport;
+    /** Initialize an RTCLegacyStatsReport object from a native StatsReport. */
+    - (instancetype)initWithNativeReport : (const webrtc::StatsReport &)nativeReport;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCLegacyStatsReport.h b/sdk/objc/api/peerconnection/RTCLegacyStatsReport.h
index 85f2b8f..b3bd12c 100644
--- a/sdk/objc/api/peerconnection/RTCLegacyStatsReport.h
+++ b/sdk/objc/api/peerconnection/RTCLegacyStatsReport.h
@@ -16,7 +16,7 @@
 
 /** This does not currently conform to the spec. */
 RTC_OBJC_EXPORT
-@interface RTCLegacyStatsReport : NSObject
+@interface RTC_OBJC_TYPE (RTCLegacyStatsReport) : NSObject
 
 /** Time since 1970-01-01T00:00:00Z in milliseconds. */
 @property(nonatomic, readonly) CFTimeInterval timestamp;
diff --git a/sdk/objc/api/peerconnection/RTCLegacyStatsReport.mm b/sdk/objc/api/peerconnection/RTCLegacyStatsReport.mm
index 89e1b85..bd7a1ad 100644
--- a/sdk/objc/api/peerconnection/RTCLegacyStatsReport.mm
+++ b/sdk/objc/api/peerconnection/RTCLegacyStatsReport.mm
@@ -15,7 +15,7 @@
 
 #include "rtc_base/checks.h"
 
-@implementation RTCLegacyStatsReport
+@implementation RTC_OBJC_TYPE (RTCLegacyStatsReport)
 
 @synthesize timestamp = _timestamp;
 @synthesize type = _type;
@@ -23,7 +23,7 @@
 @synthesize values = _values;
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCLegacyStatsReport:\n%@\n%@\n%f\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCLegacyStatsReport):\n%@\n%@\n%f\n%@",
                                     _reportId,
                                     _type,
                                     _timestamp,
diff --git a/sdk/objc/api/peerconnection/RTCMediaConstraints+Private.h b/sdk/objc/api/peerconnection/RTCMediaConstraints+Private.h
index b3e1b10..97eee83 100644
--- a/sdk/objc/api/peerconnection/RTCMediaConstraints+Private.h
+++ b/sdk/objc/api/peerconnection/RTCMediaConstraints+Private.h
@@ -16,13 +16,14 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCMediaConstraints ()
+@interface RTC_OBJC_TYPE (RTCMediaConstraints)
+()
 
-/**
- * A MediaConstraints representation of this RTCMediaConstraints object. This is
- * needed to pass to the underlying C++ APIs.
- */
-- (std::unique_ptr<webrtc::MediaConstraints>)nativeConstraints;
+    /**
+     * A MediaConstraints representation of this RTCMediaConstraints object. This is
+     * needed to pass to the underlying C++ APIs.
+     */
+    - (std::unique_ptr<webrtc::MediaConstraints>)nativeConstraints;
 
 /** Return a native Constraints object representing these constraints */
 + (webrtc::MediaConstraints::Constraints)nativeConstraintsForConstraints:
diff --git a/sdk/objc/api/peerconnection/RTCMediaConstraints.h b/sdk/objc/api/peerconnection/RTCMediaConstraints.h
index 5c1a12e..c5baf20 100644
--- a/sdk/objc/api/peerconnection/RTCMediaConstraints.h
+++ b/sdk/objc/api/peerconnection/RTCMediaConstraints.h
@@ -31,7 +31,7 @@
 RTC_EXTERN NSString *const kRTCMediaConstraintsValueFalse;
 
 RTC_OBJC_EXPORT
-@interface RTCMediaConstraints : NSObject
+@interface RTC_OBJC_TYPE (RTCMediaConstraints) : NSObject
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCMediaConstraints.mm b/sdk/objc/api/peerconnection/RTCMediaConstraints.mm
index bfdbdde..0f46e4b 100644
--- a/sdk/objc/api/peerconnection/RTCMediaConstraints.mm
+++ b/sdk/objc/api/peerconnection/RTCMediaConstraints.mm
@@ -28,7 +28,7 @@
 NSString *const kRTCMediaConstraintsValueTrue = @(webrtc::MediaConstraints::kValueTrue);
 NSString *const kRTCMediaConstraintsValueFalse = @(webrtc::MediaConstraints::kValueFalse);
 
-@implementation RTCMediaConstraints {
+@implementation RTC_OBJC_TYPE (RTCMediaConstraints) {
   NSDictionary<NSString *, NSString *> *_mandatory;
   NSDictionary<NSString *, NSString *> *_optional;
 }
@@ -47,9 +47,8 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCMediaConstraints:\n%@\n%@",
-                                    _mandatory,
-                                    _optional];
+  return [NSString
+      stringWithFormat:@"RTC_OBJC_TYPE(RTCMediaConstraints):\n%@\n%@", _mandatory, _optional];
 }
 
 #pragma mark - Private
diff --git a/sdk/objc/api/peerconnection/RTCMediaSource+Private.h b/sdk/objc/api/peerconnection/RTCMediaSource+Private.h
index 7d69aaa..edda892 100644
--- a/sdk/objc/api/peerconnection/RTCMediaSource+Private.h
+++ b/sdk/objc/api/peerconnection/RTCMediaSource+Private.h
@@ -14,18 +14,20 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
 typedef NS_ENUM(NSInteger, RTCMediaSourceType) {
   RTCMediaSourceTypeAudio,
   RTCMediaSourceTypeVideo,
 };
 
-@interface RTCMediaSource ()
+@interface RTC_OBJC_TYPE (RTCMediaSource)
+()
 
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::MediaSourceInterface> nativeMediaSource;
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::MediaSourceInterface> nativeMediaSource;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type NS_DESIGNATED_INITIALIZER;
 
diff --git a/sdk/objc/api/peerconnection/RTCMediaSource.h b/sdk/objc/api/peerconnection/RTCMediaSource.h
index 838c783..ba19c2a 100644
--- a/sdk/objc/api/peerconnection/RTCMediaSource.h
+++ b/sdk/objc/api/peerconnection/RTCMediaSource.h
@@ -22,7 +22,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCMediaSource : NSObject
+@interface RTC_OBJC_TYPE (RTCMediaSource) : NSObject
 
 /** The current state of the RTCMediaSource. */
 @property(nonatomic, readonly) RTCSourceState state;
diff --git a/sdk/objc/api/peerconnection/RTCMediaSource.mm b/sdk/objc/api/peerconnection/RTCMediaSource.mm
index 6ec41c3..61472a7 100644
--- a/sdk/objc/api/peerconnection/RTCMediaSource.mm
+++ b/sdk/objc/api/peerconnection/RTCMediaSource.mm
@@ -12,14 +12,14 @@
 
 #include "rtc_base/checks.h"
 
-@implementation RTCMediaSource {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCMediaSource) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   RTCMediaSourceType _type;
 }
 
 @synthesize nativeMediaSource = _nativeMediaSource;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type {
   RTC_DCHECK(factory);
diff --git a/sdk/objc/api/peerconnection/RTCMediaStream+Private.h b/sdk/objc/api/peerconnection/RTCMediaStream+Private.h
index 23149ce..6c8a602 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStream+Private.h
+++ b/sdk/objc/api/peerconnection/RTCMediaStream+Private.h
@@ -14,19 +14,22 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCMediaStream ()
+@interface RTC_OBJC_TYPE (RTCMediaStream)
+()
 
-/**
- * MediaStreamInterface representation of this RTCMediaStream object. This is
- * needed to pass to the underlying C++ APIs.
- */
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::MediaStreamInterface> nativeMediaStream;
+    /**
+     * MediaStreamInterface representation of this RTCMediaStream object. This is
+     * needed to pass to the underlying C++ APIs.
+     */
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::MediaStreamInterface> nativeMediaStream;
 
 /** Initialize an RTCMediaStream with an id. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory streamId:(NSString *)streamId;
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                       streamId:(NSString *)streamId;
 
 /** Initialize an RTCMediaStream from a native MediaStreamInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaStream:(rtc::scoped_refptr<webrtc::MediaStreamInterface>)nativeMediaStream;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCMediaStream.h b/sdk/objc/api/peerconnection/RTCMediaStream.h
index bb9bec6..2d56f15 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStream.h
+++ b/sdk/objc/api/peerconnection/RTCMediaStream.h
@@ -14,18 +14,18 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCAudioTrack;
-@class RTCPeerConnectionFactory;
-@class RTCVideoTrack;
+@class RTC_OBJC_TYPE(RTCAudioTrack);
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
+@class RTC_OBJC_TYPE(RTCVideoTrack);
 
 RTC_OBJC_EXPORT
-@interface RTCMediaStream : NSObject
+@interface RTC_OBJC_TYPE (RTCMediaStream) : NSObject
 
 /** The audio tracks in this stream. */
-@property(nonatomic, strong, readonly) NSArray<RTCAudioTrack *> *audioTracks;
+@property(nonatomic, strong, readonly) NSArray<RTC_OBJC_TYPE(RTCAudioTrack) *> *audioTracks;
 
 /** The video tracks in this stream. */
-@property(nonatomic, strong, readonly) NSArray<RTCVideoTrack *> *videoTracks;
+@property(nonatomic, strong, readonly) NSArray<RTC_OBJC_TYPE(RTCVideoTrack) *> *videoTracks;
 
 /** An identifier for this media stream. */
 @property(nonatomic, readonly) NSString *streamId;
@@ -33,16 +33,16 @@
 - (instancetype)init NS_UNAVAILABLE;
 
 /** Adds the given audio track to this media stream. */
-- (void)addAudioTrack:(RTCAudioTrack *)audioTrack;
+- (void)addAudioTrack:(RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrack;
 
 /** Adds the given video track to this media stream. */
-- (void)addVideoTrack:(RTCVideoTrack *)videoTrack;
+- (void)addVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrack;
 
 /** Removes the given audio track to this media stream. */
-- (void)removeAudioTrack:(RTCAudioTrack *)audioTrack;
+- (void)removeAudioTrack:(RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrack;
 
 /** Removes the given video track to this media stream. */
-- (void)removeVideoTrack:(RTCVideoTrack *)videoTrack;
+- (void)removeVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrack;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCMediaStream.mm b/sdk/objc/api/peerconnection/RTCMediaStream.mm
index c1a402a..a6292b5 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStream.mm
+++ b/sdk/objc/api/peerconnection/RTCMediaStream.mm
@@ -18,14 +18,14 @@
 #import "RTCVideoTrack+Private.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCMediaStream {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCMediaStream) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   NSMutableArray *_audioTracks;
   NSMutableArray *_videoTracks;
   rtc::scoped_refptr<webrtc::MediaStreamInterface> _nativeMediaStream;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                        streamId:(NSString *)streamId {
   NSParameterAssert(factory);
   NSParameterAssert(streamId.length);
@@ -35,11 +35,11 @@
   return [self initWithFactory:factory nativeMediaStream:stream];
 }
 
-- (NSArray<RTCAudioTrack *> *)audioTracks {
+- (NSArray<RTC_OBJC_TYPE(RTCAudioTrack) *> *)audioTracks {
   return [_audioTracks copy];
 }
 
-- (NSArray<RTCVideoTrack *> *)videoTracks {
+- (NSArray<RTC_OBJC_TYPE(RTCVideoTrack) *> *)videoTracks {
   return [_videoTracks copy];
 }
 
@@ -47,32 +47,32 @@
   return [NSString stringForStdString:_nativeMediaStream->id()];
 }
 
-- (void)addAudioTrack:(RTCAudioTrack *)audioTrack {
+- (void)addAudioTrack:(RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrack {
   if (_nativeMediaStream->AddTrack(audioTrack.nativeAudioTrack)) {
     [_audioTracks addObject:audioTrack];
   }
 }
 
-- (void)addVideoTrack:(RTCVideoTrack *)videoTrack {
+- (void)addVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrack {
   if (_nativeMediaStream->AddTrack(videoTrack.nativeVideoTrack)) {
     [_videoTracks addObject:videoTrack];
   }
 }
 
-- (void)removeAudioTrack:(RTCAudioTrack *)audioTrack {
+- (void)removeAudioTrack:(RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrack {
   NSUInteger index = [_audioTracks indexOfObjectIdenticalTo:audioTrack];
   NSAssert(index != NSNotFound,
-           @"|removeAudioTrack| called on unexpected RTCAudioTrack");
+           @"|removeAudioTrack| called on unexpected RTC_OBJC_TYPE(RTCAudioTrack)");
   if (index != NSNotFound &&
       _nativeMediaStream->RemoveTrack(audioTrack.nativeAudioTrack)) {
     [_audioTracks removeObjectAtIndex:index];
   }
 }
 
-- (void)removeVideoTrack:(RTCVideoTrack *)videoTrack {
+- (void)removeVideoTrack:(RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrack {
   NSUInteger index = [_videoTracks indexOfObjectIdenticalTo:videoTrack];
   NSAssert(index != NSNotFound,
-           @"|removeVideoTrack| called on unexpected RTCVideoTrack");
+           @"|removeVideoTrack| called on unexpected RTC_OBJC_TYPE(RTCVideoTrack)");
   if (index != NSNotFound &&
       _nativeMediaStream->RemoveTrack(videoTrack.nativeVideoTrack)) {
     [_videoTracks removeObjectAtIndex:index];
@@ -80,7 +80,7 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCMediaStream:\n%@\nA=%lu\nV=%lu",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCMediaStream):\n%@\nA=%lu\nV=%lu",
                                     self.streamId,
                                     (unsigned long)self.audioTracks.count,
                                     (unsigned long)self.videoTracks.count];
@@ -92,7 +92,7 @@
   return _nativeMediaStream;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaStream:
                   (rtc::scoped_refptr<webrtc::MediaStreamInterface>)nativeMediaStream {
   NSParameterAssert(nativeMediaStream);
@@ -108,15 +108,19 @@
 
     for (auto &track : audioTracks) {
       RTCMediaStreamTrackType type = RTCMediaStreamTrackTypeAudio;
-      RTCAudioTrack *audioTrack =
-          [[RTCAudioTrack alloc] initWithFactory:_factory nativeTrack:track type:type];
+      RTC_OBJC_TYPE(RTCAudioTrack) *audioTrack =
+          [[RTC_OBJC_TYPE(RTCAudioTrack) alloc] initWithFactory:_factory
+                                                    nativeTrack:track
+                                                           type:type];
       [_audioTracks addObject:audioTrack];
     }
 
     for (auto &track : videoTracks) {
       RTCMediaStreamTrackType type = RTCMediaStreamTrackTypeVideo;
-      RTCVideoTrack *videoTrack =
-          [[RTCVideoTrack alloc] initWithFactory:_factory nativeTrack:track type:type];
+      RTC_OBJC_TYPE(RTCVideoTrack) *videoTrack =
+          [[RTC_OBJC_TYPE(RTCVideoTrack) alloc] initWithFactory:_factory
+                                                    nativeTrack:track
+                                                           type:type];
       [_videoTracks addObject:videoTrack];
     }
   }
diff --git a/sdk/objc/api/peerconnection/RTCMediaStreamTrack+Private.h b/sdk/objc/api/peerconnection/RTCMediaStreamTrack+Private.h
index 176bb73..ee51e27 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStreamTrack+Private.h
+++ b/sdk/objc/api/peerconnection/RTCMediaStreamTrack+Private.h
@@ -19,11 +19,13 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
-@interface RTCMediaStreamTrack ()
+@interface RTC_OBJC_TYPE (RTCMediaStreamTrack)
+()
 
-@property(nonatomic, readonly) RTCPeerConnectionFactory *factory;
+        @property(nonatomic, readonly) RTC_OBJC_TYPE(RTCPeerConnectionFactory) *
+    factory;
 
 /**
  * The native MediaStreamTrackInterface passed in or created during
@@ -34,14 +36,14 @@
 /**
  * Initialize an RTCMediaStreamTrack from a native MediaStreamTrackInterface.
  */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
                            type:(RTCMediaStreamTrackType)type NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack;
 
-- (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track;
+- (BOOL)isEqualToTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
 
 + (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState:
         (RTCMediaStreamTrackState)state;
@@ -51,9 +53,9 @@
 
 + (NSString *)stringForState:(RTCMediaStreamTrackState)state;
 
-+ (RTCMediaStreamTrack *)mediaTrackForNativeTrack:
-                             (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
-                                          factory:(RTCPeerConnectionFactory *)factory;
++ (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)
+    mediaTrackForNativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
+                     factory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCMediaStreamTrack.h b/sdk/objc/api/peerconnection/RTCMediaStreamTrack.h
index d1ea0f2..2200122 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStreamTrack.h
+++ b/sdk/objc/api/peerconnection/RTCMediaStreamTrack.h
@@ -26,7 +26,7 @@
 RTC_EXTERN NSString *const kRTCMediaStreamTrackKindVideo;
 
 RTC_OBJC_EXPORT
-@interface RTCMediaStreamTrack : NSObject
+@interface RTC_OBJC_TYPE (RTCMediaStreamTrack) : NSObject
 
 /**
  * The kind of track. For example, "audio" if this track represents an audio
diff --git a/sdk/objc/api/peerconnection/RTCMediaStreamTrack.mm b/sdk/objc/api/peerconnection/RTCMediaStreamTrack.mm
index 07992a0..f1e128c 100644
--- a/sdk/objc/api/peerconnection/RTCMediaStreamTrack.mm
+++ b/sdk/objc/api/peerconnection/RTCMediaStreamTrack.mm
@@ -19,8 +19,8 @@
 NSString * const kRTCMediaStreamTrackKindVideo =
     @(webrtc::MediaStreamTrackInterface::kVideoKind);
 
-@implementation RTCMediaStreamTrack {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCMediaStreamTrack) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> _nativeTrack;
   RTCMediaStreamTrackType _type;
 }
@@ -47,7 +47,7 @@
 
 - (NSString *)description {
   NSString *readyState = [[self class] stringForState:self.readyState];
-  return [NSString stringWithFormat:@"RTCMediaStreamTrack:\n%@\n%@\n%@\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCMediaStreamTrack):\n%@\n%@\n%@\n%@",
                                     self.kind,
                                     self.trackId,
                                     self.isEnabled ? @"enabled" : @"disabled",
@@ -61,7 +61,7 @@
   if (![object isMemberOfClass:[self class]]) {
     return NO;
   }
-  return [self isEqualToTrack:(RTCMediaStreamTrack *)object];
+  return [self isEqualToTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)object];
 }
 
 - (NSUInteger)hash {
@@ -76,7 +76,7 @@
 
 @synthesize factory = _factory;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
                            type:(RTCMediaStreamTrackType)type {
   NSParameterAssert(nativeTrack);
@@ -89,7 +89,7 @@
   return self;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
   NSParameterAssert(nativeTrack);
   if (nativeTrack->kind() ==
@@ -103,7 +103,7 @@
   return nil;
 }
 
-- (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track {
+- (BOOL)isEqualToTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
   if (!track) {
     return NO;
   }
@@ -139,21 +139,22 @@
   }
 }
 
-+ (RTCMediaStreamTrack *)mediaTrackForNativeTrack:
-                             (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
-                                          factory:(RTCPeerConnectionFactory *)factory {
++ (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)
+    mediaTrackForNativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
+                     factory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory {
   NSParameterAssert(nativeTrack);
   NSParameterAssert(factory);
   if (nativeTrack->kind() == webrtc::MediaStreamTrackInterface::kAudioKind) {
-    return [[RTCAudioTrack alloc] initWithFactory:factory
-                                      nativeTrack:nativeTrack
-                                             type:RTCMediaStreamTrackTypeAudio];
+    return [[RTC_OBJC_TYPE(RTCAudioTrack) alloc] initWithFactory:factory
+                                                     nativeTrack:nativeTrack
+                                                            type:RTCMediaStreamTrackTypeAudio];
   } else if (nativeTrack->kind() == webrtc::MediaStreamTrackInterface::kVideoKind) {
-    return [[RTCVideoTrack alloc] initWithFactory:factory
-                                      nativeTrack:nativeTrack
-                                             type:RTCMediaStreamTrackTypeVideo];
+    return [[RTC_OBJC_TYPE(RTCVideoTrack) alloc] initWithFactory:factory
+                                                     nativeTrack:nativeTrack
+                                                            type:RTCMediaStreamTrackTypeVideo];
   } else {
-    return [[RTCMediaStreamTrack alloc] initWithFactory:factory nativeTrack:nativeTrack];
+    return [[RTC_OBJC_TYPE(RTCMediaStreamTrack) alloc] initWithFactory:factory
+                                                           nativeTrack:nativeTrack];
   }
 }
 
diff --git a/sdk/objc/api/peerconnection/RTCMetrics.h b/sdk/objc/api/peerconnection/RTCMetrics.h
index 6629fda..fddbb27 100644
--- a/sdk/objc/api/peerconnection/RTCMetrics.h
+++ b/sdk/objc/api/peerconnection/RTCMetrics.h
@@ -20,4 +20,4 @@
 RTC_EXTERN void RTCEnableMetrics(void);
 
 /** Gets and clears native histograms. */
-RTC_EXTERN NSArray<RTCMetricsSampleInfo*>* RTCGetAndResetMetrics(void);
+RTC_EXTERN NSArray<RTC_OBJC_TYPE(RTCMetricsSampleInfo) *>* RTCGetAndResetMetrics(void);
diff --git a/sdk/objc/api/peerconnection/RTCMetrics.mm b/sdk/objc/api/peerconnection/RTCMetrics.mm
index 8ca9d96..b3ad352 100644
--- a/sdk/objc/api/peerconnection/RTCMetrics.mm
+++ b/sdk/objc/api/peerconnection/RTCMetrics.mm
@@ -16,7 +16,7 @@
   webrtc::metrics::Enable();
 }
 
-NSArray<RTCMetricsSampleInfo *> *RTCGetAndResetMetrics(void) {
+NSArray<RTC_OBJC_TYPE(RTCMetricsSampleInfo) *> *RTCGetAndResetMetrics(void) {
   std::map<std::string, std::unique_ptr<webrtc::metrics::SampleInfo>>
       histograms;
   webrtc::metrics::GetAndReset(&histograms);
@@ -24,8 +24,8 @@
   NSMutableArray *metrics =
       [NSMutableArray arrayWithCapacity:histograms.size()];
   for (auto const &histogram : histograms) {
-    RTCMetricsSampleInfo *metric = [[RTCMetricsSampleInfo alloc]
-        initWithNativeSampleInfo:*histogram.second];
+    RTC_OBJC_TYPE(RTCMetricsSampleInfo) *metric =
+        [[RTC_OBJC_TYPE(RTCMetricsSampleInfo) alloc] initWithNativeSampleInfo:*histogram.second];
     [metrics addObject:metric];
   }
   return metrics;
diff --git a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo+Private.h b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo+Private.h
index c465b1c..e4aa41f 100644
--- a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo+Private.h
+++ b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCMetricsSampleInfo ()
+@interface RTC_OBJC_TYPE (RTCMetricsSampleInfo)
+()
 
-/** Initialize an RTCMetricsSampleInfo object from native SampleInfo. */
-- (instancetype)initWithNativeSampleInfo:(const webrtc::metrics::SampleInfo &)info;
+    /** Initialize an RTCMetricsSampleInfo object from native SampleInfo. */
+    - (instancetype)initWithNativeSampleInfo : (const webrtc::metrics::SampleInfo &)info;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.h b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.h
index cd38ab9..47a877b 100644
--- a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.h
+++ b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCMetricsSampleInfo : NSObject
+@interface RTC_OBJC_TYPE (RTCMetricsSampleInfo) : NSObject
 
 /**
  * Example of RTCMetricsSampleInfo:
diff --git a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.mm b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.mm
index a4937fb..e4be94e 100644
--- a/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.mm
+++ b/sdk/objc/api/peerconnection/RTCMetricsSampleInfo.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCMetricsSampleInfo
+@implementation RTC_OBJC_TYPE (RTCMetricsSampleInfo)
 
 @synthesize name = _name;
 @synthesize min = _min;
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection+DataChannel.mm b/sdk/objc/api/peerconnection/RTCPeerConnection+DataChannel.mm
index 6c84fa3..1ded45d 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection+DataChannel.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection+DataChannel.mm
@@ -14,10 +14,12 @@
 #import "RTCDataChannelConfiguration+Private.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCPeerConnection (DataChannel)
+@implementation RTC_OBJC_TYPE (RTCPeerConnection)
+(DataChannel)
 
-- (nullable RTCDataChannel *)dataChannelForLabel:(NSString *)label
-                                   configuration:(RTCDataChannelConfiguration *)configuration {
+    - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
+    : (NSString *)label configuration
+    : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration {
   std::string labelString = [NSString stdStringForString:label];
   const webrtc::DataChannelInit nativeInit =
       configuration.nativeDataChannelInit;
@@ -27,7 +29,8 @@
   if (!dataChannel) {
     return nil;
   }
-  return [[RTCDataChannel alloc] initWithFactory:self.factory nativeDataChannel:dataChannel];
+  return [[RTC_OBJC_TYPE(RTCDataChannel) alloc] initWithFactory:self.factory
+                                              nativeDataChannel:dataChannel];
 }
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection+Private.h b/sdk/objc/api/peerconnection/RTCPeerConnection+Private.h
index 93b4ec7..7358810 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection+Private.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection+Private.h
@@ -22,7 +22,7 @@
  */
 class PeerConnectionDelegateAdapter : public PeerConnectionObserver {
  public:
-  PeerConnectionDelegateAdapter(RTCPeerConnection *peerConnection);
+  PeerConnectionDelegateAdapter(RTC_OBJC_TYPE(RTCPeerConnection) * peerConnection);
   ~PeerConnectionDelegateAdapter() override;
 
   void OnSignalingChange(PeerConnectionInterface::SignalingState new_state) override;
@@ -58,15 +58,17 @@
   void OnRemoveTrack(rtc::scoped_refptr<RtpReceiverInterface> receiver) override;
 
  private:
-  __weak RTCPeerConnection *peer_connection_;
+  __weak RTC_OBJC_TYPE(RTCPeerConnection) * peer_connection_;
 };
 
 }  // namespace webrtc
 
-@interface RTCPeerConnection ()
+@interface RTC_OBJC_TYPE (RTCPeerConnection)
+()
 
-/** The factory used to create this RTCPeerConnection */
-@property(nonatomic, readonly) RTCPeerConnectionFactory *factory;
+    /** The factory used to create this RTCPeerConnection */
+    @property(nonatomic, readonly) RTC_OBJC_TYPE(RTCPeerConnectionFactory) *
+    factory;
 
 /** The native PeerConnectionInterface created during construction. */
 @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::PeerConnectionInterface>
@@ -75,20 +77,20 @@
 /** Initialize an RTCPeerConnection with a configuration, constraints, and
  *  delegate.
  */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                  configuration:(RTCConfiguration *)configuration
-                    constraints:(RTCMediaConstraints *)constraints
-                       delegate:(nullable id<RTCPeerConnectionDelegate>)delegate;
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                  configuration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                    constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+                       delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
 
 /** Initialize an RTCPeerConnection with a configuration, constraints,
  *  delegate and PeerConnectionDependencies.
  */
-- (instancetype)initWithDependencies:(RTCPeerConnectionFactory *)factory
-                       configuration:(RTCConfiguration *)configuration
-                         constraints:(RTCMediaConstraints *)constraints
+- (instancetype)initWithDependencies:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                       configuration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                         constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
                         dependencies:
                             (std::unique_ptr<webrtc::PeerConnectionDependencies>)dependencies
-                            delegate:(nullable id<RTCPeerConnectionDelegate>)delegate
+                            delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate
     NS_DESIGNATED_INITIALIZER;
 
 + (webrtc::PeerConnectionInterface::SignalingState)nativeSignalingStateForState:
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm b/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
index e2965eb..46a6e3c 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
@@ -39,8 +39,8 @@
 
 class StatsObserverAdapter : public StatsObserver {
  public:
-  StatsObserverAdapter(void (^completionHandler)
-      (NSArray<RTCLegacyStatsReport *> *stats)) {
+  StatsObserverAdapter(
+      void (^completionHandler)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats)) {
     completion_handler_ = completionHandler;
   }
 
@@ -50,8 +50,8 @@
     RTC_DCHECK(completion_handler_);
     NSMutableArray *stats = [NSMutableArray arrayWithCapacity:reports.size()];
     for (const auto* report : reports) {
-      RTCLegacyStatsReport *statsReport =
-          [[RTCLegacyStatsReport alloc] initWithNativeReport:*report];
+      RTC_OBJC_TYPE(RTCLegacyStatsReport) *statsReport =
+          [[RTC_OBJC_TYPE(RTCLegacyStatsReport) alloc] initWithNativeReport:*report];
       [stats addObject:statsReport];
     }
     completion_handler_(stats);
@@ -59,20 +59,21 @@
   }
 
  private:
-  void (^completion_handler_)(NSArray<RTCLegacyStatsReport *> *stats);
+  void (^completion_handler_)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats);
 };
 }  // namespace webrtc
 
-@implementation RTCPeerConnection (Stats)
+@implementation RTC_OBJC_TYPE (RTCPeerConnection)
+(Stats)
 
-- (void)statisticsForSender:(RTCRtpSender *)sender
-          completionHandler:(RTCStatisticsCompletionHandler)completionHandler {
+    - (void)statisticsForSender : (RTC_OBJC_TYPE(RTCRtpSender) *)sender completionHandler
+    : (RTCStatisticsCompletionHandler)completionHandler {
   rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector(
       new rtc::RefCountedObject<webrtc::StatsCollectorCallbackAdapter>(completionHandler));
   self.nativePeerConnection->GetStats(sender.nativeRtpSender, collector);
 }
 
-- (void)statisticsForReceiver:(RTCRtpReceiver *)receiver
+- (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
             completionHandler:(RTCStatisticsCompletionHandler)completionHandler {
   rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector(
       new rtc::RefCountedObject<webrtc::StatsCollectorCallbackAdapter>(completionHandler));
@@ -85,10 +86,10 @@
   self.nativePeerConnection->GetStats(collector);
 }
 
-- (void)statsForTrack:(RTCMediaStreamTrack *)mediaStreamTrack
+- (void)statsForTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack
      statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel
     completionHandler:
-    (void (^)(NSArray<RTCLegacyStatsReport *> *stats))completionHandler {
+        (void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler {
   rtc::scoped_refptr<webrtc::StatsObserverAdapter> observer(
       new rtc::RefCountedObject<webrtc::StatsObserverAdapter>
           (completionHandler));
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.h b/sdk/objc/api/peerconnection/RTCPeerConnection.h
index 012295c..cfc0a3d 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection.h
@@ -12,21 +12,21 @@
 
 #import "RTCMacros.h"
 
-@class RTCConfiguration;
-@class RTCDataChannel;
-@class RTCDataChannelConfiguration;
-@class RTCIceCandidate;
-@class RTCMediaConstraints;
-@class RTCMediaStream;
-@class RTCMediaStreamTrack;
-@class RTCPeerConnectionFactory;
-@class RTCRtpReceiver;
-@class RTCRtpSender;
-@class RTCRtpTransceiver;
-@class RTCRtpTransceiverInit;
-@class RTCSessionDescription;
+@class RTC_OBJC_TYPE(RTCConfiguration);
+@class RTC_OBJC_TYPE(RTCDataChannel);
+@class RTC_OBJC_TYPE(RTCDataChannelConfiguration);
+@class RTC_OBJC_TYPE(RTCIceCandidate);
+@class RTC_OBJC_TYPE(RTCMediaConstraints);
+@class RTC_OBJC_TYPE(RTCMediaStream);
+@class RTC_OBJC_TYPE(RTCMediaStreamTrack);
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
+@class RTC_OBJC_TYPE(RTCRtpReceiver);
+@class RTC_OBJC_TYPE(RTCRtpSender);
+@class RTC_OBJC_TYPE(RTCRtpTransceiver);
+@class RTC_OBJC_TYPE(RTCRtpTransceiverInit);
+@class RTC_OBJC_TYPE(RTCSessionDescription);
 @class RTCStatisticsReport;
-@class RTCLegacyStatsReport;
+@class RTC_OBJC_TYPE(RTCLegacyStatsReport);
 
 typedef NS_ENUM(NSInteger, RTCRtpMediaType);
 
@@ -81,45 +81,49 @@
   RTCStatsOutputLevelDebug,
 };
 
-@class RTCPeerConnection;
+@class RTC_OBJC_TYPE(RTCPeerConnection);
 
 RTC_OBJC_EXPORT
-@protocol RTCPeerConnectionDelegate <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCPeerConnectionDelegate)<NSObject>
 
-/** Called when the SignalingState changed. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didChangeSignalingState:(RTCSignalingState)stateChanged;
+    /** Called when the SignalingState changed. */
+    - (void)peerConnection
+    : (RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection didChangeSignalingState
+    : (RTCSignalingState)stateChanged;
 
 /** Called when media is received on a new stream from remote peer. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection didAddStream:(RTCMediaStream *)stream;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+          didAddStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
 
 /** Called when a remote peer closes a stream.
  *  This is not called when RTCSdpSemanticsUnifiedPlan is specified.
  */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection didRemoveStream:(RTCMediaStream *)stream;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+       didRemoveStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
 
 /** Called when negotiation is needed, for example ICE has restarted. */
-- (void)peerConnectionShouldNegotiate:(RTCPeerConnection *)peerConnection;
+- (void)peerConnectionShouldNegotiate:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection;
 
 /** Called any time the IceConnectionState changes. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
     didChangeIceConnectionState:(RTCIceConnectionState)newState;
 
 /** Called any time the IceGatheringState changes. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
     didChangeIceGatheringState:(RTCIceGatheringState)newState;
 
 /** New ice candidate has been found. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didGenerateIceCandidate:(RTCIceCandidate *)candidate;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+    didGenerateIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
 
 /** Called when a group of local Ice candidates have been removed. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didRemoveIceCandidates:(NSArray<RTCIceCandidate *> *)candidates;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+    didRemoveIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
 
 /** New data channel has been opened. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didOpenDataChannel:(RTCDataChannel *)dataChannel;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+    didOpenDataChannel:(RTC_OBJC_TYPE(RTCDataChannel) *)dataChannel;
 
 /** Called when signaling indicates a transceiver will be receiving media from
  *  the remote endpoint.
@@ -128,72 +132,72 @@
 @optional
 /** Called any time the IceConnectionState changes following standardized
  * transition. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
     didChangeStandardizedIceConnectionState:(RTCIceConnectionState)newState;
 
 /** Called any time the PeerConnectionState changes. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
     didChangeConnectionState:(RTCPeerConnectionState)newState;
 
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didStartReceivingOnTransceiver:(RTCRtpTransceiver *)transceiver;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+    didStartReceivingOnTransceiver:(RTC_OBJC_TYPE(RTCRtpTransceiver) *)transceiver;
 
 /** Called when a receiver and its track are created. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-        didAddReceiver:(RTCRtpReceiver *)rtpReceiver
-               streams:(NSArray<RTCMediaStream *> *)mediaStreams;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+        didAddReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver
+               streams:(NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *)mediaStreams;
 
 /** Called when the receiver and its track are removed. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-     didRemoveReceiver:(RTCRtpReceiver *)rtpReceiver;
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+     didRemoveReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver;
 
 /** Called when the selected ICE candidate pair is changed. */
-- (void)peerConnection:(RTCPeerConnection *)peerConnection
-    didChangeLocalCandidate:(RTCIceCandidate *)local
-            remoteCandidate:(RTCIceCandidate *)remote
+- (void)peerConnection:(RTC_OBJC_TYPE(RTCPeerConnection) *)peerConnection
+    didChangeLocalCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)local
+            remoteCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)remote
              lastReceivedMs:(int)lastDataReceivedMs
                changeReason:(NSString *)reason;
 
 @end
 
 RTC_OBJC_EXPORT
-@interface RTCPeerConnection : NSObject
+@interface RTC_OBJC_TYPE (RTCPeerConnection) : NSObject
 
 /** The object that will be notifed about events such as state changes and
  *  streams being added or removed.
  */
-@property(nonatomic, weak, nullable) id<RTCPeerConnectionDelegate> delegate;
+@property(nonatomic, weak, nullable) id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)> delegate;
 /** This property is not available with RTCSdpSemanticsUnifiedPlan. Please use
  *  |senders| instead.
  */
-@property(nonatomic, readonly) NSArray<RTCMediaStream *> *localStreams;
-@property(nonatomic, readonly, nullable) RTCSessionDescription *localDescription;
-@property(nonatomic, readonly, nullable) RTCSessionDescription *remoteDescription;
+@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *localStreams;
+@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * localDescription;
+@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCSessionDescription) * remoteDescription;
 @property(nonatomic, readonly) RTCSignalingState signalingState;
 @property(nonatomic, readonly) RTCIceConnectionState iceConnectionState;
 @property(nonatomic, readonly) RTCPeerConnectionState connectionState;
 @property(nonatomic, readonly) RTCIceGatheringState iceGatheringState;
-@property(nonatomic, readonly, copy) RTCConfiguration *configuration;
+@property(nonatomic, readonly, copy) RTC_OBJC_TYPE(RTCConfiguration) * configuration;
 
 /** Gets all RTCRtpSenders associated with this peer connection.
  *  Note: reading this property returns different instances of RTCRtpSender.
  *  Use isEqual: instead of == to compare RTCRtpSender instances.
  */
-@property(nonatomic, readonly) NSArray<RTCRtpSender *> *senders;
+@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpSender) *> *senders;
 
 /** Gets all RTCRtpReceivers associated with this peer connection.
  *  Note: reading this property returns different instances of RTCRtpReceiver.
  *  Use isEqual: instead of == to compare RTCRtpReceiver instances.
  */
-@property(nonatomic, readonly) NSArray<RTCRtpReceiver *> *receivers;
+@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpReceiver) *> *receivers;
 
 /** Gets all RTCRtpTransceivers associated with this peer connection.
  *  Note: reading this property returns different instances of
- *  RTCRtpTransceiver. Use isEqual: instead of == to compare RTCRtpTransceiver
- *  instances.
- *  This is only available with RTCSdpSemanticsUnifiedPlan specified.
+ *  RTCRtpTransceiver. Use isEqual: instead of == to compare
+ *  RTCRtpTransceiver instances. This is only available with
+ * RTCSdpSemanticsUnifiedPlan specified.
  */
-@property(nonatomic, readonly) NSArray<RTCRtpTransceiver *> *transceivers;
+@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpTransceiver) *> *transceivers;
 
 - (instancetype)init NS_UNAVAILABLE;
 
@@ -203,38 +207,39 @@
  *  new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies
  *  cannot be changed with this method.
  */
-- (BOOL)setConfiguration:(RTCConfiguration *)configuration;
+- (BOOL)setConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration;
 
 /** Terminate all media and close the transport. */
 - (void)close;
 
 /** Provide a remote candidate to the ICE Agent. */
-- (void)addIceCandidate:(RTCIceCandidate *)candidate;
+- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate;
 
 /** Remove a group of remote candidates from the ICE Agent. */
-- (void)removeIceCandidates:(NSArray<RTCIceCandidate *> *)candidates;
+- (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)candidates;
 
 /** Add a new media stream to be sent on this peer connection.
  *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
  *  addTrack instead.
  */
-- (void)addStream:(RTCMediaStream *)stream;
+- (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
 
 /** Remove the given media stream from this peer connection.
  *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
  *  removeTrack instead.
  */
-- (void)removeStream:(RTCMediaStream *)stream;
+- (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream;
 
 /** Add a new media stream track to be sent on this peer connection, and return
- *  the newly created RTCRtpSender. The RTCRtpSender will be associated with
- *  the streams specified in the |streamIds| list.
+ *  the newly created RTCRtpSender. The RTCRtpSender will be
+ * associated with the streams specified in the |streamIds| list.
  *
  *  Errors: If an error occurs, returns nil. An error can occur if:
  *  - A sender already exists for the track.
  *  - The peer connection is closed.
  */
-- (RTCRtpSender *)addTrack:(RTCMediaStreamTrack *)track streamIds:(NSArray<NSString *> *)streamIds;
+- (RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
+                                streamIds:(NSArray<NSString *> *)streamIds;
 
 /** With PlanB semantics, removes an RTCRtpSender from this peer connection.
  *
@@ -243,7 +248,7 @@
  *
  *  Returns YES on success.
  */
-- (BOOL)removeTrack:(RTCRtpSender *)sender;
+- (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender;
 
 /** addTransceiver creates a new RTCRtpTransceiver and adds it to the set of
  *  transceivers. Adding a transceiver will cause future calls to CreateOffer
@@ -266,33 +271,37 @@
  *  of the transceiver (and sender/receiver) will be derived from the kind of
  *  the track.
  */
-- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track;
-- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track
-                                          init:(RTCRtpTransceiverInit *)init;
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
+    (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track;
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)
+    addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
+                       init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init;
 
 /** Adds a transceiver with the given kind. Can either be RTCRtpMediaTypeAudio
  *  or RTCRtpMediaTypeVideo.
  */
-- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
-- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType
-                                       init:(RTCRtpTransceiverInit *)init;
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType;
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType
+                                                      init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)
+                                                               init;
 
 /** Generate an SDP offer. */
-- (void)offerForConstraints:(RTCMediaConstraints *)constraints
-          completionHandler:(nullable void (^)(RTCSessionDescription *_Nullable sdp,
+- (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+          completionHandler:(nullable void (^)(RTC_OBJC_TYPE(RTCSessionDescription) * _Nullable sdp,
                                                NSError *_Nullable error))completionHandler;
 
 /** Generate an SDP answer. */
-- (void)answerForConstraints:(RTCMediaConstraints *)constraints
-           completionHandler:(nullable void (^)(RTCSessionDescription *_Nullable sdp,
-                                                NSError *_Nullable error))completionHandler;
+- (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+           completionHandler:
+               (nullable void (^)(RTC_OBJC_TYPE(RTCSessionDescription) * _Nullable sdp,
+                                  NSError *_Nullable error))completionHandler;
 
 /** Apply the supplied RTCSessionDescription as the local description. */
-- (void)setLocalDescription:(RTCSessionDescription *)sdp
+- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
           completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler;
 
 /** Apply the supplied RTCSessionDescription as the remote description. */
-- (void)setRemoteDescription:(RTCSessionDescription *)sdp
+- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
            completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler;
 
 /** Limits the bandwidth allocated for all RTP streams sent by this
@@ -310,35 +319,40 @@
 
 @end
 
-@interface RTCPeerConnection (Media)
+@interface RTC_OBJC_TYPE (RTCPeerConnection)
+(Media)
 
-/** Create an RTCRtpSender with the specified kind and media stream ID.
- *  See RTCMediaStreamTrack.h for available kinds.
- *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
- *  addTransceiver instead.
- */
-- (RTCRtpSender *)senderWithKind:(NSString *)kind streamId:(NSString *)streamId;
+    /** Create an RTCRtpSender with the specified kind and media stream ID.
+     *  See RTCMediaStreamTrack.h for available kinds.
+     *  This method is not supported with RTCSdpSemanticsUnifiedPlan. Please use
+     *  addTransceiver instead.
+     */
+    - (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind : (NSString *)kind streamId
+    : (NSString *)streamId;
 
 @end
 
-@interface RTCPeerConnection (DataChannel)
+@interface RTC_OBJC_TYPE (RTCPeerConnection)
+(DataChannel)
 
-/** Create a new data channel with the given label and configuration. */
-- (nullable RTCDataChannel *)dataChannelForLabel:(NSString *)label
-                                   configuration:(RTCDataChannelConfiguration *)configuration;
+    /** Create a new data channel with the given label and configuration. */
+    - (nullable RTC_OBJC_TYPE(RTCDataChannel) *)dataChannelForLabel
+    : (NSString *)label configuration : (RTC_OBJC_TYPE(RTCDataChannelConfiguration) *)configuration;
 
 @end
 
 typedef void (^RTCStatisticsCompletionHandler)(RTCStatisticsReport *);
 
-@interface RTCPeerConnection (Stats)
+@interface RTC_OBJC_TYPE (RTCPeerConnection)
+(Stats)
 
-/** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil
- *  statistics are gathered for all tracks.
- */
-- (void)statsForTrack:(nullable RTCMediaStreamTrack *)mediaStreamTrack
-     statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel
-    completionHandler:(nullable void (^)(NSArray<RTCLegacyStatsReport *> *stats))completionHandler;
+    /** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil
+     *  statistics are gathered for all tracks.
+     */
+    - (void)statsForTrack
+    : (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)mediaStreamTrack statsOutputLevel
+    : (RTCStatsOutputLevel)statsOutputLevel completionHandler
+    : (nullable void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler;
 
 /** Gather statistic through the v2 statistics API. */
 - (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler;
@@ -346,13 +360,13 @@
 /** Spec-compliant getStats() performing the stats selection algorithm with the
  *  sender.
  */
-- (void)statisticsForSender:(RTCRtpSender *)sender
+- (void)statisticsForSender:(RTC_OBJC_TYPE(RTCRtpSender) *)sender
           completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
 
 /** Spec-compliant getStats() performing the stats selection algorithm with the
  *  receiver.
  */
-- (void)statisticsForReceiver:(RTCRtpReceiver *)receiver
+- (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
             completionHandler:(RTCStatisticsCompletionHandler)completionHandler;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.mm b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
index ebdd120..fa68d08 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
@@ -33,8 +33,7 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/numerics/safe_conversions.h"
 
-NSString * const kRTCPeerConnectionErrorDomain =
-    @"org.webrtc.RTCPeerConnection";
+NSString *const kRTCPeerConnectionErrorDomain = @"org.webrtc.RTC_OBJC_TYPE(RTCPeerConnection)";
 int const kRTCPeerConnnectionSessionDescriptionError = -1;
 
 namespace webrtc {
@@ -42,9 +41,8 @@
 class CreateSessionDescriptionObserverAdapter
     : public CreateSessionDescriptionObserver {
  public:
-  CreateSessionDescriptionObserverAdapter(
-      void (^completionHandler)(RTCSessionDescription *sessionDescription,
-                                NSError *error)) {
+  CreateSessionDescriptionObserverAdapter(void (^completionHandler)(
+      RTC_OBJC_TYPE(RTCSessionDescription) * sessionDescription, NSError *error)) {
     completion_handler_ = completionHandler;
   }
 
@@ -54,9 +52,8 @@
     RTC_DCHECK(completion_handler_);
     std::unique_ptr<webrtc::SessionDescriptionInterface> description =
         std::unique_ptr<webrtc::SessionDescriptionInterface>(desc);
-    RTCSessionDescription* session =
-        [[RTCSessionDescription alloc] initWithNativeDescription:
-            description.get()];
+    RTC_OBJC_TYPE(RTCSessionDescription) *session =
+        [[RTC_OBJC_TYPE(RTCSessionDescription) alloc] initWithNativeDescription:description.get()];
     completion_handler_(session, nil);
     completion_handler_ = nil;
   }
@@ -74,8 +71,8 @@
   }
 
  private:
-  void (^completion_handler_)
-      (RTCSessionDescription *sessionDescription, NSError *error);
+  void (^completion_handler_)(RTC_OBJC_TYPE(RTCSessionDescription) * sessionDescription,
+                              NSError *error);
 };
 
 class SetSessionDescriptionObserverAdapter :
@@ -110,8 +107,8 @@
   void (^completion_handler_)(NSError *error);
 };
 
-PeerConnectionDelegateAdapter::PeerConnectionDelegateAdapter(
-    RTCPeerConnection *peerConnection) {
+PeerConnectionDelegateAdapter::PeerConnectionDelegateAdapter(RTC_OBJC_TYPE(RTCPeerConnection) *
+                                                             peerConnection) {
   peer_connection_ = peerConnection;
 }
 
@@ -122,26 +119,28 @@
 void PeerConnectionDelegateAdapter::OnSignalingChange(
     PeerConnectionInterface::SignalingState new_state) {
   RTCSignalingState state =
-      [[RTCPeerConnection class] signalingStateForNativeState:new_state];
-  RTCPeerConnection *peer_connection = peer_connection_;
+      [[RTC_OBJC_TYPE(RTCPeerConnection) class] signalingStateForNativeState:new_state];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   [peer_connection.delegate peerConnection:peer_connection
                    didChangeSignalingState:state];
 }
 
 void PeerConnectionDelegateAdapter::OnAddStream(
     rtc::scoped_refptr<MediaStreamInterface> stream) {
-  RTCPeerConnection *peer_connection = peer_connection_;
-  RTCMediaStream *mediaStream =
-      [[RTCMediaStream alloc] initWithFactory:peer_connection.factory nativeMediaStream:stream];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCMediaStream) *mediaStream =
+      [[RTC_OBJC_TYPE(RTCMediaStream) alloc] initWithFactory:peer_connection.factory
+                                           nativeMediaStream:stream];
   [peer_connection.delegate peerConnection:peer_connection
                               didAddStream:mediaStream];
 }
 
 void PeerConnectionDelegateAdapter::OnRemoveStream(
     rtc::scoped_refptr<MediaStreamInterface> stream) {
-  RTCPeerConnection *peer_connection = peer_connection_;
-  RTCMediaStream *mediaStream =
-      [[RTCMediaStream alloc] initWithFactory:peer_connection.factory nativeMediaStream:stream];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCMediaStream) *mediaStream =
+      [[RTC_OBJC_TYPE(RTCMediaStream) alloc] initWithFactory:peer_connection.factory
+                                           nativeMediaStream:stream];
 
   [peer_connection.delegate peerConnection:peer_connection
                            didRemoveStream:mediaStream];
@@ -149,10 +148,10 @@
 
 void PeerConnectionDelegateAdapter::OnTrack(
     rtc::scoped_refptr<RtpTransceiverInterface> nativeTransceiver) {
-  RTCPeerConnection *peer_connection = peer_connection_;
-  RTCRtpTransceiver *transceiver =
-      [[RTCRtpTransceiver alloc] initWithFactory:peer_connection.factory
-                            nativeRtpTransceiver:nativeTransceiver];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCRtpTransceiver) *transceiver =
+      [[RTC_OBJC_TYPE(RTCRtpTransceiver) alloc] initWithFactory:peer_connection.factory
+                                           nativeRtpTransceiver:nativeTransceiver];
   if ([peer_connection.delegate
           respondsToSelector:@selector(peerConnection:didStartReceivingOnTransceiver:)]) {
     [peer_connection.delegate peerConnection:peer_connection
@@ -162,21 +161,23 @@
 
 void PeerConnectionDelegateAdapter::OnDataChannel(
     rtc::scoped_refptr<DataChannelInterface> data_channel) {
-  RTCPeerConnection *peer_connection = peer_connection_;
-  RTCDataChannel *dataChannel = [[RTCDataChannel alloc] initWithFactory:peer_connection.factory
-                                                      nativeDataChannel:data_channel];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCDataChannel) *dataChannel =
+      [[RTC_OBJC_TYPE(RTCDataChannel) alloc] initWithFactory:peer_connection.factory
+                                           nativeDataChannel:data_channel];
   [peer_connection.delegate peerConnection:peer_connection
                         didOpenDataChannel:dataChannel];
 }
 
 void PeerConnectionDelegateAdapter::OnRenegotiationNeeded() {
-  RTCPeerConnection *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   [peer_connection.delegate peerConnectionShouldNegotiate:peer_connection];
 }
 
 void PeerConnectionDelegateAdapter::OnIceConnectionChange(
     PeerConnectionInterface::IceConnectionState new_state) {
-  RTCIceConnectionState state = [RTCPeerConnection iceConnectionStateForNativeState:new_state];
+  RTCIceConnectionState state =
+      [RTC_OBJC_TYPE(RTCPeerConnection) iceConnectionStateForNativeState:new_state];
   [peer_connection_.delegate peerConnection:peer_connection_ didChangeIceConnectionState:state];
 }
 
@@ -184,7 +185,8 @@
     PeerConnectionInterface::IceConnectionState new_state) {
   if ([peer_connection_.delegate
           respondsToSelector:@selector(peerConnection:didChangeStandardizedIceConnectionState:)]) {
-    RTCIceConnectionState state = [RTCPeerConnection iceConnectionStateForNativeState:new_state];
+    RTCIceConnectionState state =
+        [RTC_OBJC_TYPE(RTCPeerConnection) iceConnectionStateForNativeState:new_state];
     [peer_connection_.delegate peerConnection:peer_connection_
         didChangeStandardizedIceConnectionState:state];
   }
@@ -194,7 +196,8 @@
     PeerConnectionInterface::PeerConnectionState new_state) {
   if ([peer_connection_.delegate
           respondsToSelector:@selector(peerConnection:didChangeConnectionState:)]) {
-    RTCPeerConnectionState state = [RTCPeerConnection connectionStateForNativeState:new_state];
+    RTCPeerConnectionState state =
+        [RTC_OBJC_TYPE(RTCPeerConnection) connectionStateForNativeState:new_state];
     [peer_connection_.delegate peerConnection:peer_connection_ didChangeConnectionState:state];
   }
 }
@@ -202,17 +205,17 @@
 void PeerConnectionDelegateAdapter::OnIceGatheringChange(
     PeerConnectionInterface::IceGatheringState new_state) {
   RTCIceGatheringState state =
-      [[RTCPeerConnection class] iceGatheringStateForNativeState:new_state];
-  RTCPeerConnection *peer_connection = peer_connection_;
+      [[RTC_OBJC_TYPE(RTCPeerConnection) class] iceGatheringStateForNativeState:new_state];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   [peer_connection.delegate peerConnection:peer_connection
                 didChangeIceGatheringState:state];
 }
 
 void PeerConnectionDelegateAdapter::OnIceCandidate(
     const IceCandidateInterface *candidate) {
-  RTCIceCandidate *iceCandidate =
-      [[RTCIceCandidate alloc] initWithNativeCandidate:candidate];
-  RTCPeerConnection *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCIceCandidate) *iceCandidate =
+      [[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:candidate];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   [peer_connection.delegate peerConnection:peer_connection
                    didGenerateIceCandidate:iceCandidate];
 }
@@ -224,11 +227,11 @@
   for (const auto& candidate : candidates) {
     std::unique_ptr<JsepIceCandidate> candidate_wrapper(
         new JsepIceCandidate(candidate.transport_name(), -1, candidate));
-    RTCIceCandidate* ice_candidate = [[RTCIceCandidate alloc]
-        initWithNativeCandidate:candidate_wrapper.get()];
+    RTC_OBJC_TYPE(RTCIceCandidate) *ice_candidate =
+        [[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:candidate_wrapper.get()];
     [ice_candidates addObject:ice_candidate];
   }
-  RTCPeerConnection* peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   [peer_connection.delegate peerConnection:peer_connection
                     didRemoveIceCandidates:ice_candidates];
 }
@@ -238,13 +241,13 @@
   const auto &selected_pair = event.selected_candidate_pair;
   auto local_candidate_wrapper = std::make_unique<JsepIceCandidate>(
       selected_pair.local_candidate().transport_name(), -1, selected_pair.local_candidate());
-  RTCIceCandidate *local_candidate =
-      [[RTCIceCandidate alloc] initWithNativeCandidate:local_candidate_wrapper.release()];
+  RTC_OBJC_TYPE(RTCIceCandidate) *local_candidate = [[RTC_OBJC_TYPE(RTCIceCandidate) alloc]
+      initWithNativeCandidate:local_candidate_wrapper.release()];
   auto remote_candidate_wrapper = std::make_unique<JsepIceCandidate>(
       selected_pair.remote_candidate().transport_name(), -1, selected_pair.remote_candidate());
-  RTCIceCandidate *remote_candidate =
-      [[RTCIceCandidate alloc] initWithNativeCandidate:remote_candidate_wrapper.release()];
-  RTCPeerConnection *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCIceCandidate) *remote_candidate = [[RTC_OBJC_TYPE(RTCIceCandidate) alloc]
+      initWithNativeCandidate:remote_candidate_wrapper.release()];
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   NSString *nsstr_reason = [NSString stringForStdString:event.reason];
   if ([peer_connection.delegate
           respondsToSelector:@selector
@@ -260,17 +263,19 @@
 void PeerConnectionDelegateAdapter::OnAddTrack(
     rtc::scoped_refptr<RtpReceiverInterface> receiver,
     const std::vector<rtc::scoped_refptr<MediaStreamInterface>> &streams) {
-  RTCPeerConnection *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   if ([peer_connection.delegate respondsToSelector:@selector(peerConnection:
                                                              didAddReceiver:streams:)]) {
     NSMutableArray *mediaStreams = [NSMutableArray arrayWithCapacity:streams.size()];
     for (const auto &nativeStream : streams) {
-      RTCMediaStream *mediaStream = [[RTCMediaStream alloc] initWithFactory:peer_connection.factory
-                                                          nativeMediaStream:nativeStream];
+      RTC_OBJC_TYPE(RTCMediaStream) *mediaStream =
+          [[RTC_OBJC_TYPE(RTCMediaStream) alloc] initWithFactory:peer_connection.factory
+                                               nativeMediaStream:nativeStream];
       [mediaStreams addObject:mediaStream];
     }
-    RTCRtpReceiver *rtpReceiver = [[RTCRtpReceiver alloc] initWithFactory:peer_connection.factory
-                                                        nativeRtpReceiver:receiver];
+    RTC_OBJC_TYPE(RTCRtpReceiver) *rtpReceiver =
+        [[RTC_OBJC_TYPE(RTCRtpReceiver) alloc] initWithFactory:peer_connection.factory
+                                             nativeRtpReceiver:receiver];
 
     [peer_connection.delegate peerConnection:peer_connection
                               didAddReceiver:rtpReceiver
@@ -280,19 +285,20 @@
 
 void PeerConnectionDelegateAdapter::OnRemoveTrack(
     rtc::scoped_refptr<RtpReceiverInterface> receiver) {
-  RTCPeerConnection *peer_connection = peer_connection_;
+  RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
   if ([peer_connection.delegate respondsToSelector:@selector(peerConnection:didRemoveReceiver:)]) {
-    RTCRtpReceiver *rtpReceiver = [[RTCRtpReceiver alloc] initWithFactory:peer_connection.factory
-                                                        nativeRtpReceiver:receiver];
+    RTC_OBJC_TYPE(RTCRtpReceiver) *rtpReceiver =
+        [[RTC_OBJC_TYPE(RTCRtpReceiver) alloc] initWithFactory:peer_connection.factory
+                                             nativeRtpReceiver:receiver];
     [peer_connection.delegate peerConnection:peer_connection didRemoveReceiver:rtpReceiver];
   }
 }
 
 }  // namespace webrtc
 
-@implementation RTCPeerConnection {
-  RTCPeerConnectionFactory *_factory;
-  NSMutableArray<RTCMediaStream *> *_localStreams;
+@implementation RTC_OBJC_TYPE (RTCPeerConnection) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
+  NSMutableArray<RTC_OBJC_TYPE(RTCMediaStream) *> *_localStreams;
   std::unique_ptr<webrtc::PeerConnectionDelegateAdapter> _observer;
   rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;
   std::unique_ptr<webrtc::MediaConstraints> _nativeConstraints;
@@ -302,10 +308,10 @@
 @synthesize delegate = _delegate;
 @synthesize factory = _factory;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                  configuration:(RTCConfiguration *)configuration
-                    constraints:(RTCMediaConstraints *)constraints
-                       delegate:(id<RTCPeerConnectionDelegate>)delegate {
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                  configuration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                    constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+                       delegate:(id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate {
   NSParameterAssert(factory);
   std::unique_ptr<webrtc::PeerConnectionDependencies> dependencies =
       std::make_unique<webrtc::PeerConnectionDependencies>(nullptr);
@@ -316,12 +322,12 @@
                            delegate:delegate];
 }
 
-- (instancetype)initWithDependencies:(RTCPeerConnectionFactory *)factory
-                       configuration:(RTCConfiguration *)configuration
-                         constraints:(RTCMediaConstraints *)constraints
+- (instancetype)initWithDependencies:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                       configuration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                         constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
                         dependencies:
                             (std::unique_ptr<webrtc::PeerConnectionDependencies>)dependencies
-                            delegate:(id<RTCPeerConnectionDelegate>)delegate {
+                            delegate:(id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate {
   NSParameterAssert(factory);
   NSParameterAssert(dependencies.get());
   std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration> config(
@@ -348,24 +354,24 @@
   return self;
 }
 
-- (NSArray<RTCMediaStream *> *)localStreams {
+- (NSArray<RTC_OBJC_TYPE(RTCMediaStream) *> *)localStreams {
   return [_localStreams copy];
 }
 
-- (RTCSessionDescription *)localDescription {
+- (RTC_OBJC_TYPE(RTCSessionDescription) *)localDescription {
   const webrtc::SessionDescriptionInterface *description =
       _peerConnection->local_description();
   return description ?
-      [[RTCSessionDescription alloc] initWithNativeDescription:description]
-          : nil;
+      [[RTC_OBJC_TYPE(RTCSessionDescription) alloc] initWithNativeDescription:description] :
+      nil;
 }
 
-- (RTCSessionDescription *)remoteDescription {
+- (RTC_OBJC_TYPE(RTCSessionDescription) *)remoteDescription {
   const webrtc::SessionDescriptionInterface *description =
       _peerConnection->remote_description();
   return description ?
-      [[RTCSessionDescription alloc] initWithNativeDescription:description]
-          : nil;
+      [[RTC_OBJC_TYPE(RTCSessionDescription) alloc] initWithNativeDescription:description] :
+      nil;
 }
 
 - (RTCSignalingState)signalingState {
@@ -387,7 +393,7 @@
       _peerConnection->ice_gathering_state()];
 }
 
-- (BOOL)setConfiguration:(RTCConfiguration *)configuration {
+- (BOOL)setConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration {
   std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration> config(
       [configuration createNativeConfiguration]);
   if (!config) {
@@ -398,25 +404,25 @@
   return _peerConnection->SetConfiguration(*config).ok();
 }
 
-- (RTCConfiguration *)configuration {
+- (RTC_OBJC_TYPE(RTCConfiguration) *)configuration {
   webrtc::PeerConnectionInterface::RTCConfiguration config =
     _peerConnection->GetConfiguration();
-  return [[RTCConfiguration alloc] initWithNativeConfiguration:config];
+  return [[RTC_OBJC_TYPE(RTCConfiguration) alloc] initWithNativeConfiguration:config];
 }
 
 - (void)close {
   _peerConnection->Close();
 }
 
-- (void)addIceCandidate:(RTCIceCandidate *)candidate {
+- (void)addIceCandidate:(RTC_OBJC_TYPE(RTCIceCandidate) *)candidate {
   std::unique_ptr<const webrtc::IceCandidateInterface> iceCandidate(
       candidate.nativeCandidate);
   _peerConnection->AddIceCandidate(iceCandidate.get());
 }
 
-- (void)removeIceCandidates:(NSArray<RTCIceCandidate *> *)iceCandidates {
+- (void)removeIceCandidates:(NSArray<RTC_OBJC_TYPE(RTCIceCandidate) *> *)iceCandidates {
   std::vector<cricket::Candidate> candidates;
-  for (RTCIceCandidate *iceCandidate in iceCandidates) {
+  for (RTC_OBJC_TYPE(RTCIceCandidate) * iceCandidate in iceCandidates) {
     std::unique_ptr<const webrtc::IceCandidateInterface> candidate(
         iceCandidate.nativeCandidate);
     if (candidate) {
@@ -430,7 +436,7 @@
   }
 }
 
-- (void)addStream:(RTCMediaStream *)stream {
+- (void)addStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream {
   if (!_peerConnection->AddStream(stream.nativeMediaStream)) {
     RTCLogError(@"Failed to add stream: %@", stream);
     return;
@@ -438,12 +444,13 @@
   [_localStreams addObject:stream];
 }
 
-- (void)removeStream:(RTCMediaStream *)stream {
+- (void)removeStream:(RTC_OBJC_TYPE(RTCMediaStream) *)stream {
   _peerConnection->RemoveStream(stream.nativeMediaStream);
   [_localStreams removeObject:stream];
 }
 
-- (RTCRtpSender *)addTrack:(RTCMediaStreamTrack *)track streamIds:(NSArray<NSString *> *)streamIds {
+- (RTC_OBJC_TYPE(RTCRtpSender) *)addTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
+                                streamIds:(NSArray<NSString *> *)streamIds {
   std::vector<std::string> nativeStreamIds;
   for (NSString *streamId in streamIds) {
     nativeStreamIds.push_back([streamId UTF8String]);
@@ -454,11 +461,11 @@
     RTCLogError(@"Failed to add track %@: %s", track, nativeSenderOrError.error().message());
     return nil;
   }
-  return [[RTCRtpSender alloc] initWithFactory:self.factory
-                               nativeRtpSender:nativeSenderOrError.MoveValue()];
+  return [[RTC_OBJC_TYPE(RTCRtpSender) alloc] initWithFactory:self.factory
+                                              nativeRtpSender:nativeSenderOrError.MoveValue()];
 }
 
-- (BOOL)removeTrack:(RTCRtpSender *)sender {
+- (BOOL)removeTrack:(RTC_OBJC_TYPE(RTCRtpSender) *)sender {
   bool result = _peerConnection->RemoveTrack(sender.nativeRtpSender);
   if (!result) {
     RTCLogError(@"Failed to remote track %@", sender);
@@ -466,12 +473,15 @@
   return result;
 }
 
-- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track {
-  return [self addTransceiverWithTrack:track init:[[RTCRtpTransceiverInit alloc] init]];
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverWithTrack:
+    (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
+  return [self addTransceiverWithTrack:track
+                                  init:[[RTC_OBJC_TYPE(RTCRtpTransceiverInit) alloc] init]];
 }
 
-- (RTCRtpTransceiver *)addTransceiverWithTrack:(RTCMediaStreamTrack *)track
-                                          init:(RTCRtpTransceiverInit *)init {
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)
+    addTransceiverWithTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track
+                       init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)init {
   webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>> nativeTransceiverOrError =
       _peerConnection->AddTransceiver(track.nativeTrack, init.nativeInit);
   if (!nativeTransceiverOrError.ok()) {
@@ -479,33 +489,36 @@
         @"Failed to add transceiver %@: %s", track, nativeTransceiverOrError.error().message());
     return nil;
   }
-  return [[RTCRtpTransceiver alloc] initWithFactory:self.factory
-                               nativeRtpTransceiver:nativeTransceiverOrError.MoveValue()];
+  return [[RTC_OBJC_TYPE(RTCRtpTransceiver) alloc]
+           initWithFactory:self.factory
+      nativeRtpTransceiver:nativeTransceiverOrError.MoveValue()];
 }
 
-- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType {
-  return [self addTransceiverOfType:mediaType init:[[RTCRtpTransceiverInit alloc] init]];
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType {
+  return [self addTransceiverOfType:mediaType
+                               init:[[RTC_OBJC_TYPE(RTCRtpTransceiverInit) alloc] init]];
 }
 
-- (RTCRtpTransceiver *)addTransceiverOfType:(RTCRtpMediaType)mediaType
-                                       init:(RTCRtpTransceiverInit *)init {
+- (RTC_OBJC_TYPE(RTCRtpTransceiver) *)addTransceiverOfType:(RTCRtpMediaType)mediaType
+                                                      init:(RTC_OBJC_TYPE(RTCRtpTransceiverInit) *)
+                                                               init {
   webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>> nativeTransceiverOrError =
-      _peerConnection->AddTransceiver([RTCRtpReceiver nativeMediaTypeForMediaType:mediaType],
-                                      init.nativeInit);
+      _peerConnection->AddTransceiver(
+          [RTC_OBJC_TYPE(RTCRtpReceiver) nativeMediaTypeForMediaType:mediaType], init.nativeInit);
   if (!nativeTransceiverOrError.ok()) {
     RTCLogError(@"Failed to add transceiver %@: %s",
-                [RTCRtpReceiver stringForMediaType:mediaType],
+                [RTC_OBJC_TYPE(RTCRtpReceiver) stringForMediaType:mediaType],
                 nativeTransceiverOrError.error().message());
     return nil;
   }
-  return [[RTCRtpTransceiver alloc] initWithFactory:self.factory
-                               nativeRtpTransceiver:nativeTransceiverOrError.MoveValue()];
+  return [[RTC_OBJC_TYPE(RTCRtpTransceiver) alloc]
+           initWithFactory:self.factory
+      nativeRtpTransceiver:nativeTransceiverOrError.MoveValue()];
 }
 
-- (void)offerForConstraints:(RTCMediaConstraints *)constraints
-          completionHandler:
-    (void (^)(RTCSessionDescription *sessionDescription,
-              NSError *error))completionHandler {
+- (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+          completionHandler:(void (^)(RTC_OBJC_TYPE(RTCSessionDescription) * sessionDescription,
+                                      NSError *error))completionHandler {
   rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
       observer(new rtc::RefCountedObject
           <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
@@ -515,10 +528,9 @@
   _peerConnection->CreateOffer(observer, options);
 }
 
-- (void)answerForConstraints:(RTCMediaConstraints *)constraints
-           completionHandler:
-    (void (^)(RTCSessionDescription *sessionDescription,
-              NSError *error))completionHandler {
+- (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+           completionHandler:(void (^)(RTC_OBJC_TYPE(RTCSessionDescription) * sessionDescription,
+                                       NSError *error))completionHandler {
   rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
       observer(new rtc::RefCountedObject
           <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
@@ -528,7 +540,7 @@
   _peerConnection->CreateAnswer(observer, options);
 }
 
-- (void)setLocalDescription:(RTCSessionDescription *)sdp
+- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
           completionHandler:(void (^)(NSError *error))completionHandler {
   rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
       new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
@@ -536,7 +548,7 @@
   _peerConnection->SetLocalDescription(observer, sdp.nativeDescription);
 }
 
-- (void)setRemoteDescription:(RTCSessionDescription *)sdp
+- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
            completionHandler:(void (^)(NSError *error))completionHandler {
   rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
       new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
@@ -588,48 +600,50 @@
   _hasStartedRtcEventLog = NO;
 }
 
-- (RTCRtpSender *)senderWithKind:(NSString *)kind
-                        streamId:(NSString *)streamId {
+- (RTC_OBJC_TYPE(RTCRtpSender) *)senderWithKind:(NSString *)kind streamId:(NSString *)streamId {
   std::string nativeKind = [NSString stdStringForString:kind];
   std::string nativeStreamId = [NSString stdStringForString:streamId];
   rtc::scoped_refptr<webrtc::RtpSenderInterface> nativeSender(
       _peerConnection->CreateSender(nativeKind, nativeStreamId));
-  return nativeSender ?
-      [[RTCRtpSender alloc] initWithFactory:self.factory nativeRtpSender:nativeSender] :
-      nil;
+  return nativeSender ? [[RTC_OBJC_TYPE(RTCRtpSender) alloc] initWithFactory:self.factory
+                                                             nativeRtpSender:nativeSender] :
+                        nil;
 }
 
-- (NSArray<RTCRtpSender *> *)senders {
+- (NSArray<RTC_OBJC_TYPE(RTCRtpSender) *> *)senders {
   std::vector<rtc::scoped_refptr<webrtc::RtpSenderInterface>> nativeSenders(
       _peerConnection->GetSenders());
   NSMutableArray *senders = [[NSMutableArray alloc] init];
   for (const auto &nativeSender : nativeSenders) {
-    RTCRtpSender *sender =
-        [[RTCRtpSender alloc] initWithFactory:self.factory nativeRtpSender:nativeSender];
+    RTC_OBJC_TYPE(RTCRtpSender) *sender =
+        [[RTC_OBJC_TYPE(RTCRtpSender) alloc] initWithFactory:self.factory
+                                             nativeRtpSender:nativeSender];
     [senders addObject:sender];
   }
   return senders;
 }
 
-- (NSArray<RTCRtpReceiver *> *)receivers {
+- (NSArray<RTC_OBJC_TYPE(RTCRtpReceiver) *> *)receivers {
   std::vector<rtc::scoped_refptr<webrtc::RtpReceiverInterface>> nativeReceivers(
       _peerConnection->GetReceivers());
   NSMutableArray *receivers = [[NSMutableArray alloc] init];
   for (const auto &nativeReceiver : nativeReceivers) {
-    RTCRtpReceiver *receiver =
-        [[RTCRtpReceiver alloc] initWithFactory:self.factory nativeRtpReceiver:nativeReceiver];
+    RTC_OBJC_TYPE(RTCRtpReceiver) *receiver =
+        [[RTC_OBJC_TYPE(RTCRtpReceiver) alloc] initWithFactory:self.factory
+                                             nativeRtpReceiver:nativeReceiver];
     [receivers addObject:receiver];
   }
   return receivers;
 }
 
-- (NSArray<RTCRtpTransceiver *> *)transceivers {
+- (NSArray<RTC_OBJC_TYPE(RTCRtpTransceiver) *> *)transceivers {
   std::vector<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>> nativeTransceivers(
       _peerConnection->GetTransceivers());
   NSMutableArray *transceivers = [[NSMutableArray alloc] init];
   for (const auto &nativeTransceiver : nativeTransceivers) {
-    RTCRtpTransceiver *transceiver = [[RTCRtpTransceiver alloc] initWithFactory:self.factory
-                                                           nativeRtpTransceiver:nativeTransceiver];
+    RTC_OBJC_TYPE(RTCRtpTransceiver) *transceiver =
+        [[RTC_OBJC_TYPE(RTCRtpTransceiver) alloc] initWithFactory:self.factory
+                                             nativeRtpTransceiver:nativeTransceiver];
     [transceivers addObject:transceiver];
   }
   return transceivers;
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Native.h
index 7922c91..c2aab0b 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Native.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Native.h
@@ -31,9 +31,10 @@
 /**
  * This class extension exposes methods that work directly with injectable C++ components.
  */
-@interface RTCPeerConnectionFactory ()
+@interface RTC_OBJC_TYPE (RTCPeerConnectionFactory)
+()
 
-- (instancetype)initNative NS_DESIGNATED_INITIALIZER;
+    - (instancetype)initNative NS_DESIGNATED_INITIALIZER;
 
 /* Initializer used when WebRTC is compiled with no media support */
 - (instancetype)initWithNoMedia;
@@ -84,19 +85,19 @@
                 mediaTransportFactory:
                     (std::unique_ptr<webrtc::MediaTransportFactory>)mediaTransportFactory;
 
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory
-                 mediaTransportFactory:
-                     (std::unique_ptr<webrtc::MediaTransportFactory>)mediaTransportFactory;
+- (instancetype)
+    initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
+            decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory
+     mediaTransportFactory:(std::unique_ptr<webrtc::MediaTransportFactory>)mediaTransportFactory;
 
 /** Initialize an RTCPeerConnection with a configuration, constraints, and
  *  dependencies.
  */
-- (RTCPeerConnection *)
-    peerConnectionWithDependencies:(RTCConfiguration *)configuration
-                       constraints:(RTCMediaConstraints *)constraints
+- (RTC_OBJC_TYPE(RTCPeerConnection) *)
+    peerConnectionWithDependencies:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                       constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
                       dependencies:(std::unique_ptr<webrtc::PeerConnectionDependencies>)dependencies
-                          delegate:(nullable id<RTCPeerConnectionDelegate>)delegate;
+                          delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Private.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Private.h
index db7829c..ef61c2e 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Private.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory+Private.h
@@ -15,16 +15,16 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCPeerConnectionFactory ()
+@interface RTC_OBJC_TYPE (RTCPeerConnectionFactory)
+()
 
-/**
- * PeerConnectionFactoryInterface created and held by this
- * RTCPeerConnectionFactory object. This is needed to pass to the underlying
- * C++ APIs.
- */
-@property(nonatomic, readonly)
-    rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>
-        nativeFactory;
+    /**
+     * PeerConnectionFactoryInterface created and held by this
+     * RTCPeerConnectionFactory object. This is needed to pass to the underlying
+     * C++ APIs.
+     */
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> nativeFactory;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
index c808218..3dcd3b6 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
@@ -14,61 +14,69 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCAudioSource;
-@class RTCAudioTrack;
-@class RTCConfiguration;
-@class RTCMediaConstraints;
-@class RTCMediaStream;
-@class RTCPeerConnection;
-@class RTCVideoSource;
-@class RTCVideoTrack;
-@class RTCPeerConnectionFactoryOptions;
-@protocol RTCPeerConnectionDelegate;
-@protocol RTCVideoDecoderFactory;
-@protocol RTCVideoEncoderFactory;
+@class RTC_OBJC_TYPE(RTCAudioSource);
+@class RTC_OBJC_TYPE(RTCAudioTrack);
+@class RTC_OBJC_TYPE(RTCConfiguration);
+@class RTC_OBJC_TYPE(RTCMediaConstraints);
+@class RTC_OBJC_TYPE(RTCMediaStream);
+@class RTC_OBJC_TYPE(RTCPeerConnection);
+@class RTC_OBJC_TYPE(RTCVideoSource);
+@class RTC_OBJC_TYPE(RTCVideoTrack);
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions);
+@protocol RTC_OBJC_TYPE
+(RTCPeerConnectionDelegate);
+@protocol RTC_OBJC_TYPE
+(RTCVideoDecoderFactory);
+@protocol RTC_OBJC_TYPE
+(RTCVideoEncoderFactory);
 
 RTC_OBJC_EXPORT
-@interface RTCPeerConnectionFactory : NSObject
+@interface RTC_OBJC_TYPE (RTCPeerConnectionFactory) : NSObject
 
 /* Initialize object with default H264 video encoder/decoder factories */
 - (instancetype)init;
 
 /* Initialize object with injectable video encoder/decoder factories */
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory;
+- (instancetype)
+    initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
+            decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory;
 
 /** Initialize an RTCAudioSource with constraints. */
-- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints;
+- (RTC_OBJC_TYPE(RTCAudioSource) *)audioSourceWithConstraints:
+    (nullable RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints;
 
-/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source with no
- *  constraints.
+/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source
+ * with no constraints.
  */
-- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId;
+- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithTrackId:(NSString *)trackId;
 
 /** Initialize an RTCAudioTrack with a source and an id. */
-- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source trackId:(NSString *)trackId;
+- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithSource:(RTC_OBJC_TYPE(RTCAudioSource) *)source
+                                               trackId:(NSString *)trackId;
 
-/** Initialize a generic RTCVideoSource. The RTCVideoSource should be passed to a RTCVideoCapturer
- *  implementation, e.g. RTCCameraVideoCapturer, in order to produce frames.
+/** Initialize a generic RTCVideoSource. The RTCVideoSource should be
+ * passed to a RTCVideoCapturer implementation, e.g.
+ * RTCCameraVideoCapturer, in order to produce frames.
  */
-- (RTCVideoSource *)videoSource;
+- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSource;
 
 /** Initialize an RTCVideoTrack with a source and an id. */
-- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source trackId:(NSString *)trackId;
+- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
+                                               trackId:(NSString *)trackId;
 
 /** Initialize an RTCMediaStream with an id. */
-- (RTCMediaStream *)mediaStreamWithStreamId:(NSString *)streamId;
+- (RTC_OBJC_TYPE(RTCMediaStream) *)mediaStreamWithStreamId:(NSString *)streamId;
 
 /** Initialize an RTCPeerConnection with a configuration, constraints, and
  *  delegate.
  */
-- (RTCPeerConnection *)peerConnectionWithConfiguration:(RTCConfiguration *)configuration
-                                           constraints:(RTCMediaConstraints *)constraints
-                                              delegate:
-                                                  (nullable id<RTCPeerConnectionDelegate>)delegate;
+- (RTC_OBJC_TYPE(RTCPeerConnection) *)
+    peerConnectionWithConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                        constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+                           delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
 
 /** Set the options to be used for subsequently created RTCPeerConnections */
-- (void)setOptions:(nonnull RTCPeerConnectionFactoryOptions *)options;
+- (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options;
 
 /** Start an AecDump recording. This API call will likely change in the future. */
 - (BOOL)startAecDumpWithFilePath:(NSString *)filePath maxSizeInBytes:(int64_t)maxSizeInBytes;
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
index b2e12d3..2e34b05fe 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
@@ -55,7 +55,7 @@
 #include "api/transport/media/media_transport_interface.h"
 #include "media/engine/webrtc_media_engine.h"  // nogncheck
 
-@implementation RTCPeerConnectionFactory {
+@implementation RTC_OBJC_TYPE (RTCPeerConnectionFactory) {
   std::unique_ptr<rtc::Thread> _networkThread;
   std::unique_ptr<rtc::Thread> _workerThread;
   std::unique_ptr<rtc::Thread> _signalingThread;
@@ -76,22 +76,23 @@
 #ifdef HAVE_NO_MEDIA
   return [self initWithNoMedia];
 #else
-  return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
-                       nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
-                       nativeVideoEncoderFactory:webrtc::ObjCToNativeVideoEncoderFactory(
-                                                     [[RTCVideoEncoderFactoryH264 alloc] init])
-                       nativeVideoDecoderFactory:webrtc::ObjCToNativeVideoDecoderFactory(
-                                                     [[RTCVideoDecoderFactoryH264 alloc] init])
-                               audioDeviceModule:[self audioDeviceModule]
-                           audioProcessingModule:nullptr
-                           mediaTransportFactory:nullptr];
+  return [self
+      initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
+              nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
+              nativeVideoEncoderFactory:webrtc::ObjCToNativeVideoEncoderFactory([[RTC_OBJC_TYPE(
+                                            RTCVideoEncoderFactoryH264) alloc] init])
+              nativeVideoDecoderFactory:webrtc::ObjCToNativeVideoDecoderFactory([[RTC_OBJC_TYPE(
+                                            RTCVideoDecoderFactoryH264) alloc] init])
+                      audioDeviceModule:[self audioDeviceModule]
+                  audioProcessingModule:nullptr
+                  mediaTransportFactory:nullptr];
 #endif
 }
 
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory
-                 mediaTransportFactory:
-                     (std::unique_ptr<webrtc::MediaTransportFactory>)mediaTransportFactory {
+- (instancetype)
+    initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
+            decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory
+     mediaTransportFactory:(std::unique_ptr<webrtc::MediaTransportFactory>)mediaTransportFactory {
 #ifdef HAVE_NO_MEDIA
   return [self initWithNoMedia];
 #else
@@ -112,8 +113,9 @@
                            mediaTransportFactory:std::move(mediaTransportFactory)];
 #endif
 }
-- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
-                        decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory {
+- (instancetype)
+    initWithEncoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoEncoderFactory)>)encoderFactory
+            decoderFactory:(nullable id<RTC_OBJC_TYPE(RTCVideoDecoderFactory)>)decoderFactory {
   return [self initWithEncoderFactory:encoderFactory
                        decoderFactory:decoderFactory
                 mediaTransportFactory:nullptr];
@@ -241,7 +243,8 @@
   return self;
 }
 
-- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
+- (RTC_OBJC_TYPE(RTCAudioSource) *)audioSourceWithConstraints:
+    (nullable RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints {
   std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;
   if (constraints) {
     nativeConstraints = constraints.nativeConstraints;
@@ -251,64 +254,58 @@
 
   rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
       _nativeFactory->CreateAudioSource(options);
-  return [[RTCAudioSource alloc] initWithFactory:self nativeAudioSource:source];
+  return [[RTC_OBJC_TYPE(RTCAudioSource) alloc] initWithFactory:self nativeAudioSource:source];
 }
 
-- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId {
-  RTCAudioSource *audioSource = [self audioSourceWithConstraints:nil];
+- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithTrackId:(NSString *)trackId {
+  RTC_OBJC_TYPE(RTCAudioSource) *audioSource = [self audioSourceWithConstraints:nil];
   return [self audioTrackWithSource:audioSource trackId:trackId];
 }
 
-- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source
-                                trackId:(NSString *)trackId {
-  return [[RTCAudioTrack alloc] initWithFactory:self
-                                         source:source
-                                        trackId:trackId];
+- (RTC_OBJC_TYPE(RTCAudioTrack) *)audioTrackWithSource:(RTC_OBJC_TYPE(RTCAudioSource) *)source
+                                               trackId:(NSString *)trackId {
+  return [[RTC_OBJC_TYPE(RTCAudioTrack) alloc] initWithFactory:self source:source trackId:trackId];
 }
 
-- (RTCVideoSource *)videoSource {
-  return [[RTCVideoSource alloc] initWithFactory:self
-                                 signalingThread:_signalingThread.get()
-                                    workerThread:_workerThread.get()];
+- (RTC_OBJC_TYPE(RTCVideoSource) *)videoSource {
+  return [[RTC_OBJC_TYPE(RTCVideoSource) alloc] initWithFactory:self
+                                                signalingThread:_signalingThread.get()
+                                                   workerThread:_workerThread.get()];
 }
 
-- (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source
-                                trackId:(NSString *)trackId {
-  return [[RTCVideoTrack alloc] initWithFactory:self
-                                         source:source
-                                        trackId:trackId];
+- (RTC_OBJC_TYPE(RTCVideoTrack) *)videoTrackWithSource:(RTC_OBJC_TYPE(RTCVideoSource) *)source
+                                               trackId:(NSString *)trackId {
+  return [[RTC_OBJC_TYPE(RTCVideoTrack) alloc] initWithFactory:self source:source trackId:trackId];
 }
 
-- (RTCMediaStream *)mediaStreamWithStreamId:(NSString *)streamId {
-  return [[RTCMediaStream alloc] initWithFactory:self
-                                        streamId:streamId];
+- (RTC_OBJC_TYPE(RTCMediaStream) *)mediaStreamWithStreamId:(NSString *)streamId {
+  return [[RTC_OBJC_TYPE(RTCMediaStream) alloc] initWithFactory:self streamId:streamId];
 }
 
-- (RTCPeerConnection *)peerConnectionWithConfiguration:
-    (RTCConfiguration *)configuration
-                                           constraints:
-    (RTCMediaConstraints *)constraints
-                                              delegate:
-    (nullable id<RTCPeerConnectionDelegate>)delegate {
-  return [[RTCPeerConnection alloc] initWithFactory:self
-                                      configuration:configuration
-                                        constraints:constraints
-                                           delegate:delegate];
+- (RTC_OBJC_TYPE(RTCPeerConnection) *)
+    peerConnectionWithConfiguration:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                        constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
+                           delegate:
+                               (nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate {
+  return [[RTC_OBJC_TYPE(RTCPeerConnection) alloc] initWithFactory:self
+                                                     configuration:configuration
+                                                       constraints:constraints
+                                                          delegate:delegate];
 }
 
-- (RTCPeerConnection *)
-    peerConnectionWithDependencies:(RTCConfiguration *)configuration
-                       constraints:(RTCMediaConstraints *)constraints
+- (RTC_OBJC_TYPE(RTCPeerConnection) *)
+    peerConnectionWithDependencies:(RTC_OBJC_TYPE(RTCConfiguration) *)configuration
+                       constraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
                       dependencies:(std::unique_ptr<webrtc::PeerConnectionDependencies>)dependencies
-                          delegate:(id<RTCPeerConnectionDelegate>)delegate {
-  return [[RTCPeerConnection alloc] initWithDependencies:self
-                                           configuration:configuration
-                                             constraints:constraints
-                                            dependencies:std::move(dependencies)
-                                                delegate:delegate];
+                          delegate:(id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate {
+  return [[RTC_OBJC_TYPE(RTCPeerConnection) alloc] initWithDependencies:self
+                                                          configuration:configuration
+                                                            constraints:constraints
+                                                           dependencies:std::move(dependencies)
+                                                               delegate:delegate];
 }
 
-- (void)setOptions:(nonnull RTCPeerConnectionFactoryOptions *)options {
+- (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options {
   RTC_DCHECK(options != nil);
   _nativeFactory->SetOptions(options.nativeOptions);
 }
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.mm
index 3bb75ee..522e520 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.mm
@@ -32,12 +32,12 @@
   auto audioDecoderFactory = webrtc::CreateBuiltinAudioDecoderFactory();
   [builder setAudioDecoderFactory:audioDecoderFactory];
 
-  auto videoEncoderFactory =
-      webrtc::ObjCToNativeVideoEncoderFactory([[RTCVideoEncoderFactoryH264 alloc] init]);
+  auto videoEncoderFactory = webrtc::ObjCToNativeVideoEncoderFactory(
+      [[RTC_OBJC_TYPE(RTCVideoEncoderFactoryH264) alloc] init]);
   [builder setVideoEncoderFactory:std::move(videoEncoderFactory)];
 
-  auto videoDecoderFactory =
-      webrtc::ObjCToNativeVideoDecoderFactory([[RTCVideoDecoderFactoryH264 alloc] init]);
+  auto videoDecoderFactory = webrtc::ObjCToNativeVideoDecoderFactory(
+      [[RTC_OBJC_TYPE(RTCVideoDecoderFactoryH264) alloc] init]);
   [builder setVideoDecoderFactory:std::move(videoDecoderFactory)];
 
 #if defined(WEBRTC_IOS)
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.h
index 189eb736..f0b0de1 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.h
@@ -29,7 +29,7 @@
 
 + (RTCPeerConnectionFactoryBuilder *)builder;
 
-- (RTCPeerConnectionFactory *)createPeerConnectionFactory;
+- (RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)createPeerConnectionFactory;
 
 - (void)setVideoEncoderFactory:(std::unique_ptr<webrtc::VideoEncoderFactory>)videoEncoderFactory;
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
index af3d259..8f52bea 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm
@@ -33,8 +33,9 @@
   return [[RTCPeerConnectionFactoryBuilder alloc] init];
 }
 
-- (RTCPeerConnectionFactory *)createPeerConnectionFactory {
-  RTCPeerConnectionFactory *factory = [RTCPeerConnectionFactory alloc];
+- (RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)createPeerConnectionFactory {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) *factory =
+      [RTC_OBJC_TYPE(RTCPeerConnectionFactory) alloc];
   return [factory initWithNativeAudioEncoderFactory:_audioEncoderFactory
                           nativeAudioDecoderFactory:_audioDecoderFactory
                           nativeVideoEncoderFactory:std::move(_videoEncoderFactory)
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions+Private.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions+Private.h
index 986b0e6..8832b23 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions+Private.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions+Private.h
@@ -14,12 +14,12 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCPeerConnectionFactoryOptions ()
+@interface RTC_OBJC_TYPE (RTCPeerConnectionFactoryOptions)
+()
 
-/** Returns the equivalent native PeerConnectionFactoryInterface::Options
- * structure. */
-@property(nonatomic, readonly)
-    webrtc::PeerConnectionFactoryInterface::Options nativeOptions;
+    /** Returns the equivalent native PeerConnectionFactoryInterface::Options
+     * structure. */
+    @property(nonatomic, readonly) webrtc::PeerConnectionFactoryInterface::Options nativeOptions;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h
index 4bec869..bfc54a5 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCPeerConnectionFactoryOptions : NSObject
+@interface RTC_OBJC_TYPE (RTCPeerConnectionFactoryOptions) : NSObject
 
 @property(nonatomic, assign) BOOL disableEncryption;
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.mm
index f0cc6a6..5467bd5 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryOptions.mm
@@ -25,7 +25,7 @@
 }
 }  // namespace
 
-@implementation RTCPeerConnectionFactoryOptions
+@implementation RTC_OBJC_TYPE (RTCPeerConnectionFactoryOptions)
 
 @synthesize disableEncryption = _disableEncryption;
 @synthesize disableNetworkMonitor = _disableNetworkMonitor;
diff --git a/sdk/objc/api/peerconnection/RTCRtcpParameters+Private.h b/sdk/objc/api/peerconnection/RTCRtcpParameters+Private.h
index 5471bf4..94c1f92 100644
--- a/sdk/objc/api/peerconnection/RTCRtcpParameters+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtcpParameters+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCRtcpParameters ()
+@interface RTC_OBJC_TYPE (RTCRtcpParameters)
+()
 
-/** Returns the equivalent native RtcpParameters structure. */
-@property(nonatomic, readonly) webrtc::RtcpParameters nativeParameters;
+    /** Returns the equivalent native RtcpParameters structure. */
+    @property(nonatomic, readonly) webrtc::RtcpParameters nativeParameters;
 
 /** Initialize the object with a native RtcpParameters structure. */
 - (instancetype)initWithNativeParameters:(const webrtc::RtcpParameters &)nativeParameters;
diff --git a/sdk/objc/api/peerconnection/RTCRtcpParameters.h b/sdk/objc/api/peerconnection/RTCRtcpParameters.h
index 5c26580..1bbaedc 100644
--- a/sdk/objc/api/peerconnection/RTCRtcpParameters.h
+++ b/sdk/objc/api/peerconnection/RTCRtcpParameters.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCRtcpParameters : NSObject
+@interface RTC_OBJC_TYPE (RTCRtcpParameters) : NSObject
 
 /** The Canonical Name used by RTCP. */
 @property(nonatomic, readonly, copy) NSString *cname;
diff --git a/sdk/objc/api/peerconnection/RTCRtcpParameters.mm b/sdk/objc/api/peerconnection/RTCRtcpParameters.mm
index 0c33dda..4d6084b 100644
--- a/sdk/objc/api/peerconnection/RTCRtcpParameters.mm
+++ b/sdk/objc/api/peerconnection/RTCRtcpParameters.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCRtcpParameters
+@implementation RTC_OBJC_TYPE (RTCRtcpParameters)
 
 @synthesize cname = _cname;
 @synthesize isReducedSize = _isReducedSize;
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecParameters+Private.h b/sdk/objc/api/peerconnection/RTCRtpCodecParameters+Private.h
index 1b297ed..7833068 100644
--- a/sdk/objc/api/peerconnection/RTCRtpCodecParameters+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpCodecParameters+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCRtpCodecParameters ()
+@interface RTC_OBJC_TYPE (RTCRtpCodecParameters)
+()
 
-/** Returns the equivalent native RtpCodecParameters structure. */
-@property(nonatomic, readonly) webrtc::RtpCodecParameters nativeParameters;
+    /** Returns the equivalent native RtpCodecParameters structure. */
+    @property(nonatomic, readonly) webrtc::RtpCodecParameters nativeParameters;
 
 /** Initialize the object with a native RtpCodecParameters structure. */
 - (instancetype)initWithNativeParameters:(const webrtc::RtpCodecParameters &)nativeParameters;
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.h b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.h
index 5d3cac5..a68d9eb 100644
--- a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.h
+++ b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.h
@@ -31,9 +31,9 @@
 RTC_EXTERN const NSString *const kRTCVp9CodecName;
 RTC_EXTERN const NSString *const kRTCH264CodecName;
 
-/** Defined in http://w3c.github.io/webrtc-pc/#idl-def-RTCRtpCodecParameters */
+/** Defined in http://w3c.github.io/webrtc-pc/#idl-def-RTC_OBJC_TYPE(RTCRtpCodecParameters) */
 RTC_OBJC_EXPORT
-@interface RTCRtpCodecParameters : NSObject
+@interface RTC_OBJC_TYPE (RTCRtpCodecParameters) : NSObject
 
 /** The RTP payload type. */
 @property(nonatomic, assign) int payloadType;
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
index f25679e..f61b93c 100644
--- a/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpCodecParameters.mm
@@ -34,7 +34,7 @@
 const NSString * const kRTCVp9CodecName = @(cricket::kVp9CodecName);
 const NSString * const kRTCH264CodecName = @(cricket::kH264CodecName);
 
-@implementation RTCRtpCodecParameters
+@implementation RTC_OBJC_TYPE (RTCRtpCodecParameters)
 
 @synthesize payloadType = _payloadType;
 @synthesize name = _name;
diff --git a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters+Private.h b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters+Private.h
index e3684d3..074c9b1 100644
--- a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCRtpEncodingParameters ()
+@interface RTC_OBJC_TYPE (RTCRtpEncodingParameters)
+()
 
-/** Returns the equivalent native RtpEncodingParameters structure. */
-@property(nonatomic, readonly) webrtc::RtpEncodingParameters nativeParameters;
+    /** Returns the equivalent native RtpEncodingParameters structure. */
+    @property(nonatomic, readonly) webrtc::RtpEncodingParameters nativeParameters;
 
 /** Initialize the object with a native RtpEncodingParameters structure. */
 - (instancetype)initWithNativeParameters:(const webrtc::RtpEncodingParameters &)nativeParameters;
diff --git a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.h b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.h
index 1bbb88d..facd7e5 100644
--- a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.h
+++ b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.h
@@ -23,7 +23,7 @@
 };
 
 RTC_OBJC_EXPORT
-@interface RTCRtpEncodingParameters : NSObject
+@interface RTC_OBJC_TYPE (RTCRtpEncodingParameters) : NSObject
 
 /** The idenfifier for the encoding layer. This is used in simulcast. */
 @property(nonatomic, copy, nullable) NSString *rid;
diff --git a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.mm b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.mm
index 4468fb3..eec6ce4 100644
--- a/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpEncodingParameters.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCRtpEncodingParameters
+@implementation RTC_OBJC_TYPE (RTCRtpEncodingParameters)
 
 @synthesize rid = _rid;
 @synthesize isActive = _isActive;
@@ -58,8 +58,8 @@
       _ssrc = [NSNumber numberWithUnsignedLong:*nativeParameters.ssrc];
     }
     _bitratePriority = nativeParameters.bitrate_priority;
-    _networkPriority =
-        [RTCRtpEncodingParameters priorityFromNativePriority:nativeParameters.network_priority];
+    _networkPriority = [RTC_OBJC_TYPE(RTCRtpEncodingParameters)
+        priorityFromNativePriority:nativeParameters.network_priority];
   }
   return self;
 }
@@ -91,7 +91,7 @@
   }
   parameters.bitrate_priority = _bitratePriority;
   parameters.network_priority =
-      [RTCRtpEncodingParameters nativePriorityFromPriority:_networkPriority];
+      [RTC_OBJC_TYPE(RTCRtpEncodingParameters) nativePriorityFromPriority:_networkPriority];
   return parameters;
 }
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.h b/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.h
index cfb7fb1..0b0bce5 100644
--- a/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.h
@@ -15,10 +15,11 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /* Interfaces for converting to/from internal C++ formats. */
-@interface RTCRtpFragmentationHeader (Private)
+@interface RTC_OBJC_TYPE (RTCRtpFragmentationHeader)
+(Private)
 
-- (instancetype)initWithNativeFragmentationHeader:
-        (const webrtc::RTPFragmentationHeader *__nullable)fragmentationHeader;
+    - (instancetype)initWithNativeFragmentationHeader
+    : (const webrtc::RTPFragmentationHeader *__nullable)fragmentationHeader;
 - (std::unique_ptr<webrtc::RTPFragmentationHeader>)createNativeFragmentationHeader;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.mm b/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.mm
index 3a4415a..e514cf6 100644
--- a/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.mm
@@ -12,10 +12,11 @@
 
 #include "modules/include/module_common_types.h"
 
-@implementation RTCRtpFragmentationHeader (Private)
+@implementation RTC_OBJC_TYPE (RTCRtpFragmentationHeader)
+(Private)
 
-- (instancetype)initWithNativeFragmentationHeader:
-        (const webrtc::RTPFragmentationHeader *)fragmentationHeader {
+    - (instancetype)initWithNativeFragmentationHeader
+    : (const webrtc::RTPFragmentationHeader *)fragmentationHeader {
   if (self = [super init]) {
     if (fragmentationHeader) {
       int count = fragmentationHeader->fragmentationVectorSize;
diff --git a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension+Private.h b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension+Private.h
index 8a2a231..6255847 100644
--- a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCRtpHeaderExtension ()
+@interface RTC_OBJC_TYPE (RTCRtpHeaderExtension)
+()
 
-/** Returns the equivalent native RtpExtension structure. */
-@property(nonatomic, readonly) webrtc::RtpExtension nativeParameters;
+    /** Returns the equivalent native RtpExtension structure. */
+    @property(nonatomic, readonly) webrtc::RtpExtension nativeParameters;
 
 /** Initialize the object with a native RtpExtension structure. */
 - (instancetype)initWithNativeParameters:(const webrtc::RtpExtension &)nativeParameters;
diff --git a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.h b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.h
index 3211449..15be5af 100644
--- a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.h
+++ b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.h
@@ -15,7 +15,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCRtpHeaderExtension : NSObject
+@interface RTC_OBJC_TYPE (RTCRtpHeaderExtension) : NSObject
 
 /** The URI of the RTP header extension, as defined in RFC5285. */
 @property(nonatomic, readonly, copy) NSString *uri;
diff --git a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.mm b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.mm
index afc4786..a19228e 100644
--- a/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpHeaderExtension.mm
@@ -12,7 +12,7 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCRtpHeaderExtension
+@implementation RTC_OBJC_TYPE (RTCRtpHeaderExtension)
 
 @synthesize uri = _uri;
 @synthesize id = _id;
diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters+Private.h b/sdk/objc/api/peerconnection/RTCRtpParameters+Private.h
index a88ccfa..369475a 100644
--- a/sdk/objc/api/peerconnection/RTCRtpParameters+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpParameters+Private.h
@@ -14,10 +14,11 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCRtpParameters ()
+@interface RTC_OBJC_TYPE (RTCRtpParameters)
+()
 
-/** Returns the equivalent native RtpParameters structure. */
-@property(nonatomic, readonly) webrtc::RtpParameters nativeParameters;
+    /** Returns the equivalent native RtpParameters structure. */
+    @property(nonatomic, readonly) webrtc::RtpParameters nativeParameters;
 
 /** Initialize the object with a native RtpParameters structure. */
 - (instancetype)initWithNativeParameters:(const webrtc::RtpParameters &)nativeParameters;
diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters.h b/sdk/objc/api/peerconnection/RTCRtpParameters.h
index 8ee8d71..fff6a85 100644
--- a/sdk/objc/api/peerconnection/RTCRtpParameters.h
+++ b/sdk/objc/api/peerconnection/RTCRtpParameters.h
@@ -27,22 +27,23 @@
 };
 
 RTC_OBJC_EXPORT
-@interface RTCRtpParameters : NSObject
+@interface RTC_OBJC_TYPE (RTCRtpParameters) : NSObject
 
 /** A unique identifier for the last set of parameters applied. */
 @property(nonatomic, copy) NSString *transactionId;
 
 /** Parameters used for RTCP. */
-@property(nonatomic, readonly, copy) RTCRtcpParameters *rtcp;
+@property(nonatomic, readonly, copy) RTC_OBJC_TYPE(RTCRtcpParameters) * rtcp;
 
 /** An array containing parameters for RTP header extensions. */
-@property(nonatomic, readonly, copy) NSArray<RTCRtpHeaderExtension *> *headerExtensions;
+@property(nonatomic, readonly, copy)
+    NSArray<RTC_OBJC_TYPE(RTCRtpHeaderExtension) *> *headerExtensions;
 
 /** The currently active encodings in the order of preference. */
-@property(nonatomic, copy) NSArray<RTCRtpEncodingParameters *> *encodings;
+@property(nonatomic, copy) NSArray<RTC_OBJC_TYPE(RTCRtpEncodingParameters) *> *encodings;
 
 /** The negotiated set of send codecs in order of preference. */
-@property(nonatomic, copy) NSArray<RTCRtpCodecParameters *> *codecs;
+@property(nonatomic, copy) NSArray<RTC_OBJC_TYPE(RTCRtpCodecParameters) *> *codecs;
 
 /**
  * Degradation preference in case of CPU adaptation or constrained bandwidth.
diff --git a/sdk/objc/api/peerconnection/RTCRtpParameters.mm b/sdk/objc/api/peerconnection/RTCRtpParameters.mm
index cbb4576..2236b9a 100644
--- a/sdk/objc/api/peerconnection/RTCRtpParameters.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpParameters.mm
@@ -16,7 +16,7 @@
 #import "RTCRtpHeaderExtension+Private.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCRtpParameters
+@implementation RTC_OBJC_TYPE (RTCRtpParameters)
 
 @synthesize transactionId = _transactionId;
 @synthesize rtcp = _rtcp;
@@ -33,30 +33,31 @@
     (const webrtc::RtpParameters &)nativeParameters {
   if (self = [self init]) {
     _transactionId = [NSString stringForStdString:nativeParameters.transaction_id];
-    _rtcp = [[RTCRtcpParameters alloc] initWithNativeParameters:nativeParameters.rtcp];
+    _rtcp =
+        [[RTC_OBJC_TYPE(RTCRtcpParameters) alloc] initWithNativeParameters:nativeParameters.rtcp];
 
     NSMutableArray *headerExtensions = [[NSMutableArray alloc] init];
     for (const auto &headerExtension : nativeParameters.header_extensions) {
-      [headerExtensions
-          addObject:[[RTCRtpHeaderExtension alloc] initWithNativeParameters:headerExtension]];
+      [headerExtensions addObject:[[RTC_OBJC_TYPE(RTCRtpHeaderExtension) alloc]
+                                      initWithNativeParameters:headerExtension]];
     }
     _headerExtensions = headerExtensions;
 
     NSMutableArray *encodings = [[NSMutableArray alloc] init];
     for (const auto &encoding : nativeParameters.encodings) {
-      [encodings addObject:[[RTCRtpEncodingParameters alloc]
+      [encodings addObject:[[RTC_OBJC_TYPE(RTCRtpEncodingParameters) alloc]
                                initWithNativeParameters:encoding]];
     }
     _encodings = encodings;
 
     NSMutableArray *codecs = [[NSMutableArray alloc] init];
     for (const auto &codec : nativeParameters.codecs) {
-      [codecs addObject:[[RTCRtpCodecParameters alloc]
-                            initWithNativeParameters:codec]];
+      [codecs
+          addObject:[[RTC_OBJC_TYPE(RTCRtpCodecParameters) alloc] initWithNativeParameters:codec]];
     }
     _codecs = codecs;
 
-    _degradationPreference = [RTCRtpParameters
+    _degradationPreference = [RTC_OBJC_TYPE(RTCRtpParameters)
         degradationPreferenceFromNativeDegradationPreference:nativeParameters
                                                                  .degradation_preference];
   }
@@ -67,17 +68,17 @@
   webrtc::RtpParameters parameters;
   parameters.transaction_id = [NSString stdStringForString:_transactionId];
   parameters.rtcp = [_rtcp nativeParameters];
-  for (RTCRtpHeaderExtension *headerExtension in _headerExtensions) {
+  for (RTC_OBJC_TYPE(RTCRtpHeaderExtension) * headerExtension in _headerExtensions) {
     parameters.header_extensions.push_back(headerExtension.nativeParameters);
   }
-  for (RTCRtpEncodingParameters *encoding in _encodings) {
+  for (RTC_OBJC_TYPE(RTCRtpEncodingParameters) * encoding in _encodings) {
     parameters.encodings.push_back(encoding.nativeParameters);
   }
-  for (RTCRtpCodecParameters *codec in _codecs) {
+  for (RTC_OBJC_TYPE(RTCRtpCodecParameters) * codec in _codecs) {
     parameters.codecs.push_back(codec.nativeParameters);
   }
   if (_degradationPreference) {
-    parameters.degradation_preference = [RTCRtpParameters
+    parameters.degradation_preference = [RTC_OBJC_TYPE(RTCRtpParameters)
         nativeDegradationPreferenceFromDegradationPreference:(RTCDegradationPreference)
                                                                  _degradationPreference.intValue];
   }
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver+Native.h b/sdk/objc/api/peerconnection/RTCRtpReceiver+Native.h
index e085529..c15ce70 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver+Native.h
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver+Native.h
@@ -18,13 +18,14 @@
 /**
  * This class extension exposes methods that work directly with injectable C++ components.
  */
-@interface RTCRtpReceiver ()
+@interface RTC_OBJC_TYPE (RTCRtpReceiver)
+()
 
-/** Sets a user defined frame decryptor that will decrypt the entire frame.
- * This will decrypt the entire frame using the user provided decryption
- * mechanism regardless of whether SRTP is enabled or not.
- */
-- (void)setFrameDecryptor:(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>)frameDecryptor;
+    /** Sets a user defined frame decryptor that will decrypt the entire frame.
+     * This will decrypt the entire frame using the user provided decryption
+     * mechanism regardless of whether SRTP is enabled or not.
+     */
+    - (void)setFrameDecryptor : (rtc::scoped_refptr<webrtc::FrameDecryptorInterface>)frameDecryptor;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver+Private.h b/sdk/objc/api/peerconnection/RTCRtpReceiver+Private.h
index 6f56739..6aed0b4 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver+Private.h
@@ -14,28 +14,30 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
 namespace webrtc {
 
 class RtpReceiverDelegateAdapter : public RtpReceiverObserverInterface {
  public:
-  RtpReceiverDelegateAdapter(RTCRtpReceiver* receiver);
+  RtpReceiverDelegateAdapter(RTC_OBJC_TYPE(RTCRtpReceiver) * receiver);
 
   void OnFirstPacketReceived(cricket::MediaType media_type) override;
 
  private:
-  __weak RTCRtpReceiver* receiver_;
+  __weak RTC_OBJC_TYPE(RTCRtpReceiver) * receiver_;
 };
 
 }  // namespace webrtc
 
-@interface RTCRtpReceiver ()
+@interface RTC_OBJC_TYPE (RTCRtpReceiver)
+()
 
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::RtpReceiverInterface> nativeRtpReceiver;
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::RtpReceiverInterface> nativeRtpReceiver;
 
 /** Initialize an RTCRtpReceiver with a native RtpReceiverInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory*)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeRtpReceiver:(rtc::scoped_refptr<webrtc::RtpReceiverInterface>)nativeRtpReceiver
     NS_DESIGNATED_INITIALIZER;
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver.h b/sdk/objc/api/peerconnection/RTCRtpReceiver.h
index 7a7dace..7ab2cfa 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver.h
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver.h
@@ -23,33 +23,36 @@
   RTCRtpMediaTypeData,
 };
 
-@class RTCRtpReceiver;
+@class RTC_OBJC_TYPE(RTCRtpReceiver);
 
 RTC_OBJC_EXPORT
-@protocol RTCRtpReceiverDelegate <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCRtpReceiverDelegate)<NSObject>
 
-/** Called when the first RTP packet is received.
- *
- *  Note: Currently if there are multiple RtpReceivers of the same media type,
- *  they will all call OnFirstPacketReceived at once.
- *
- *  For example, if we create three audio receivers, A/B/C, they will listen to
- *  the same signal from the underneath network layer. Whenever the first audio packet
- *  is received, the underneath signal will be fired. All the receivers A/B/C will be
- *  notified and the callback of the receiver's delegate will be called.
- *
- *  The process is the same for video receivers.
- */
-- (void)rtpReceiver:(RTCRtpReceiver *)rtpReceiver
-    didReceiveFirstPacketForMediaType:(RTCRtpMediaType)mediaType;
+    /** Called when the first RTP packet is received.
+     *
+     *  Note: Currently if there are multiple RtpReceivers of the same media type,
+     *  they will all call OnFirstPacketReceived at once.
+     *
+     *  For example, if we create three audio receivers, A/B/C, they will listen to
+     *  the same signal from the underneath network layer. Whenever the first audio packet
+     *  is received, the underneath signal will be fired. All the receivers A/B/C will be
+     *  notified and the callback of the receiver's delegate will be called.
+     *
+     *  The process is the same for video receivers.
+     */
+    - (void)rtpReceiver
+    : (RTC_OBJC_TYPE(RTCRtpReceiver) *)rtpReceiver didReceiveFirstPacketForMediaType
+    : (RTCRtpMediaType)mediaType;
 
 @end
 
 RTC_OBJC_EXPORT
-@protocol RTCRtpReceiver <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCRtpReceiver)<NSObject>
 
-/** A unique identifier for this receiver. */
-@property(nonatomic, readonly) NSString *receiverId;
+    /** A unique identifier for this receiver. */
+    @property(nonatomic, readonly) NSString *receiverId;
 
 /** The currently active RTCRtpParameters, as defined in
  *  https://www.w3.org/TR/webrtc/#idl-def-RTCRtpParameters.
@@ -58,22 +61,22 @@
  *  but this API also applies them to receivers, similar to ORTC:
  *  http://ortc.org/wp-content/uploads/2016/03/ortc.html#rtcrtpparameters*.
  */
-@property(nonatomic, readonly) RTCRtpParameters *parameters;
+@property(nonatomic, readonly) RTC_OBJC_TYPE(RTCRtpParameters) * parameters;
 
 /** The RTCMediaStreamTrack associated with the receiver.
  *  Note: reading this property returns a new instance of
  *  RTCMediaStreamTrack. Use isEqual: instead of == to compare
  *  RTCMediaStreamTrack instances.
  */
-@property(nonatomic, readonly, nullable) RTCMediaStreamTrack *track;
+@property(nonatomic, readonly, nullable) RTC_OBJC_TYPE(RTCMediaStreamTrack) * track;
 
 /** The delegate for this RtpReceiver. */
-@property(nonatomic, weak) id<RTCRtpReceiverDelegate> delegate;
+@property(nonatomic, weak) id<RTC_OBJC_TYPE(RTCRtpReceiverDelegate)> delegate;
 
 @end
 
 RTC_OBJC_EXPORT
-@interface RTCRtpReceiver : NSObject <RTCRtpReceiver>
+@interface RTC_OBJC_TYPE (RTCRtpReceiver) : NSObject <RTC_OBJC_TYPE(RTCRtpReceiver)>
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpReceiver.mm b/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
index deeb4cb..3e00935 100644
--- a/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpReceiver.mm
@@ -20,8 +20,7 @@
 
 namespace webrtc {
 
-RtpReceiverDelegateAdapter::RtpReceiverDelegateAdapter(
-    RTCRtpReceiver *receiver) {
+RtpReceiverDelegateAdapter::RtpReceiverDelegateAdapter(RTC_OBJC_TYPE(RTCRtpReceiver) * receiver) {
   RTC_CHECK(receiver);
   receiver_ = receiver;
 }
@@ -29,15 +28,15 @@
 void RtpReceiverDelegateAdapter::OnFirstPacketReceived(
     cricket::MediaType media_type) {
   RTCRtpMediaType packet_media_type =
-      [RTCRtpReceiver mediaTypeForNativeMediaType:media_type];
-  RTCRtpReceiver *receiver = receiver_;
+      [RTC_OBJC_TYPE(RTCRtpReceiver) mediaTypeForNativeMediaType:media_type];
+  RTC_OBJC_TYPE(RTCRtpReceiver) *receiver = receiver_;
   [receiver.delegate rtpReceiver:receiver didReceiveFirstPacketForMediaType:packet_media_type];
 }
 
 }  // namespace webrtc
 
-@implementation RTCRtpReceiver {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCRtpReceiver) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   rtc::scoped_refptr<webrtc::RtpReceiverInterface> _nativeRtpReceiver;
   std::unique_ptr<webrtc::RtpReceiverDelegateAdapter> _observer;
 }
@@ -48,23 +47,24 @@
   return [NSString stringForStdString:_nativeRtpReceiver->id()];
 }
 
-- (RTCRtpParameters *)parameters {
-  return [[RTCRtpParameters alloc]
+- (RTC_OBJC_TYPE(RTCRtpParameters) *)parameters {
+  return [[RTC_OBJC_TYPE(RTCRtpParameters) alloc]
       initWithNativeParameters:_nativeRtpReceiver->GetParameters()];
 }
 
-- (nullable RTCMediaStreamTrack *)track {
+- (nullable RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
     _nativeRtpReceiver->track());
   if (nativeTrack) {
-    return [RTCMediaStreamTrack mediaTrackForNativeTrack:nativeTrack factory:_factory];
+    return [RTC_OBJC_TYPE(RTCMediaStreamTrack) mediaTrackForNativeTrack:nativeTrack
+                                                                factory:_factory];
   }
   return nil;
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCRtpReceiver {\n  receiverId: %@\n}",
-      self.receiverId];
+  return [NSString
+      stringWithFormat:@"RTC_OBJC_TYPE(RTCRtpReceiver) {\n  receiverId: %@\n}", self.receiverId];
 }
 
 - (void)dealloc {
@@ -83,7 +83,7 @@
   if (![object isMemberOfClass:[self class]]) {
     return NO;
   }
-  RTCRtpReceiver *receiver = (RTCRtpReceiver *)object;
+  RTC_OBJC_TYPE(RTCRtpReceiver) *receiver = (RTC_OBJC_TYPE(RTCRtpReceiver) *)object;
   return _nativeRtpReceiver == receiver.nativeRtpReceiver;
 }
 
@@ -103,14 +103,13 @@
   return _nativeRtpReceiver;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeRtpReceiver:
                   (rtc::scoped_refptr<webrtc::RtpReceiverInterface>)nativeRtpReceiver {
   if (self = [super init]) {
     _factory = factory;
     _nativeRtpReceiver = nativeRtpReceiver;
-    RTCLogInfo(
-        @"RTCRtpReceiver(%p): created receiver: %@", self, self.description);
+    RTCLogInfo(@"RTC_OBJC_TYPE(RTCRtpReceiver)(%p): created receiver: %@", self, self.description);
     _observer.reset(new webrtc::RtpReceiverDelegateAdapter(self));
     _nativeRtpReceiver->SetObserver(_observer.get());
   }
diff --git a/sdk/objc/api/peerconnection/RTCRtpSender+Native.h b/sdk/objc/api/peerconnection/RTCRtpSender+Native.h
index 89a691c..249d5c5 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender+Native.h
+++ b/sdk/objc/api/peerconnection/RTCRtpSender+Native.h
@@ -18,14 +18,15 @@
 /**
  * This class extension exposes methods that work directly with injectable C++ components.
  */
-@interface RTCRtpSender ()
+@interface RTC_OBJC_TYPE (RTCRtpSender)
+()
 
-/** Sets a defined frame encryptor that will encrypt the entire frame
- * before it is sent across the network. This will encrypt the entire frame
- * using the user provided encryption mechanism regardless of whether SRTP is
- * enabled or not.
- */
-- (void)setFrameEncryptor:(rtc::scoped_refptr<webrtc::FrameEncryptorInterface>)frameEncryptor;
+    /** Sets a defined frame encryptor that will encrypt the entire frame
+     * before it is sent across the network. This will encrypt the entire frame
+     * using the user provided encryption mechanism regardless of whether SRTP is
+     * enabled or not.
+     */
+    - (void)setFrameEncryptor : (rtc::scoped_refptr<webrtc::FrameEncryptorInterface>)frameEncryptor;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpSender+Private.h b/sdk/objc/api/peerconnection/RTCRtpSender+Private.h
index 389b833..6fdb42b 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpSender+Private.h
@@ -14,14 +14,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
-@interface RTCRtpSender ()
+@interface RTC_OBJC_TYPE (RTCRtpSender)
+()
 
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::RtpSenderInterface> nativeRtpSender;
+    @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::RtpSenderInterface> nativeRtpSender;
 
 /** Initialize an RTCRtpSender with a native RtpSenderInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory*)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                 nativeRtpSender:(rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender
     NS_DESIGNATED_INITIALIZER;
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpSender.h b/sdk/objc/api/peerconnection/RTCRtpSender.h
index c03b4cc..41bb083 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender.h
+++ b/sdk/objc/api/peerconnection/RTCRtpSender.h
@@ -18,33 +18,34 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@protocol RTCRtpSender <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCRtpSender)<NSObject>
 
-/** A unique identifier for this sender. */
-@property(nonatomic, readonly) NSString *senderId;
+    /** A unique identifier for this sender. */
+    @property(nonatomic, readonly) NSString *senderId;
 
 /** The currently active RTCRtpParameters, as defined in
  *  https://www.w3.org/TR/webrtc/#idl-def-RTCRtpParameters.
  */
-@property(nonatomic, copy) RTCRtpParameters *parameters;
+@property(nonatomic, copy) RTC_OBJC_TYPE(RTCRtpParameters) * parameters;
 
 /** The RTCMediaStreamTrack associated with the sender.
  *  Note: reading this property returns a new instance of
  *  RTCMediaStreamTrack. Use isEqual: instead of == to compare
  *  RTCMediaStreamTrack instances.
  */
-@property(nonatomic, copy, nullable) RTCMediaStreamTrack *track;
+@property(nonatomic, copy, nullable) RTC_OBJC_TYPE(RTCMediaStreamTrack) * track;
 
 /** IDs of streams associated with the RTP sender */
 @property(nonatomic, copy) NSArray<NSString *> *streamIds;
 
 /** The RTCDtmfSender accociated with the RTP sender. */
-@property(nonatomic, readonly, nullable) id<RTCDtmfSender> dtmfSender;
+@property(nonatomic, readonly, nullable) id<RTC_OBJC_TYPE(RTCDtmfSender)> dtmfSender;
 
 @end
 
 RTC_OBJC_EXPORT
-@interface RTCRtpSender : NSObject <RTCRtpSender>
+@interface RTC_OBJC_TYPE (RTCRtpSender) : NSObject <RTC_OBJC_TYPE(RTCRtpSender)>
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpSender.mm b/sdk/objc/api/peerconnection/RTCRtpSender.mm
index d292651..1ca9360 100644
--- a/sdk/objc/api/peerconnection/RTCRtpSender.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpSender.mm
@@ -19,8 +19,8 @@
 
 #include "api/media_stream_interface.h"
 
-@implementation RTCRtpSender {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCRtpSender) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   rtc::scoped_refptr<webrtc::RtpSenderInterface> _nativeRtpSender;
 }
 
@@ -30,30 +30,30 @@
   return [NSString stringForStdString:_nativeRtpSender->id()];
 }
 
-- (RTCRtpParameters *)parameters {
-  return [[RTCRtpParameters alloc]
+- (RTC_OBJC_TYPE(RTCRtpParameters) *)parameters {
+  return [[RTC_OBJC_TYPE(RTCRtpParameters) alloc]
       initWithNativeParameters:_nativeRtpSender->GetParameters()];
 }
 
-- (void)setParameters:(RTCRtpParameters *)parameters {
+- (void)setParameters:(RTC_OBJC_TYPE(RTCRtpParameters) *)parameters {
   if (!_nativeRtpSender->SetParameters(parameters.nativeParameters).ok()) {
-    RTCLogError(@"RTCRtpSender(%p): Failed to set parameters: %@", self,
-        parameters);
+    RTCLogError(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): Failed to set parameters: %@", self, parameters);
   }
 }
 
-- (RTCMediaStreamTrack *)track {
+- (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
     _nativeRtpSender->track());
   if (nativeTrack) {
-    return [RTCMediaStreamTrack mediaTrackForNativeTrack:nativeTrack factory:_factory];
+    return [RTC_OBJC_TYPE(RTCMediaStreamTrack) mediaTrackForNativeTrack:nativeTrack
+                                                                factory:_factory];
   }
   return nil;
 }
 
-- (void)setTrack:(RTCMediaStreamTrack *)track {
+- (void)setTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
   if (!_nativeRtpSender->SetTrack(track.nativeTrack)) {
-    RTCLogError(@"RTCRtpSender(%p): Failed to set track %@", self, track);
+    RTCLogError(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): Failed to set track %@", self, track);
   }
 }
 
@@ -75,8 +75,8 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCRtpSender {\n  senderId: %@\n}",
-      self.senderId];
+  return [NSString
+      stringWithFormat:@"RTC_OBJC_TYPE(RTCRtpSender) {\n  senderId: %@\n}", self.senderId];
 }
 
 - (BOOL)isEqual:(id)object {
@@ -89,7 +89,7 @@
   if (![object isMemberOfClass:[self class]]) {
     return NO;
   }
-  RTCRtpSender *sender = (RTCRtpSender *)object;
+  RTC_OBJC_TYPE(RTCRtpSender) *sender = (RTC_OBJC_TYPE(RTCRtpSender) *)object;
   return _nativeRtpSender == sender.nativeRtpSender;
 }
 
@@ -109,7 +109,7 @@
   return _nativeRtpSender;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                 nativeRtpSender:(rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
   NSParameterAssert(factory);
   NSParameterAssert(nativeRtpSender);
@@ -119,9 +119,10 @@
     rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender(
         _nativeRtpSender->GetDtmfSender());
     if (nativeDtmfSender) {
-      _dtmfSender = [[RTCDtmfSender alloc] initWithNativeDtmfSender:nativeDtmfSender];
+      _dtmfSender =
+          [[RTC_OBJC_TYPE(RTCDtmfSender) alloc] initWithNativeDtmfSender:nativeDtmfSender];
     }
-    RTCLogInfo(@"RTCRtpSender(%p): created sender: %@", self, self.description);
+    RTCLogInfo(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): created sender: %@", self, self.description);
   }
   return self;
 }
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver+Private.h b/sdk/objc/api/peerconnection/RTCRtpTransceiver+Private.h
index d7f6b58..65d45fb 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver+Private.h
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver+Private.h
@@ -14,21 +14,23 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTCPeerConnectionFactory;
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
 
-@interface RTCRtpTransceiverInit ()
+@interface RTC_OBJC_TYPE (RTCRtpTransceiverInit)
+()
 
-@property(nonatomic, readonly) webrtc::RtpTransceiverInit nativeInit;
+    @property(nonatomic, readonly) webrtc::RtpTransceiverInit nativeInit;
 
 @end
 
-@interface RTCRtpTransceiver ()
+@interface RTC_OBJC_TYPE (RTCRtpTransceiver)
+()
 
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::RtpTransceiverInterface>
-    nativeRtpTransceiver;
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::RtpTransceiverInterface> nativeRtpTransceiver;
 
 /** Initialize an RTCRtpTransceiver with a native RtpTransceiverInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory*)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
            nativeRtpTransceiver:
                (rtc::scoped_refptr<webrtc::RtpTransceiverInterface>)nativeRtpTransceiver
     NS_DESIGNATED_INITIALIZER;
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
index 968dba3..f8996cc 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
@@ -30,7 +30,7 @@
  *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiverinit
  */
 RTC_OBJC_EXPORT
-@interface RTCRtpTransceiverInit : NSObject
+@interface RTC_OBJC_TYPE (RTCRtpTransceiverInit) : NSObject
 
 /** Direction of the RTCRtpTransceiver. See RTCRtpTransceiver.direction. */
 @property(nonatomic) RTCRtpTransceiverDirection direction;
@@ -39,14 +39,14 @@
 @property(nonatomic) NSArray<NSString *> *streamIds;
 
 /** TODO(bugs.webrtc.org/7600): Not implemented. */
-@property(nonatomic) NSArray<RTCRtpEncodingParameters *> *sendEncodings;
+@property(nonatomic) NSArray<RTC_OBJC_TYPE(RTCRtpEncodingParameters) *> *sendEncodings;
 
 @end
 
-@class RTCRtpTransceiver;
+@class RTC_OBJC_TYPE(RTCRtpTransceiver);
 
-/** The RTCRtpTransceiver maps to the RTCRtpTransceiver defined by the WebRTC
- *  specification. A transceiver represents a combination of an RTCRtpSender
+/** The RTCRtpTransceiver maps to the RTCRtpTransceiver defined by the
+ *  WebRTC specification. A transceiver represents a combination of an RTCRtpSender
  *  and an RTCRtpReceiver that share a common mid. As defined in JSEP, an
  *  RTCRtpTransceiver is said to be associated with a media description if its
  *  mid property is non-nil; otherwise, it is said to be disassociated.
@@ -59,12 +59,13 @@
  *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver
  */
 RTC_OBJC_EXPORT
-@protocol RTCRtpTransceiver <NSObject>
+@protocol RTC_OBJC_TYPE
+(RTCRtpTransceiver)<NSObject>
 
-/** Media type of the transceiver. The sender and receiver will also have this
- *  type.
- */
-@property(nonatomic, readonly) RTCRtpMediaType mediaType;
+    /** Media type of the transceiver. The sender and receiver will also have this
+     *  type.
+     */
+    @property(nonatomic, readonly) RTCRtpMediaType mediaType;
 
 /** The mid attribute is the mid negotiated and present in the local and
  *  remote descriptions. Before negotiation is complete, the mid value may be
@@ -78,14 +79,14 @@
  *  present, regardless of the direction of media.
  *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-sender
  */
-@property(nonatomic, readonly) RTCRtpSender *sender;
+@property(nonatomic, readonly) RTC_OBJC_TYPE(RTCRtpSender) * sender;
 
 /** The receiver attribute exposes the RTCRtpReceiver corresponding to the RTP
  *  media that may be received with the transceiver's mid. The receiver is
  *  always present, regardless of the direction of media.
  *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-receiver
  */
-@property(nonatomic, readonly) RTCRtpReceiver *receiver;
+@property(nonatomic, readonly) RTC_OBJC_TYPE(RTCRtpReceiver) * receiver;
 
 /** The isStopped attribute indicates that the sender of this transceiver will
  *  no longer send, and that the receiver will no longer receive. It is true if
@@ -121,7 +122,7 @@
 @end
 
 RTC_OBJC_EXPORT
-@interface RTCRtpTransceiver : NSObject <RTCRtpTransceiver>
+@interface RTC_OBJC_TYPE (RTCRtpTransceiver) : NSObject <RTC_OBJC_TYPE(RTCRtpTransceiver)>
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
index 74ea456..2995e5f 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
@@ -17,7 +17,7 @@
 #import "base/RTCLogging.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCRtpTransceiverInit
+@implementation RTC_OBJC_TYPE (RTCRtpTransceiverInit)
 
 @synthesize direction = _direction;
 @synthesize streamIds = _streamIds;
@@ -32,11 +32,12 @@
 
 - (webrtc::RtpTransceiverInit)nativeInit {
   webrtc::RtpTransceiverInit init;
-  init.direction = [RTCRtpTransceiver nativeRtpTransceiverDirectionFromDirection:_direction];
+  init.direction =
+      [RTC_OBJC_TYPE(RTCRtpTransceiver) nativeRtpTransceiverDirectionFromDirection:_direction];
   for (NSString *streamId in _streamIds) {
     init.stream_ids.push_back([streamId UTF8String]);
   }
-  for (RTCRtpEncodingParameters *sendEncoding in _sendEncodings) {
+  for (RTC_OBJC_TYPE(RTCRtpEncodingParameters) * sendEncoding in _sendEncodings) {
     init.send_encodings.push_back(sendEncoding.nativeParameters);
   }
   return init;
@@ -44,13 +45,14 @@
 
 @end
 
-@implementation RTCRtpTransceiver {
-  RTCPeerConnectionFactory *_factory;
+@implementation RTC_OBJC_TYPE (RTCRtpTransceiver) {
+  RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
   rtc::scoped_refptr<webrtc::RtpTransceiverInterface> _nativeRtpTransceiver;
 }
 
 - (RTCRtpMediaType)mediaType {
-  return [RTCRtpReceiver mediaTypeForNativeMediaType:_nativeRtpTransceiver->media_type()];
+  return [RTC_OBJC_TYPE(RTCRtpReceiver)
+      mediaTypeForNativeMediaType:_nativeRtpTransceiver->media_type()];
 }
 
 - (NSString *)mid {
@@ -69,18 +71,18 @@
 }
 
 - (RTCRtpTransceiverDirection)direction {
-  return [RTCRtpTransceiver
+  return [RTC_OBJC_TYPE(RTCRtpTransceiver)
       rtpTransceiverDirectionFromNativeDirection:_nativeRtpTransceiver->direction()];
 }
 
 - (void)setDirection:(RTCRtpTransceiverDirection)direction {
   _nativeRtpTransceiver->SetDirection(
-      [RTCRtpTransceiver nativeRtpTransceiverDirectionFromDirection:direction]);
+      [RTC_OBJC_TYPE(RTCRtpTransceiver) nativeRtpTransceiverDirectionFromDirection:direction]);
 }
 
 - (BOOL)currentDirection:(RTCRtpTransceiverDirection *)currentDirectionOut {
   if (_nativeRtpTransceiver->current_direction()) {
-    *currentDirectionOut = [RTCRtpTransceiver
+    *currentDirectionOut = [RTC_OBJC_TYPE(RTCRtpTransceiver)
         rtpTransceiverDirectionFromNativeDirection:*_nativeRtpTransceiver->current_direction()];
     return YES;
   } else {
@@ -94,7 +96,9 @@
 
 - (NSString *)description {
   return [NSString
-      stringWithFormat:@"RTCRtpTransceiver {\n  sender: %@\n  receiver: %@\n}", _sender, _receiver];
+      stringWithFormat:@"RTC_OBJC_TYPE(RTCRtpTransceiver) {\n  sender: %@\n  receiver: %@\n}",
+                       _sender,
+                       _receiver];
 }
 
 - (BOOL)isEqual:(id)object {
@@ -107,7 +111,7 @@
   if (![object isMemberOfClass:[self class]]) {
     return NO;
   }
-  RTCRtpTransceiver *transceiver = (RTCRtpTransceiver *)object;
+  RTC_OBJC_TYPE(RTCRtpTransceiver) *transceiver = (RTC_OBJC_TYPE(RTCRtpTransceiver) *)object;
   return _nativeRtpTransceiver == transceiver.nativeRtpTransceiver;
 }
 
@@ -121,7 +125,7 @@
   return _nativeRtpTransceiver;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
            nativeRtpTransceiver:
                (rtc::scoped_refptr<webrtc::RtpTransceiverInterface>)nativeRtpTransceiver {
   NSParameterAssert(factory);
@@ -129,11 +133,13 @@
   if (self = [super init]) {
     _factory = factory;
     _nativeRtpTransceiver = nativeRtpTransceiver;
-    _sender = [[RTCRtpSender alloc] initWithFactory:_factory
-                                    nativeRtpSender:nativeRtpTransceiver->sender()];
-    _receiver = [[RTCRtpReceiver alloc] initWithFactory:_factory
-                                      nativeRtpReceiver:nativeRtpTransceiver->receiver()];
-    RTCLogInfo(@"RTCRtpTransceiver(%p): created transceiver: %@", self, self.description);
+    _sender = [[RTC_OBJC_TYPE(RTCRtpSender) alloc] initWithFactory:_factory
+                                                   nativeRtpSender:nativeRtpTransceiver->sender()];
+    _receiver =
+        [[RTC_OBJC_TYPE(RTCRtpReceiver) alloc] initWithFactory:_factory
+                                             nativeRtpReceiver:nativeRtpTransceiver->receiver()];
+    RTCLogInfo(
+        @"RTC_OBJC_TYPE(RTCRtpTransceiver)(%p): created transceiver: %@", self, self.description);
   }
   return self;
 }
diff --git a/sdk/objc/api/peerconnection/RTCSessionDescription+Private.h b/sdk/objc/api/peerconnection/RTCSessionDescription+Private.h
index cc255cd..0f0a06a 100644
--- a/sdk/objc/api/peerconnection/RTCSessionDescription+Private.h
+++ b/sdk/objc/api/peerconnection/RTCSessionDescription+Private.h
@@ -14,14 +14,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCSessionDescription ()
+@interface RTC_OBJC_TYPE (RTCSessionDescription)
+()
 
-/**
- * The native SessionDescriptionInterface representation of this
- * RTCSessionDescription object. This is needed to pass to the underlying C++
- * APIs.
- */
-@property(nonatomic, readonly, nullable) webrtc::SessionDescriptionInterface *nativeDescription;
+    /**
+     * The native SessionDescriptionInterface representation of this
+     * RTCSessionDescription object. This is needed to pass to the underlying C++
+     * APIs.
+     */
+    @property(nonatomic, readonly, nullable) webrtc::SessionDescriptionInterface *nativeDescription;
 
 /**
  * Initialize an RTCSessionDescription from a native
diff --git a/sdk/objc/api/peerconnection/RTCSessionDescription.h b/sdk/objc/api/peerconnection/RTCSessionDescription.h
index b9bcab1..6bd118d 100644
--- a/sdk/objc/api/peerconnection/RTCSessionDescription.h
+++ b/sdk/objc/api/peerconnection/RTCSessionDescription.h
@@ -25,7 +25,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 RTC_OBJC_EXPORT
-@interface RTCSessionDescription : NSObject
+@interface RTC_OBJC_TYPE (RTCSessionDescription) : NSObject
 
 /** The type of session description. */
 @property(nonatomic, readonly) RTCSdpType type;
diff --git a/sdk/objc/api/peerconnection/RTCSessionDescription.mm b/sdk/objc/api/peerconnection/RTCSessionDescription.mm
index 21e5e42..a62870e 100644
--- a/sdk/objc/api/peerconnection/RTCSessionDescription.mm
+++ b/sdk/objc/api/peerconnection/RTCSessionDescription.mm
@@ -15,7 +15,7 @@
 
 #include "rtc_base/checks.h"
 
-@implementation RTCSessionDescription
+@implementation RTC_OBJC_TYPE (RTCSessionDescription)
 
 @synthesize type = _type;
 @synthesize sdp = _sdp;
@@ -40,7 +40,7 @@
 }
 
 - (NSString *)description {
-  return [NSString stringWithFormat:@"RTCSessionDescription:\n%@\n%@",
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCSessionDescription):\n%@\n%@",
                                     [[self class] stringForType:_type],
                                     _sdp];
 }
diff --git a/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.h b/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.h
index 9c2178f..5eff996 100644
--- a/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.h
+++ b/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.h
@@ -15,9 +15,10 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /* Interface for converting to/from internal C++ formats. */
-@interface RTCVideoCodecInfo (Private)
+@interface RTC_OBJC_TYPE (RTCVideoCodecInfo)
+(Private)
 
-- (instancetype)initWithNativeSdpVideoFormat:(webrtc::SdpVideoFormat)format;
+    - (instancetype)initWithNativeSdpVideoFormat : (webrtc::SdpVideoFormat)format;
 - (webrtc::SdpVideoFormat)nativeSdpVideoFormat;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.mm b/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.mm
index 21aacf6..2eb8d36 100644
--- a/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.mm
@@ -12,9 +12,10 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCVideoCodecInfo (Private)
+@implementation RTC_OBJC_TYPE (RTCVideoCodecInfo)
+(Private)
 
-- (instancetype)initWithNativeSdpVideoFormat:(webrtc::SdpVideoFormat)format {
+    - (instancetype)initWithNativeSdpVideoFormat : (webrtc::SdpVideoFormat)format {
   NSMutableDictionary *params = [NSMutableDictionary dictionary];
   for (auto it = format.parameters.begin(); it != format.parameters.end(); ++it) {
     [params setObject:[NSString stringForStdString:it->second]
diff --git a/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.h b/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.h
index 5b06245..8323b18 100644
--- a/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.h
+++ b/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.h
@@ -15,9 +15,10 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /* Interfaces for converting to/from internal C++ formats. */
-@interface RTCVideoEncoderSettings (Private)
+@interface RTC_OBJC_TYPE (RTCVideoEncoderSettings)
+(Private)
 
-- (instancetype)initWithNativeVideoCodec:(const webrtc::VideoCodec *__nullable)videoCodec;
+    - (instancetype)initWithNativeVideoCodec : (const webrtc::VideoCodec *__nullable)videoCodec;
 - (webrtc::VideoCodec)nativeVideoCodec;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.mm b/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.mm
index fe7e690..dec3a61 100644
--- a/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoEncoderSettings+Private.mm
@@ -12,9 +12,10 @@
 
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCVideoEncoderSettings (Private)
+@implementation RTC_OBJC_TYPE (RTCVideoEncoderSettings)
+(Private)
 
-- (instancetype)initWithNativeVideoCodec:(const webrtc::VideoCodec *)videoCodec {
+    - (instancetype)initWithNativeVideoCodec : (const webrtc::VideoCodec *)videoCodec {
   if (self = [super init]) {
     if (videoCodec) {
       const char *codecName = CodecTypeToPayloadString(videoCodec->codecType);
diff --git a/sdk/objc/api/peerconnection/RTCVideoSource+Private.h b/sdk/objc/api/peerconnection/RTCVideoSource+Private.h
index 1827e6b..0390846 100644
--- a/sdk/objc/api/peerconnection/RTCVideoSource+Private.h
+++ b/sdk/objc/api/peerconnection/RTCVideoSource+Private.h
@@ -17,26 +17,27 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCVideoSource ()
+@interface RTC_OBJC_TYPE (RTCVideoSource)
+()
 
-/**
- * The VideoTrackSourceInterface object passed to this RTCVideoSource during
- * construction.
- */
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>
-    nativeVideoSource;
+    /**
+     * The VideoTrackSourceInterface object passed to this RTCVideoSource during
+     * construction.
+     */
+    @property(nonatomic,
+              readonly) rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> nativeVideoSource;
 
 /** Initialize an RTCVideoSource from a native VideoTrackSourceInterface. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeVideoSource:
                   (rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>)nativeVideoSource
     NS_DESIGNATED_INITIALIZER;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type NS_UNAVAILABLE;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                 signalingThread:(rtc::Thread *)signalingThread
                    workerThread:(rtc::Thread *)workerThread;
 
diff --git a/sdk/objc/api/peerconnection/RTCVideoSource.h b/sdk/objc/api/peerconnection/RTCVideoSource.h
index ec8a45c..cdef8b8 100644
--- a/sdk/objc/api/peerconnection/RTCVideoSource.h
+++ b/sdk/objc/api/peerconnection/RTCVideoSource.h
@@ -18,7 +18,7 @@
 
 RTC_OBJC_EXPORT
 
-@interface RTCVideoSource : RTCMediaSource <RTCVideoCapturerDelegate>
+@interface RTC_OBJC_TYPE (RTCVideoSource) : RTC_OBJC_TYPE(RTCMediaSource) <RTC_OBJC_TYPE(RTCVideoCapturerDelegate)>
 
 - (instancetype)init NS_UNAVAILABLE;
 
diff --git a/sdk/objc/api/peerconnection/RTCVideoSource.mm b/sdk/objc/api/peerconnection/RTCVideoSource.mm
index 789c843..15b0d6f 100644
--- a/sdk/objc/api/peerconnection/RTCVideoSource.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoSource.mm
@@ -24,11 +24,11 @@
 // TODO(magjed): Refactor this class and target ObjCVideoTrackSource only once
 // RTCAVFoundationVideoSource is gone. See http://crbug/webrtc/7177 for more
 // info.
-@implementation RTCVideoSource {
+@implementation RTC_OBJC_TYPE (RTCVideoSource) {
   rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> _nativeVideoSource;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeVideoSource:
                   (rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>)nativeVideoSource {
   RTC_DCHECK(factory);
@@ -41,14 +41,14 @@
   return self;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
               nativeMediaSource:(rtc::scoped_refptr<webrtc::MediaSourceInterface>)nativeMediaSource
                            type:(RTCMediaSourceType)type {
   RTC_NOTREACHED();
   return nil;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                 signalingThread:(rtc::Thread *)signalingThread
                    workerThread:(rtc::Thread *)workerThread {
   rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objCVideoTrackSource(
@@ -61,10 +61,11 @@
 
 - (NSString *)description {
   NSString *stateString = [[self class] stringForState:self.state];
-  return [NSString stringWithFormat:@"RTCVideoSource( %p ): %@", self, stateString];
+  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCVideoSource)( %p ): %@", self, stateString];
 }
 
-- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame {
+- (void)capturer:(RTC_OBJC_TYPE(RTCVideoCapturer) *)capturer
+    didCaptureVideoFrame:(RTC_OBJC_TYPE(RTCVideoFrame) *)frame {
   getObjCVideoSource(_nativeVideoSource)->OnCapturedFrame(frame);
 }
 
diff --git a/sdk/objc/api/peerconnection/RTCVideoTrack+Private.h b/sdk/objc/api/peerconnection/RTCVideoTrack+Private.h
index dd3d172..f1a8d7e 100644
--- a/sdk/objc/api/peerconnection/RTCVideoTrack+Private.h
+++ b/sdk/objc/api/peerconnection/RTCVideoTrack+Private.h
@@ -14,14 +14,15 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCVideoTrack ()
+@interface RTC_OBJC_TYPE (RTCVideoTrack)
+()
 
-/** VideoTrackInterface created or passed in at construction. */
-@property(nonatomic, readonly) rtc::scoped_refptr<webrtc::VideoTrackInterface> nativeVideoTrack;
+    /** VideoTrackInterface created or passed in at construction. */
+    @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::VideoTrackInterface> nativeVideoTrack;
 
 /** Initialize an RTCVideoTrack with its source and an id. */
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                         source:(RTCVideoSource *)source
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                         source:(RTC_OBJC_TYPE(RTCVideoSource) *)source
                         trackId:(NSString *)trackId;
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCVideoTrack.h b/sdk/objc/api/peerconnection/RTCVideoTrack.h
index b946889..5382b71 100644
--- a/sdk/objc/api/peerconnection/RTCVideoTrack.h
+++ b/sdk/objc/api/peerconnection/RTCVideoTrack.h
@@ -14,23 +14,24 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@protocol RTCVideoRenderer;
-@class RTCPeerConnectionFactory;
-@class RTCVideoSource;
+@protocol RTC_OBJC_TYPE
+(RTCVideoRenderer);
+@class RTC_OBJC_TYPE(RTCPeerConnectionFactory);
+@class RTC_OBJC_TYPE(RTCVideoSource);
 
 RTC_OBJC_EXPORT
-@interface RTCVideoTrack : RTCMediaStreamTrack
+@interface RTC_OBJC_TYPE (RTCVideoTrack) : RTC_OBJC_TYPE(RTCMediaStreamTrack)
 
 /** The video source for this video track. */
-@property(nonatomic, readonly) RTCVideoSource *source;
+@property(nonatomic, readonly) RTC_OBJC_TYPE(RTCVideoSource) *source;
 
 - (instancetype)init NS_UNAVAILABLE;
 
 /** Register a renderer that will render all frames received on this track. */
-- (void)addRenderer:(id<RTCVideoRenderer>)renderer;
+- (void)addRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)renderer;
 
 /** Deregister a renderer. */
-- (void)removeRenderer:(id<RTCVideoRenderer>)renderer;
+- (void)removeRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)renderer;
 
 @end
 
diff --git a/sdk/objc/api/peerconnection/RTCVideoTrack.mm b/sdk/objc/api/peerconnection/RTCVideoTrack.mm
index 77936a6..3f38dd5 100644
--- a/sdk/objc/api/peerconnection/RTCVideoTrack.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoTrack.mm
@@ -16,14 +16,14 @@
 #import "api/RTCVideoRendererAdapter+Private.h"
 #import "helpers/NSString+StdString.h"
 
-@implementation RTCVideoTrack {
+@implementation RTC_OBJC_TYPE (RTCVideoTrack) {
   NSMutableArray *_adapters;
 }
 
 @synthesize source = _source;
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
-                         source:(RTCVideoSource *)source
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
+                         source:(RTC_OBJC_TYPE(RTCVideoSource) *)source
                         trackId:(NSString *)trackId {
   NSParameterAssert(factory);
   NSParameterAssert(source);
@@ -38,7 +38,7 @@
   return self;
 }
 
-- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
+- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
                     nativeTrack:
                         (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeMediaTrack
                            type:(RTCMediaStreamTrackType)type {
@@ -57,19 +57,19 @@
   }
 }
 
-- (RTCVideoSource *)source {
+- (RTC_OBJC_TYPE(RTCVideoSource) *)source {
   if (!_source) {
     rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> source =
         self.nativeVideoTrack->GetSource();
     if (source) {
-      _source =
-          [[RTCVideoSource alloc] initWithFactory:self.factory nativeVideoSource:source.get()];
+      _source = [[RTC_OBJC_TYPE(RTCVideoSource) alloc] initWithFactory:self.factory
+                                                     nativeVideoSource:source.get()];
     }
   }
   return _source;
 }
 
-- (void)addRenderer:(id<RTCVideoRenderer>)renderer {
+- (void)addRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)renderer {
   // Make sure we don't have this renderer yet.
   for (RTCVideoRendererAdapter *adapter in _adapters) {
     if (adapter.videoRenderer == renderer) {
@@ -85,7 +85,7 @@
                                          rtc::VideoSinkWants());
 }
 
-- (void)removeRenderer:(id<RTCVideoRenderer>)renderer {
+- (void)removeRenderer:(id<RTC_OBJC_TYPE(RTCVideoRenderer)>)renderer {
   __block NSUInteger indexToRemove = NSNotFound;
   [_adapters enumerateObjectsUsingBlock:^(RTCVideoRendererAdapter *adapter,
                                           NSUInteger idx,
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderVP8.h b/sdk/objc/api/video_codec/RTCVideoDecoderVP8.h
index 00786dc..a118b25 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderVP8.h
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderVP8.h
@@ -14,12 +14,12 @@
 #import "RTCVideoDecoder.h"
 
 RTC_OBJC_EXPORT
-@interface RTCVideoDecoderVP8 : NSObject
+@interface RTC_OBJC_TYPE (RTCVideoDecoderVP8) : NSObject
 
 /* This returns a VP8 decoder that can be returned from a RTCVideoDecoderFactory injected into
  * RTCPeerConnectionFactory. Even though it implements the RTCVideoDecoder protocol, it can not be
  * used independently from the RTCPeerConnectionFactory.
  */
-+ (id<RTCVideoDecoder>)vp8Decoder;
++ (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)vp8Decoder;
 
 @end
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderVP8.mm b/sdk/objc/api/video_codec/RTCVideoDecoderVP8.mm
index 9750bd8..91ca3b7 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderVP8.mm
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderVP8.mm
@@ -16,9 +16,9 @@
 
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
 
-@implementation RTCVideoDecoderVP8
+@implementation RTC_OBJC_TYPE (RTCVideoDecoderVP8)
 
-+ (id<RTCVideoDecoder>)vp8Decoder {
++ (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)vp8Decoder {
   return [[RTCWrappedNativeVideoDecoder alloc]
       initWithNativeDecoder:std::unique_ptr<webrtc::VideoDecoder>(webrtc::VP8Decoder::Create())];
 }
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderVP9.h b/sdk/objc/api/video_codec/RTCVideoDecoderVP9.h
index b74c1ef..b3a1743 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderVP9.h
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderVP9.h
@@ -14,12 +14,12 @@
 #import "RTCVideoDecoder.h"
 
 RTC_OBJC_EXPORT
-@interface RTCVideoDecoderVP9 : NSObject
+@interface RTC_OBJC_TYPE (RTCVideoDecoderVP9) : NSObject
 
 /* This returns a VP9 decoder that can be returned from a RTCVideoDecoderFactory injected into
  * RTCPeerConnectionFactory. Even though it implements the RTCVideoDecoder protocol, it can not be
  * used independently from the RTCPeerConnectionFactory.
  */
-+ (id<RTCVideoDecoder>)vp9Decoder;
++ (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)vp9Decoder;
 
 @end
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderVP9.mm b/sdk/objc/api/video_codec/RTCVideoDecoderVP9.mm
index 48582fe..56041a2 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderVP9.mm
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderVP9.mm
@@ -16,9 +16,9 @@
 
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
 
-@implementation RTCVideoDecoderVP9
+@implementation RTC_OBJC_TYPE (RTCVideoDecoderVP9)
 
-+ (id<RTCVideoDecoder>)vp9Decoder {
++ (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)vp9Decoder {
   return [[RTCWrappedNativeVideoDecoder alloc]
       initWithNativeDecoder:std::unique_ptr<webrtc::VideoDecoder>(webrtc::VP9Decoder::Create())];
 }
diff --git a/sdk/objc/api/video_codec/RTCVideoEncoderVP8.h b/sdk/objc/api/video_codec/RTCVideoEncoderVP8.h
index 8d87a89..e136a5b 100644
--- a/sdk/objc/api/video_codec/RTCVideoEncoderVP8.h
+++ b/sdk/objc/api/video_codec/RTCVideoEncoderVP8.h
@@ -14,12 +14,12 @@
 #import "RTCVideoEncoder.h"
 
 RTC_OBJC_EXPORT
-@interface RTCVideoEncoderVP8 : NSObject
+@interface RTC_OBJC_TYPE (RTCVideoEncoderVP8) : NSObject
 
 /* This returns a VP8 encoder that can be returned from a RTCVideoEncoderFactory injected into
  * RTCPeerConnectionFactory. Even though it implements the RTCVideoEncoder protocol, it can not be
  * used independently from the RTCPeerConnectionFactory.
  */
-+ (id<RTCVideoEncoder>)vp8Encoder;
++ (id<RTC_OBJC_TYPE(RTCVideoEncoder)>)vp8Encoder;
 
 @end
diff --git a/sdk/objc/api/video_codec/RTCVideoEncoderVP8.mm b/sdk/objc/api/video_codec/RTCVideoEncoderVP8.mm
index 677f6dd..1355127 100644
--- a/sdk/objc/api/video_codec/RTCVideoEncoderVP8.mm
+++ b/sdk/objc/api/video_codec/RTCVideoEncoderVP8.mm
@@ -16,9 +16,9 @@
 
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
 
-@implementation RTCVideoEncoderVP8
+@implementation RTC_OBJC_TYPE (RTCVideoEncoderVP8)
 
-+ (id<RTCVideoEncoder>)vp8Encoder {
++ (id<RTC_OBJC_TYPE(RTCVideoEncoder)>)vp8Encoder {
   return [[RTCWrappedNativeVideoEncoder alloc]
       initWithNativeEncoder:std::unique_ptr<webrtc::VideoEncoder>(webrtc::VP8Encoder::Create())];
 }
diff --git a/sdk/objc/api/video_codec/RTCVideoEncoderVP9.h b/sdk/objc/api/video_codec/RTCVideoEncoderVP9.h
index 9efea4b..8f961ef 100644
--- a/sdk/objc/api/video_codec/RTCVideoEncoderVP9.h
+++ b/sdk/objc/api/video_codec/RTCVideoEncoderVP9.h
@@ -14,12 +14,12 @@
 #import "RTCVideoEncoder.h"
 
 RTC_OBJC_EXPORT
-@interface RTCVideoEncoderVP9 : NSObject
+@interface RTC_OBJC_TYPE (RTCVideoEncoderVP9) : NSObject
 
 /* This returns a VP9 encoder that can be returned from a RTCVideoEncoderFactory injected into
  * RTCPeerConnectionFactory. Even though it implements the RTCVideoEncoder protocol, it can not be
  * used independently from the RTCPeerConnectionFactory.
  */
-+ (id<RTCVideoEncoder>)vp9Encoder;
++ (id<RTC_OBJC_TYPE(RTCVideoEncoder)>)vp9Encoder;
 
 @end
diff --git a/sdk/objc/api/video_codec/RTCVideoEncoderVP9.mm b/sdk/objc/api/video_codec/RTCVideoEncoderVP9.mm
index a5d8408..ec9e75a 100644
--- a/sdk/objc/api/video_codec/RTCVideoEncoderVP9.mm
+++ b/sdk/objc/api/video_codec/RTCVideoEncoderVP9.mm
@@ -16,9 +16,9 @@
 
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
 
-@implementation RTCVideoEncoderVP9
+@implementation RTC_OBJC_TYPE (RTCVideoEncoderVP9)
 
-+ (id<RTCVideoEncoder>)vp9Encoder {
++ (id<RTC_OBJC_TYPE(RTCVideoEncoder)>)vp9Encoder {
   return [[RTCWrappedNativeVideoEncoder alloc]
       initWithNativeEncoder:std::unique_ptr<webrtc::VideoEncoder>(webrtc::VP9Encoder::Create())];
 }
diff --git a/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.h b/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.h
index b5694c7..2241c0c 100644
--- a/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.h
+++ b/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.h
@@ -15,7 +15,7 @@
 #include "api/video_codecs/video_decoder.h"
 #include "media/base/codec.h"
 
-@interface RTCWrappedNativeVideoDecoder : NSObject <RTCVideoDecoder>
+@interface RTCWrappedNativeVideoDecoder : NSObject <RTC_OBJC_TYPE (RTCVideoDecoder)>
 
 - (instancetype)initWithNativeDecoder:(std::unique_ptr<webrtc::VideoDecoder>)decoder;
 
diff --git a/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.mm b/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.mm
index dce479c..e4d8dc3 100644
--- a/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.mm
+++ b/sdk/objc/api/video_codec/RTCWrappedNativeVideoDecoder.mm
@@ -29,7 +29,7 @@
   return std::move(_wrappedDecoder);
 }
 
-#pragma mark - RTCVideoDecoder
+#pragma mark - RTC_OBJC_TYPE(RTCVideoDecoder)
 
 - (void)setCallback:(RTCVideoDecoderCallback)callback {
   RTC_NOTREACHED();
@@ -45,9 +45,9 @@
   return 0;
 }
 
-- (NSInteger)decode:(RTCEncodedImage *)encodedImage
+- (NSInteger)decode:(RTC_OBJC_TYPE(RTCEncodedImage) *)encodedImage
         missingFrames:(BOOL)missingFrames
-    codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
+    codecSpecificInfo:(nullable id<RTC_OBJC_TYPE(RTCCodecSpecificInfo)>)info
          renderTimeMs:(int64_t)renderTimeMs {
   RTC_NOTREACHED();
   return 0;
diff --git a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.h b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.h
index b4ef882..ec16793 100644
--- a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.h
+++ b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.h
@@ -16,7 +16,7 @@
 #include "api/video_codecs/video_encoder.h"
 #include "media/base/codec.h"
 
-@interface RTCWrappedNativeVideoEncoder : NSObject <RTCVideoEncoder>
+@interface RTCWrappedNativeVideoEncoder : NSObject <RTC_OBJC_TYPE (RTCVideoEncoder)>
 
 - (instancetype)initWithNativeEncoder:(std::unique_ptr<webrtc::VideoEncoder>)encoder;
 
diff --git a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm
index 9afd54f..6feecab 100644
--- a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm
+++ b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm
@@ -29,13 +29,13 @@
   return std::move(_wrappedEncoder);
 }
 
-#pragma mark - RTCVideoEncoder
+#pragma mark - RTC_OBJC_TYPE(RTCVideoEncoder)
 
 - (void)setCallback:(RTCVideoEncoderCallback)callback {
   RTC_NOTREACHED();
 }
 
-- (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings
+- (NSInteger)startEncodeWithSettings:(RTC_OBJC_TYPE(RTCVideoEncoderSettings) *)settings
                        numberOfCores:(int)numberOfCores {
   RTC_NOTREACHED();
   return 0;
@@ -46,8 +46,8 @@
   return 0;
 }
 
-- (NSInteger)encode:(RTCVideoFrame *)frame
-    codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info
+- (NSInteger)encode:(RTC_OBJC_TYPE(RTCVideoFrame) *)frame
+    codecSpecificInfo:(nullable id<RTC_OBJC_TYPE(RTCCodecSpecificInfo)>)info
            frameTypes:(NSArray<NSNumber *> *)frameTypes {
   RTC_NOTREACHED();
   return 0;
@@ -63,7 +63,7 @@
   return nil;
 }
 
-- (nullable RTCVideoEncoderQpThresholds *)scalingSettings {
+- (nullable RTC_OBJC_TYPE(RTCVideoEncoderQpThresholds) *)scalingSettings {
   RTC_NOTREACHED();
   return nil;
 }
diff --git a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h
index fad08c2..20dc807 100644
--- a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h
+++ b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h
@@ -14,7 +14,8 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface RTCI420Buffer () {
+@interface RTC_OBJC_TYPE (RTCI420Buffer)
+() {
  @protected
   rtc::scoped_refptr<webrtc::I420BufferInterface> _i420Buffer;
 }
diff --git a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.h b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.h
index 9a904f5..3afe209 100644
--- a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.h
+++ b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.h
@@ -17,7 +17,7 @@
 
 /** RTCI420Buffer implements the RTCI420Buffer protocol */
 RTC_OBJC_EXPORT
-@interface RTCI420Buffer : NSObject<RTCI420Buffer>
+@interface RTC_OBJC_TYPE (RTCI420Buffer) : NSObject<RTC_OBJC_TYPE(RTCI420Buffer)>
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm
index d9d5d15..f82f206 100644
--- a/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm
+++ b/sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer.mm
@@ -17,7 +17,7 @@
 #include "third_party/libyuv/include/libyuv.h"
 #endif
 
-@implementation RTCI420Buffer
+@implementation RTC_OBJC_TYPE (RTCI420Buffer)
 
 - (instancetype)initWithWidth:(int)width height:(int)height {
   if (self = [super init]) {
@@ -99,7 +99,7 @@
   return _i420Buffer->DataV();
 }
 
-- (id<RTCI420Buffer>)toI420 {
+- (id<RTC_OBJC_TYPE(RTCI420Buffer)>)toI420 {
   return self;
 }
 
diff --git a/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.h b/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.h
index 6cd5110..053a10a 100644
--- a/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.h
+++ b/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.h
@@ -18,7 +18,7 @@
 
 /** Mutable version of RTCI420Buffer */
 RTC_OBJC_EXPORT
-@interface RTCMutableI420Buffer : RTCI420Buffer<RTCMutableI420Buffer>
+@interface RTC_OBJC_TYPE (RTCMutableI420Buffer) : RTC_OBJC_TYPE(RTCI420Buffer)<RTC_OBJC_TYPE(RTCMutableI420Buffer)>
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.mm b/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.mm
index 5c6c1ff..1e669bc 100644
--- a/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.mm
+++ b/sdk/objc/api/video_frame_buffer/RTCNativeMutableI420Buffer.mm
@@ -14,7 +14,7 @@
 
 #include "api/video/i420_buffer.h"
 
-@implementation RTCMutableI420Buffer
+@implementation RTC_OBJC_TYPE (RTCMutableI420Buffer)
 
 - (uint8_t *)mutableDataY {
   return static_cast<webrtc::I420Buffer *>(_i420Buffer.get())->MutableDataY();