어비전스: 다이버시티 / 비전파서블 / 수수수 수퍼비전 / 어벤져스: The 6th Vision / See Different
- Apple Developer Acaemy @ POSTECH | Cohort 2025 | Challenge 4
- Period: 2025.06.28 - 2025.08.01 (30 Days)
- Development Environment :
iOS 26.0+
Xcode 26.0+
Swift 6
![]() Yeony @youryeony |
![]() Joy @superbigjoy |
![]() Snow @Jikiim |
![]() Frank @chxhyxn |
![]() Jam @jaminleee |
![]() Mini @mini-min |
---|
Framework | Description |
---|---|
App Intents | 시스템 레벨에서 앱 기능을 자동으로 호출하기 위한 방법을 구현하는데 사용 |
AVFoundation | 카메라, 이미지, 비디오, 실시간 프레임 처리 등 앱에서 사용하는 멀티미디어 기능 구현을 위해 사용 |
Combine | SwiftUI 스타일에 적합한 선언적 비동기 데이터 스트림 구현을 위해 사용 |
Foundation Models | 유사성 기반 이미지 검색 기반을 위해 온디바이스 LLM Model을 사용 |
PhotoKit | 하위 모듈인 Photos에 접근하기 위해 사용되는 상위 프레임워크. 사진 라이브러리 접근을 위해 사용 |
Speech | 음성 인식을 통해 음성 검색 기능을 구현하기 위해 사용 |
SwiftData | 로컬 DB, 최근 검색 기록/즐겨찾기 기능을 구현하기 위해 사용 |
SwiftUI | 선언적 UI 프레임워크 |
Vision | 텍스트 인식 (OCR)과 카메라 설정에서 사용하는 Vision Model을 활용하기 위해 사용 |
WidgetKit | 홈 화면에서 앱에 쉽게 접근할 수 있는 위젯 기능 구현을 위해 사용 |
실시간 인터랙션 (Camera-Model 간)을 핵심 기능으로 담고 있는 FF!p의 기능 특성 상,
1초의 60 프레임을 모두 Vision 모델에 분석 요청하는 것은 프로세서에 많은 부담을 주는 일이죠. 발열과 hang, shut down 문제로 이어질 수 있습니다.
반면, 이와 동시에 실시간 인터랙션이라는 사용자의 경험을 주기 위해 가능한 많은 프레임을 처리해 실시간성의 사용자 경험을 제공할 필요도 있었습니다.
이에 저희 팀은 비동기 데이터 스트림 처리를 수행할 수 있는 Swift Concurrency의 AsyncStream(AsyncSequence)
을 활용한 프레임 분석 주기를 설정했습니다.
각 모듈별 역할을 명확하게 구분하기 위해, 저희 팀은 View, Mediator, Model, Service 구조로 각 역할을 분리했습니다.
- View : UI 담당, 사용자에게 카메라 요청을 최초 전달하고 / 모델의 분석 결과를 받아 바운딩 박스를 그려주는 역할.
- Mediator : 카메라와 관련된
CameraModel
과 모델과 관련된VisionModel
LangaugeModel
사이의 중재자 역할. - Model : 비즈니스 로직 책임. 관찰 가능한 객체 (
@Observable
) 타입으로 선언되어, View에서 요청하는 데이터와, 메서드를 갖고 있는 데이터 변경에 대응할 수 있도록 책임을 갖고 있는 곳. - Service : Apple이 제공해주는 내장 프레임워크와 직접 요청과 응답을 주고받는 역할. 비동기 처리를 담당하므로
actor
로 선언되어 있음.



├── .swiftlint
├── 📁 Resources
│ ├── Images
│ ├── Colors
│ ├── Fonts
│ ├── Localizable.xcstrings
├── 📁 Sources
| ├── 🗂️ App
│ │ ├── FFIP_iOSApp.swift
│ │ ├── 🗂️ Coordinator
│ │ ├── 🗂️ Factory
| ├── 🗂️ Components
│ ├── 🗂️ Data
│ ├── 🗂️ Extensions
│ ├── 🗂️ Modifers
│ ├── 🗂️ Presentation
│ │ ├── 🗂️ Camera
│ │ │ ├── CameraView.swift
│ │ │ ├── 🗂️ Model
│ │ │ ├── 🗂️ SubViews
│ │ ├── 🗂️ Search
│ │ ├── 🗂️ VoiceSearch
│ ├── 🗂️ Utils
-
🍎 Coding Convention : Clean Code Swift
: 마틴 아저씨의 클린 코드 원칙과 아카데미 컨벤션을 팀 수준에 맞게 적용하고, 그냥 남들이 사용하니까 사용하는 것이 아니라 "왜 사용해야하는지"에 대한 이해를 위한 정리 글 -
😎 Vision Framework 공부하기
: 유즈 케이스를 발산하기에 앞서, 팀원들의 Vision Framework 기술에 대한 이해와 싱크를 맞추기 위한 공부 내용 -
🌠 Image Processing Flow
: 핵심 기능을 구현하기 위해 필요한 실시간 스캐닝 -> 이미지 변환 -> 탐지 과정의 플로우를 정리하고, 그 과정에서 필요한 기술을 정리