๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€178

[Xcode/Swift] Multiple Target 1. duplicate Target ํ˜น์€ ํ•˜๋‹จ์— ์žˆ๋Š” + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ถ”๊ฐ€ํ•ด ์ค˜๋„ ๋จ. ์‚ฌ์šฉ์ž ์ •์˜ property list๊ฐ€ ๋‹ด๊ธด info.plist ํŒŒ์ผ๋„ ํ•จ๊ป˜ ๋ณต์‚ฌ๋จ 2. ๋”๋ธ” ํด๋ฆญํ•˜์—ฌ Target ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์Šคํ‚ด ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹จ ๋นŒ๋“œ ์ƒํƒœ๋ฐ”์—์„œ Manage Schemes ์„ ํƒ 3. ์Šคํ‚ด ์„ ํƒ ํ›„ ํƒญ ๋ˆ„๋ฅด๋ฉด ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ 4. ๊ฐ Configuration์—์„œ ์‚ฌ์šฉํ•  Custom Flag์„ค์ • ๊ฐ€๋Šฅ Swift Compiler์—์„œ Custom Flags ์„ค์ • ๊ฐ€๋Šฅํ•จ 2023. 4. 26.
[Xcode/Swift] User-Defined Build Settings Build Settings์—์„œ Configuration ๋ณ„๋กœ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ Configuration์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ ex) host url 1. Build Settings ์—์„œ Add User-Defined Setting ์„ ๋ˆŒ๋Ÿฌ ์‚ฌ์šฉ์ž ์ •์˜ ์„ธํŒ…์„ ์ถ”๊ฐ€ 2. ์‚ฌ์šฉํ•  ํƒ€์ดํ‹€์„ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด Configuration ๋ณ„๋กœ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ 3. Info.plist์—์„œ BASE_URL๋กœ ์ ‘๊ทผ์‹œ Build settings ์—์„œ ์ •์˜ํ•ด ์ค€ BASE_URL ๊ฐ’์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก $(BASE_URL) ๋กœ ์„ค์ • ํ•ด ์คŒ Info.plist๋ž€ key/value ์Œ์œผ๋กœ ๋นŒ๋“œ ํƒ€์ž„ ๋™์•ˆ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฐ’. xCode๋Š” ๋นŒ๋“œ ๋˜๋Š” ๋™์•ˆ Build setting์„ ์‚ดํŽด๋ณด๊ฒŒ ๋˜๋Š”๋ฐ .. 2023. 4. 26.
[Xcode/Swift] Configuration ๊ด€๋ฆฌํ•˜๊ธฐ Intro Dev -> QA -> Release์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ๊ฐ ๋‹จ๊ณ„์—์„œ ์š”๊ตฌํ•˜๋Š” ๋นŒ๋“œ ์„ธํŒ…์ด๋‚˜ ์ƒ์ˆ˜์˜ ์ •์˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ ex) URL host for Networking, Firebase info.plist etc.. Configuration์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ Configuration์— ํ•„์š”ํ•œ ๋นŒ๋“œ ์„ธํŒ…์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Œ Multiple targets์„ ํ†ตํ•ด์„œ๋„ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์„ ๋ถ„๊ธฐ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Target์€ MacOS, iOS ๋“ฑ์˜ ๊ธฐ๊ธฑ ํƒ€๊ฒŸ, ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ ์ผ๋ถ€ ๋กœ์ง์ด ๋‹ฌ๋ผ ๋‹ค๋ฅธ ์•ฑ์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ์•ฑ ๋“ฑ์—์„œ ์‚ฌ์šฉ Configuation์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ์ž‘์—… ํ™˜๊ฒฝ์„ ๋ณ€๊ฒฝํ•ด ์ฃผ๋Š” ๊ฒƒ ํ•˜๋‚˜์˜ ์•ฑ์—์„œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉ ๋ฐฐํฌ์‹œ์—๋„ Configu.. 2023. 4. 26.
[iOS/Swift] ์•ฑ ๋ฑƒ์ง€ ๊ฐฏ์ˆ˜ ๋ณ€๊ฒฝ UIApplication.shared.applicationIconBadgeNumber = 90 ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋Š” ํ‘œ์‹œ ๋˜์ง€ ์•Š์Œ ํŠน์ • ๋™์ž‘์‹œ ๋ฑƒ์ง€์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์œ„ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด ์ค˜์•ผ ํ•จ ๋ฑƒ์ง€๋ฅผ ์ œ๊ฑฐ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ 0์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฑƒ์ง€๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์Œ 2023. 4. 26.
[iOS/Swift] Alamofire ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ UnitTest URLSession์˜ dataTask๋ฅผ ํ”„๋กœํ† ์ฝœ๋กœ ๋งŒ๋“  URLSessionProtocol์„ URLSession๊ณผ NetworkManager์˜ session์˜ ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ด์„œ, ์‹ค ์‚ฌ์šฉ ์•ฑ์—์„œ๋Š” ๊ธฐ๋ณธ URLSession ๋™์ž‘์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‹œ์—๋Š” Mock URLSession์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ์˜ˆ์‹œ๋กœ ๋งŽ์ด ๋‚˜์™”๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ Alamofire์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ํ•œ ๋ฒˆ ๋” ์ถ”์ƒํ™” ํ•œ Moya๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ ์šฐ์„ ์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜์ •์ด ์ตœ๋Œ€ํ•œ ์ ์€ ์ชฝ์œผ๋กœ Alamofire๋กœ Unit Test๋ฅผ ์‹œ๋„ํ•ด ๋ณด์ž! Session ๊ธฐ์กด์— ์‚ฌ์šฉํ•œ NetworkManager๋Š” Singleton ํŒจํ„ด์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. ์™ธ๋ถ€์—์„œ ์ง์ ‘ Session์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€์—์„œ req.. 2023. 4. 21.
[Unit Test] Test Double Unit Test๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ request๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋จ. ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋กœ์ง์„ ์ž‘์„ฑํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ Unit Test๋Š” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ง„ํ–‰๋˜์–ด์•ผ ํ•จ ์•ˆ์ •์„ฑ ์™ธ์—๋„ ์‹ค์ œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์†๋„๊ฐ€ ๋Š๋ ค์ง ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ๊ฐ์ฒด๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋„คํŠธ์›Œํ‚น ํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ…Œ์ŠคํŠธ ๋”๋ธ”์ด๋ผ๊ณ  ํ•จ Dummy ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์€ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด => ์ „๋‹ฌ์€ ๋˜์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ ์•„๋ฌด๋Ÿฐ ๋™์ž‘์„ ํ•˜์ง€ ์•Š์•„๋„ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฐ์ฒด Fake ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๊ฐ์ฒด์˜ ๋™์ž‘์„ ๋‹จ์ˆœํ™” ํ•ด์„œ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์ด์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ๋•.. 2023. 4. 14.
[iOS/Swift] ๋น„๋™๊ธฐ(async) ํ…Œ์ŠคํŠธ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ๋ฐ ์ถœ์ฒ˜ ์›๋ฌธ Kodeco์˜ iOS Unit Testing and UI Testing Tutorial์„ ๋ฒˆ์—ญํ•œ yoonbumatae์˜ ๊ธ€์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ์•„๋ž˜ ๋‘ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”! https://www.kodeco.com/21020457-ios-unit-testing-and-ui-testing-tutorial iOS Unit Testing and UI Testing Tutorial Learn how to add unit tests and UI tests to your iOS apps, and how you can check on your code coverage. www.kodeco.com http://yoonbumtae.com/?p=4020 Swift.. 2023. 4. 14.
[iOS/Swift] ๋™๊ธฐ(sync) ํ…Œ์ŠคํŠธ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ๋ฐ ์ถœ์ฒ˜ ์›๋ฌธ Kodeco์˜ iOS Unit Testing and UI Testing Tutorial์„ ๋ฒˆ์—ญํ•œ yoonbumatae์˜ ๊ธ€์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ์•„๋ž˜ ๋‘ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”! https://www.kodeco.com/21020457-ios-unit-testing-and-ui-testing-tutorial iOS Unit Testing and UI Testing Tutorial Learn how to add unit tests and UI tests to your iOS apps, and how you can check on your code coverage. www.kodeco.com http://yoonbumtae.com/?p=4020 Swift.. 2023. 4. 13.
[iOS/Swift] @testable Swift์˜ ๊ธฐ๋ณธ Access-Level์€ internal internal์€ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์—‘์„ธ์Šค ํ•ด์ฃผ์–ด์•ผ ํ•จ -> Target์—์„œ internal๋กœ ์ •์˜ ๋œ ๋ ˆ๋ฒจ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋จ ๋Œ€๋ถ€๋ถ„ ๊ฐœ๋ฐœ ์‹œ ๋”ฐ๋กœ Access Level์„ ์ •์˜ํ•ด ์ฃผ์ง€ ์•Š์Œ ๋งŒ์•ฝ testabl๋กœ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๋‹จ์œ„์—์„œ public์œผ๋กœ ์„ ์–ธํ•ด ์ฃผ์–ด์•ผ ์ ‘๊ทผ ๊ฐ€๋Šฅ Solution 1. Enable Testability build setting์„ Yes๋กœ ์„ค์ •. Xcode ๋Š” ์ปดํŒŒ์ผ ์ค‘์— -enable-testing ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จ complied ๋ชจ๋“ˆ์—์„œ ์„ ์–ธ๋œ swift entities๊ฐ€ ๋†’์€ ๋ ˆ๋ฒจ์˜ access ์ˆ˜์ค€์œผ๋กœ ์„ค์ •๋จ 2. @test.. 2023. 4. 13.
[iOS/Swift] XCTestCase ์ƒ์„ฑํ•˜๊ธฐ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ๋ฐ ์ถœ์ฒ˜ ์›๋ฌธ Kodeco์˜ iOS Unit Testing and UI Testing Tutorial์„ ๋ฒˆ์—ญํ•œ yoonbumatae์˜ ๊ธ€์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ์•„๋ž˜ ๋‘ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”! https://www.kodeco.com/21020457-ios-unit-testing-and-ui-testing-tutorial iOS Unit Testing and UI Testing Tutorial Learn how to add unit tests and UI tests to your iOS apps, and how you can check on your code coverage. www.kodeco.com http://yoonbumtae.com/?p=4020 Swift.. 2023. 4. 13.
[iOS/Swift] Unit Test ๋ž€? ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ผ๊ณ  ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„์ธ ๋ชจ๋“ˆ์„ ํ…Œ์ŠคํŠธ ํ•จ ๋ชจ๋“ˆ์ด ์ •ํ•ด์ง„ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•จ(๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•จ) FIRST ๊ธฐ์ค€ Fast(๋น ๋ฆ„) ํ…Œ์ŠคํŠธ๋Š” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ Independent/Isolated(๊ณ ๋ฆฝ๋จ) ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋จ Repeatable(๋ฐ˜๋ณต์ ) ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด์•ผ ํ•จ. ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰์ž(external data Provider ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๋กœ์ง ๊ฐ™์€ ๊ฒƒ), ๋™์‹œ์„ฑ(concurrency) ๋ฌธ์ œ๋กœ ์ธํ•ด ๊ฐ„ํ—์  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ Self-validating(์ž๊ฐ€ ๊ฒ€์ฆ) ํ…Œ์ŠคํŠธ๋Š” ์™„์ „ํžˆ ์ž๋™ํ™”๋˜์–ด์•ผ ํ•จ. ๋กœ๊ทธํŒŒ์ผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•ด์„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด “ํ†ต๊ณผ” ๋˜๋Š” “์‹คํŒจ”์—ฌ์•ผํ•จ Time.. 2023. 4. 10.
[RxSwift] passing viewmodel data to viewController ViewModel var currentSelectedCategoryIdx = PublishSubject() ์ดˆ๊ธฐ๊ฐ’์ด ํ•„์š”์—†๋Š” ๊ฒฝ์šฐ PublishSubject๋กœ ViewModel์— property ์ •์˜ struct Input { // ์ƒ๋žต } struct Output { let changedCategoryIdx: Observable } viewController์—์„œ ๊ฐ’์„ ๋ฐ›์•„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ Output์— ๋ฐ˜ํ™˜ํ•  Observable ํƒ€์ž…์„ ์ •์˜ํ•ด์คŒ func transform(input: Input) -> Output { let changedCategoryIdx = currentSelectedCategoryIdx.asObserver() return Output(changedCategoryIdx: change.. 2023. 3. 25.