๐ŸŽ iOS 23

[Dynamic Islandโ›ฐ๏ธ] Live Activity๋กœ ํ”ผ์ž ๋ฐฐ๋‹ฌ์„ ํ•˜์ž.๐Ÿ• - ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ

์•ˆ๋…•ํ•˜์„ธ์š”...์˜ค๋Š˜์€ ๋‹ค์ด๋‚˜๋ฏน ์•„์ผ๋žœ๋“œ์— ๋Œ€ํ•ด ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์จ๋ณผ๊ฑด๋ฐ,์‚ฌ์‹ค ๋‹ค์ด๋‚˜๋ฏน ์•„์ผ๋žœ๋“œ๊ฐ€ ๋‚˜์˜จ ์ง€๋Š” ๊ฝค ๋์Šต๋‹ˆ๋‹ค. 2023๋…„์ด์—ˆ๋‚˜? ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋™์•ˆ ๊ด€์‹ฌ์„ ๊ฐ–์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.์™œ๋ƒ๋ฉด ์ œ ํฐ์€ ๋‹ค์ด๋‚˜๋ฏน ์•„์ผ๋žœ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์•„์ดํฐ12์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.ใ…‹ใ…‹ใ…‹ ๊ทธ๋Ÿฌ๋‚˜,์ตœ๊ทผ์— ํฐ์„ ๋ฐ”๊พธ๊ณ  ๋‚œ ํ›„ ๊ฐ‘์ž๊ธฐ ์‹ ๊ฒฝ์“ฐ์ด๋”๋ผ๊ตฐ์š”...๋‹ค์ด๋‚˜๋ฏน ์•„์ผ๋žœ๋“œ... ๊ท€์—ฝ๋„ค... ๋‚˜๋„ ํ•ด๋ณผ๊นŒ...? ใ…Ž_ใ…Ž ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.์ผ๋‹จ ์œ„์ ฏ๊ณผ ๊ฐ™์ด SwiftUI ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ƒˆ๋กœ์šด ํƒ€๊ฒŸ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•˜๊ณ ,์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋Š” ์•ฑ์—์„œ ์กฐ์ ˆํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. File > New > Target > 'Widget Extension' ์œผ๋กœ ์œ„์ ฏ ์ต์Šคํ…์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š”๋ฐ,Include Live Activities๋ฅผ ๊ผญ ์ฒดํฌํ•ด์ค˜์•ผํ•ฉ..

๐ŸŽ iOS 2025.05.29

[iOS/NFC] CoreNFC๋กœ NFC ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฆ˜ ์œ ํ–‰ํ•˜๋Š” '๋„ค์žŽํด๋กœ๋ฒ„ ํ‚ค๋ง'์„ ์•„์‹œ๋‚˜์š”?!๋„ค์žŽํด๋กœ๋ฒ„ ๋ชจ์–‘์œผ๋กœ ๋˜์–ด์žˆ๋Š” ๊ท€์—ฌ์šด ํ‚ค๋ง์„ iPhone๋””๋ฐ”์ด์Šค์— ํƒœ๊ทธํ•˜๋ฉด, ์˜ค๋Š˜์˜ ์šด์„ธ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ท€์—ฌ์›Œ์„œ ์ € ๊ฐ™์•„๋„ ํ•œ๋ฒˆ ์‚ฌ๋ณผ ๊ฒƒ ๊ฐ™์•„์š”...ํ•ด๋‹น ํ‚ค๋ง์˜ ์ฃผ์š” ๊ธฐ์ˆ ์€ NFC ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.iOS ๊ฐœ๋ฐœ์ž๋กœ์จ, ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ์‹ถ์–ด ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.  CoreNFCiOS์—์„œ๋Š” CoreNFC๋กœ ์Šค์บ” ๋ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์ „์—, ์Šค์บ”์„ ํ•  ์ˆ˜ ์žˆ๋Š” NFCํƒœ๊ทธ๋ฅผ ๊ณต์ˆ˜ํ•ด์™€์•ผ๊ฒ ์ฃ ? ๋„ค์ด๋ฒ„์— 'NFC์Šคํ‹ฐ์ปค'๋ผ๊ณ  ์ณ์„œ ๋‚˜์˜ค๋Š” ์•„๋ฌด ์Šคํ‹ฐ์ปค๋ฅผ ๊ตฌ๋งคํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.๋ฌด๋ ค ๊ฐœ๋‹น 230์›?!์‹ธ๋‹ค ์‹ธ  ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์•ฑ์„ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.์—ฌ๋А ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์ด, ์ฝ”์–ดNFC๋ฅผ ์“ฐ๋ ค๋ฉด NFCTagReaderSession ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.  ์ผ..

๐ŸŽ iOS 2024.12.29

Jazzy๋กœ ๋ชจ๋“ˆ ๋ฌธ์„œํ™”๋ฅผ ํ•ด๋ด…์‹œ๋‹ค. ๐ŸŽถ

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋ฌธ์„œํ™”ํ•ด ํŒ€์›๋“ค ๋ฐ ์ธ์ˆ˜์ธ๊ณ„ ์‹œ ๊ณต์œ ํ•  ์ผ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.๋ชจ๋“ˆ์„ ๋ฌธ์„œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํˆด๋กœ Jazzy๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ ์˜ํ•ด์•ผํ•  ์ ์€, ๋ฌธ์„œํ™”๋ฅผ ํ•˜๊ธฐ์— ์•ž์„œ ์ฝ”๋“œ ์ƒ์œผ๋กœ ๊ผญ '์ฃผ์„์ฒ˜๋ฆฌ'๋ฅผ ๊ทœ์น™์— ๋งž๊ฒŒ ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.๊ทœ๊ฒฉ์— ๋งž๊ฒŒ ์ฃผ์„์„ ์ž‘์„ฑํ•ด๋†”์•ผ, Jazzy๊ฐ€ ์ด๋ฅผ ์ธ์‹ํ•˜๊ณ  ๋ฌธ์„œํ™”๋ฅผ ํ•ด์ฃผ๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๋ƒ๊ณ ์š”?๊ฐ“์ง€ํ”ผํ‹ฐํ•œํ…Œ 'Jazzy๋กœ ๋ฌธ์„œํ™”ํ•  ๊ฑด๋ฐ ์ด์— ๋งž๊ฒŒ ์ด ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฃผ์„์„ ์ž‘์„ฑํ•ด์ค˜.'๋ผ๊ณ  ํ•˜๋ฉด ๋‹ค ํ•ด์ค๋‹ˆ๋‹ค. ใ…‹ใ…‹  ์ผ๋‹จ Jazzy๋กœ ๋ฌธ์„œํ™”๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ฃ !Jazzy ์„ค์น˜ sudo gem install jazzy  ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ฐ€์„œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.jazzy \> --module [..

๐ŸŽ iOS 2024.11.17

[DI] Swinject - ์˜์กด์„ฑ ์ฃผ์ž… ํˆด

์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ •์˜ํ•ด์ฃผ๋Š” Swinject๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.๊ธฐ์กด์˜ ๋ฐฉ์‹๊ณผ๋Š” ์‚ด์ง ๋‹ค๋ฅด์ฃ . ํ•œ๋ฒˆ ์•Œ์•„๋ด…์‹œ๋‹ค. Why Swinject? ๊ธฐ์กด: ์ˆ˜๋™ ์˜์กด์„ฑ ์ฃผ์ž… ๊ธฐ์กด์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด, ํด๋ž˜์Šค ์ดˆ๊ธฐํ™” ์‹œ ์˜์กด์„ฑ์„ ์ฃผ์ž…์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.  init() { self.itemService = ItemServiceImpl() self.viewModel = ItemViewModel(itemService: itemService) super.init(nibName: nil, bundle: nil)} Swinject: ์ž๋™ ์˜์กด์„ฑ ์ฃผ์ž… ๊ทธ๋Ÿฌ๋‚˜ Swinject๋ฅผ ์“ฐ๋ฉด, ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. import Swinjectlet container = C..

๐ŸŽ iOS 2024.11.17

Xcode Template์œผ๋กœ ๊ฐœ๋ฐœ์‹œ๊ฐ„ ๋‹จ์ถ•ํ•˜์ž ๐Ÿ•‘

Xcode Template?์ •๋ง ์ œ๊ฐ€ ํ˜„์—…์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ๋Š” ํ…œํ”Œ๋ฆฟ์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.Xcode Template์ด๋ผ๊ณ , ํŒŒ์ผ์„ ์ฒ˜์Œ ์ƒ์„ฑํ•  ๋•Œ ๋œจ๋Š” ์ด ์ฐฝ ์žˆ์ž–์•„์š”? ์—ฌ๊ธฐ ๋œจ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๋‹ค ์• ํ”Œ์ด ๋งŒ๋“  ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.์ด์   ์ œ๊ฐ€ ์ €์˜ ์ฝ”๋“œ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ ์ปค์Šคํ…€ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Custom Template ์ƒ์„ฑํ•˜๊ธฐ์ผ๋‹จ ์ด ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋Š” ๊ฒฝ๋กœ์— ๋“ค์–ด๊ฐ€์„œ,๋‚ด๊ฐ€ ์ปค์Šคํ…€ํ•œ ํ…œํ”Œ๋ฆฟ์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒŒ ๋‹น์—ฐํ•˜๊ฒ ์ฃ ? ๋‹ค์Œ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด๊ฐ€์„œ Finder๋กœ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templatesopen . ๋ณด๋ฉด File Templat..

๐ŸŽ iOS 2024.05.15

[Tuist] ํŠธ์œ„์ŠคํŠธ ์ถ”๋ฉด์„œ~๐Ÿ•บ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“ˆํ™” ์‹œํ‚ค๊ธฐ

Tuist๋ฅผ ์“ฐ๊ณ ์ž ํ•˜๋Š” ์ด์œ Tuist๋ฅผ ์“ฐ๋ฉด, ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ตฌ์กฐ๋Œ€๋กœ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด์ค€๋‹ค.์š”์ฆ˜๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ํŽธํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ์„๊นŒ๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์ž‘์—…์„ ํ–ˆ๋˜ ํ„ฐ๋ผ,ํ•œ๋ฒˆ์— ๋ชจ๋“ˆํ™”๋ฅผ ์ž๋™์œผ๋กœ ์‹œ์ผœ์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๊ณ„์† ์จ๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ์‚ฌ์‹ค Tuist๋Š” ์ด์ „๋ถ€ํ„ฐ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๊ฒŒ์œผ๋ฅธ ํƒ“์—...^^๊ทธ๋™์•ˆ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ž‘์—…ํ•˜๊ฑฐ๋‚˜, Framework๋กœ ์ถ”์ถœ์‹œ์ผœ Embeded/Link ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ๋งŒ ์ž‘์—…ํ–ˆ์—ˆ๋‹ค.์œ„์˜ ๋ฐฉ๋ฒ•์€ ๊ต‰์žฅํžˆ! ๋น„ํšจ์œจ์ ์ด๊ณ  ๊ท€์ฐฎ์•˜์ง€๋งŒ, ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”์ฝ”์•„ํŒŸ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด์„œ ์ž‘์—…ํ•˜๊ณ  ์‹ถ์–ด์„œ ๊ทธ๋ ‡๊ฒŒ ์ž‘์—…ํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ์ƒˆ๋กœ์šด ํ”Œ์ ์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉฐ,์ด์™• ๋…ธ๋ฒ ์ด์Šค๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฑฐ Tuist๋ฅผ ๋„์ž…ํ•ด๋ณด์ž๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ ..

๐ŸŽ iOS 2024.05.15

๋น„๋ฐ€ ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ๋ฆฌ๊ณ  ์ข…๊ฐ„๋‹จ ์•”ํ˜ธํ™” ๋น„๋ฐ€ ์ฑ„ํŒ…

๋ชฉ์ฐจ ๋น„๋ฐ€ ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๊ฐ„๋‹จ ์•”ํ˜ธํ™”๋ฅผ ํ™œ์šฉํ•œ ๋น„๋ฐ€ ์ฑ„ํŒ… ๊ธฐ๋Šฅ iOS์—์„œ์˜ ์ข…๊ฐ„๋‹จ ์•”ํ˜ธํ™” ๋น„๋ฐ€ ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ = ๋””ํ”ผ ํ—ฌ๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๋ฐ€ ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ๊ธ€์— ์น˜๋ฉด, ๋””ํ”ผ ํ—ฌ๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‚˜์˜จ๋‹ค. ์ค„์—ฌ์„œ DH ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํ•œ ์ค„๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. '์ƒ๋Œ€๋ฐฉ์˜ ๊ณต๊ฐœํ‚ค์™€ ๋‚˜์˜ ๊ฐœ์ธํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ„์‚ฐ์„ ํ•˜๋ฉด ๋น„๋ฐ€ํ‚ค๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ' ์ด์‚ฐ ๋Œ€์ˆ˜ ๋ฌธ์ œ ๋˜๋Š” ์ด์‚ฐ ๋กœ๊ทธ ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ด ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋””ํ”ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๋‘ ๊ธ€์ด ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. ๋””ํ”ผ ํ—ฌ๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ๋””ํ”ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ 1024๋น„ํŠธ๊ฐ€ ์ทจ์•ฝํ•œ ์ด์œ ? ์ƒ‰๊น”๋กœ ์•„์ฃผ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•œ ๊ทธ๋ฆผ๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด? ์ œ๊ฐ€ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ์•„๋ณธ ์ด์œ ๋Š”~ ๋น„๋ฐ€ ์ฑ„ํŒ…์„ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ข…๊ฐ„๋‹จ ์•”ํ˜ธํ™”๋ฅผ ํ™œ์šฉํ•œ ๋น„๋ฐ€์ฑ„ํŒ…..

๐ŸŽ iOS 2023.07.16

[CI/CD] Fastlane์„ ํ™œ์šฉํ•œ Testflight ๋ฐฐํฌ ์ž๋™ํ™”

์•„์›….. ๊ท€์ฐฎ๋‹ค.... ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๋ญ๋กœํ• ๊นŒ Github Action์œผ๋กœ ํ• ๊นŒ Fastlane ์“ธ๊นŒ ๊ณ ๋ฏผ ํ•˜๋‹ค๊ฐ€ Fastlane์œผ๋กœ ํ–ˆ๋‹ค ํ›จ์”ฌ ๊ฐ„ํŽธํ•˜๊ตฌ... ๋‚˜์ค‘์— ๊นƒํ—™ ์•ก์…˜์ด๋ž‘ ํ•ฉ์น˜๋ฉด ๋” ์ข‹์„ ๊ฑฐ ๊ฐ™์€๋ฐ ๋„˜ ๊ท€์ฐฎ๊ตฌ๋งŒ 1. fastlane ์„ค์น˜ ์ผ๋‹จ fastlane์„ ์„ค์น˜ํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ์ € ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” homebrew๋กœ ์„ค์น˜ํ•ด์คฌ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค brew๊ฐ€ ์›๋ž˜ ์—†์—ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜์ด ์–ด์ผ€์–ด์ผ€ ์„ค์น˜ํ•ด์ฃผ์…จ๋˜๊ฒŒ ์ƒ๊ฐ๋‚˜์„œ ๊ธฐ๋ƒฅ ์ด๊ฑธ๋ฃจ ํ–ˆ์Šด๋‹ค brew install fastlane 2. fastlane ์„ค์ • ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๊ณณ์œผ๋กœ ์ด๋™ ํ›„! init์„ ํ•ด์ค๋‹ˆ๋‹ค. fastlane init ๊ทธ๋Ÿผ ๊ท€์—ฌ์šด ๋กœ์ผ“์ด ๋‚˜์˜ต๋‹ˆ๋‹ค~ ๋กœ์ผ“ ํ•˜๋‹ˆ๊นŒ ์ƒ๊ฐ๋‚œ๊ฑด๋ฐ ๋‹ค๋“ค ๊ฐ€์˜ค๊ฐค ๋ณด์…จ๋‚˜์š”.. ์˜ํ™”๊ด€์—์„œ ๋ˆˆ๋ฌผ์„ ํŽ‘ํŽ‘ ํ˜๋ ธ์Šด๋‹ค.. ๋กœ์ผ“... ใ… ใ…  ..

๐ŸŽ iOS 2023.05.21

[iOS] Snapkit์„ ํ™œ์šฉํ•œ ์ œ์•ฝ์กฐ๊ฑด ๋ณ€๊ฒฝ

๋งจ๋‚  ๊นŒ๋จน์–ด์„œ ์ ์–ด๋†”์•ผ๊ฒ ๋‹ค.ใ…Ž ์š”๊ตฌ์‚ฌํ•ญ์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™๋‹ค. ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ณด์ž„์— ๋”ฐ๋ผ ๊ฐ„๊ฒฉ์ด ๋‹ฌ๋ผ์ ธ์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” Gone์ด๋ผ๋Š” ์†์„ฑ์ด ์žˆ์–ด, ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ Gone ์ฒ˜๋ฆฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ์•„๋ž˜ ๋ทฐ๋“ค์€ ์œ„์น˜ ๋ฐ ๊ฐ„๊ฒฉ์ด ๋ณ€๊ฒฝ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜! iOS์—์„œ๋Š” Gone ์ฒ˜๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์—†๊ณ  hidden์ฒ˜๋ฆฌ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ hidden ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋„ ๊ธฐ์กด์˜ ๊ฐ„๊ฒฉ์€ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋Ÿด ๋•Œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 1. StackView ์‚ฌ์šฉ ์Šคํƒ๋ทฐ์˜ ๋†’์ด๋Š” ๋‚ด๋ถ€์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ์„ค์ •๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ๋ทฐ๋ฅผ hidden ์ฒ˜๋ฆฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋†’์ด๊ฐ€ ์žฌ์„ค์ •๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ท€์ฐฎ๋‹ค. 2. Constraint ์ฐธ์กฐ ํ›„, ๊ฐ„๊ฒฉ update var intervalConstraint: Constraint? ..

๐ŸŽ iOS 2023.05.20

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ UITest

UITest ๋Š” ๋„˜๋‚˜ ๊ฐ„๋‹จํ•˜๋‹ค. ์ด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด๋†“๊ณ ! ์˜ค๋ฒ„๋ผ์ด๋“œ๋œ testSample() ํ•จ์ˆ˜ ์•ˆ์—! ๋ง‰ ์ž‘๋™์‹œ์ผœ๋†“์œผ๋ฉด ๋˜๋Š”๋ฐ!! ์ผ๋‹จ ์ฒ˜์Œ์—” ์•ฑ ๋Ÿฐ์นญ ์‹œ์ผœ์ฃผ๊ณ  app = XCUIApplication() app.launch() ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ํ™”๋ฉด์—์„œ '์‹œ์ž‘ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์‹ถ๋‹ค? app.buttons["์‹œ์ž‘ํ•˜๊ธฐ"].tap() ์ด๋ ‡๊ฒŒ tap ํ•ด์ฃผ๋ฉด ํ˜ผ์ž ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฝ๋‹ˆ๋‹ค. ํ…์ŠคํŠธํ•„๋“œ์— ๊ฐ’์„ ์จ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ! nameTF.tap() nameTF.typeText("nickname") ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๊ฒƒ์ด์ง€์š”... XCTAssertTrue(btn.isEnabled, "๋ฒ„ํŠผ ํ™œ์„ฑํ™”") ๋งˆ์ง€๋ง‰์œผ๋กœ Command+U ๋ฅผ ๋ˆŒ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค์š”. ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ํ˜ผ์ž ๋ง‰ ์ž๋™์œผ๋กœ ํด๋ฆญํ•˜๊ณ ..

๐ŸŽ iOS 2022.12.02