IOS

ยท๐ŸŽ iOS & Swift
๋ณธ ๊ธ€์€ WWDC ๋ฅผ ๋ณด๊ณ , ๋ฒˆ์—ญ ๋ฐ ์š”์•ฝ ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด๋ณด๋Š” ์Šคํ„ฐ๋”” ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์ž…๋‹ˆ๋‹ค. Introducing Combine WWDC19์—๋Š” Apple์˜ ์ตœ์‹  Framework์ธ Combine์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜์ž๊ณ  ํ•˜๋ฉด์„œ ์„œ๋ง‰์„ ์—ฌ๋Š”๋ฐ์š”. ๊ฐ™์ด ์˜ˆ์‹œ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๋ฉด์„œ Combine์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด์„ ์˜ˆ์‹œ๋กœ ๋“ญ๋‹ˆ๋‹ค. ์ด ํ™”๋ฉด์—์„œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์€ ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ์œ ํšจํ•œ์ง€ ๋„คํŠธ์›Œํฌ์— ์š”์ฒญ์„ ํ•ด์„œ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„œ๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ฐจ๋‹จ๋˜์ง€ ์•Š๊ณ  ๋ฐ˜์‘ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ์ด๋ฏธ ๋งŽ์€ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ง„..
ยท๐ŸŒฑ SeSAC
์ธ์ฆํ‚ค์™€ gitignore ํ•ญ์ƒ gitignore๋Š” ๋จผ์ € ์ฒ˜๋ฆฌํ•˜์ž. ์ดํ›„์— ์ธ์ฆํ‚ค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด commit์—๋„ ๋‚จ์•„์žˆ๊ณ , ์ด์ „ ๊ธฐ๋ก์— ๋‚จ์•„์žˆ์œผ๋ฏ€๋กœ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ empty ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ํ”„๋กœ์ ํŠธ ๋ฐ”๋กœ ๋ฐ‘์— .gitignore ์ƒ์„ฑ ๊ฐ€๋Šฅ ํ˜‘์—… ์‹œ์—๋Š” property list, configuration์„ ์ด์šฉํ•˜๋Š” ์‹์œผ๋กœ๋„ ์ธ์ฆํ‚ค๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ˆจ๊ฒจ์•ผ ํ•˜๋Š” ํŒŒ์ผ์ด ๋งŽ์œผ๋ฉด public repository๊ฐ€ ์ ํ•ฉํ•œ์ง€๋ถ€ํ„ฐ ํŒ๋‹จํ•˜์ž. gitignore.io์— ๊ฐ€๋ฉด ์‰ฝ๊ฒŒ ํŒŒ์ผ์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ˆจ๊น€ํŒŒ์ผ๋กœ ์ž˜ ๋“ฑ๋กํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด์˜ ํŒŒ์ผ ์˜†์— A(์ถ”๊ฐ€)/M(์ˆ˜์ •) ๋งˆํฌ๊ฐ€ ๋œจ์ง€ ์•Š๋Š”๋‹ค. Type Inference์™€ Type Annotation ์†๋„ ์ฐจ์ด Type Annotation์„ ์ด์šฉํ•˜๊ธฐ..
ยท๐ŸŒฑ SeSAC
App Transport Security Apple ์ธก์—์„œ๋Š” ์•ฑ ์ž์ฒด์˜ ๋ณด์•ˆ์„ฑ์„ ์œ„ํ•ด์„œ ATS(App Transport Security)๋ผ๋Š” ์ •์ฑ…์„ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ https ํ†ต์‹ ์„ ํ•˜๋„๋ก ์œ ๋„ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ http ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. http ์„œ๋ฒ„๋กœ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด Info.plist์—์„œ ATS ๊ด€๋ จ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ATS๋Š” iOS 9 ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ์ ์šฉ๋œ ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด๊ณ , Xcode 7 ๋ฒ„์ „ ์ด์ƒ์—์„œ ์•ฑ ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ณด์•ˆ ์ •์ฑ…์ด๋‹ค. http : Allow Arbitrary Loads๋ฅผ YES๋กœ ๋ณ€๊ฒฝ https : ๊ตณ์ด ์„ค์ •์„ ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์Œ ๋ฐ์ดํ„ฐ ๋ฆฌ๋กœ๋“œ ์‹œ์  ํ…Œ์ด๋ธ” ๋ทฐ๋‚˜ ์ปฌ๋ ‰์…˜ ๋ทฐ ์‚ฌ์šฉ ์‹œ viewDidLoad ์‹œ์ ์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ..
ยท๐ŸŒฑ SeSAC
ํ”„๋กœํ† ์ฝœ๊ณผ String(describing: _)์‚ฌ์šฉํ•ด์„œ ๋ฆฌํ„ฐ๋Ÿดํ•œ ๊ฐ’ ๋œ์–ด๋‚ด๊ธฐ ๊ทธ ๋™์•ˆ identifier ๊ฐ’์„ ์“ฐ๋Š” ๊ณณ์ด ์ •๋ง ๋งŽ์•˜๋‹ค. ViewController์™€ TableViewCell, CollectionViewCell ๋“ฑ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ๋งค ํด๋ž˜์Šค์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๋„ฃ๋Š” ๋Œ€์‹  ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜๋ฉด ๋ถˆํŽธํ•จ๊ณผ ๋ฐ˜๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. protocol Reusable: Anyobject { static var reuseidentifier: String { get } } ๋‹ค์Œ๊ณผ ๊ฐ™์ด extension์—์„œ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ฒŒ ๋˜๋ฉด, ์ด์ œ reuseidentifier๋ฅผ ํŽธํ•˜๊ฒŒ ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. extension UIViewController: ReusableViewProtocol { /..
ยท๐ŸŒฑ 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์— ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ ์„ ์–ธ..
taeeekki
'IOS' ํƒœ๊ทธ์˜ ๊ธ€ ๋ชฉ๋ก (7 Page)