iOS

ยท iOS
https://developer.apple.com/documentation/uikit/uiimage/orientation UIImage.Orientation | Apple Developer Documentation Constants that specify the intended display orientation for an image. developer.apple.com ์ด๋ฏธ์ง€๋ฅผ ํšŒ์ „ํ•˜๊ณ  ํฌ๋กญํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ orientation์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. orientation์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์‹œ์ ์— ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•˜์—ฌ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ๋‹ค. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€ orientation๊ฐ’์„ ์ฐ์–ด๋ณด์•˜๋‹ค. print("[orientation] \(image.imageOrientation)"..
ยท iOS
์ด์ „์— ๋กœ์ปฌ์—์„œ ๋ณด๋‚ด๋Š” ํ‘ธ์‹œ๋Š” ๊ตฌํ˜„ํ•œ ๊ฒฝํ—˜์ด ์žˆ์—ˆ์ง€๋งŒ FCM์ด๋‚˜ APNS๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์ด ์—†์–ด ์กฐ๊ธˆ ์ƒ์†Œํ•˜๊ฒŒ ๋‹ค๊ฐ€์™”๋‹ค. FCM์„ ์‚ฌ์šฉํ•ด๋„ ์• ํ”Œ ๊ฐœ๋ฐœ์ž ๊ณ„์ •์—์„œ APN์„ ์„ค์ •ํ•ด์„œ ์ธ์ฆ์„œ๋‚˜ ํ† ํฐ์„ ๋“ฑ๋กํ•ด์•ผํ–ˆ๋Š”๋ฐ ์ด ๊ณผ์ •์„ ํ•™์Šตํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ํ‘ธ์‹œ ์ข…๋ฅ˜ 1. ๋กœ์ปฌ์—์„œ ์ง์ ‘ ๋ณด๋‚ด๋Š” ์•Œ๋ฆผ 2. ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด๋Š” ์•Œ๋ฆผ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ FCM์€ 2๋ฒˆ์— ์†ํ•œ๋‹ค. APNS๋ž€? Apple Push Notification Service๋กœ iOS์—์„œ ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด APNS๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด๋Š” ์•Œ๋ฆผ์˜ ๊ฒฝ์šฐ ๊ผญ ์ด APNS๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค. FCM์„ ์‚ฌ์šฉํ•  ๋•Œ ํŒŒ์ด์–ด๋ฒ ์ด์Šค์—์„œ ์•Œ๋ฆผ์„ ๋ณด๋‚ธ๋‹ค๊ณ  ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์‚ฌ์‹ค APNS๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š”๊ฑฐ๊ณ  ์‹ค์ œ ์•Œ๋ฆผ์€ APNS๋กœ๋ถ€ํ„ฐ ์˜ค๊ฒŒ๋œ๋‹ค. ์•ฑ์„ ์‹œ์ž‘ํ•  ๋•Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ..
ยท iOS
๋””๋ฐ”์ด์Šค์˜ ๊ณ ์œ ํ•œ ๊ฐ’์„ ํ†ตํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•œ ๊ณ ์œ ํ•œ ๊ฐ’์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์œผ๋กœ UUID์™€ UDID๊ฐ€ ์žˆ๋‹ค. 1. UDID (Unique Device Identifier) ๊ฐ ๊ธฐ๊ธฐ์— ๋ถ€์—ฌ๋˜๋Š” ๊ณ ์œ ํ•œ ๋””๋ฐ”์ด์Šค ์‹๋ณ„๊ฐ’์ด๋‹ค. ์–ด๋–ค ์•ฑ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ด ๊ฐ’์€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. iOS5 ์ด์ „์—๋Š” ์ฝ”๋“œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ๋ชฉ์ ์œผ๋กœ ์ธํ•ด deprecated ๋˜์—ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฝ”๋“œ๋กœ ํ™•์ธ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ iTunes๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. UDID๊ฐ€ deprecated ๋˜๋ฉด์„œ ์ด๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด UDID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 2. UUID (Universally Unique Identifier) deprecated๋œ UDID๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ์œ„ํ•ด UUID๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. UI..
ยท iOS
์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์›น๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ธฐ์กด์— ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•ด ๋ดค๋˜ ์›น๋ทฐ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™”๋ฉด์„ ๋„์›Œ์ฃผ๋Š” ๊ฒƒ๊ณผ ์›น๋ทฐ๋ฅผ ์ด์šฉํ•œ ํŒจ์Šค ์ธ์ฆ๋งŒ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ ์ƒ์†Œํ•œ ๊ฐœ๋…์œผ๋กœ ๋‹ค๊ฐ€์™”๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ์›น๋ทฐ๋กœ ๋˜์–ด์žˆ์–ด์„œ ๊ผญ ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…๋“ค(์นด๋ฉ”๋ผ, ์•Œ๋ฆผ ๋“ฑ..)์„ ์ œ์™ธํ•˜๊ณค ๋ชจ๋‘ ์›น๋ทฐ๋กœ ๋˜์–ด์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์•ผ ํ•  ์ž‘์—…์ด ์ ์—ˆ์Œ์—๋Š” ํ™•์‹คํ–ˆ์ง€๋งŒ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ฒ˜์Œ ๊ฒฝํ—˜ํ•ด ๋ณด๋Š” ์›น๋ทฐ ์—ฐ๋™์— ๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋จผ์ € ์ œ๋ชฉ์œผ๋กœ ์–ธ๊ธ‰ํ•œ WKWebView ๋ง๊ณ  UIWebView, SFSafariView์™€ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์›น๋ทฐ๊ฐ€ ์žˆ๋‹ค. 1. UIWebView iOS 2.0์— ์ถœ์‹œ๋œ ๊ต‰์žฅํžˆ ์˜ค๋ž˜๋œ ์›น๋ทฐ์ด๋‹ค. ํ˜„์žฌ deprecate ๋˜์—ˆ์œผ๋ฏ€๋กœ UIWebView๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. 2. WKWeb..
ยท iOS
๋„ค์ดํ‹ฐ๋ธŒ์™€ ์›น๋ทฐ๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๊ฐœ๋ฐœ ์ค‘ ํฌ๋กฌ๊ณผ ์‚ฌํŒŒ๋ฆฌ์™€ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ณ„๋‹ค๋ฅธ ์„ค์ • ์—†์ด๋„ ์ž๋™๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์—ฐ๊ฒฐ๋œ WKWebView์—์„œ๋Š” ์ž๋™๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ์ด์œ ๋Š” WKWebView์—์„œ๋Š” ์ฟ ํ‚ค ๊ฐ’์„ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ๋งŒ ์ž๋™๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์˜€๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ๋™์ผํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž๋™๋กœ๊ทธ์ธ์„ ์œ„ํ•ด ์ฟ ํ‚ค ๊ฐ’์„ ์ง์ ‘ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. ๋˜ํ•œ ์ฟ ํ‚ค value๊ฐ€ ๊ธฐ์กด ๊ฐ’์„ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ƒํ™ฉ์ด์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™๋กœ๊ทธ์ธ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์‚ฌํŒŒ๋ฆฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ํœด๋Œ€ํฐ ๋ชจ๋ฐ”์ผ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ ๋””๋ฒ„๊น…ํ•˜์˜€๋‹ค. (ํฌ๋กฌ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ์‚ฌํŒŒ๋ฆฌ ์จ๋ณธ์ ์ด ์—†์–ด์„œ ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค! ์จ๋ณด๋‹ˆ๊นŒ ์‚ฌํŒŒ๋ฆฌ๊ฐ€ ์ข€ ๋” ํŽธํ•œ๊ฒƒ ..
ยท iOS
PageViewController ์‚ฌ์šฉํ•ด๋ณด๊ธฐ..!! ํŽ˜์ด์ง€ ๋„˜๊ธฐ๋“ฏ์ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. extension PageVC: UIPageViewControllerDelegate, UIPageViewControllerDataSource { // ํŽ˜์ด์ง€ ์ด๋™ํ• ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ func pageViewController(_ pageViewController: UIPageViewController,didFinishAnimating finished: Bool,previousViewControllers: [UIViewController],transitionCompleted completed: Bool){ guard completed else { return } currentIndex = pageVie..
ยท iOS
1๋…„์ „ rx๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์–ด์„œ ๊ทธ๋•Œ ์ž ๊น ๊ณต๋ถ€ํ•˜๊ณ , ์ž‘๋…„ 7์›”์ฏค ํ•œ๋ฒˆ ๋” ๊ณต๋ถ€ํ–ˆ์ง€๋งŒ ๊ทธ๋•Œ๋Š” rx๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€, ์žฅ์ ์„ ์ฐพ์•„๋ด๋„ ์ดํ•ด๋Š” ๋˜์ง€๋งŒ ํฌ๊ฒŒ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ์กฐ๊ธˆ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค. ์ทจ์—…์ค€๋น„๋ฅผ ํ•˜๋ฉด์„œ ๊ธฐ์กด์— ๋งŒ๋“ค์–ด ๋ฐฐํฌํ–ˆ๋˜ ๋‹ค์ด์–ด๋ฆฌ ์•ฑ ์ฝ”๋“œ์˜ ์‹ฌ๊ฐ์„ฑ์„ ๋Š๊ปด ๋ฆฌํŒฉํ† ๋ง๊ณผ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ์—ฐ์Šต์šฉ ํ”„๋กœ์ ํŠธ๋กœ ํ–ˆ๋˜๊ฒƒ ๋ณด๋‹ค ์ข€ ๋” ๋ณต์žกํ•œ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•  ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ @escaping์œผ๋กœ ๋ฒ—์–ด๋‚˜๊ณ  ์ค‘๊ด„ํ˜ธ ์•ˆ์œผ๋กœ ํƒ€๊ณ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ๋ญ”๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„ ์ข€ ๋” ์ฐพ์•„๋ณด๋‹ˆ ์ด๋Ÿฐ ๋ถ€๋ถ„์„ rx๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋•Œ๋ถ€ํ„ฐ rx๋ฅผ ๋ฐฐ์›Œ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ทจ์—…์„ ํ•œ ํ›„ ํšŒ์‚ฌ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๋ณด๋‹ˆ ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ์ˆœ์„œ๋•Œ๋ฌธ์— @escaping..
์ดˆ๊ธฐํ™” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ. ๋ชจ๋“  ์ €์žฅ ์†์„ฑ๋“ค์€ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ (์ดˆ๊ธฐ๊ฐ’์ด ์ง€์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ) ํด๋ž˜์Šค ๊ตฌ์กฐ์ฒด ์ง์ ‘ ์ดˆ๊ธฐ๊ฐ’ ๋„ฃ๊ธฐ O O ์ƒ์„ฑ์ž ์‚ฌ์šฉ O O ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ € X O Convenience init ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ด๋‹ˆ์…œ๋ผ์ด์ € ์ž๊ธฐ ๋‹จ๊ณ„์— ์žˆ๋Š” ์ง€์ • ์ƒ์„ฑ์ž ๋˜๋Š” ์ž๊ธฐ ๋‹จ๊ณ„์— ์žˆ๋Š” ๋‹ค๋ฅธ ํŽธ์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ๊ฐ€๋Šฅ ์ง€์ • ์ƒ์„ฑ์ž๋Š” ์ƒ์œ„ ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•จ ํด๋ž˜์Šค์—๋งŒ ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ (์ƒ์†๊ณผ ๊ด€๋ จ) ์ง€์ •์ƒ์„ฑ์ž๋ณด๋‹ค ์ ์€ ๊ฐฏ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ธŒ(Sub)๊ฐœ๋…์˜ ์ƒ์„ฑ์ž ํŽธ์˜ ์ƒ์„ฑ์ž๋Š” ์ง€์ • ์ƒ์„ฑ์ž์— ์˜์กด ๋ฐ ํ˜ธ์ถœ(์ง€์ •์ƒ์„ฑ์ž๊ฐ€ ์ €์žฅ ์†์„ฑ ์ดˆ๊ธฐํ™”) ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ ์‹ค์งˆ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ..
๋ฆด๋ฆฌ๐Ÿฐ
'iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)