2025/10 5

[Swift] Actor, isolated, nonisolated

Swift Concurrency๊ฐ€ ๋„์ž…๋œ ์ดํ›„,actor์™€ isolated, nonisolated ํ‚ค์›Œ๋“œ๋Š” ๋น„๋™๊ธฐ ์•ˆ์ „์„ฑ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์œผ๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค.ํ•˜์ง€๋งŒ ์ด ํ‚ค์›Œ๋“œ๋“ค์ด ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ , ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ํ˜ผ๋™ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 'Actor ๊ฒฉ๋ฆฌ(Actor Isolation)'์˜ ๊ฐœ๋…์„ ์ค‘์‹ฌ์œผ๋กœ ๋ช…ํ™•ํžˆ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. Actor๋ž€ ๋ฌด์—‡์ธ๊ฐ€? actor๋Š” '๋ฐ์ดํ„ฐ ๊ฒฝ์Ÿ(Data Race)'์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ "์ƒํƒœ ๋ณดํ˜ธ ๊ฐ์ฒด"์ด๋‹ค.ํด๋ž˜์Šค์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, actor๋Š” ๋‚ด๋ถ€ ์ƒํƒœ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ž๋™์œผ๋กœ ์ง๋ ฌํ™”ํ•œ๋‹ค.์ฆ‰, ํ•œ ์‹œ์ ์— ํ•˜๋‚˜์˜ task๋งŒ ๊ทธ ์ƒํƒœ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.actor Counter { private var value = 0 func increm..

๐ŸŒ™ 2025.10.28

[Swift] iOS ์ƒ์ฒด์ธ์ฆ ๊ถŒํ•œ์€ '๊ฑฐ๋ถ€' ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋‹ค?

๊ถŒํ•œ์ด ์žˆ๋Š”๋ฐ ์™œ ์•ˆ๋ผ์š”?์•ฑ์—์„œ FaceID๋‚˜ TouchID ์ธ์ฆ์„ ์‹œ๋„ํ•  ๋•Œ,์ผ๋ถ€ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ OS ํŒ์—…์ด ๋œจ์ง€ ์•Š๊ฑฐ๋‚˜, canEvaluatePolicy๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝํ—˜์ด ์žˆ๋‹ค.ํŠนํžˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ํ˜ผ๋™์„ ์ค€๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ƒ์ฒด ์ธ์ฆ ์„ค์ •์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •์—์„œ ์ƒ์ฒด ์ธ์ฆ์„ ๊บผ ๋‘” ์ƒํƒœ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ๊ฑฐ๋ถ€ํ•œ ์ƒํƒœ๊ธฐ๊ธฐ ์ž์ฒด์— ์ƒ์ฒด ์ •๋ณด(์ง€๋ฌธ/์–ผ๊ตด)๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์ด ์ค‘ ์–ด๋–ค ๊ฒฝ์šฐ๋“  iOS๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ "๊ฑฐ๋ถ€๋จ"์ด๋ผ๋Š” ๋ช…ํ™•ํ•œ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.๊ฒฐ๊ตญ, ์šฐ๋ฆฌ๋Š” OS ์ •์ฑ… ์•ˆ์—์„œ ์ƒํƒœ๋ฅผ "์ถ”์ •"ํ•ด์•ผ ํ•œ๋‹ค.Apple์˜ ์„ค๊ณ„ ์ฒ ํ•™๊ณผ ์‹ค์ œ ์ฝ”๋“œ๐Ÿคฆ๐Ÿป‍โ™€๏ธ LAContext์˜ ํ•œ๊ณ„let context = LAContext()var error: NSError?context.can..

๐ŸŒ™ 2025.10.26

[Swift] Privacy Masking(Privacy Screen) ๊ตฌํ˜„ํ•˜๊ธฐ

iOS์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ž˜์—์„œ ์œ„๋กœ ์Šค์™€์ดํ”„๋ž˜ ์•ฑ ์ „ํ™˜๊ธฐ(App Switcher)๋ฅผ ์—ด๋ฉด,์‹œ์Šคํ…œ์ด ํ˜„์žฌ ์•ฑ์˜ ํ™”๋ฉด ์Šค๋ƒ…์ƒท์„ ์ž๋™์œผ๋กœ ์ฐ์–ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค€๋‹ค.๋ฌธ์ œ๋Š” ์ด๋•Œ ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ํ—ฌ์Šค ๋ฐ์ดํ„ฐ, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„, ๋ฉ”์‹œ์ง€ ๋“ฑ์€ ๋ณด์•ˆ์ƒ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฉด ๊ณค๋ž€ํ•˜๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š”,์ „ํ™˜๊ธฐ๋กœ ์ด๋™ํ•  ๋•Œ ์•ฑ ํ™”๋ฉด ๋Œ€์‹  ๋””ํดํŠธ ๋กœ๊ณ  ํ˜น์€ ์›ํ•˜๋Š” UI๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ํ•ด๋‹น ๋ทฐ๊ฐ€ ๋ณด์ด๋„๋ก ๊ฐ€๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ UIKit ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. (๋งˆ์ง€๋ง‰์— ๊ฐ„๋žตํ•˜๊ฒŒ SwiftUI๋„ ์žˆ์Œ) ๋™์ž‘ ์›๋ฆฌ์•ฑ์ด active → inactive ๋˜๋Š” background ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋ฉด,iOS๋Š” ํ˜„์žฌ ์œˆ๋„์šฐ๋ฅผ ๋ Œ๋”๋งํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ์บก์ณํ•œ๋‹ค.์ด ์Šค๋ƒ…์ƒท์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ณ ,"..

๐ŸŒ™ 2025.10.19

[iOS] New Requirement for Apps Using Sign in with Apple for Account Creation

์•„๋ž˜ ๊ธ€์€ 2025๋…„ 10์›” 10์ผ ์• ํ”Œ์—์„œ ๋ณด๋‚ด์˜จ ์š”๊ตฌ์‚ฌํ•ญ ๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.๋Œ€์ถฉ ๋ณด๋‹ˆ, ์• ํ”Œ ๋กœ๊ทธ์ธ ๊ด€๋ จํ•œ ๋‚ด์šฉ์ธ ๊ฒƒ ๊ฐ™์•„์š”.์š”์•ฝํ•˜๋ฉด, 2026๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ฐœ๋ฐœ์ž๋Š” Sign in with Apple์„ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ๊ณผ ์—ฐ๊ฒฐ๋œ Services IDs๋ฅผ ์‹ ๊ทœ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ,Server-to-Server(Notification) ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ•„์ˆ˜๋กœ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ.์ฆ‰ Apple๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Services IDs๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•˜๋Š”๋ฐ,๋“ฑ๋ก ์‹œ ์—ฐ๊ฒฐํ•œ App IDs์— ์—”๋“œํฌ์ธํŠธ URL๋ฅผ ๋“ฑ๋กํ•˜๋ผ๋Š” ๊ฒƒ.(๊ทธ๋ž˜์•ผ ์• ํ”Œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ)๊ฒฝ๋กœ: Apple Developer ํฌํ„ธ > identifiers > App IDs > ๋Œ€์ƒ ID > Sign In with Apple > E..

๐ŸŒ™ 2025.10.15

[Swift] ์•ฑ ์ฒซ ์‹คํ–‰ ์‹œ ํ•ด์•ผ ํ•  ์ดˆ๊ธฐํ™” ์ž‘์ ‘ ์ •๋ฆฌ(AppDelagate vs SceneDelegate)

์˜ค๋Š˜์€ ๊ฐ€๋ฒผ์šด ์ฃผ์ œ๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ๋„์ ์—ฌ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.(์ถ”์„ ์—ฐํœด ๊ธฐ๋… ๐Ÿฅณ) AppDelegate์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ..SceneDelegate์—์„œ๋„? ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ, ์šฐ๋ฆฌ๋Š” ํ”ํžˆ AppDelegate์˜ didFinishLaunchingWithOptions์—์„œ ๋ชจ๋“  ์ดˆ๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ iOS 13 ์ดํ›„ ๋„์ž…๋œ SceneDelegate ๊ตฌ์กฐ์—์„œ๋Š” ์ด ์ƒ๊ฐ์ด ํ‹€๋ฆด ์ˆ˜ ์žˆ๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์™€AppDelegate/SceneDelegate ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.๐Ÿ’๐Ÿป‍โ™€๏ธ ์—ญํ• ์˜ ์ฐจ์ด AppDelegateSceneDelegateํ˜ธ์ถœ ์‹œ์ ์•ฑ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ๊ฐ ์”ฌ ์ƒ์„ฑ ์‹œ์—ญํ• ์ „์—ญ์ ์ธ ์•ฑ ์ดˆ๊ธฐํ™”(SDK, Logger, ..

๐ŸŒ™ 2025.10.05