๐ฑ iOS
22
iOS ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค.
RxSwift vs Combine - ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ(Reactive Programming)์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก, ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. UI ์ด๋ฒคํธ, ๋คํธ์ํฌ ์๋ต, ์ฌ์ฉ์ ์
๋ ฅ ๋ฑ์ ๋ณํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋๋ค.๊ทธ๋ ๋ค๋ฉด RxSwift์ Combine๋ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น?RxSwift vs Comb
[iOS] Scene, Window, View์ ๊ฐ๋
๊ณผ ์ฐจ์ด์ Scene, Window, View์ ๊ฐ์Apple ์ํ๊ณ์์ Scene, Window, View๋ UI ๊ณ์ธต ๊ตฌ์กฐ์ ์ค์ํ ๊ตฌ์ฑ ์์์ด๋ค.๊ฐ๋
์ญํ ์ฃผ์ ํน์งScene์ฑ์ UI์ ์ํ ๊ด๋ฆฌ์ฌ๋ฌ ๊ฐ์ Scene์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ฉํฐ ์๋์ฐ ์ง์Windowํ๋ฉด์ View๋ฅผ ํ์ํ๋ ์ปจํ
์ด๋UIWindow๋ฅผ ํตํด ์ฑ์ ์ฃผ์ ์ฝํ
์ธ ๋ฅผ ํ์Viewํ๋ฉด์ ํ์๋๋

[iOS] View ์ ํ ์ ๊ฐํ ๊ฒฐํฉ(Strong Coupling) ๋ฌธ์ ์ Coordinator ํจํด์ ํ์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ฐ์ธ ํ๋ก์ ํธ์์ ํ ViewController์์ ๋ค๋ฅธ ViewController๋ก ์ด๋ํ ๋, ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
[iOS] MVVM๊ณผ Clean Architecture์ ๊ฒฐํฉ: iOS ์ฑ ๊ฐ๋ฐ์์์ ๊ตฌ์กฐ์ ์ ๊ทผiOS ์ฑ ๊ฐ๋ฐ์์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ๋, MVVM๊ณผ ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ๊ฒฐํฉํ๋ ๋ฐฉ์์ ์์ฃผ ํจ๊ณผ์ ์ด๋ค. ์ด ๊ธ์์๋ MVVM๊ณผ ํด๋ฆฐ ์ํคํ
์ฒ์ ๊ฐ๋
์ ์ ๋ฆฌํ๊ณ , ์ด ๋์ ์ด๋ป๊ฒ ์กฐํฉํ ์ ์๋์ง์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ๋ค.MVVM (Model-View-ViewModel)MVVN์ iOS์์ ๋ง์ด ์ฌ์ฉํ๋ ์ํคํ
์ฒ ํจํด์ผ๋ก, ์ฝ๋์ ๋ชจ๋ํ์ UI ๋ก
[iOS] ์๋ก์ด Logger API (iOS 14 ์ด์)์ด์ ์ print๋ NSLog ๋์ os_log๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ธ์ ์ด ์ ์ด ์๋ค.์๊ณ ๋ณด๋ iOS 14๋ถํฐ ์๋ก์ด Logger API๋ฅผ ์ง์ํ๊ณ ์์๋ค.์ด๋ฒ ๊ธ์์๋ Logger API์ ์ฅ๋จ์ ๊ณผ ๊ธฐ์กด ๋ก๊น
๋ฐฉ์ ๋ฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(CocoaLumberjack, OSLog)์์ ๋น๊ต๋ฅผ ์ ๋ฆฌํ๋ค.Logger API๋?๊ธฐ์กด ๋ก๊น
๋ฐฉ์๊ณผ์ ์ฐจ์ด์ ๊ธฐ์กด iOS์
[iOS] ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ๊ณผ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ดํด์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ํ์ํ ๊น?์ฑ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง์ผ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ธ ์ ์๋ค.์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Third-Party Library)๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์๋ค.์ด๋ฐ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ ํ์ ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅ!๋คํธ์ํฌ ์์ฒญ โ Alamo
[iOS] SDWebImage๋ก ๋คํธ์ํฌ ์ด๋ฏธ์ง ๋ก๋ฉ ์ต์ ํ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ ๋ SDWebImage ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ์์ฒญ์ ์ต์ ํํ๊ณ ์บ์ฑ์ ํ์ฉํ ์ ์๋ค.SDWebImage ์ค์น (Swift Package Manager)Xcode - File - Add Package Dependencieshttps://github.com/SDWebImage/SDWebImage ์ถ๊ฐUIImageView๋ฅผ ํ์ฅํ์ฌ ์ด
[iOS] Core Data์์ Fetch ํจ์จ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒCore Data์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.Fetch Batch Size ์ค์ ํ ๋ฒ์ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ ์(Batch Size)๋ฅผ ์ ํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ ํfetchRequest.fetchBatchSize = 20ํ์์๋ ์์ฑ ์ ์ธํ์ํ ์์ฑ๋ง ๊ฐ์ ธ์ ์ฑ๋ฅ ํฅ์fetchRequest.propertiesToFetch
[iOS] Core Data CRUD (Create, Read, Update, Delete) ๊ตฌํCore Data์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ(Create), ๋ถ๋ฌ์ค๊ธฐ(Read), ์์ (Update), ์ญ์ (Delete)ํ๋ ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์ ๋ฆฌCore Data ์คํ ์ค์ import CoreData
class CoreDataManager {
static let shared = CoreDataManager()
let
[iOS] API ์๋ต์ Swift Codable ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ๋ ๋ฐฉ๋ฒAPI ์์ฒญ ํ ์๋ฒ์์ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ต๋ฐ์ผ๋ฉด, Swift์์ Codable์ ์ฌ์ฉํด ๊ฐํธํ๊ฒ ๋ณํํ ์ ์๋ค.์ด ๊ธ์์๋ Codable์ ํ์ฉํ์ฌ JSON ๋ฐ์ดํฐ๋ฅผ Swift ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.์๋ฒ์์ ๋ฐ์ JSON ๋ฐ์ดํฐ๋ฅผ Swift์์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๊ตฌ์กฐ์ฒด๋ก ๋ณํํด์ผ ํ๋ค.{
"id": 1,
"usernam
[iOS] URLSession & Combine์ ํ์ฉํ ๋คํธ์ํฌ ์์ฒญ ์ต์ ํ๋คํธ์ํฌ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ URLSession์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ง, ๋น๋๊ธฐ ์์
์ ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด Combine ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ ์ ์๋ค.์ด ๊ธ์์๋ URLSession์ ํ์ฉํ ๋คํธ์ํฌ ์์ฒญ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.๊ธฐ์กด URLSession ๋ฐฉ์์ ๋ฌธ์ ์ let task = URLSession.shared.dataTask(with: url
[iOS] API ์์ฒญ ์ ๋ฐ์ํ๋ โInvalid JSONโ ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ๋คํธ์ํฌ ์์ฒญ์ ํตํด JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ Invalid JSON ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.์ด ๋ฌธ์ ๋ ๋ณดํต ์๋ชป๋ API ์๋ต, JSON ๋์ฝ๋ฉ ๋ฌธ์ , ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ค๋ฅ ๋ฑ์ผ๋ก ์ธํด ๋ฐ์ํ๋ค.์ด ๊ธ์์๋ Invalid JSON ์ค๋ฅ์ ์์ธ์ ๋ถ์ํ๊ณ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.๋ฌธ์ ์ํฉ์๋ฒ์์ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋์ฝ๋ฉํ๋ ค๊ณ ํ์ ๋ ๋ค์๊ณผ ๊ฐ์
[iOS] NSFetchedResultsController๋ฅผ ํ์ฉํ ์ฑ๋ฅ ์ต์ ํCore Data์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ถ๋ฌ์ค๊ณ UI์ ๋๊ธฐํํ๋ ค๋ฉด NSFetchedResultsController๋ฅผ ํ์ฉํด์ผ ํ๋ค.ํนํ UITableView ๋ฐ UICollectionView์ ํจ๊ป ์ฌ์ฉํ ๋ ์ฑ๋ฅ ์ต์ ํ์ ํฐ ๋์์ด ๋๋ค.๋ฌธ์ ์ํฉCore Data์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ UITableView์ ํ์ํ ๋ ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.fetc
[iOS] Core Data ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ ์ฉ ๋ฐฉ๋ฒCore Data ๋ชจ๋ธ์ ์์ ํ๋ฉด ์ฑ์ด ํฌ๋์๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.์ด์ ๋ Core Data์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋ ๋, ๊ธฐ์กด ๋ฐ์ดํฐ์ ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.๋ฌธ์ ์ํฉCore Data ๋ชจ๋ธ์ ์๋ก์ด ์์ฑ์ ์ถ๊ฐํ ํ ์ฑ์ ์คํํ์ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.Error Domain=NSCo
[iOS] ์์คํ
์ค์ ์ ๋ฐ๋ผ ๋คํฌ๋ชจ๋ ์ ์ฉํ๊ธฐiOS์ ์์คํ
์ค์ ์ ๋ฐ๋ผ ๋คํฌ๋ชจ๋๋ฅผ ์ ์ฉํ๋ ค๋ฉด,AppDelegate.swift์ didFinishLaunchingWithOptions ๋ฉ์๋์ ์๋ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
[iOS] API ํค ๋ณด์ ์ ์ฉํ๊ธฐํ์ฌ ์งํ ์ค์ธ ํ๋ก์ ํธ์ Google Books API๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ์ปค๋ฐ์ ํ๋ ค๋ค API ํค๊ฐ ํ๋์ฝ๋ฉ ๋์๋ค๋ ์ฌ์ค์ ๋ถ๋ด๋ถ๋ด ์ฐพ์๋ณธ API ํค์ ๋ณด์์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.์ฐ์ , ๋ด๊ฐ ์์๋ณธ ๋ฐฉ๋ฒ์ ์๋ ์ธ ๊ฐ์ง๋ค.Info.plist์ API ํค ์ ์ฅ ํ ๊ฐ์ ธ์ค๊ธฐ.xcconfig ํ์ผ์ ์ฌ์ฉํด ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌKeyChain ๋๋ ์๋ฒ์์
[iOS] (iOS ๊ฐ๋ฐ ์คํํฐ ์์ ์์์) SwiftUI vs UIKitSwiftUI์ UIKitiOS ์ฑ์ ๊ฐ๋ฐํ ๋ UI๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ SwiftUI์ UIKit ๋ ๊ฐ์ง๊ฐ ์๋ค.SwiftUI2019๋
WWDC์์ ๋ฑ์ฅํ ์ต์ UI ํ๋ ์์ํฌ์ ์ธํ(Declarative) ๋ฐฉ์์ผ๋ก UI ์์ฑ ๊ฐ๋ฅ์ฝ๋๋ง์ผ๋ก UI ์์ฑ ๊ฐ๋ฅ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๊ฐ๋ ฅํจUIKitiOS 2.0๋ถํฐ ์ฌ์ฉ๋ UI ํ๋ ์์ํฌ์ค๋ซ๋์ iOS ๊ฐ๋ฐ์ ํ์ค์คํ
[iOS] ๋ฐ์ดํฐ ๊ด๋ฆฌ ํ๋ ์์ํฌ(CoreData)์ ์ดํดCoreData๋?CoreData๋ iOS ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ก, SQLite ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์์์ฑ์ ์ ๊ณตํ๋ค.CoreData์ ์ฃผ์ ๊ตฌ์ฑ ์์NSManagedObjectContext: ๋ฐ์ดํฐ์ CRUD(์์ฑ, ์ฝ๊ธฐ, ๊ฐฑ์ , ์ญ์ ) ์์
์ ๋ด๋นNSManagedObjectModel: ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ์ํ๋ ์ญํ NSPersistentSto
[iOS] ์ฑ์ ์คํ ์์์ธ ์๋ช
์ฃผ๊ธฐ(Life Cycle)์ ์ดํดiOS ์ฑ์ ์๋ช
์ฃผ๊ธฐ ๊ฐ์iOS ์ฑ์ ์ฌ์ฉ์์ ๋์๊ณผ ์์คํ
์ด๋ฒคํธ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฑฐ์น๋ค.์ด ๊ณผ์ ์์ ์ฑ์ด ์คํ๋๊ณ ์ข
๋ฃ๋๋ ๊ณผ์ ์ด ๊ฒฐ์ ๋๋ค.UIApplication์ ์ํ ๋ณํ์ฑ์ ์ํ ๋ณํ๋ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ง๋ค.Not Running: ์ฑ์ด ์คํ๋์ง ์์ ์ํInactive: ์ฑ์ด ์คํ ์ค์ด์ง๋ง ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ์ง ์๋ ์ํActive: ์ฑ์ด
[iOS] UserDefaults์ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐUserDefaults๋ ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ก์ปฌ ์ ์ฅ์์ด๋ค. ๋ณดํต์ ์ฑ์ ์ค์ ๋ฑ์ ๊ฐ๋จํ? ์์? ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ์ฉํ๋ค.๊ธฐ๋ณธ์ ์ผ๋ก String, Int, Bool, Array ๊ฐ์ ๊ธฐ๋ณธ ํ์
๋ง ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ง์ฝ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด(ํด๋์ค ๋๋ ๊ตฌ์กฐ์ฒด)๋ฅผ ์ ์ฅํ๋ ค๋ฉด JSON ํํ๋ก ์ธ์ฝ๋ฉํด์ ์ ์ฅํ ์๋ ์๋ค.๊ธฐ๋ณธ ํ์
์ ๋ฐ์ดํฐ: ํ
ํ๊ทธ
SwiftiosSwiftUIUIKitMVVMClean ArchitectureCoordinator PatternUIRxSwiftCombine
์ต๊ทผ ๋๊ธ
์์ง ๋๊ธ์ด ์์ด์