
مقدمه
واقعیت افزوده (Augmented Reality) یکی از مهمترین ترندهای فناوری در دههی اخیر است؛ فناوریای که مرز میان دنیای فیزیکی و دیجیتال را از بین میبرد. اپل با معرفی ARKit، RealityKit و Swift یک اکوسیستم قدرتمند، پایدار و حرفهای برای توسعه اپلیکیشنهای AR فراهم کرده است.
در این مقاله، یک راهنمای صفر تا صد، کاملاً عملی و مبتنی بر کدنویسی واقعی برای ساخت اپلیکیشنهای AR در مک ارائه میشود؛ از انتخاب ابزار تا انتشار در App Store.
پیشنیازهای علمی و فنی
برای استفاده حداکثری از این راهنما، بهتر است با موارد زیر آشنا باشید:
زبان Swift
مفاهیم پایه iOS Development
مختصات سهبعدی (X, Y, Z)
Transform، Rotation و Scale
آشنایی مقدماتی با مدلهای سهبعدی
سختافزار و سیستمعامل مورد نیاز
سختافزار
مک (Intel یا Apple Silicon)
آیفون یا آیپد سازگار با ARKit (ترجیحاً دارای LiDAR)
سیستمعامل
macOS Ventura یا بالاتر
iOS 16+
نرمافزارها و ابزارهای ضروری
1. Xcode
محیط توسعه رسمی اپل شامل:
Swift Compiler
Simulator
Debugger
Interface Builder
2. ARKit
فریمورک اصلی پردازش AR:
Motion Tracking
Plane Detection
Light Estimation
Scene Understanding
Face & Body Tracking
3. RealityKit
فریمورک مدرن رندر سهبعدی:
Performance بالا
Physics و Collision
Animation داخلی
تعامل ساده با ARKit
4. Reality Composer / Reality Composer Pro
برای طراحی بصری صحنههای AR بدون کدنویسی سنگین.
5. نرمافزارهای 3D
Blender
Cinema 4D
Maya
(خروجی ترجیحاً با فرمت USDZ)
معماری استاندارد اپلیکیشن AR
ساختار منطقی اپلیکیشنهای AR معمولاً شامل این لایههاست:
UI Layer (SwiftUI)
ARView
ARSession
Anchors
Entities & Components
مرحله ۱: ساخت پروژه AR در Xcode
Open Xcode
Create New Project
Template: Augmented Reality App
Language: Swift
Interface: SwiftUI
Content Technology: RealityKit
ساختار پروژه:
├── AppNameApp.swift
├── ContentView.swift
├── ARViewContainer.swift
├── Assets.xcassets
└── Models/
مرحله ۲: ساخت ARView (هسته اپلیکیشن)
import SwiftUI
import RealityKit
import ARKit
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal, .vertical]
config.environmentTexturing = .automatic
arView.session.run(config)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
مرحله ۳: اتصال ARView به رابط کاربری
struct ContentView: View {
var body: some View {
ARViewContainer()
.edgesIgnoringSafeArea(.all)
}
}
مرحله ۴: درک ARSession و Tracking
ARSession دادههای زیر را مدیریت میکند:
دوربین
ژیروسکوپ
شتابسنج
LiDAR (در صورت وجود)
مهمترین Configuration:
ARWorldTrackingConfiguration
ARFaceTrackingConfiguration
ARBodyTrackingConfiguration
مرحله ۵: تشخیص سطح (Plane Detection) :
arView.debugOptions = [
.showFeaturePoints,
.showAnchorOrigins
]
این قابلیت به درک بهتر محیط واقعی کمک میکند
مرحله ۶: اضافهکردن آبجکت سهبعدی
ایمپورت مدل
مدل USDZ را به پروژه اضافه کنید
let anchor = AnchorEntity(plane: .horizontal)
let model = try! ModelEntity.load(named: "toy_robot")
model.scale = SIMD3(0.2, 0.2, 0.2)
anchor.addChild(model)
arView.scene.addAnchor(anchor)
مرحله ۷: تعامل کاربر (Gesture)
model.generateCollisionShapes(recursive: true)
arView.installGestures(
[.translation, .rotation, .scale],
for: model
)
مرحله ۸: Tap Gesture سفارشی
let tap = UITapGestureRecognizer(
target: context.coordinator,
action: #selector(Coordinator.handleTap)
)
arView.addGestureRecognizer(tap)
مرحله ۹: Physics و Collision
RealityKit از فیزیک واقعی پشتیبانی میکند:
Gravity
Collision
Mass
مرحله ۱۰: نورپردازی و واقعگرایی
config.environmentTexturing = .automatic
استفاده از:
PBR Materials
HDR Lighting باعث طبیعیتر شدن صحنه میشود.
مرحله ۱۱: انیمیشن
model.move(
to: Transform(
scale: .one,
rotation: simd_quatf(angle: .pi, axis: [0,1,0]),
translation: [0,0,0]
),
relativeTo: model,
duration: 1.5
)
مرحله ۱۲: بهینهسازی Performance (با کدنویسی)
12.1 مدیریت صحیح Anchorها
حذف Anchorهای بلااستفاده برای جلوگیری از افت FPS:
arView.scene.anchors.removeAll()
یا حذف انتخابی:
arView.scene.anchors.remove(anchor)
12.2 محدود کردن Featureهای غیرضروری ARKit
اگر Plane Detection لازم نیست:
let config = ARWorldTrackingConfiguration()
config.planeDetection = []
config.environmentTexturing = .none
arView.session.run(config)
12.3 کنترل نرخ فریم (Frame Rate)
RealityKit بهصورت پیشفرض 60fps است، ولی میتوان بار پردازشی را کاهش داد:
arView.renderOptions.insert(.disableMotionBlur)
arView.renderOptions.insert(.disableCameraGrain)
12.4 بهینهسازی مدل سهبعدی در کد
غیرفعالسازی سایه در صورت عدم نیاز:
model.model?.materials = [
SimpleMaterial(color: .white, roughness: 0.5, isMetallic: false)
]
مرحله ۱۳: تست و دیباگ حرفهای (با کد)
13.1 فعالسازی Debug Options
برای بررسی مشکلات Tracking:
arView.debugOptions = [
.showFeaturePoints,
.showWorldOrigin,
.showAnchorOrigins
]
13.2 بررسی وضعیت Tracking
func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) {
switch camera.trackingState {
case .normal:
print("Tracking is normal")
case .limited(let reason):
print("Tracking limited:", reason)
case .notAvailable:
print("Tracking not available")
}
}
13.3 مدیریت Interrupt شدن Session
مثلاً هنگام قفل شدن گوشی:
func sessionWasInterrupted(_ session: ARSession) {
print("AR Session interrupted")
}
func sessionInterruptionEnded(_ session: ARSession) {
arView.session.run(arView.session.configuration!)
}
13.4 تست روی دیوایس واقعی
(مهمترین نکته تخصصی)
#if targetEnvironment(simulator)
fatalError("ARKit is not supported in Simulator")
#endif
مرحله ۱۴: آمادهسازی برای انتشار در App Store (با کد)
14.1 دسترسی به دوربین (Info.plist)
<key>NSCameraUsageDescription</key>
<string>This app uses the camera for Augmented Reality experiences.</string>
14.2 مدیریت Permission دوربین
import AVFoundation
let status = AVCaptureDevice.authorizationStatus(for: .video)
if status == .notDetermined {
AVCaptureDevice.requestAccess(for: .video) { granted in
print("Camera permission:", granted)
}
}
14.3 غیرفعالسازی Debug در Release
#if !DEBUG
arView.debugOptions = []
#endif
14.4 آمادهسازی Build نهایی
بهینهسازی Session هنگام خروج:
func applicationWillTerminate(_ application: UIApplication) {
arView.session.pause()
}
نسخه نهایی مراحل ۱۲–۱۴ (جمعبندی حرفهای)
در اپلیکیشنهای AR:
Performance = تجربه کاربر
Tracking Stability = اعتبار محصول
بهینهسازی = پذیرش در App Store
اپلیکیشن AR خوب فقط «کار نمیکند»، بلکه روان، پایدار و هوشمند رفتار میکند.