[iOS] ์•ฑ ์ด์ „์œผ๋กœ ์ธํ•œ FCM ์žฅ์•  ๋ฐ APNs ํ‚ค ๊ฐฑ์‹ 
ยท
iOS || Swift
์œ ๋‹ˆํŽ˜์Šค ๊ฐœ๋ฐœํŒ€์— ํ•ฉ๋ฅ˜ ํ›„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๋นŒ๋“œ์˜ ๋ฐฐํฌ๋ฅผ ๋ชฉ์ „์— ๋‘๊ณ  ์žˆ์—ˆ๋‹ค.์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ ๊ฒ€ํ•ด๋ณด๊ณ  ์žˆ๋˜ ์ฐจ, ์„œ๋ฒ„์—์„œ FCM์„ ํ†ตํ•œ iOS์•ฑ์—๊ฒŒ๋กœ์˜ ํ‘ธ์‰ฌ ์•Œ๋ฆผ์ด ์‹คํŒจํ•œ๋‹ค๋Š” ์ด์Šˆ๊ฐ€ ๋ณด๊ณ ๋๋‹ค.ํ˜„์žฌ๋Š” ํ•ด๊ฒฐํ–ˆ์œผ๋‚˜, ์žฌ๋ฐœ ๋ฐฉ์ง€์™€ ์•ฑ ์ด์ „ ํ›„ FCM iOS ํ‘ธ์‰ฌ ์•Œ๋ฆผ ์žฅ์• ๋ฅผ ๊ฒช๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ณต์œ ํ•˜๋Š” ์ฐจ์›์—์„œ์›์ธ, ๋ถ„์„, ํ•ด๊ฒฐ๊นŒ์ง€์˜ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๊ณ ์ž ํ•œ๋‹ค.0. APNs์™€ FCM์˜ ๊ฐœ๋… ๋ฐ ์—ญํ• APNs๋Š” Apple์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‘ธ์‰ฌ ์•Œ๋ฆผ ์ „์†ก ์„œ๋ฒ„๋กœ, ํ‘ธ์‰ฌ์•Œ๋ฆผ์„ ์• ํ”Œ APNs์„œ๋ฒ„์— ์š”์ฒญ, ๋Œ€์ƒ ๋””๋ฐ”์ด์Šค์—๊ฒŒ ํ‘ธ์‰ฌ์•Œ๋ฆผ์„ ์ „์†กํ•œ๋‹ค.์‚ฌ์‹ค์ƒ Push notification capability๋ฅผ ๋“ฑ๋กํ•˜์—ฌ APNs๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด Apple ํ”Œ๋žซํผ ๋‹จ๋ง์—๊ฒŒ ํ‘ธ์‰ฌ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค.FCM(Firebase Cloud..
[iOS] iPhone Development ์ฆ๋ช…์„œ๊ฐ€ ์•„๋‹Œ Apple Development ์ฆ๋ช…์„œ ์š”๊ตฌ ์ด์Šˆ
ยท
iOS || Swift
0. ํ”„๋กœ๋น„์ €๋‹์˜ ๊ฐœ๋… ๋ฐ ์—ญํ• ํŒ€์œผ๋กœ Appleํ”Œ๋žซํผ์˜ ์•ฑ์„ ๋งŒ๋“ค๋ฉด ํ”„๋กœ๋น„์ €๋‹์„ ๋งˆ์ฃผํ•ด์•ผ ํ•œ๋‹ค.ํ”„๋กœ๋น„์ €๋‹์€ ์ฝ”๋“œ(ํ”„๋กœ๋•์…˜)๊ฐ€ ์ธ๊ฐ€๋œ Apple ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋์Œ์„ ์„œ๋ช…ํ•ด์ฃผ๋Š” ์ž‘์—…์— ์“ฐ์ธ๋‹ค.๋˜ํ•œ ์ƒ์„ฑ์‹œ ์ง€์ •ํ•œ ์ฆ๋ช…์„œ๋ฅผ ํฌํ•จํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋ชฉ์ ์— ๋งž๋Š” ์ฆ๋ช…์„œ๋งŒ ํฌํ•จํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ๊ฐœ๋ฐœ์ด๋‚˜ ๋ฐฐํฌ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ธ๊ฐ€ ์ œํ•œ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค.1. ๋ฌธ์ œ ๋ฐœ์ƒ: Apple Development ์ฆ๋ช…์„œ ์š”๊ตฌ์œ ๋‹ˆํŽ˜์Šค ๊ฐœ๋ฐœํŒ€์— ๋“ค์–ด๊ฐ€๋ฉด์„œ, ๊ฐœ๋ฐœ์ž ๊ตฌ๋…๊ถŒ์„ ๊ฐ€์ง„ ๋‚ด๊ฐ€ ์•ฑ์„ ์ด์ „๋ฐ›์•˜๋‹ค.์ด์— ๋ฐœ๊ธ‰ํ•œ ํ”„๋กœ๋น„์ €๋‹์„ ํŒ€์›๊ณผ ๋‚˜๋ˆ ์•ผ ํ–ˆ๊ณ , ์œ ๋‹ˆํŽ˜์Šค๋Š” iOS ํ”Œ๋žซํผ๋งŒ์ด ๊ฐœ๋ฐœ ๋Œ€์ƒ์ด๊ธฐ์— iOS Developer ์ฆ๋ช…์„œ๋งŒ ํฌํ•จํ•˜๋„๋ก ํ–ˆ๋‹ค.์ดํ›„ ํ”„๋กœ์ ํŠธ์— ํ”„๋กœ๋น„์ €๋‹์„ ์„ค์ •ํ–ˆ์œผ๋‚˜ํ”„๋กœ๋น„์ €๋‹์ด Apple Development ์ธ์ฆ์„œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€์•Š์•„ ..
[iOS] Nuke ๊ตฌ์กฐ ๋ฐ ์บ์‹ฑ๊ตฌํ˜„ ๋ถ„์„ - ์„œ๋“œํŒŒํ‹ฐ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
ยท
iOS || Swift
Nuke: Image Loading Systemlet image = try await ImagePipeline.shared.image(for: url)func loadImage() async throws { let imageTask = ImagePipeline.shared.imageTask(with: url) for await progress in imageTask.progress { // Update progress } imageView.image = try await imageTask.image}Task์™€ Combine์„ ํ™œ์šฉํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ”„๋ ˆ์ž„์›Œํฌ.์ธํ„ฐํŽ˜์ด์Šค๋Š” Swift Concurrency์ด๋‹ค.String์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žฌ๋ฐŒ๋‹ค.func..

์‰˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ„์  ์ž๋™ํ™” feat. ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ
ยท
CS
xcode์—์„œ ์‹คํ–‰ํ•˜๋Š”๊ฒŒ ์˜ ๋ถˆํŽธํ•ด์„œ vscode๋กœ ์‹คํ–‰ํ™˜๊ฒฝ์„ ์˜ฎ๊ฒผ๋‹ค.ํ•˜์ง€๋งŒ ๋งค๋ฒˆ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณต๋ถ™ํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ  ์ด๋Ÿฌ๋Š”๊ฒŒ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋А๊ผˆ๋‹ค.vscode๋Š” ์ž๋™ํ™”๊ฐ€ ๊ฐ„ํŽธํ•˜๋‹ˆ ์ด๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.1. multi-command ๋‹ค์šด๋กœ๋“œvscode๋Š” task๋ผ๋Š” ๊ณ ์œ ์˜ ์ž‘์—… ํ„ฐ๋ฏธ๋„์„ ์ƒ์„ฑํ•ด ์‹คํ–‰ํ•˜๋Š”๋ฐ, ์ด๊ฒŒ ํ„ฐ๋ฏธ๋„๋ณด๋‹ค ์ข€ ๋А๋ฆฟ๋А๋ฆฟํ•˜๋‹ค.๋น ๋ฆฟ๋น ๋ฆฟํ•œ ์ž…์ถœ๋ ฅ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ 'multi-command'๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค.2. ๋‹จ์ถ•ํ‚ค ์ถ”๊ฐ€๋จผ์ € ๋‹จ์ถ•ํ‚ค๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ํ•ด๋ณด์ž.๋‚˜๋Š” cmd+r ๋‹จ์ถ•ํ‚ค๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค.๋งฅ ๊ธฐ์ค€์œผ๋กœ 'cmd+shift+p' ๋ฅผ ๋ˆ„๋ฅด๊ณ , 'open keyboard shortcut (json)'์œผ๋กœ ํ‚ค ๋ฐ”์ธ๋”ฉ์„ ..
์†Œ์ผ“ ๋’ท์กฐ์‚ฌ์ข€ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค
ยท
๋„คํŠธ์›Œํฌ
: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”๋œ, ํŒŒ์ผ ์œ ์‚ฌ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปค๋„์˜ ํ†ต์‹  ์ฑ„๋„ ๊ฐ์ฒด(ํฌ์ŠคํŒ… ๋‚ด ๋Œ€๋ถ€๋ถ„์˜ ์ปค๋„ ์ฝ”๋“œ๋Š” Darwin XNU API๋กœ ๊ธฐ์ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค.)์™œ ํ•„์š”ํ•œ๊ฐ€?ํ”„๋กœ์„ธ์Šค๋Š” ์ง์ ‘ ๋„คํŠธ์›Œํฌ ์žฅ์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ. ์ปค๋„๋งŒ์ด ์žฅ์น˜์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Œ๋”ฐ๋ผ์„œ, ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ํ•˜๋ ค๋ฉด ์ปค๋„์—๊ฒŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ํ•„์š”. ์ด๋•Œ ์ปค๋„๊ณผ ์†Œํ†ตํ•˜๋Š” ์ฐฝ๊ตฌ๊ฐ€ ์†Œ์ผ“์ฆ‰, ์†Œ์ผ“์€ โ€œ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค์™€ ์ปค๋„ ๋„คํŠธ์›Œํฌ ์Šคํƒ ์‚ฌ์ด์˜ ๊ณ„์•ฝ๋œ ์ธํ„ฐํŽ˜์ด์Šคโ€์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ถ”์ƒ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด์ด๋ฉฐ, ์‹ค์งˆ์ ์ธ ๋…ธ๋“œ ์•ˆ์˜ ์ข…๋‹จ์ ์ด๋‹ค.์œ„ ๊ทธ๋ฆผ์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์†Œ์ผ“์„ ํ†ตํ•ด ๋งˆ์น˜ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.์ฆ‰, ์–‘ ์ข…๋‹จ์˜..
[๊ตฌ๋ฆ„Level] ๊ทœ์น™ ์ˆซ์ž ์•ผ๊ตฌ Swift ํ’€์ด
ยท
PS
๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋˜,,,2๋‹จ๊ณ„์—์„œ fail์ผ ๋•Œ, ์ˆซ์ž ๋ณ€ํ™˜ ํ›„ 2๋‹จ๊ณ„๊ฐ€ ๋ชจ๋‘ ๋๋‚œ ๊ฐ’์„ ๋‹ค์‹œ ํ‰๊ฐ€ํ•˜์—ฌ 3๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ค„ ์ดํ•ดํ–ˆ๋‹ค.1๋‹จ๊ณ„์—์„œ๋งŒ ํ™•์ธํ•˜์˜€๋˜ strike๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ 3๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ์œ ์˜ํ•˜์ž.๋ฌธ์ œ๋งํฌ์†Œ์Šค์ฝ”๋“œ๋”๋ณด๊ธฐlet answer = readLine()!.map{ Int(String($0))! }var expectation = readLine()!.map{ Int(String($0))! }func isCorrect()->Bool{ for i in 0..

[๊ตฌ๋ฆ„Level] ๊ทœ์น™ ์ˆซ์ž ์•ผ๊ตฌ Swift ํ’€์ด
ยท
PS
๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋˜,,,2๋‹จ๊ณ„์—์„œ fail์ผ ๋•Œ, ์ˆซ์ž ๋ณ€ํ™˜ ํ›„ 2๋‹จ๊ณ„๊ฐ€ ๋ชจ๋‘ ๋๋‚œ ๊ฐ’์„ ๋‹ค์‹œ ํ‰๊ฐ€ํ•˜์—ฌ 3๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ค„ ์ดํ•ดํ–ˆ๋‹ค.1๋‹จ๊ณ„์—์„œ๋งŒ ํ™•์ธํ•˜์˜€๋˜ strike๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ 3๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ์œ ์˜ํ•˜์ž.๋ฌธ์ œ๋งํฌ์†Œ์Šค์ฝ”๋“œ๋”๋ณด๊ธฐlet answer = readLine()!.map{ Int(String($0))! }var expectation = readLine()!.map{ Int(String($0))! }func isCorrect()->Bool{ for i in 0..
[๋ฐฑ์ค€] 1918 ํ›„์œ„ ํ‘œ๊ธฐ์‹
ยท
PS
๋ฌธ์ œ๋งํฌ 1918๋ฒˆ: ํ›„์œ„ ํ‘œ๊ธฐ์‹ ์ฒซ์งธ ์ค„์— ์ค‘์œ„ ํ‘œ๊ธฐ์‹์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ ์ด ์ˆ˜์‹์˜ ํ”ผ์—ฐ์‚ฐ์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ˆ˜์‹์—์„œ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋“ฑ์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  -A+B์™€ ๊ฐ™์ด -๊ฐ€ ๊ฐ€์žฅ ์•ž์— ์˜ค๊ฑฐ๋‚˜ AB์™€ ๊ฐ™์ด *๊ฐ€ ์ƒ๋žต๋˜๋Š” ๋“ฑ์˜ www.acmicpc.net ๋‚˜์˜ ํ’€์ด Algorithm-TILs/๋ฐฑ์ค€/Gold/1918. ํ›„์œ„ ํ‘œ๊ธฐ์‹/ํ›„์œ„ ํ‘œ๊ธฐ์‹.swift at e592fdc005dd4aa478ee724b4c7cf460d91cda33 ยท 05 PS๊ธฐ๋ก. Contribute to 051198Hz/Algorithm-TILs development by creating an account on GitHub. github.com ์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ‰๋ฒ”ํ•œ ๋ฌธ์ œ์ด๋‹ค. ์™œ ๊ณจ๋“œ2์˜ ๋‚œ์ด๋„์ธ์ง€๋Š” ์ž˜ ..
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‹คํŠธ ๊ฒŒ์ž„
ยท
PS
๋ฌธ์ œ ๋งํฌ ๋‚˜์˜ ํ’€์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด ํ•ด์„ค ์ ‘๊ทผ๋ฒ•์ด๋ผ๊ณ  ํ•  ๊ฒƒ๋„ ์—†์ด, ๋ฐฐ์—ด๊ณผ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. split์„ ํ™œ์šฉํ•œ ํŒŒ์‹ฑ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๊ฐ„๊ฒฐํ•ด์ง€๋Š” ํ’€์ด๋ฅผ ๋ณด๋ฉฐ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค....