Why NSKeyedArchiver is Not Recommended for Simple Serialization?

Mohit Bhalla
1 min readFeb 12, 2025

--

  1. Overhead & Complexity
  • NSKeyedArchiver is designed for archiving complex object graphs, including NSObject subclasses.
  • For simple data types (e.g., String, Int, Dictionary, Array), using NSKeyedArchiver is overkill compared to alternatives like JSONEncoder or PropertyListEncoder.

2. Binary Format (Less Readable)

  • NSKeyedArchiver stores data in a binary format by default, making it difficult to read and debug.
  • JSON or Property Lists (plist) provide a more human-readable format.

3. Cross-Platform Limitations

The format used by NSKeyedArchiver is specific to Apple platforms.

  • JSON is more widely supported across different platforms and programming languages.

4. Security Concerns

Older versions of NSKeyedArchiver (before iOS 12) were vulnerable to security risks, as they could deserialize malicious data.

Apple introduced requiresSecureCoding = true to mitigate this, but using a safer alternative like JSON avoids these concerns.

5. Better Alternatives Available

. Use JSONEncoder / JSONDecoder for JSON-based serialization.

. Use PropertyListEncoder / PropertyListDecoder for plist serialization (when working with Dictionary or Array).

These methods are faster, safer, and more readable compared to NSKeyedArchiver.

Example Comparison

Using NSKeyedArchiver (Not Recommended For simple data types)

let data = try NSKeyedArchiver.archivedData(withRootObject: ["key": "value"], requiringSecureCoding: true)

Using JSONEncoder (Better Alternative)

let jsonData = try JSONEncoder().encode(["key": "value"])
  • ✅ More readable (jsonData can be converted to a String).
  • ✅ Works cross-platform.
  • ✅ Safer and simpler.

Conclusion

Avoid NSKeyedArchiver for simple serialization. Use JSONEncoder or PropertyListEncoder instead—they are faster, more secure, and easier to use.

--

--

Mohit Bhalla
Mohit Bhalla

Written by Mohit Bhalla

Principle Engineer iOS, Wynk, Airtel | ex Hindustan times

No responses yet