/Manborang

๐Ÿพ ๋™๊ธ€๋™๊ธ€ ๋งŒ๋ณด๋ž‘ ํ•จ๊ป˜ ๊ฑธ์–ด๋ด์š”! - ์•ฑ์Šคํ† ์–ด ์ถœ์‹œ

Manborang

๐Ÿพ ๋™๊ธ€๋™๊ธ€ ๋งŒ๋ณด๋ž‘ ํ•จ๊ป˜ ๊ฑธ์–ด๋ด์š”!
image
๐ŸŽถ ์•ฑ์Šคํ† ์–ด์—์„œ ํ™•์ธํ•˜๊ธฐ v1.2.1
๐ŸŒ  ๊ฐœ๋ฐœ ์ผ์ง€ ๋ฐ ์ด์Šˆ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

UPDATE

์—…๋ฐ์ดํŠธ ์‚ฌํ•ญ
[v1.2.3]
- ์‹ฌ์‚ฌ์ค‘
โˆ™ ์œ„์ ฏ ์ƒ์„ฑ
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.2.2]
- 22.10.03
โˆ™ ๋‚ ์งœ ์—…๋ฐ์ดํŠธ ์‹œ ๊ฑธ์Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์ž‘ ์ˆ˜์ •
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.2.1]
- 22.09.26
โˆ™ ๊ฑธ์Œ ์ˆ˜ ์ˆ˜์ • ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐ˜์˜ ์˜ค๋ฅ˜ ์ˆ˜์ •
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.2.0]
- 22.09.25
โˆ™ ๊ฑธ์Œ ์ˆ˜, ๋งŒ๋ณด ์•„์ด์ฝ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถ”๊ฐ€
โˆ™ ๊ณต์œ ํ™”๋ฉด ๋‹คํฌ๋ชจ๋“œ ์ถ”๊ฐ€
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.1.5]
- 22.09.02
โˆ™ ์„ค์ • ์•„์ด์ฝ˜ borderline UI ๋Šฆ๊ฒŒ ์ ์šฉ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.1.4]
- 22.06.06
โˆ™ ๊ธฐ์ค€ ์‹œ๊ฐ„๋Œ€ ๋ณ„๋กœ ๊ฑธ์Œ ์ˆ˜ ์ œ๋Œ€๋กœ ๊ฐ€์ ธ์™€์ง€์ง€ ์•Š๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •
โˆ™ ๊ฑธ์Œ์ˆ˜ 0์ธ ๋ฐ์ดํ„ฐ ์žˆ๋Š” ๊ฒฝ์šฐ ์ค‘๋ณต๊ฐ’ ์ž…๋ ฅ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •
โˆ™ ์บ˜๋ฆฐ๋”๋ทฐ ์•„์ด์ฝ˜ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ ๋” ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.1.3]
- 22.05.22
โˆ™ ์„ค์ • ์•„์ด์ฝ˜, ์„ธํŒ… ๋ฉ”๋‰ด ๋ ˆ์ด์•„์›ƒ ๋“ฑ UI ๋ณ€๊ฒฝ
โˆ™ ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€ ํ™•์ธ, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ, WebView ๋กœ๋“œ ์™„๋ฃŒ ํ™•์ธ ์ฝ”๋“œ ์ถ”๊ฐ€
โˆ™ ๊ธฐํƒ€ ์ฝ”๋“œ ๊ฐœ์„ 
[v1.1.2]
- 22.04.14
โˆ™ ๊ฑธ์Œ ์ˆ˜๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ๊ฑด๊ฐ• ๋ฐ์ดํ„ฐ ๊ถŒํ•œ ๋ฏธ๋™์˜์‹œ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋” ๋‚˜์€ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
[v1.1.1]
- 22.04.05
โˆ™ ๊ณต์ง€์‚ฌํ•ญ, ๋ฌธ์˜ํ•˜๊ธฐ ๋“ฑ ์„ค์ • ํƒญ์„ ๋ˆ„๋ฅด๋ฉด ์•ฑ์ด ๊บผ์ง€๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ๋”์šฑ ์พŒ์ ํ•œ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ–ˆ์–ด์š”
[v1.1.0]
- 22.02.19
โˆ™ ๋งŒ๋ณด๋ž‘ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฐฑ์—…/๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์–ด์š”.
โˆ™ ๋”์šฑ ์พŒ์ ํ•œ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ–ˆ์–ด์š”.
[v1.0.4]
- 22.02.10
โˆ™ ๊ฑธ์Œ ์ˆ˜๊ฐ€ ๋ˆ„๋ฝ๋˜๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ๋”์šฑ ์พŒ์ ํ•œ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ–ˆ์–ด์š”.
[v1.0.3]
- 22.01.17
โˆ™ ์ง€๋‚œ ๋‹ฌ์˜ ๊ฑธ์Œ ์ˆ˜ ํ‰๊ท ์ด ๋ฐ˜์˜๋˜๋„๋ก ๊ฐœ์„ ํ–ˆ์–ด์š”.
โˆ™ ์—…๋ฐ์ดํŠธ ์‹œ ๋ชฉํ‘œ ๊ฑธ์Œ์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
[v1.0.2]
- 22.01.09
โˆ™ ์ตœ์†Œ ๋ฒ„์ „์„ iOS 15.0 ๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ ธ์–ด์š”.
๐Ÿคง iOS 15.0 ๋ฏธ๋งŒ์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ์—ด์‹ฌํžˆ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์–ด์š”!
โˆ™ ๋”์šฑ ์พŒ์ ํ•œ ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ–ˆ์–ด์š”.
[v1.0.1]
- 21.12.22
โˆ™ iOS 15.0 ๋ฏธ๋งŒ์—์„œ ์•ฑ ์ ‘์† ์‹œ ํŠ•๊ธฐ๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ๋‹คํฌ๋ชจ๋“œ์—์„œ ์ผ๋ถ€ ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์–ด์š”.
โˆ™ ๋งŒ๋ณด์˜ ์ด๋ฆ„ ์„ค์ • ํ™”๋ฉด์—์„œ ๋ฐฐ๋„ˆ ๋“ฑ์žฅ ์‹œ์ ์„ ์ˆ˜์ •ํ–ˆ์–ด์š”.
[v1.0.0]
-21.12.20
โˆ™ ์ฒซ ์ถœ์‹œ: ๋งŒ๋ณด๋ž‘ ๊ฐ™์ด ๊ฑธ์–ด์š” ๐Ÿพ

Skil, Framework, Library

  • UIKit
  • MVC ํŒจํ„ด
  • Storyboard๋ฅผ ํ†ตํ•ด ๋ทฐ ๊ตฌํ˜„
  • HealthKit์„ ํ™œ์šฉํ•œ ๊ธฐ์ค€ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฑธ์Œ ์ •๋ณด ์—…๋ฐ์ดํŠธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ์ฃผ๊ฐ„โˆ™์›”๊ฐ„ ํ‰๊ท  ๊ฑธ์Œ ์ˆ˜ ์ œ๊ณต
  • NotificationCenter, Observer ๋ฅผ ํ™œ์šฉํ•œ ๋ทฐ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐ ์‹ค์‹œ๊ฐ„ UI ์—…๋ฐ์ดํŠธ
  • CustomTabbarController, CustomAlertView
  • OpenWeatherMapAPI, CLCoreLocation, Alamofire
  • UICollectionView, JPAppleCalendar, Realm์„ ํ†ตํ•ด ์ผ/์ฃผ/์›”๋ณ„ ๊ฑธ์Œ ์ˆ˜ ํ‘œ๊ธฐ
  • LocalNotification, Firebse CloudMessaging ๋ฅผ ํ†ตํ•ด ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ์•Œ๋ฆผ ๋ฐ›๊ธฐ
  • Firebase Crashlytics๋ฅผ ํ†ตํ•œ ๋ฒ„๊ทธ ์ถ”์  ๋ฐ ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜

Issues

1. HealthKit์˜ read ๊ถŒํ•œ์ด ํ™•์ธ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

๐Ÿ‘‰ move to post

2.iOS15 ๋ฏธ๋งŒ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ TestFlight์—์„œ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ๊บผ์ง€๋Š” ์˜ค๋ฅ˜

๐Ÿ‘‰ move to post

โ–ผ Summary โœ”๏ธŽ Xcode 13, 13.1์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋กœ, ์• ํ”Œ์—์„œ ๋ณด๊ณ ๋œ ์˜ค๋ฅ˜์˜€๋‹ค.
๐Ÿ”— [์• ํ”Œ๋ฌธ์„œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ](https://developer.apple.com/documentation/xcode-release-notes/xcode-13_2-release-notes)
image
โ—๏ธ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
image

3. Custom TabBar๋ฅผ ์ด์šฉํ•œ ํ™”๋ฉด ์ „ํ™˜ ๊ตฌํ˜„ํ•˜๊ธฐ

๐Ÿ‘‰ move to post

4. ์‚ฌ์šฉ์ž์˜ ์„ค์ •์— ๋”ฐ๋ผ HealthKit์˜ ๊ฑธ์Œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿ‘‰ move to post

5. ๋ฐฑ์—… ํŒŒ์ผ์ด ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์บ˜๋ฆฐ๋” ์—…๋ฐ์ดํŠธ

๐Ÿ‘‰ move to post

6. ์›” ๋ณ„ ๊ฑธ์Œ ์ˆ˜ ํ‰๊ท  ๊ณ„์‚ฐํ•˜๊ธฐ

๐Ÿ‘‰ move to post

โ–ผ Summary
    func calculateMonthlyAverageStepCount(year: Int, month: Int) -> Int {
        
        let monthString = String(format: "%02d", month)
        tasks = localRealm.objects(UserReport.self).sorted(byKeyPath: "date", ascending: false).filter("date CONTAINS [c] '\(year)-\(monthString)'")
        var totalStepCount = 0
  
        tasks.forEach { task in
            print(task.date)
            print(task.stepCount)
            totalStepCount += task.stepCount
        }
        
        let monthlyAverageStepCount = totalStepCount / tasks.count
        return monthlyAverageStepCount
    }

7. ์ตœ์ดˆ ์—…๋ฐ์ดํŠธ ์‹œ์—๋งŒ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„

๐Ÿ‘‰ move to post