๐ŸŽ Apple/iOS

1. Reactorkit ์†Œ๊ฐœReactorkit์€ Swift๋กœ ์ž‘์„ฑ๋œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ฃผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” iOS ์•ฑ ๊ฐœ๋ฐœ์—์„œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํŒจํ„ด์„ ์ฑ„ํƒํ•˜์—ฌ ์ผ๊ด€๋œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฐ˜์‘ํ˜• UI ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Reactorkit์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์ž‘๋™ ๋ฐฉ์‹, ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋Š”์ง€ ๋ฆฌ๋“œ๋ฏธ๋ฅผ ๋ฒˆ์—ญํ•ด๋ณด๋ฉฐ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 2. Reactorkit์˜ ๊ธฐ๋ณธ ๊ฐœ๋…Reactorkit์˜ ์ •์˜ ReactorKit์€ Flux์™€ Reactive ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์กฐํ•ฉ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์•ก์…˜๊ณผ ๋ทฐ์˜ ์ƒํƒœ๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ๊ฐ ๋ ˆ์ด์–ด์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด ์ŠคํŠธ๋ฆผ์€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ทฐ๋Š” ์•ก์…˜๋งŒ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๋ฆฌ์•กํ„ฐ..
์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œ ํ•ด์•ผํ•˜๋Š” ํƒœ์Šคํฌ๊ฐ€ ์žˆ์—ˆ๋‹ค! ๊ธฐ์กด์— ๋ชจ๋“  API๋ฅผ Alamofire๋กœ ํ†ต์‹ ํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€ ํ†ต์‹  ์—ญ์‹œ Alamofire๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ตฌํ˜„์€ ๋‹ค ํ•ด๋‘์—ˆ๋Š”๋ฐ, ๋” ์ฐพ์•„๋ณด๋ฉด์„œ ์ ์šฉํ•  ๋‚ด์šฉ์ด ์žˆ๋‚˜ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด, ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ณด๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•˜๋ ค ํ•œ๋‹ค. ๐ŸŒ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ํ™•์ธ ๋ณด์ž! https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ํ™•์ธํ•ด์„œ ์ฐธ๊ณ ํ•  ๋งŒํ•œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  > ๊ตฌ๊ธ€๋ง์œผ๋กœ ์ž˜ ์ •๋ฆฌํ•ด๋‘” ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ตฌํ˜„ > ๋‹ค์‹œ ๊ณต์‹๋ฌธ์„œ ํ™•์ธ ์š”์ƒˆ๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„๋ณด๋‹ค ํ•™์Šต์— ๋” ์‹œ๊ฐ„์„ ๋“ค์ด๊ณ  ์‹ถ์–ด์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ..
ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋กœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์•„์›ƒ/ํšŒ์›ํƒˆํ‡ด ๋•Œ ์œ ์˜ํ•  ์ ์„ ์•Œ์•„๋ณด์ž. ๋กœ๊ทธ์ธ์˜ ๊ฒฝ์šฐ๋Š” ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์—๋„ ์ž˜ ๋‚˜์™€์žˆ๊ณ , ๊ณต์‹ ์‚ฌ์ดํŠธ๋„ ์ž˜๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•œ๋‹ค-!! ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์„œ ํ™œ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค ! ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌ๊ธ€/์นด์นด์˜ค/์• ํ”Œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ–ˆ๋˜ ์˜ˆ์ œ์ธ๋ฐ, ๊ตฌ๊ธ€์—์„œ ์“ฐ์ด๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊ฒจ๋‘์—ˆ๋‹ค..! import FirebaseAuth import GoogleSignIn final class AuthenticationManager { /// ๋กœ์ปฌ Firebase์— ์ €์žฅ๋œ ์œ ์ € ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋กœ๊ทธ์•„์›ƒ func signOut() throws { try Auth.auth().signOut() GIDSignIn.sharedInstance.signOut() } /// disconnect ๋ฉ”์„œ..
SVG๋ฅผ SwiftUI์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์‚ฌ์ดํŠธ ์‚ฌ์šฉ๋ฒ•: ํ”ผ๊ทธ๋งˆ์—์„œ ๋„ํ˜• ์šฐํด๋ฆญ > Copy as SVG > ์‚ฌ์ดํŠธ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ https://svg-to-swiftui.quassum.com/ JSON ์ฝ”๋“œ ํŒŒ์‹ฑํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ ์‚ฌ์šฉ๋ฒ•: ์ฝ”๋“œ ๋ณต์‚ฌ ํ›„ ์‚ฌ์ดํŠธ ์™ผ์ชฝ ํ•„๋“œ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ https://app.quicktype.io/
iOS์—์„œ API ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด http ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋  ๋•Œ๋„ ์žˆ์„ํ…๋ฐ, ์ด์ „๊นŒ์ง€๋Š” App Transport Security policy ๊ด€๋ จํ•œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด, Info.plist - App Transport Security Setting์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•ด์„œ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐฐํฌํ•  ๋•Œ ๋ฆฌ์  ๋‹นํ•œ๋‹ค๋Š” ๋ง์„ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค..! ์•„๋ฌด๋ ‡์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ, ๋ฐฐํฌํ•  ๋•Œ๋Š” ์„ค์ •์„ ์ž˜ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค! 1. ATS์— ๊ด€๋ จํ•˜์—ฌ Apple ํ”Œ๋žซํผ์—์„œ ์•ฑ ์ „์†ก ๋ณด์•ˆ(ATS)์ด๋ผ๋Š” ๋„คํŠธ์›Œํ‚น ๋ณด์•ˆ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  ์•ฑ๊ณผ ์•ฑ ํ™•์žฅ์˜ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ๋งŒ๋“  ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ์™€ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS) ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ๋ณดํ˜ธ๋˜๋„๋ก ..
Singleton ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—์„œ ๊ณต์šฉ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ shared๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ๋‹ค. ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ private์œผ๋กœ ๋งŒ๋“ค์–ด์„œ, ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ์‹œ ํ™˜๊ฒฝ์„ค์ • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ Singleton์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ๋ฐ์ดํ„ฐ ๊ณต์œ (ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์ง€์†์  ์ฐธ์กฐ) ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์ฝ”๋“œ ์˜ˆ์‹œ class Singleton { static let shared: Singleton = Singleton() var numOfBook: Int private init() } Singleton.shared.numOfBook = 10 iOS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ๊ฐ์ฒด let application = UIApplication.sh..
JINiOS
'๐ŸŽ Apple/iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก