์ ์ฒด ๊ธ196 [RealmSwift] primaryKey์ AutoIncrease PrimaryKey class Customer: Object { @objc dynamic var idx = 0 } primaryKey๋ก ์ฌ์ฉํ ํ๋กํผํฐ๋ฅผ ์ ์ํด์ค override class func primaryKey() -> String? { return "idx" } primaryKey๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ์ฝ๊ฒ primaryKey ๋ฅผ ์ง์ ํ ์ ์์ ๋ฆฌํด๊ฐ์ด String์ด๋ฏ๋ก ํ๋กํผํฐ ๋ช ์ ์คํธ๋ง์ผ๋ก ๋ฆฌํดํด์ค AutoIncrease primaryKey๋ก ์ง์ ํ๋ค๊ณ ์๋์ผ๋ก ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉด์ ๊ณ ์ ๊ฐ์ ๊ฐ์ง๊ฒ ํ๋ ๊ธฐ๋ฅ์ ์์ realm์ ์ฌ์ฉ์ ์ง์ ํจ์์ ํ๋กํผํฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์๊ธธ๋๋ง๋ค ๊ฐ์ ์ฆ๊ฐ์ํค๋ ํจ์๋ฅผ ์์ฑํด ์ค ์ ์์ ์ฐธ๊ณ ์ฌ์ดํธ : https://stackoverf.. 2022. 10. 2. [RealmSwift] ๋ฐ์ดํฐ ๋ชจ๋ธ์ enum์ผ๋ก ํ์ ์ง์ ํ๊ธฐ ํ๋ ๊ฐ์ ์ง์ ๋ ํ์ ์ด ์๊ฑฐ๋ ๋ฑ๊ธ์ด ์๋ ๊ฒฝ์ฐ ๋ฑ์ enum์ ์ฅ์ ์ ์ด์ฉํ ์ ์์ enum์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ ํด์ง ์ ๋ ฅ๊ฐ ๋ด์์ ์ ๋ ฅํ๊ฒ ๋๋ฏ๋ก ์์์น ๋ชปํ ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์์ ๊ฐ์ ์ ๋ ฅํ ๋ String์ด๋ Int๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ ํด์ง ํ์ ์ ์ ๋ ฅํ๋ฏ๋ก ์ข๋ ์ง๊ด์ ์ enum CustomerType: Int { /// ํ๋ ๊ณ์ , default case active /// ํด๋ฉด ๊ณ์ case dormant /// ์ ์ง ๊ณ์ case suspension } CustomerType enum์ ์ ์ํด ์ค (enum์์ ๊ฐ case์ ๊ฐ์ ์ง์ ํด ์ฃผ์ง ์๋๋ค๋ฉด ์ ์ํด์ค ์์๋๋ก 0, 1, 2.. ๊ฐ ๋ฉ๋๋ค. ๋ง์ฝ ๊ฐ์ฅ ์ฒ์ ์ ์๋ case์ 71์ ์ง์ ํด ์ฃผ์๋ค๋ฉด 71, 72, 73... ์์ผ๋ก ๊ฐ์.. 2022. 10. 2. [iOS/Swift] WKWebView์์ Scheme๊ณผ Query๋ก web๊ณผ communicationํ๊ธฐ func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) navigationAction๊ณผ decisionHandler๋ฅผ ๊ฐ์ง ์ด ํจ์๋ฅผ ๊ตฌํ return decisionHandler(.allow) // or return decisionHandler(.cancel) ํน๋ณํ ์ผ์ด ์๋ค๋ฉด decisionHandler๋ก allow๋ฅผ ์ ๋ฌ. URL์ ์ํ ํ๋ฉด ์ด๋, ๋ก๋๋ฅผ ๋ง์ผ๋ ค๋ฉด cancel๋ก ์ ๋ฌ URL Scheme ์ป์ด์ค๊ธฐ if let url = navigationAction.request.ur.. 2022. 9. 26. [iOS/Swift] WKWebView URL ๋ก๋ ํ๊ธฐ, Request ์ค์ ํ๊ธฐ private let wkWebView = WKWebView() ์ ์ญ ๋ณ์ ์์ฑ var rootURL: URL? { didSet { setupRequest() } } ์ด๋์ ๋ผ์ด์ ๋ก ์ค์ ํด๋ ๋๊ณ rootURL ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด์ didSet์ผ๋ก ์ต์ ๋น rootURL์ด ์ค์ ๋๋ฉด setupRequest()๋ฅผ ํธ์ถํจ private func setupRequest() { guard let rootURL = rootURL else { return } print("\(rootURL) \(#file.split(separator: "/").last!)-\(#function)[\(#line)]") let request = URLRequest(url: rootURL) wkWebView.load(request) wkWebV.. 2022. 9. 26. [Framer] Figma ํ๋ก์ ํธ Framer๋ก ์ด๋์ํค๊ธฐ(Importing) Framer๋ ํ๋กํ ํ์ ์ ์ต์ ํ๋ ํด์ ๋๋ค. ๊ธฐ์กด์ ์ค์ผ์น๋ ํผ๊ทธ๋ง๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์์๋ค๋ฉด ์ด๋ฅผ Framer์ ๊ฐ์ง๊ณ ์์ ์์ ์ ์งํ ํ ์ ์์ต๋๋ค ๐ฅณ Figma์์ Framer๋ก ์ด๋ ์ํค๊ธฐ ์ํ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ํผ๊ทธ๋ง์ ๋์ฌ ๋ณด๋์์ ์์ ํ์ผ๋ก ์ด๋ํฉ๋๋ค ํ๋๋จธ๋ก ์ํฌํธํ ๋ ์ด์ด๋ฅผ ๋๋๊ทธ ํน์ ์ ํํด ์ค๋๋ค. ๊ทธ ํ ์๋จ์ ๋ํ ์ฌ๋ฌ๊ฐ๊ฐ ๊ทธ๋ ค์ ธ ์๋ ์์ด์ฝ์ ๋๋ฅธ ๋ค Plugins์์ "Figma to HTML with Framer"๋ฅผ ๊ฒ์ํด ์ค๋๋ค. ์ ์ด๋ฏธ์ง์์ ๋๋ฒ์งธ์ ์๋ ํ๋ฌ๊ทธ์ธ์ด ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋ ๋ํ๋๋ "Run"๋ฒํผ์ ๋๋ฅด๋ฉด ํผ๊ทธ๋ง์ ๋ ์ด์ด๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ๊ฒ ๋ฉ๋๋ค. ์ ์ฐฝ์ด ๋ํ๋๋ค๋ฉด "Copy to clip.. 2022. 9. 25. [iOS/RxSwift] RxSwift์ RxRealm์ผ๋ก UICollectionView์ฌ์ฉํ๊ธฐ Realm์ Object๋ฅผ ์์ ๋ฐ๋ ํด๋์ค๋ฅผ ํ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ ์ฝ์ด ์ฌ ์ ์์ต๋๋ค. private lazy var results = try! Realm().objects(Category.self) keyPath์ ์ ๋ฌ๋ ํ๋๊ฐ์ผ๋ก ๋ด๋ฆผ์ฐจ์, ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํด์ ์ ๋ฌ ๋ฐ์ ์ ์์ต๋๋ค. id ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ํด์ฃผ๋ฉด ์๋์ฒ๋ผ ์์ฑํด ์ฃผ๋ฉด ๋ฉ๋๋ค. var updates = try! Realm().objects(Category.self).sorted(byKeyPath: "id", ascending: true) ์ด๋ ๊ฒ ์ ์ด ์ฃผ์ด๋ ๋๊ณ ์ ์ญ ๋ณ์๋ก realm ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋นผ์ฃผ์ด๋ ๋ฉ๋๋ค let realm = try! Realm() var updates = realm.objects.. 2022. 9. 19. [iOS/Swift/Library] IQKeyboardManager FirstResponder๋ UITextField์ UITextView๊ฐ ํ๋ฉด์ ๋ณด์ด๋๋ก ํ๋ฉด ์์น๋ฅผ ์๋์ผ๋ก ์ด๋ ์์ผ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ AutoTool์ ์ฌ์ฉํ๋ฉด ํค๋ณด๋์ ํด๋ฐ๋ก ๋ค์ ํน์ ์ด์ UITextField๋ UITextView๋ก ์ด๋ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต ํจ IQkeyboardManager.shared.enable = true ๋ฅผ AppDelegate๋ SceneDelegate์ ์ถ๊ฐํด ์ค class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchO.. 2022. 9. 16. [iOS/XCode] ์๋ฎฌ๋ ์ดํฐ์์ ํ๊ธ ์ํ ์ฌ์ฉํ๊ธฐ, ํค๋ณด๋ ๊บผ๋ด๋ ๋ฒ ์ฐ์ ์๋ฎฌ๋ ์ดํฐ์์ ํค๋ณด๋๋ฅผ ๊บผ๋ด๋ ๋จ์ถํค๋ Command + Shift + k ์ ๋๋ค ์๋ฎฌ๋ ์ดํฐ์ ํ๊ธ ์ ๋ ฅ์ด ์๋ ๋๊ฐ ์๋๋ฐ ์ฌ์ง์ด ํค๋ณด๋์ ํ๊ธ ์ํ๋ ์์ด์ ๋ถํธํ ๋ ์ค์ ์์ ์ฝ๊ฒ ํ๊ธ ์ํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค~ Simulator ์์ Settings๋ก ๋ค์ด๊ฐ ์ค๋๋ค General ๋ฉ๋ด๋ก ๋ค์ด๊ฐ ์ฃผ์ธ์! ์๋จ์ Keyboard ๋ฉ๋ด๊ฐ ๋ณด์ผ ๊บผ์์! ํญํด์ค๋๋ค Keyboards ๋ก ๋ค์ด๊ฐ ์ค๋๋ค! ์ฒซ๋ฒ์งธ ํญ๋ชฉ์ด์์ Add New Keyboard ๋ฅผ ๋๋ฌ์ ํค๋ณด๋๋ฅผ ์ถ๊ฐํด ์ค์๋ค Korean๋ฅผ ์ ๋ ฅํด ์ค๋๋ค ์ผ๋ถ๋ถ๋ง ์ ๋ ฅํด๋ ํ๋จ์ ๋น๋๋ค! Standard ๋๋ฌ์ฃผ์๊ณ Done ๋๋ฌ ์ฃผ์ธ์ ์๋ฎฌ๋ ์ดํฐ ํค๋ณด๋์์ ์ง๊ตฌ๋ณธ ๋ชจ์ ๋๋ฅด์๋ฉด ์์ด/ํ๊ธ ํ ๊ธ ๋ฉ๋๋ค ๐ฅณ 2022. 9. 14. [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 4 (child coordinator ์ญ์ ํ๊ธฐ) 2022.07.10 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 1 (Coordinator์ AppCoordinator ๊ตฌํํ๊ธฐ) 2022.07.11 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 2 (childCoordinator๋ก ์ด๋ํ๊ธฐ) 2022.07.12 - [๐ iOS/Architecture Pattern] - [Swift] MVVMC ์์ธํ ์์๋ณด๊ธฐ - ํํ ๋ฆฌ์ผ 3 (๋ฒํผ ๋๋ฌ์ ํ๋ฉด ์ ํํ๊ธฐ) ํด๋น ํํ ๋ฆฌ์ผ์ ์ ๊ธ๊ณผ ์ด์ด์ง๋๋ค! ์ด์ ํฌ์คํ ์์ Coordinator์ ํ๋ฉด ์ ํ์ ๋ํด ๋ค๋ฃจ์ด ๋ณด์์ต๋๋ค. MVVMC์์ View์ Coordinator์ ๋ํด.. 2022. 9. 5. [iOS] Fastlane์ผ๋ก ์ฑ ๋ฐฐํฌ ์๋ํํ๊ธฐ - ์ด๋ก ๊ณผ ์ค์น ์ Fastlane์ ์ฌ์ฉํ์๊น? ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ด์ ์ ์งํํ ํ๋ก์ ํธ์ ์ ์ง ๋ณด์๋ฅผ ๋งก๊ณ ์์ต๋๋ค. ์ ์ง ๋ณด์ ์ค์ธ ์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ง ์์ง๋ง ์กฐ๊ธ์ ์์ ๋ง์ผ๋ก ํ ์คํธ๋ฅผ ์ํด 6๊ฐ์ ์ฑ์ ๋น๋ํ์ฌ in house๋ก ๋ฐฐํฌํด์ผ ํ์ต๋๋ค. ๊ทธ ํ QA๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ ์ด ๊ธฐ๊ฐ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๊ฑฐ๋ ์์ ํด์ผ ํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ค์ ์์ ์ ํ๊ณ 6๊ฐ์ ์ฑ์ ๋น๋ํด์ ๋ฐฐํฌํด์ผ ํ์ด์. QA๊ฐ ๋๋๋ฉด ์ํฐํ๋ผ์ด์ฆ ๊ณ์ ์ผ๋ก ๋ค๋ฅธ ์๋ฒ์ ๋ฐฐํฌํ๊ฒ ๋ฉ๋๋ค. ์ฝ๋ ์์ ์ด๋ ์๊ตฌ ์ฌํญ์ ์ ์ง๋ง ์กฐ๊ธ์ ์์ ์ผ๋ก 6๊ฐ์ ์ฑ์ ๋น๋(ํ๋ ๊ฒ๋ ์ค๋ ๊ฑธ๋ฆผ)์ ๋ฐฐํฌํ๋ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์๋ ์ํฅ์ด ์ค๋๋ผ๊ตฌ์(์ฌ๋ฌ๊ฐ์ ์ฑ์ผ๋ก ๋ถ๋ฆฌํ์ง ์๊ธฐ ์ํด ํ์๋ฅผ ์์ญ ๋ฒ ํ์ง๋ง ์์ ์ฑ์ ์ด์ .. 2022. 9. 5. [CI/CD] ์ง์์ ํตํฉ๊ณผ ์ง์์ ๋ฐฐํฌ์ ๊ฐ๋ ๊ณผ ์ฅ์ Intro ์ด์ ์ ๊ต์ฅํ ํฅ๋ฏธ๋ก์ด ์์์ ๋ณธ ์ ์ด ์์ต๋๋ค. ํ๋์ ์๋น์ค๋ฅผ ์ด๋ป๊ฒ ๊ธฐํํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋์ง์ ๊ด๋ จ๋ ์์์ด์์ต๋๋ค. ์ฌ์ฉ์๋ง๋ค ๋ฒํผ ๋ฐฐ์น๋ฅผ ๋ค๋ฅด๊ฒ ๋ณด์ด๊ฒ ํด์ ์ด๋ค ์์น์ ๋ฒํผ์ด ๋ ๋ง์ ์ฌ์ฉ์์๊ฒ ๋๋ ธ๋์ง ๋ก๊ทธ๋ฅผ ์์งํ๊ณ , ์ด์ ๋ฐ๋ผ ์์ฌ ๊ฒฐ์ ์ ํ๋ค๋ ๋ด์ฉ์ด์์ต๋๋ค. ์ด๋ ์ด ๋ฒํผ์ ์์น๋ฅผ ๋ฐ๊พธ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ตฌ์ถํด ๋์์ ์กฐ๊ธ์ ์์ ์ผ๋ก ๋น ๋ฅด๊ฒ A์ B ์์ ํ ์คํธ ํด ๋ณผ ์ ์์๋ค๊ณ ํฉ๋๋ค. ์ด๋ ๊ฒ ์์ ์ผ๋ถ๋ถ์ ์์ ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์๋น์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ๋๊ณ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ์ฌ ์๋น์คํ๋ ์ผ์ด ์ฆ์ต๋๋ค. ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ๊ฒ ๋๋ฉด ์ด ์ฝ๋์ ๋ํ ๊ฒ์ฆ์ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ณ QA๊ฐ ์ด๋ฃจ์ด์ง .. 2022. 9. 3. unable to boot the simulator launchd failed to respond ํด๊ฒฐ๋ฒ ์๋จ xCode ํด๋ฆญ > Preferences ํด๋ฆญ Locations ํญ ํด๋ฆญ > ํ๋จ Derived Data ์ ํด๋ ๊ฒฝ๋ก์์ ํด๋ ์ด๋ํ๊ธฐ ์์ด์ฝ ํด๋ฆญ ํด๋์์ ํ์์๋ DerivedData ์ง์ ์ฃผ๊ธฐ ๋น๋ ํ ์๋ฎฌ๋ ์ดํฐ ์ฌ ์คํ 2022. 8. 22. ์ด์ 1 ยทยทยท 4 5 6 7 8 9 10 ยทยทยท 17 ๋ค์