Фреймворк ARKit — платформа дополненной реальности от Apple, которая позволяет разработчикам создавать AR-приложения для iOS без глубоких знаний компьютерного зрения. По данным Apple ARKit Documentation, 2025, фреймворк использует Visual-Inertial Odometry для точного отслеживания положения устройства в пространстве без внешних маркеров. Семантическое понимание сцены позволяет распознавать горизонтальные и вертикальные плоскости, определять освещение и размещать виртуальные объекты в реальном окружении.
Главное
ARKit — фреймворк дополненной реальности от Apple, анонсированный на WWDC 2017 вместе с iOS 11. Он объединяет возможности камеры, процессора движения M-серии и нейронного движка A-чипов для создания иммерсивного AR-опыта без необходимости в специализированном оборудовании — только iPhone или iPad.
ARKit использует технологию Visual-Inertial Odometry (VIO), которая объединяет данные с камеры и инерциальных датчиков Core Motion для точного отслеживания движения устройства в пространстве. VIO позволяет фреймворку понимать, где находится устройство относительно окружения, без использования GPS или внешних маркеров.
По данным Apple WWDC 2024, ARKit 6 поддерживается на устройствах с чипом A12 и новее (iPhone XS, iPad Pro 2018+). Количество AR-приложений в App Store превысило 15 тысяч, а общая площадь распознанных плоскостей во всех AR-сессиях превышает 100 миллиардов квадратных метров.
За шесть версий ARKit получил значительные улучшения: ARKit 1.0 (iOS 11) — базовое отслеживание и распознавание плоскостей; ARKit 2.0 — совместные AR-сессии через ARWorldMap и обнаружение 3D-объектов; ARKit 3.0 — отслеживание тела человека, сегментация людей и одновременные камеры переднего и заднего вида.
ARKit 4.0 представил LiDAR Scanner для мгновенного определения глубины и непрозрачности объектов, а также Location Anchor для привязки AR-контента к GPS-координатам. ARKit 6 добавил 4K-видео с HDR, Plane Estimation с помощью LiDAR и улучшенную обработку окклюзии.
import ARKit
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
configuration.environmentTexturing = .automatic
let arView = ARSCNView(frame: view.bounds)
arView.session.run(configuration)
arView.debugOptions = [.showFeaturePoints]
view.addSubview(arView)
ARKit работает через цикл AR-сессии, которая запускается с конфигурацией и непрерывно анализирует видеопоток с камеры. Каждый кадр фреймворк вычисляет положение устройства (6 степеней свободы), обновляет карту распознанных плоскостей и корректирует положение виртуальных объектов — всё это с частотой 60 кадров в секунду.
Процесс VIO состоит из двух параллельных потоков: алгоритм визуальной одометрии отслеживает движение характерных точек (feature points) между кадрами, а инерциальные датчики Core Motion предсказывают движение на коротких интервалах, когда камера быстро перемещается или изображение размыто. Объединение двух методов даёт точность отслеживания до 1 сантиметра.
По данным Apple, ARKit обрабатывает до 500 характерных точек на кадр, а размер карты окружения (ARWorldMap) может достигать 100 метров в диаметре. Для сканирования окружения и построения карты требуется около 2–3 секунд после запуска сессии — всё это время ARKit накапливает данные с камеры и датчиков.
ARAnchor — ключевой объект для размещения контента. Когда ARKit распознаёт плоскость, он создаёт ARPlaneAnchor с указанием положения, размера и ориентации поверхности. Разработчик реагирует на делегат session(_:didAdd:) и размещает 3D-объект в месте обнаружения плоскости через SceneKit или RealityKit.
Для реализации перетаскивания объектов используется ARHitTestResult: при касании экрана выполняется hit-test через кадр ARKit, который возвращает точку пересечения луча с распознанными плоскостями. Найденная точка преобразуется в ARAnchor, и объект фиксируется в этом положении.
func renderer(
_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor
) {
guard let planeAnchor = anchor
as? ARPlaneAnchor else { return }
let boxNode = SCNNode(
geometry: SCNBox(
width: planeAnchor.extent.x,
height: 0.01,
length: planeAnchor.extent.z,
chamferRadius: 0
)
)
node.addChildNode(boxNode)
}
ARKit предоставляет набор технологий, которые делают дополненную реальность реалистичной и функциональной: отслеживание движения с 6 степенями свободы, понимание сцены через распознавание плоскостей и границ, оценка освещения для корректного наложения теней, окклюзия людей и рефлексирующие поверхности на основе карт окружения.
Motion Capture (ARKit 3+) — технология отслеживания тела человека в реальном времени через камеру. Позволяет анимировать персонажей движениями пользователя без внешних датчиков: распознаётся 18 суставов с частотой 60 Гц. Используется в фитнес-приложениях и для прототипирования анимации.
Совместные AR-сессии (ARKit 2+) позволяют нескольким устройствам видеть одни и те же виртуальные объекты в общем пространстве. ARWorldMap сохраняет карту окружения, которая передаётся другим устройствам через сеть. Apple приводит пример точности синхронизации: два iPhone 12 Pro в одной комнате видят объект с расхождением не более 2 сантиметров.
LiDAR-сканер, установленный на iPhone 12 Pro и новее, кардинально меняет возможности ARKit. Вместо программного определения глубины через анализ изображений, LiDAR мгновенно выдаёт карту глубины с точностью до 3 сантиметров в диапазоне до 5 метров. Это позволяет ARKit распознавать плоскости мгновенно, без предварительного сканирования камерой.
С помощью LiDAR ARKit может определять непрозрачность объектов: виртуальный объект может скрываться за реальным креслом или столом. Кроме того, Scene Reconstruction строит 3D-сетку окружения в реальном времени — до 10 миллионов полигонов на комнату, что используется для симуляции физики столкновений и реалистичного освещения.
// Конфигурация для LiDAR
let lidarConfig = ARWorldTrackingConfiguration()
lidarConfig.planeDetection = [.horizontal]
lidarConfig.sceneReconstruction = .mesh
arView.session.run(lidarConfig)
// Детекция касания по плоскости
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
let location = touches.first?.location(in: arView)
guard let hitPoint = location else { return }
let results = arView
.raycastQuery(
from: hitPoint,
allowing: .existingPlaneInfinite,
alignment: .horizontal
)
}
Интеграция ARKit начинается с минимальных требований: Xcode 15+, iOS 17 SDK, устройство с чипом A12 Bionic и новее. В Info.plist необходимо добавить ключ NSCameraUsageDescription — ARKit использует камеру для отслеживания и отображения AR-сцены. Без этого ключа приложение завершится с ошибкой при запуске AR-сессии.
Для рендеринга контента iOS предлагает три фреймворка: SceneKit для 3D-графики среднего уровня сложности, RealityKit для фотореалистичного рендеринга с PBR-материалами и Metal для максимальной производительности. RealityKit — рекомендуемый выбор для новых проектов, так как он включает встроенную поддержку ARKit-функций, анимации и физики.
По данным Apple, среднее время интеграции базового AR-экрана в существующее приложение — около 2 часов для опытного iOS-разработчика. Основные сложности возникают при работе с наложением UI-элементов на AR-сцену и при обработке перерывов AR-сессии — звонков, переключения приложений или потери отслеживания при слабом освещении.
ARKit может терять отслеживание в ряде ситуаций: недостаточное освещение (менее 100 люкс), отсутствие характерных точек (однотонные стены), быстрые движения камеры или перекрытие объектива. Делегат ARSessionDelegate предоставляет методы для обработки этих состояний — рекомендуется показывать пользователю подсказки: "Перемещайте устройство медленнее" или "Включите освещение".
Для восстановления после сбоя ARKit автоматически запускает релокализацию — пытается сопоставить текущий видеопоток с сохранённой картой окружения. Если релокализация невозможна, сессия перезапускается с новой конфигурацией. Рекомендуется сохранять ARWorldMap при выходе из приложения для быстрого восстановления AR-сцены при возврате.
class ARViewController: UIViewController {
let arView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.frameSemantics = .personSegmentation
arView.session.run(config)
}
func sessionWasInterrupted(
_ session: ARSession
) {
showAlert("Сессия прервана")
}
}
Часто задаваемые вопросы
ARKit работает на устройствах Apple с чипом A12 Bionic и новее: iPhone XS, XR, 11, 12, 13, 14, 15, 16 и SE (2-го и 3-го поколения), iPad Pro 2018+, iPad Air 2020+, iPad mini 2021+. Для LiDAR-функций требуются iPhone 12 Pro/Pro Max, iPhone 13 Pro/Pro Max, iPhone 14 Pro/Pro Max, iPhone 15 Pro/Pro Max и iPad Pro 2020+.
Да, ARKit можно использовать с Metal напрямую, но это требует написания собственного шейдера и рендеринга. SceneKit и RealityKit предоставляют готовые решения с интеграцией ARKit на уровне фреймворка. Для новичков RealityKit — оптимальный выбор, так как он автоматически обрабатывает ARKit-функции.
ARKit автоматически оценивает освещение сцены через камеру и предоставляет данные о направлении, интенсивности и цветовой температуре источника света через AREnvironmentProbeAnchor. Это позволяет виртуальным объектам корректно отбрасывать тени и отражать окружение, создавая реалистичное слияние с реальным миром.
ARKit работает только на iOS и использует Visual-Inertial Odometry для отслеживания, тогда как ARCore от Google работает на Android и использует собственный Motion Tracking на основе IMU и камеры. ARKit имеет преимущество благодаря аппаратной интеграции с чипами Apple, а ARCore — кроссплатформенность через Cloud Anchors.
Да, ARKit идеально подходит для AR-игр. SceneKit и RealityKit поддерживают физику (SCNPhysicsBody, PhysicsSimulation), анимацию, звук и частицы. Известные примеры — Pokémon GO (использует собственный движок с ARKit), Angry Birds AR и Lego AR Studio. ARKit также поддерживает многопользовательские сессии через ARWorldMap.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также