@@ -213,6 +213,8 @@ open class OktaOidcStateManager: NSObject, NSSecureCoding {
213213 }
214214
215215 let state : OktaOidcStateManager ?
216+ prepareKeyedArchiver ( )
217+
216218 if #available( iOS 11 , OSX 10 . 14 , * ) {
217219 state = ( try ? NSKeyedUnarchiver . unarchiveTopLevelObjectWithData ( encodedAuthState) ) as? OktaOidcStateManager
218220 } else {
@@ -221,6 +223,22 @@ open class OktaOidcStateManager: NSObject, NSSecureCoding {
221223
222224 return state
223225 }
226+
227+ /// This method can be removed in the future with release 4.0.0 or higher.
228+ /// Resolves OKTA-427089
229+ private static func prepareKeyedArchiver( ) {
230+ let classes = [ OKTAuthorizationRequest . self, OKTAuthorizationResponse . self,
231+ OKTAuthState . self, OKTEndSessionRequest . self,
232+ OKTEndSessionResponse . self, OKTRegistrationRequest . self,
233+ OKTRegistrationResponse . self, OKTServiceConfiguration . self,
234+ OKTServiceDiscovery . self, OKTTokenRequest . self,
235+ OKTTokenResponse . self]
236+
237+ for archivedClass in classes {
238+ let className = " \( archivedClass) " . replacingOccurrences ( of: " OKT " , with: " OID " )
239+ NSKeyedUnarchiver . setClass ( archivedClass, forClassName: className)
240+ }
241+ }
224242}
225243
226244internal extension OktaOidcStateManager {
0 commit comments