๐ iOS/iOS (8) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [iOS] fastlane์ ์ด์ฉํด ๋ฐฐํฌ ์๋ํํ๊ธฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :)์ค๋์ ํ๋ก์ ํธ์ fastlane์ ๋์ ํ ๊ฒฝํ์ ํ๋ฒ ๊ณต์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค!!๋ฐฐํฌ ์๋ํ๋?๋จผ์ , ๋ฐฐํฌ ์๋ํ๊ฐ ๋ฌด์์ธ์ง๋ถํฐ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค!๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ฉด CI/CD๋ผ๋ ๋จ์ด๋ฅผ ํ๋ฒ์ฏค ์ ํด๋ณด์ จ์ํ ๋ฐ์, ๋ฐฐํฌ ์๋ํ๋ CD์ ํด๋นํฉ๋๋ค.CI/CD๋ ์ฑ ๊ฐ๋ฐ ๋จ๊ณ์ ์๋ํ๋ฅผ ํตํฉํ๋ ์ฑ ์ ๊ณต ๋ฐฉ์์ผ๋ก, ์ง์์ ํตํฉ(Continuous Integration)/์ง์์ ์ ๊ณต ๋๋ ๋ฐฐํฌ(Continuous Deployment ๋๋ Delivery)๋ฅผ ๋ปํฉ๋๋ค.๋ฐฐํฌ๋ฅผ ์๋ํ ํด์ผํ๋ ์ด์ ?๊ทธ๋ ๋ค๋ฉด ๋ฐฐํฌ ์๋ํ๋ ์ ํ์ํ ๊น์?๋น์ฐํ ๋ฐฐํฌ๋ฅผ ์๋ํํ์ง ์๊ณ , ์๋์ผ๋ก ํ ์๋ ์๊ฒ ์ฃ . ํ์ง๋ง, ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์ด ๊ณผ์ ์์ ์ค.. [iOS] ์ด๋ฏธ์ง์ ์ํ๋ ๋ชจ์์ ๋ง์คํฌ ์ ์ฉํ๊ธฐ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค~!UI ๊ตฌํ์ ๊ดํ ๊ฒ์๊ธ์ ์ฒ์ ์ ๋ก๋ ํ๋ ๊ฒ ๊ฐ์๋ฐ์, ๋ณต์กํ UI๋ฅผ ๊ตฌํํ๋ฉด์ ๊ฒช์๋ ๋ฌธ์ ๋ค ํน์ ๊ณ ๋ฏผํ๋ ์ ์ ๋ธ๋ก๊ทธ์๋ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋์์ผ๋ฉด ์ข์์ ๊ฑธ,, ํ๋ ์๊ฐ์์์ ํ๋ก์ ํธ์์ ๊ฝค๋ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์ ํฌ์คํ ํ๋ ค๊ณ ํฉ๋๋ค..! (๊ณต์ ํ๋ฉด ์ข์ผ๋๊น์..ใ )์์ผ๋ก๋ ์ด์ ํด๊ฒฐ์ ๋ํ ๋ด์ฉ๋ ํฌ์คํ ์ ํด๋ณด๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค!๋ณต์กํ ๋ชจ์์ ๋ง์คํฌ๋ฅผ ์ด๋ฏธ์ง์ ์ ์ฉํ๊ธฐ์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ฏธ์ง์ ์ฌ๊ฐํ, ์์ฒ๋ผ ๊ฐ๋จํ ๋ํ์ด ์๋๋ผ ๋ณต์กํ ๋ชจ์์ ๋ง์คํฌ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต์ ํด๋ณด๊ฒ ์ต๋๋ค!!์์ ์ ์ฐธ์ฌํ์๋ ํ๋ก์ ํธ์์ ์๋น์ค์ ์ฌ๋ณผ์ธ ๋ง์๋ฉ๋ก ๋ชจ์์ด ์ฌ๋ฌ ํ๋ฉด์์ ๋ณด์์ต๋๋ค.ํนํ, ๋ง์๋ฉ๋ก ๋ชจ์์ ๋ง์คํฌ๊ฐ ์ ์ฉ๋ ์ด๋ฏธ์ง๊ฐ ํ๋กํ ์ฌ์ง์ผ๋ก ์ ์ฉ๋์ด ์ฑ ๊ณณ๊ณณ์์ ์์ฃผ ์ฌ์ฉ๋์์ต๋.. [iOS] TDD์ Unit Test TDD(Test-Driven Development) ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(Test-driven development TDD)์ด๋, ๋ฐ๋ณต ํ ์คํธ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๋ฐฉ๋ฒ๋ก ์ผ๋ก, ๋งค์ฐ ์งง์ ๊ฐ๋ฐ ์ฌ์ดํด์ ๋ฐ๋ณตํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ค ํ๋์ ๋๋ค. TDD ๊ฐ๋ฐ์ฃผ๊ธฐ Red: ์คํจํ๋ ํ ์คํธ ์ฝ๋ ์์ฑ Green: ์คํจํ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํ ์ต์ํ์ ์ฝ๋ ๋ณ๊ฒฝ (ํ ์คํธ์ ์ฑ๊ณต) Refactor: ํ ์คํธ์ ์ฑ๊ณต์ ์ ์งํ๋ฉด์ ์ฝ๋๋ฅผ ๋ ๋์ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ์ผ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์ vs. TDD ๊ฐ๋ฐ ๋ฐฉ์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ์์ ์๊ตฌ์ฌํญ ๋ถ์ → ์ค๊ณ → ๊ฐ๋ฐ → ํ ์คํธ → ๋ฐฐํฌ์ ํํ์ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ต๋๋ค. ํด๋น ๋ฐฉ์์์๋ ์ค๊ณ์ ๋ฐ๋ผ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์๋ฃํ ํ ๋ฐฐํฌํ๊ธฐ ์ , ํด๋น ์ฝ๋์ ์์ ์ฑ์ด๋ ๋ฒ๊ทธ๊ฐ ์๋์ง๋ฅผ ๊ฒ์ฌํ.. [iOS] iOS ํ์ผ ์์คํ File System ํ์ผ ์์คํ ์ ๋ฐ์ดํฐ ํ์ผ, ์ฑ ๋ฐ ์ด์ ์ฒด์ ์์ฒด์ ๊ด๋ จ๋ ํ์ผ์ ์๊ตฌ ์ ์ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ผ ์์คํ ์ ๋ชจ๋ ํ๋ก์ธ์ค์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฆฌ์์ค ์ค ํ๋์ ๋๋ค. iOS File System Apple ์ํ๊ณ์ ๊ธฐ๋ณธ ํ์ผ ์์คํ ์ APFS๋ก, macOS, iOS, watchOS ๋ฐ tvOS์ ๊ธฐ๋ณธ ํ์ผ ์์คํ ์ ๋๋ค. (iOS 10.3 ์ด์, macOS HighSierra ์ด์) iOS ํ์ผ ์์คํ ์ ์์ฒด์ ์ผ๋ก ์คํ๋๋ ์ฑ์ ๋ง์ถฐ์ ธ ์์ต๋๋ค. ์์คํ ์ ๋จ์ํ๊ฒ ์ ์งํ๊ธฐ ์ํด iOS ์ฅ์น ์ฌ์ฉ์๋ ํ์ผ ์์คํ ์ ์ง์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ์ฑ์ ํด๋น ๊ท์น์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. (์ฌ์ฉ์๊ฐ ํ์ผ ์์คํ ์ ์ง์ ์ก์ธ์ค ํ ์ ์๋ค๋ฉด ํ์ผ ์์คํ ์ด ๋ด๋ถ ๊ท์น์ ํตํด์๋ง ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ .. [iOS] ํค์ฒด์ธ(Keychain)์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค :) ์ต๊ทผ์ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ํ๋ฉฐ ํ ํฐ๊ณผ ๊ฐ์ ์ค์ํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ข ๋ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ณ ์ ํค์ฒด์ธ์ ์ด์ฉํด๋ณด์๋๋ฐ์, ํค์ฒด์ธ์ ๋ํ ๋ด์ฉ๋ ์ ๋ฆฌํ ๊ฒธ, ํค์ฒด์ธ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ณต์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค ! Keychain Service ํค์ฒด์ธ ์๋น์ค๋ Apple์ด ์ ๊ณตํ๋ ๋ณด์ ํ๋ ์์ํฌ์ ๋๋ค. ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ํค์ฒด์ธ ์๋น์ค API๋ ์ฑ์ ํค์ฒด์ธ์ด๋ผ๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋นํธ๋ฅผ ์ ์ฅํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ํธ์ ๊ฐ์ด ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ์ฆ, ์ํธํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Keychain์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ ์ ์๋๋ก ํฉ๋๋ค. ํค์ฒด์ธ์ ์ํธ์๋ง ๊ตญํ๋์ง ์์ต๋๋ค. ์ ์ฉ ์นด๋ ์ ๋ณด๋ ๊ฐ๋จํ ๋ฉ.. [iOS/Architecture] Coordinator Pattern ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! ์ค๋์ ์ฐธ์ฌํ๊ณ ์๋ ํ๋ก์ ํธ์ ๋์ ํ๊ฒ ๋ ์ฝ๋๋ค์ดํฐ ํจํด์ ๋ํด ์ ๋ฆฌํด๋ณด๋ คํฉ๋๋ค. ์ฝ๋๋ค์ดํฐ๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๋ ๊ฒ์ด ์ฒ์์ด๋ผ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ ์ฉํ๋ ๊ณผ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ํฌ์คํ ์์๋ ์ฝ๋๋ค์ดํฐ ํจํด์ด ๋ฌด์์ธ์ง ์์๋ณด๋ ์ ๋๋ก๋ง ์ ๋ฆฌํ๊ณ , ๋ค๋ฅธ ํฌ์คํ ์ผ๋ก ๊ตฌ์ฒด์ ์ธ ์ ์ฉ๊ธฐ๋ฅผ ๋ค๊ณ ์ค๋๋ก ํ๊ฒ ์ต๋๋ค!! ์ด ์ ์ฐธ๊ณ ํด์ ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค : ) Coordinator Pattern์ ๋์ ํ๊ฒ ๋ ๊ณ๊ธฐ MVVM ์ํคํ ์ฒ๋ฅผ ์ ์ฉํด UI์ ๋น์ฆ๋์ค ๋ก์ง ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ํ๋ฉด์ ํ์ ์ด๋์ ํด์ค์ผํ๋๊ฑฐ์ง..? ๋ผ๋ ์๋ฌธ์ด ๋ค์์๋๋ฐ์, ํ๋ฉด์ ํ์ด ๋ฐ์ง๊ณ ๋ณด๋ฉด UI์ ๊ด๋ จ๋ ๋ถ๋ถ์ ์๋์ง๋ง ViewController๊ฐ ๋ค์ ํ๋ฉด์ present ํด์ฃผ์ด์ผํ๋๊น.. [iOS] ReactorKit์ด๋? ์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค! ์ค๋์ ์ต๊ทผ ์งํ ์ค์ธ ํ๋ก์ ํธ๋ฅผ MVVM ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋ง์ ํ๋ฉฐ ๋์ ํ๊ฒ๋ ReactorKit(๋ฆฌ์กํฐํท)์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์!! ReactorKit์ด๋? ReactorKit์ ๋ฐ์ ๋ฐ ๋จ๋ฐฉํฅ Swift ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ฅผ ์ํ ํ๋ ์์ํฌ์ ๋๋ค. MVVM๊ณผ ๊ฐ์ ์ํคํ ์ฒ์ ๋ํด ๊ณต๋ถํด๋ณด์ ๋ถ๋ค์ด๋ผ๋ฉด ๋๋ผ์ จ๊ฒ ์ง๋ง ์ํคํ ์ฒ๋ ๊ท๊ฒฉํ๋ ํ์์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์, ํ์ฌ๋ง๋ค ์ฐ๋ ๋ฐฉ์์ด ์ ๋ง ๋ค๋ฅด๊ณ ๋ค์ํฉ๋๋ค. ํ์ง๋ง, ReactorKit์ ํ์์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ MVVM ์ํคํ ์ฒ๋ฅผ ํ๋ก์ ํธ ๋ด์์ ์ ํํ๋ ๋ฐฉ์(๊ฐ์ ํ ํ๋ฆฟ)์ผ๋ก ์ ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์ค์ ๋ก ์์ ๊ฐ์ด ๋ง์ ํ์ฌ์์ ReactorKit์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํฉ๋๋ค! ReactorKit.. [iOS] UserDefaults๋? ์๋ ํ์ธ์! ํฐ์คํ ๋ฆฌ ์ฒซ ๊ธ๋ก UserDefaults์ ๋ํด ์ฐ๊ฒ ๋์๋ค์,, ํฐ์คํ ๋ฆฌ๋ฅผ ๊พธ์คํ ์จ๋ณด์๋ ์ํด ๋ค์ง์ ํ๋ฉฐ..UserDefaults์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.. UserDefaults๋?๐ค ๋จผ์ , ์ ํ ๊ณต์ ๋ฌธ์์๋ UserDefaults๊ฐ ์ด๋ป๊ฒ ์ ์ ๋์ด์์๊น์?? ์ฑ ์คํ ์ ๋ฐ์ ๊ฑธ์ณ key-value ์์ ์ง์์ ์ผ๋ก ์ ์ฅํ ์ ์๋ ์ฌ์ฉ์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ธํฐํ์ด์ค์ด๋ค. ์ ๋๋ก ํด์ํ ์ ์์ ๊ฒ ๊ฐ๋ค์! ์ฑ์์ ์ฌ์ฉ๋๊ฑฐ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋คํธ์ํฌ ์๋ฒ ์ด์ฉ, CoreData, UserDefaults ๋ฑ์ด ์์ต๋๋ค. ์ด ์ค UserDefaults ๋ ๋ฐํ์ ํ๊ฒฝ์์ ๋์ํ๋ฉด์, ์ฑ์ด ์คํ๋๋ ๋์ ๊ธฐ๋ณธ ์ ์ฅ์ (default dat.. ์ด์ 1 ๋ค์