ARKit (Apple's iOS AR framework) and ARCore (Google's Android AR platform) are the two dominant mobile AR SDKs that enable developers to create immersive augmented reality experiences by blending digital content with the physical world. Both use Visual-Inertial Odometry (VIO), combining camera feeds with motion sensor data (accelerometer/gyroscope) to track device position and orientation in 3D space. The key mental model: AR is not "adding objects to a camera feed"—it's building a persistent spatial understanding of the real world where virtual content can interact with surfaces, lighting, and depth. This distinction separates compelling AR from novelty filters.
What This Cheat Sheet Covers
This topic spans 15 focused tables and 113 indexed concepts. Below is a complete table-by-table outline of this topic, spanning foundational concepts through advanced details.
Table 1: Plane Detection and Surface Tracking
Before you can place anything in AR, the device has to find the real-world surfaces to anchor it to — and that's what plane detection does. These rows cover the horizontal, vertical, and even diagonal surfaces both SDKs can identify, plus the practical details that determine whether a placement holds: boundary geometry, plane merging, and the tracking-state checks you should make before trusting a surface.
| Feature | Example | Description |
|---|---|---|
config.planeDetection = .horizontal// Detects floors, tables | • Identifies flat horizontal surfaces like floors, tables, or desks • both platforms support this as the most fundamental AR tracking mode for placing objects on surfaces | |
config.planeDetection = [.horizontal, .vertical]// Detects walls, doors | • Tracks vertical surfaces such as walls, doors, or windows • enables content placement on vertical structures for applications like artwork visualization or wall anchors | |
// ARKit 3.5+ only// Detects ramps, stairs | • Detects angled surfaces like ramps or staircases • ARKit-exclusive feature added in ARKit 3.5, not available in ARCore as of 2026. | |
if plane.parentPlane != nil { // This plane was merged | • ARCore automatically merges smaller detected planes into larger parent planes to reduce fragmentation • ARKit uses similar logic to unify adjacent surfaces into single trackables |