# πŸ“Š GyroData ## πŸ—£ ν”„λ‘œμ νŠΈ 및 개발자 μ†Œκ°œ >μ†Œκ°œ: 6μΆ• 자이둜 / 가속도 μ„Όμ„œλ₯Ό μΈ‘μ •ν•˜μ—¬ 화면에 κ·Έλž˜ν”„λ₯Ό κ·Έλ €μ£ΌλŠ” `iPhone` μ „μš© **GyroData** μ•±μž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ κΈ°κ°„ : **2023-01-30 ~ 2023-02-05** |[@zhilly](https://github.com/zhilly11)|[@woong](https://github.com/iOS-Woong)| |:---:|:---:| |<img src = "https://i.imgur.com/LI4k2B7.jpg" width=300 height=300>|<img src = "https://i.imgur.com/iF9OiA4.jpg" width=300 height=300>| ## πŸ“± μ‹€ν–‰ν™”λ©΄ | λͺ©λ‘ ν™”λ©΄ | μŠ€μ™€μ΄ν”„ μ•‘μ…˜ | μΈ‘μ •ν™”λ©΄ ν™”λ©΄ | | :--------: | :--------: | :--------: | | <img src = "https://i.imgur.com/LZ3GxVN.png" width=300 height=600> | <img src = "https://i.imgur.com/GInINdj.png" width=300 height=600> | <img src = "https://i.imgur.com/m7B59c8.png" width=300 height=600> | | μΈ‘μ •μ€‘μ—λŠ” μ •μ§€λ§Œ κ°€λŠ₯ | μΈ‘μ • 데이터 쑰회 (View) | μΈ‘μ • 데이터 쑰회 (Play) | | :--------: | :--------: | :--------: | | <img src = "https://i.imgur.com/iUEqYE2.png" width=300 height=600> | <img src = "https://i.imgur.com/QZUbNkE.png" width=300 height=600> | <img src = "https://i.imgur.com/6Ankr4M.png" width=300 height=600> | | κ·Έλž˜ν”„ μž¬μƒ | | :--------: | | <img src = "https://i.imgur.com/3osk1gW.gif" width=300 height=600>| ## πŸ› οΈ 적용기술 - `MVVM` - ViewControllerκ°€ λΉ„λŒ€ν•΄μ§€λŠ” 문제λ₯Ό 막고, κ΅¬ν˜„ κ°„ μ½”λ“œμˆ˜μ • 및 μΆ”ν›„ μœ μ§€λ³΄μˆ˜μ— μš©μ΄ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ MVVM νŒ¨ν„΄μ„ μ„ νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. - Observable 객체λ₯Ό ν†΅ν•œ 데이터 바인딩을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. - `CoreData` - CRUD κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜λŠ” `CoreDataManager`λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. - `CoreMotion` - Accelerometer와 Gyroscopeλ₯Ό μΈ‘μ •ν•˜λŠ” `CoreMotionManager`λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. - `FileManager` - `json` ν˜•μ‹μœΌλ‘œ 데이터λ₯Ό μ €μž₯ν•˜κ³  뢈러올 수 μžˆλŠ” `FileManager` μΆ”κ°€κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. - `Graph` - `UIBasierPath`와 `CAShapeLayer`λ₯Ό ν™œμš©ν•˜μ—¬ κ·Έλž˜ν”„λ₯Ό κ·Έλ¦¬λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. ## πŸ—‚οΈ 폴더 ꡬ쑰 ```bash GyroData β”œβ”€β”€ Source β”‚ β”œβ”€β”€ App β”‚ β”‚Β Β  β”œβ”€β”€ AppDelegate.swift β”‚ β”‚Β Β  └── SceneDelegate.swift β”‚ β”œβ”€β”€ Extension β”‚ β”‚Β Β  β”œβ”€β”€ Array+Extension.swift β”‚ β”‚Β Β  β”œβ”€β”€ DateFormatter+Extension.swift β”‚ β”‚Β Β  β”œβ”€β”€ FileManager+Extension.swift β”‚ β”‚Β Β  └── NotificationName+Extension.swift β”‚ β”œβ”€β”€ Manager β”‚ β”‚Β Β  β”œβ”€β”€ CoreDataManager β”‚ β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CoreDataManageable.swift β”‚ β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CoreDataManager.swift β”‚ β”‚Β Β  β”‚Β Β  └── ManagedObjectModel.swift β”‚ β”‚Β Β  └── CoreMotionManager.swift β”‚ β”œβ”€β”€ Model β”‚ β”‚Β Β  β”œβ”€β”€ MotionCoreModel+CoreDataClass.swift β”‚ β”‚Β Β  β”œβ”€β”€ MotionCoreModel+CoreDataProperties.swift β”‚ β”‚Β Β  β”œβ”€β”€ FileManagedData.swift β”‚ β”‚Β Β  β”œβ”€β”€ MotionData.swift β”‚ β”‚Β Β  β”œβ”€β”€ Observable.swift β”‚ β”‚Β Β  └── SensorData.swift β”‚ β”œβ”€β”€ Protocol β”‚ β”‚Β Β  └── ReusableView.swift β”‚ └── View β”‚ β”œβ”€β”€ CustomView β”‚ β”‚Β Β  └── GraphView.swift β”‚ β”œβ”€β”€ DetailView β”‚ β”‚Β Β  β”œβ”€β”€ DetailViewController.swift β”‚ β”‚Β Β  └── DetailViewModel.swift β”‚ β”œβ”€β”€ ListView β”‚ β”‚Β Β  β”œβ”€β”€ MeasureListViewController.swift β”‚ β”‚Β Β  β”œβ”€β”€ MeasureListViewModel.swift β”‚ β”‚Β Β  └── MeasureTableViewCell.swift β”‚ └── MeasureView β”‚ β”œβ”€β”€ MeasureViewController.swift β”‚ └── MeasureViewModel.swift β”œβ”€β”€ Resource β”‚Β Β  β”œβ”€β”€ Enum β”‚Β Β  β”‚ β”œβ”€β”€ CoreDataManagerError.swift β”‚Β Β  β”‚ β”œβ”€β”€ DetailViewMode.swift β”‚Β Β  β”‚ └── SensorMode.swift β”‚Β Β  │── Assets.xcassets β”‚Β Β  β”‚Β Β  β”œβ”€β”€ AccentColor.colorset β”‚Β Β  β”‚Β Β  β”‚Β Β  └── Contents.json β”‚Β Β  β”‚Β Β  β”œβ”€β”€ AppIcon.appiconset β”‚Β Β  β”‚Β Β  β”‚Β Β  └── Contents.json β”‚Β Β  β”‚Β Β  └── Contents.json β”‚Β Β  └── Base.lproj β”‚Β Β  Β Β  └── LaunchScreen.storyboard β”‚ β”œβ”€β”€ Info.plist └── Motion.xcdatamodeld ```