์ „์ฒด ๊ธ€

๐ŸŒฑiOS ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ด ๋งŒ๋“œ๋Š” ๋ธ”๋กœ๊ทธ
ยท๐ŸŒฑ SeSAC
Notifications ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ๋ฆผ์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๊ถŒํ•œ์ด ํ•„์š”ํ•จ. Local Notifications ๋””๋ฐ”์ด์Šค๋‚ด์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ๋ฐฉ์‹ ๊ฐœ์ธ์ด ํ˜ผ์ž ๊ด€๋ฆฌํ•˜๋Š” ์•ฑ Xcode ๋‚ด์— ๋ฐ์ดํ„ฐ, ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋†“๊ณ  ์•Œ๋ฆผ์„ ๋ณด๋ƒ„ Push Notifications ์„œ๋ฒ„์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์Œ ์–ด๋–ค ์‹œ๊ฐ„์— ์–ด๋–ค ๋‚ด์šฉ์ด ์˜ฌ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ ๊ถŒํ•œ ํ—ˆ์šฉํ•œ ๊ฒฝ์šฐ iOS ์•Œ๋ฆผ ์„ผํ„ฐ์— ํ‘œ์‹œ ์•ฑ ์žฌ์‚ฌ์šฉ๋ฅ (Retention)์— ๊ธฐ์—ฌ ์•ฑ์ด ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ํ‘œ์‹œ Local vs Remote Local Xcode ๋‚ด์— ๋ฌธ๊ตฌ๊ฐ€ ๋ฏธ๋ฆฌ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ ์•ฑ ๋‚ด์—์„œ ์ปจํ…์ธ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ปจํ…์ธ ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ์ƒํƒœ Remote ์‹œ๊ฐ„๊ณผ ์ปจํ…์ธ  ๋ชจ๋‘ ๋‹ค์ด๋‚˜๋ฏนํ•œ ์ƒํƒœ ๊ถŒํ•œ -> ์š”์ฒญ -> ์•Œ๋ฆผ ๊ถŒํ•œ (Alert, Ba..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๋ฉฐ ์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค :) ์ •๋ง ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์”๋‹ˆ๋‹ค..๐Ÿ˜‚ ์š”์ƒˆ ๋ฒˆ์•„์›ƒ์ด ์˜ฌ ๊ฒƒ๋งŒ ๊ฐ™์•„์„œ ์•„์Šฌ์•„์Šฌ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๊ณ  ์žˆ์ง€๋งŒ ๋‹ค์‹œ๊ธˆ ๋งˆ์Œ์„ ๋‹ค์žก๊ณ  ์—ด์‹ฌํžˆ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€ ์“ฐ๋Š” ๊ฒƒ์„ ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ๋ฏธ๋ค„๋‘๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์™„๋ฒฝ์„ ์ถ”๊ตฌํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ผ๋‹จ ์‹ค์ฒœ์„ ํ•˜๋Š” ๊ฒƒ์— ์Šต๊ด€์„ ๋“ค์ด๋„๋ก ๋…ธ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•  ๋‚ด์šฉ์€์š”. ์ œ๊ฐ€ ๋‚ ์งœ ํ˜•์‹์— ๊ด€๋ จํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ ๊นŒ์š”. ๋“ฃ๊ณ  ์žˆ๋Š” ์ˆ˜์—…์—์„œ๋„ ๋‚ ์งœ๋ฅผ ๋‹ค๋ค„๋ณผ ์ผ์ด ์žˆ์—ˆ๊ณ , ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ๋„ ์ œ๊ฐ€ ์บ˜๋ฆฐ๋”๋ฅผ ๋งก๊ณ  ์žˆ์–ด์„œ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฃฐ ์ผ์ด ๋งŽ์€๋ฐ์š”. ์ƒ๊ฐ๋ณด๋‹ค ๋‚ ์งœ ํ˜•์‹์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋„ˆ๋ฌด ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ด๊ฑฐํ˜•์„ ์ด์šฉํ•ด์„œ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ DateFormat์„ ๊ด€๋ฆฌํ•ด๋ณด๋„๋ก ํ•ด์š”. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋™์•ˆ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ํ–ˆ๋˜ ํ–‰๋™์„ ..
ยท๐ŸŒฑ SeSAC
์ˆ˜์—… ๋“ฃ๊ณ  ์•„์ดํŒจ๋“œ์—๋Š” ์ƒ๊ฐ์ด๋‚˜ ๋‚ด์šฉ๋“ค ๋‹ค ๊ธฐ๋กํ•ด๋†“๋Š”๋ฐ, ์ด๊ฑธ ์ปดํ“จํ„ฐ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒŒ ์™œ ์ด๋ฆฌ ํž˜๋“  ๊ฑด์ง€.. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐ”๋กœ ์ปดํ“จํ„ฐ์— ์ ์ž๋‹ˆ ์–ด์ƒ‰ํ•˜๊ณ .. ์ข€ ๋” ๋…ธ๋ ฅํ•ด๋ด์•ผ๊ฒ ์–ด์š”.. ๋ฐ€๋ฆฐ TIL ์—…๋กœ๋“œ ํ•ด๋ณผ๊ฒŒ์š”! ใ…Žใ…Ž Protocol(ํ”„๋กœํ† ์ฝœ) ํ”„๋กœํ† ์ฝœ์€ ๊ทœ์น™์ด๋‹ค. ์‹ค์งˆ์ ์ธ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ตฌํ˜„์€ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ ์ชฝ์—์„œ ๋‹ด๋‹นํ•œ๋‹ค. ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ˜•ํƒœ๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ถ€๋ถ„์ด๋‹ค. ํŒŒ์ผ๋งˆ๋‹ค ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋ช…์ด๋‚˜ ํ”„๋กœํผํ‹ฐ ๋ช… ๋˜๋Š” ๊ตฌํ˜„๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ฐ•์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ผ๊ด€์ ์ธ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ํ”„๋กœํ† ์ฝœ๊ณผ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ํด๋ž˜์Šค๋Š” ๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด์—, ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์ค‘ ์ฑ„ํƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด๋‹ค. ๋‹ค์Œ ๊ธ€ Taehyeon-Kim..
ยท๐ŸŒฑ SeSAC
๋ทฐ์™€ ๋ฐ์ดํ„ฐ ๊ด€๋ จํ•œ ๊ฒƒ์€ ๋ถ„๋ฆฌํ•˜๋„๋ก ํ•˜์ž. ์—ญํ• ์„ ๋ถ„๋ฆฌํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์ž. UIViewController + UITableView UITableViewController๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์–ผ๋งˆ๋‚˜ ํŽธํ• ๊นŒ? ๊ทธ๋Ÿฌ๋‚˜ UITableViewController๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ข€ ๋” ์œ ์—ฐํ•œ ํ™”๋ฉด ๊ตฌ์„ฑ์ด ์–ด๋ ต๋‹ค. ์ด๋ฏธ ํ™”๋ฉด ์ „์ฒด๊ฐ€ ํ…Œ์ด๋ธ”๋ทฐ๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์–ด ์˜์—ญ์˜ ํฌ๊ธฐ ์กฐ์ •์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์ด ๋ง์ธ ์ฆ‰์Šจ RootView๊ฐ€ UITableView๋ผ๋Š” ๊ฒƒ์ด๋‹ค.) ๊ทธ๋ ‡๊ธฐ์— TableView๋งŒ ๋”ฐ๋กœ ์˜ฌ๋ ค์„œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ๋‹ค. TableView ์ƒ์„ฑ + ์•„์›ƒ๋ › ์—ฐ๊ฒฐ TableViewCell ์ƒ์„ฑ (ํ”„๋กœํ† ํƒ€์ž… ์…€, XIB ์ด์šฉ) + ์…€ ํด๋ž˜์Šค ์—ฐ๊ฒฐ + ์•„์›ƒ๋ › ์—ฐ๊ฒฐ TableView์— ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ ์„ ์–ธ..
ยท๐ŸŽ iOS & Swift
๊ทธ ๋™์•ˆ ๋ง‰์—ฐํ•˜๊ฒŒ๋„ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜(๋ช…์‹œ)๊ฐ€ ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜์ง€๋ผ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ํƒ€์ž… ๋ช…์‹œ๋ฅผ ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ๋“ฃ๊ณ  ์žˆ๋Š” ๊ต์œก ๊ณผ์ •์—์„œ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ํƒ€์ž… ์ถ”๋ก ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์•„๋ณด์ธ๋‹ค๋ผ๋Š” ๋ง์”€์„ ํ•ด์ฃผ์…จ๊ณ , ์™œ์ธ์ง€ ๊ถ๊ธˆํ–ˆ๋˜์ง€๋ผ ์—ฌ์ญค๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ต๋ณ€ ์ฃผ์‹  ๊ฒƒ์œผ๋กœ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ฑ๋Šฅ์ด ์ ์  ๋” ๊ฐœ์„ ๋˜๊ณ  ์žˆ๊ณ , ํƒ€์ž… ์ถ”๋ก ์ด ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ๋„ ์žˆ๋‹ค๊ณ  ๋‹ต๋ณ€์ฃผ์…จ๋‹ค. ์‹ค์ œ๋กœ ์•„๋ž˜์— ์ฒจ๋ถ€ํ•œ ๋งํฌ๋ฅผ ๋ณด๋ฉด ๊ฐ„๋‹จํ•œ ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/2 let a = "hello, world!" // type..
ยท๐ŸŽ iOS & Swift
iOS 15์—์„œ๋Š” Sheet์— ์—ฌ๋Ÿฌ ์ปค์Šคํ…€ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex. ํ™”๋ฉด์˜ ์ ˆ๋ฐ˜ ํฌ๊ธฐ๋กœ ์‹œํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex. Dimmed View๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ex. ์‹œํŠธ ์•ˆ๊ณผ ์‹œํŠธ ๋’ค์—์„œ ๋™์‹œ์— ์ฝ˜ํ…์ธ ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ฑ์—์„œ ๋น„๋ชจ๋‹ฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. Getting a sheet Sheet ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. UIPresentationController์˜ ์„œ๋ธŒ ํด๋ž˜์Šค์ธ UISheetPresentationController๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œํŠธ๋กœ ๋„์šฐ๊ณ  ์‹ถ์€ ์ธ์Šคํ„ด์Šค์— sheetPresentationController๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. let viewControllerToPresent = UIViewController() if let sheet = viewContr..
ยท๐ŸŒฑ SeSAC
๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”/ํƒญ ๋ฐ” bottom/top ๋ผ์ธ ๋””ํดํŠธ๋กœ ์ œ๊ณต๋˜๋Š” ์†์„ฑ์€ ์—†๋‹ค. ์ปค์Šคํ…€ ํ•ด์•ผ ํ•จ. ํ™”๋ฉด ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๋‹จ์ˆœํžˆ 2๊ฐœ๋งŒ ๋ถ„๊ธฐ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ’ ์ „๋‹ฌ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ. ์žฌ์‚ฌ์šฉ๋˜๋Š” ํ™”๋ฉด์ด ๋งŽ์•„ ์ง„๋‹ค๋ฉด ์—ด๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•ด์„œ ์ข€ ๋” ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Œ. ๋„ค๋น„๊ฒŒ์ด์…˜ ํƒ€์ดํ‹€ ์ปค์Šคํ…€ ํ•˜๋‚˜๋งŒ ํƒํ•ด๋ผ. ์• ํ”Œ ๊ฐ€์ด๋“œ๋ฅผ ์ง€ํ‚ค๊ฑฐ๋‚˜, ์•„์˜ˆ ์ƒˆ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜! ์• ํ”Œ์˜ ์‹œ์Šคํ…œ ํ˜•ํƒœ ๊ทธ๋Œ€๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ปค์Šคํ…€์ด ์‚ฌ์‹ค์ƒ ์–ด๋ ค์›€. ์ปค์Šคํ…€ ์˜์—ญ์€ UIView๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋‹ค ๋ฐ”๊พผ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์•„๋„ ๋ฌด๋ฐฉ. Navigation Title ๋ถ€๋ถ„์„ UIView๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ titleView ํ”„๋กœํผํ‹ฐ ์ด์šฉ ๋ผ๋ฒจ์— inset ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ…์ŠคํŠธ ์ขŒ์šฐ์— ์—ฌ๋ฐฑ์„ ๋„ฃ์–ด์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ ๊ธ€์ž ์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ ๊ณ ์ •์ ์ด๊ฑฐ๋‚˜ ์ผ์ •ํ•˜๋‹ค๋ฉด Co..
ยท๐ŸŒฑ SeSAC
App Bundle, ipa .app bundle ์•ฑ ๋ฒˆ๋“ค์„ ์ด์šฉํ•œ ๋นŒ๋“œ์— ๋Œ€ํ•ด์„œ ์ง„์ž‘์— ์•Œ์•˜๋‹ค๋ฉด ์–ด๋• ์„๊นŒ? ์ด์ „์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด๋ฐ›์•„์„œ ์‚ฌ์šฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ ํ”„๋กœ์ ํŠธ ํŒจํ‚ค์ง€ ์ธ๋ฑ์‹ฑ์„ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ๋ฐ˜๋‚˜์ ˆ ์ด์ƒ ์‹œ๊ฐ„์„ ์ผ๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ๋˜๋Š” ์•ฑ ๋ฒˆ๋“ค์„ ๋ฐ›์•˜๋‹ค๋ฉด ์ข‹์•˜์„ํ…๋ฐ.. ๋ˆˆ๋ฌผ์ด ๋‚œ๋‹ค. .ipa iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„์นด์ด๋ธŒ ํŒŒ์ผ ๊ณ„์ •์ด ๋ถ™์–ด ์žˆ์Œ. Build ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ(Option) ์‹ค์ œ ๊ธฐ๊ธฐ(๊ฐœ๋ฐœ์ž ๊ณ„์ • ํ•„์š”) Debug mode : ๊ฐœ๋ฐœ์šฉ Release mode : ์ถœ์‹œ Xcode ๋‹จ์ถ•ํ‚ค ๋‹จ์ถ•ํ‚ค๋Š” ์‹œ๊ฐ„๋‚  ๋•Œ ์ •๋ฆฌํ•ด์„œ ๋Œ์•„์™€์•ผ์ง€ option + cmd + [ , ] : ์ฝ”๋“œ ๋ธ”๋Ÿญ ์ด๋™ shift + control + ํด๋ฆญ : ๋‹ค..