diff --git a/sdk/objc/api/peerconnection/RTCSessionDescription.h b/sdk/objc/api/peerconnection/RTCSessionDescription.h
index 8a9479d..0ef60cc 100644
--- a/sdk/objc/api/peerconnection/RTCSessionDescription.h
+++ b/sdk/objc/api/peerconnection/RTCSessionDescription.h
@@ -36,8 +36,10 @@
 
 - (instancetype)init NS_UNAVAILABLE;
 
-/** Initialize a session description with a type and SDP string. */
-- (instancetype)initWithType:(RTCSdpType)type sdp:(NSString *)sdp NS_DESIGNATED_INITIALIZER;
+/** Initialize a session description with a type and SDP string. Returns nil if the sdp is invalid.
+ */
+- (nullable instancetype)initWithType:(RTCSdpType)type
+                                  sdp:(NSString *)sdp NS_DESIGNATED_INITIALIZER;
 
 + (NSString *)stringForType:(RTCSdpType)type;
 
diff --git a/sdk/objc/api/peerconnection/RTCSessionDescription.mm b/sdk/objc/api/peerconnection/RTCSessionDescription.mm
index 9fd97fe..3e235b1 100644
--- a/sdk/objc/api/peerconnection/RTCSessionDescription.mm
+++ b/sdk/objc/api/peerconnection/RTCSessionDescription.mm
@@ -17,23 +17,45 @@
 
 @implementation RTC_OBJC_TYPE (RTCSessionDescription)
 
+@synthesize nativeDescription = _nativeDescription;
 @synthesize type = _type;
 @synthesize sdp = _sdp;
 
 + (NSString *)stringForType:(RTCSdpType)type {
-  std::string string = [[self class] stdStringForType:type];
+  std::string string = [self stdStringForType:type];
   return [NSString stringForStdString:string];
 }
 
 + (RTCSdpType)typeForString:(NSString *)string {
   std::string typeString = string.stdString;
-  return [[self class] typeForStdString:typeString];
+  return [self typeForStdString:typeString];
 }
 
-- (instancetype)initWithType:(RTCSdpType)type sdp:(NSString *)sdp {
++ (webrtc::SessionDescriptionInterface *)nativeDescriptionForString:(NSString *)sdp
+                                                               type:(RTCSdpType)type {
+  webrtc::SdpParseError error;
+
+  webrtc::SessionDescriptionInterface *description =
+      webrtc::CreateSessionDescription([self stdStringForType:type], sdp.stdString, &error);
+
+  if (!description) {
+    RTCLogError(@"Failed to create session description: %s\nline: %s",
+                error.description.c_str(),
+                error.line.c_str());
+  }
+
+  return description;
+}
+
+- (nullable instancetype)initWithType:(RTCSdpType)type sdp:(NSString *)sdp {
   if (self = [super init]) {
     _type = type;
     _sdp = [sdp copy];
+    _nativeDescription = [[self class] nativeDescriptionForString:_sdp type:_type];
+
+    if (_nativeDescription == nil) {
+      return nil;
+    }
   }
   return self;
 }
@@ -46,23 +68,6 @@
 
 #pragma mark - Private
 
-- (webrtc::SessionDescriptionInterface *)nativeDescription {
-  webrtc::SdpParseError error;
-
-  webrtc::SessionDescriptionInterface *description =
-      webrtc::CreateSessionDescription([[self class] stdStringForType:_type],
-                                       _sdp.stdString,
-                                       &error);
-
-  if (!description) {
-    RTCLogError(@"Failed to create session description: %s\nline: %s",
-                error.description.c_str(),
-                error.line.c_str());
-  }
-
-  return description;
-}
-
 - (instancetype)initWithNativeDescription:
     (const webrtc::SessionDescriptionInterface *)nativeDescription {
   NSParameterAssert(nativeDescription);
diff --git a/sdk/objc/unittests/RTCSessionDescriptionTest.mm b/sdk/objc/unittests/RTCSessionDescriptionTest.mm
index ee65649..1f8a75d 100644
--- a/sdk/objc/unittests/RTCSessionDescriptionTest.mm
+++ b/sdk/objc/unittests/RTCSessionDescriptionTest.mm
@@ -42,6 +42,13 @@
   EXPECT_EQ([self sdp].stdString, sdp);
 }
 
+- (void)testInvalidSessionDescriptionConversion {
+  RTC_OBJC_TYPE(RTCSessionDescription) *description =
+      [[RTC_OBJC_TYPE(RTCSessionDescription) alloc] initWithType:RTCSdpTypeAnswer sdp:@"invalid"];
+
+  EXPECT_EQ(nil, description);
+}
+
 - (void)testInitFromNativeSessionDescription {
   webrtc::SessionDescriptionInterface *nativeDescription;
 
@@ -135,6 +142,13 @@
   }
 }
 
+TEST(RTCSessionDescriptionTest, InvalidSessionDescriptionConversionTest) {
+  @autoreleasepool {
+    RTCSessionDescriptionTest *test = [[RTCSessionDescriptionTest alloc] init];
+    [test testInvalidSessionDescriptionConversion];
+  }
+}
+
 TEST(RTCSessionDescriptionTest, InitFromSessionDescriptionTest) {
   @autoreleasepool {
     RTCSessionDescriptionTest *test = [[RTCSessionDescriptionTest alloc] init];
