ویرگول
ورودثبت نام
امیر سعید دهقان
امیر سعید دهقانعلاقمند به دنیای هنر و تکنولوژی ، عاشق نوآوری و خلاقیت INTJ
امیر سعید دهقان
امیر سعید دهقان
خواندن ۳ دقیقه·۸ ساعت پیش

راهنمای عملی و جامع ساخت اپلیکیشن های AR با استفاده از زبان Swift در Mac

مقدمه

واقعیت افزوده (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 خوب فقط «کار نمی‌کند»، بلکه روان، پایدار و هوشمند رفتار می‌کند.

واقعیت افزودهاپلیکیشناموزش برنامه نویسیبرنامه نویسی
۲
۰
امیر سعید دهقان
امیر سعید دهقان
علاقمند به دنیای هنر و تکنولوژی ، عاشق نوآوری و خلاقیت INTJ
شاید از این پست‌ها خوشتان بیاید