๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€196

[iOS/Swift] Localization ์ฝ”๋“œ๋กœ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ PROJECT > Info ํƒญ > Localization ์„น์…˜ > + ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์„œ ์–ธ์–ด ์ถ”๊ฐ€ New File > Strings File ์ถ”๊ฐ€ ์ƒ์„ฑ๋œ ํŒŒ์ผ ํ™•์ธ > ์˜ค๋ฅธ์ชฝ File ์ธ์ŠคํŽ™ํ„ฐ ํ™•์ธ Localize ๋ฒ„ํŠผ > ์–ธ์–ด ์„ ํƒ > Localize ๋ฒ„ํŠผ ํด๋ฆญ ๋‹ค์‹œ File Inspector ํ™•์ธํ•˜๋ฉด Localization ์„น์…˜ ์˜์—ญ์— ์ถ”๊ฐ€ํ•œ ์–ธ์–ด ๋ชฉ๋ก์ด ํ‘œ์‹œ๋จ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌํ•  ์–ธ์–ด ์„ ํƒํ•˜๋ฉด Project Navigator์—์„œ ์–ธ์–ด ๋ณ„๋กœ Localizable ์ƒ์„ฑ๋œ ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ ๋™์Œ์ด์˜์–ด, ํ™”๋ฉด๋ณ„๋กœ ๋ณ€์—ญ๋˜์–ด์•ผ ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ‚ค๊ฐ’์€ ๊ณ ์œ  ๊ฐ’์œผ๋กœ ์ž‘์„ฑํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ String Extension extension String { var localized: String { return NSL.. 2023. 2. 23.
[iOS/Swift] pt ๋‹จ์œ„ ๋ง๊ณ  px ๋‹จ์œ„๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ 1 pixel ์ด๋ฏธ์ง€๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ •์‚ฌ๊ฐํ˜• ํ”ฝ์…€ ํฌ๊ธฐ์˜ ๋ณ€ํ™” ๋ ˆํ‹ฐ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด ์ด์ „์— 1์ธ์น˜ ์‚ฌ๊ฐํ˜•์— ๋“ค์–ด๊ฐ€๋Š” ํ”ฝ์…€ ์ˆ˜ 163๊ฐœ ๋ ˆํ‹ฐ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด ์ถœ์‹œ ํ›„ 1์ธ์น˜ ๋””์Šคํ”Œ๋ ˆ์ด์— 326 ํ”ฝ์…€์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ (1์ธ์น˜ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ํ”ฝ์…€์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฏ€๋กœ ํ”ฝ์…€์˜ ์ƒ๋Œ€์ ์ธ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง„ ๊ฒƒ) ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž 1pt์˜ ๊ฐœ๋… ๋„์ž… 1pt ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ฒ„ํŠผ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ @1x๋Š” 1๋ฐฐ, @2x๋Š” 2๋ฐฐ์˜ ํ”ฝ์…€ ๊ฐ’์ด ํ•„์š”ํ•จ 1pt = scale * 1px ex 10 ํ”ฝ์…€์˜ ๊ฐ’์„ ์–ป๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์Šค์ผ€์ผ๋กœ ๋‚˜๋ˆ” let k10PX: CGFloat = (10.0 / UIScreen.main.scale) iPhone 14 Pro Max์˜ ๊ฒฝ์šฐ @3x์ด๋ฏ€๋กœ iPhone 14 Pro Max์—์„œ์˜ 1px๋Š” ์‹ค์ œ.. 2023. 2. 6.
[iOS/Swift] SafeArea ๋†’์ด ๊ตฌํ•˜๊ธฐ viewController์˜ view view.safeAreaInsets.top view.safeAreaInsets.bottom 0.0 0.0 20.0 viewDidLoad, viewWillAppear, viewDidAppear์—์„œ ๊ฐ๊ฐ view์˜ safeAreaInsets์œผ๋กœ ์ ‘๊ทผํ•œ top์˜ ๊ฒฐ๊ณผ viewDidAppear์—์„œ ์ •ํ™•ํ•œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ ๋Œ€๋ถ€๋ถ„ UI๋ฅผ viewDidLoad์—์„œ ์ค€๋น„ํ•˜๋ฏ€๋กœ, viewDidAppear์—์„œ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ •ํ™•ํ•œ safeArea์˜ ๋†’์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์–ด๋ ค์›€ UIApplication.shared.windows.first iOS 15.0 ๋ฏธ๋งŒ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ UIApplication.shared.windows.first?.safeAreaInsets.top UI.. 2023. 2. 5.
[iOS/Swift] UIDevice ๋ฒ„์ „, UUID, ๊ธฐ๊ธฐ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ UIDevice current ์ธ์Šคํ„ด์Šค๋กœ ํ˜„์žฌ ๊ธฐ๊ธฐ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ์Œ ์ด๋ฆ„, ๊ธฐ๊ธฐ ๋ชจ๋ธ, ์šด์˜์ฒด์ œ ์ด๋ฆ„๊ณผ ๋ฒ„์ „ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์–ป์„ ๋•Œ ์‚ฌ์šฉํ•จ ๋ฌผ๋ฆฌ์  ๋ฐฉํ–ฅ(๊ธฐ๊ธฐ๋ฅผ ๊ฐ€๋กœ, ์„ธ๋กœ๋กœ ๋‘๋Š” ๊ฒƒ)๊ณผ ๊ฐ™์€ ๊ธฐ๊ธฐ์˜ ์ƒํƒœ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ ๋ฒ ํ„ฐ๋ฆฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ทธ ๋ณ€ํ™”๋ฅผ ์ถ”์  ํ•  ์ˆ˜ ์žˆ์Œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ธฐ๋ฅผ ์žก๊ณ  ์–ผ๊ตด์— ๊ฐ€๊นŒ์ด ๊ฐ€์ ธ๊ฐ”๋Š”์ง€๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทผ์ ‘ ์„ผ์„œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•จ import UIKit class DeviceInfo { static var sharedObject: DeviceInfo = DeviceInfo() /// Device Name (e.g. "iPhone 14 Pro") public func getDeviceName() -> String? { return U.. 2023. 2. 4.
[iOS/Swift] infoDictionary ์•ฑ ๋ฒ„์ „, ๋ฒˆ๋“ค ์•„์ด๋”” ๊ฐ€์ ธ์˜ค๊ธฐ infoDictionary๋ž€ ํ‚ค ๊ฐ’์œผ๋กœ ๊ฐ’์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋”•์…”๋„ˆ๋ฆฌ ํƒ€์ž… ํƒ€๊ฒŸ > Info ํƒญ์— ์žˆ๋Š” Info.plist ํŒŒ์ผ๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์–ด ํ•ด๋‹น ๊ฐ’์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Œ infoDictionary์˜ ํ‚ค๊ฐ’์€ Info.plist์˜ Raw Keys ์œผ๋กœ ์„ค์ •ํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ ์ฃผ๋กœ CFBundleIdentifier, NSMainNibFile, NSPrincipalClass ํ‚ค ๊ฐ’์ด ์‚ฌ์šฉ๋จ ์•ฑ ๋ฒ„์ „ ํ™•์ธ /// App Version public func getCurrentAppVersion() -> String? { guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { return .. 2023. 2. 4.
[Xcode/Git] ํ„ฐ๋ฏธ๋„๊ณผ ๊นƒ์œผ๋กœ Xcode ๊ด€๋ฆฌํ•˜๊ธฐ git ๊ด€๋ฆฌ์— ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์› ๋˜ ๊ฒƒ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋ฉด Github Desktop > Terminal > Sourcetree ์˜€๋˜๊ฑฐ ๊ฐ™๋‹ค ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์— ๊ฐœ์ธ, ํšŒ์‚ฌ ๊ณ„์ •์„ ๋‘๊ณ  ์“ฐ๋‹ค๋ณด๋‹ˆ ์†Œ์ŠคํŠธ๋ฆฌ๋Š” ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ผฌ์ด๊ณ  ๊ผฌ์—ฌ์„œ ํ„ฐ๋ฏธ๋„๋กœ ๋ฏธ๋ฆฌ ์„ธํŒ…์„ ํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํŽธ,, ํ›„.. ๊นƒํ—ˆ๋ธŒ ๋ฐ์Šคํฌํƒ‘์ด ๊ด€๋ฆฌํ•˜๊ธฐ ๊ต‰์žฅํžˆ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ํ„ฐ๋ฏธ๋„์„ ์‚ฌ์šฉํ•ด ๋ด…์‹œ๋‹ค ์™œ๋ƒํ•˜๋ฉด ๋‚ด๊ฐ€ ๋‘๊ณ  ๋‘๊ณ  ์ฐธ๊ณ ํ•ด์„œ ๋ณด๊ธฐ ์œ„ํ•ด! 1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ด๋™ Xcode ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ > ํ„ฐ๋ฏธ๋„์—์„œ cd ๋ช…๋ น์–ด๋กœ ์ด๋™ cd /Users/์‚ฌ์šฉ์ž์ด๋ฆ„/Desktop/PersonalSwiftStudy/Archive ์œ„ ๋ช…๋ น์–ด ์ž…๋ ฅ 2. git ํŒŒ์ผ ์ง€์šฐ๊ธฐ rm -rf .git ๊ธฐ์กด์— ๋“ฑ๋ก๋œ ๊ณ„์ •์— ์˜ํ•ด Xcode ์ƒ์„ฑ ์‹œ ๋“ฑ๋ก๋˜๋ฉด์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋ฉ”.. 2023. 2. 4.
[iOS/Swift] ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ์ƒ์„ฑ Singleton ํด๋ž˜์Šค ์ •์˜ class Singleton { static var sharedObject: Singleton = Singleton() } ์‚ฌ์šฉ๋ฐฉ๋ฒ• Singleton.shared.getUUID() getUUID๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ์„ ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•จ 2023. 2. 4.
[iOS/Swift] UIPresentationController custom modal transition style์˜ ๊ฒฝ์šฐ animator ๊ฐ์ฒด ์™ธ์— ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ view controller๊ฐ€ presenting ๋˜๊ธฐ ์ „์— UIPresentationController์˜ ์‹œ์Šคํ…œ์ด presentation controller์„ ์ƒ์„ฑํ•˜๋ฉฐ view controller๊ฐ€ dismiss ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ฐธใ…ˆ๋„๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ๋จ presentation controller๋Š” animator object์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๋„˜์–ด์„œ๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— presentation controller๋ฅผ ์‚ฌ์šฉํ•จ ๋งŒ์•ฝ ์ปค์Šคํ…€ ํŠธ๋žœ์ง€์…˜ ์ค‘์— ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” view controller์˜ ๋’ท ๋ถ€๋ถ„์— ๊ทธ๋ฆผ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผ ํ•œ๋‹ค๋ฉด presentation controlelr๋Š” shadow๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜.. 2023. 1. 29.
[iOS/Swift] UIViewControllerTransitioningDelegate view controller ์‚ฌ์ด์—์„œ interactive transition ์œ„ํ•œ ๋ฉ”์†Œ๋“œ์˜ ๋ชจ์Œ modalPresentationStyle ์†์„ฑ์„ .custom์œผ๋กœ ์ง€์ •ํ•˜๊ณ  transitioningDelegate ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•จ presnet, dismiss์— ์‚ฌ์šฉ๋  animator ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ(push, pop ๋„ ๋™์ผํ•˜๊ฒŒ ๊ฐ๊ฐ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ) transition์— ์‚ฌ์šฉ๋˜๋Š” animator ๊ฐ์ฒด๋Š” UIViewControllerAnimatedTransitioning protocol์„ ๋”ฐ๋ผ์•ผ ํ•จ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํƒ€์ด๋ฐ์„ ์ปจํŠธ๋กค ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์˜ ํ„ฐ์น˜ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ฐ›๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜์„ ์ด์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ UIViewControllerInteractiveTransitionin.. 2023. 1. 29.
[iOS/Swift] UIViewControllerAnimatedTransitioning ์ •๋ฆฌ custom view controller transition ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํ™”๋ฉด ์ „ํ™˜์„ ์œ„ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” animator ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ํŠธ๋žœ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” animator ๊ฐ์ฒด๋ฅผ ํƒ€์ด๋ฐ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๊ฒฐํ•ฉํ•ด์•ผ ํ•จ ์ด ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ transitionDuration(using:), animateTransition(using:) ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ UIViewControllerTransitioningDelegate ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๊ฐ์ฒด์—์„œ animator ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ ๋ทฐ ์ปจํ‹€๋กค๋Ÿฌ ํ™”๋ฉด ์ „ํ™˜ ์‹œ presnet ํ•  ๊ฒฝ์šฐ UIModalPresentationStyle.custom์œผ๋กœ ์ง€์ •ํ•ด ์คŒ animator๊ฐ์ฒด๋Š” UIViewCont.. 2023. 1. 29.
[Pod/iOS] Pod ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ํ„ฐ๋ฏธ๋„์—์„œ pod lib create [pod name] https://guides.cocoapods.org/making/using-pod-lib-create ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”Œ๋žซํผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋‚˜์˜ด ์ง€๊ธˆ์€ ๋กœ์ปฌ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์— ์ž‘์—…ํ•œ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€ ์•Š์€ํ•œ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค What platform do you want to use?? [ iOS / macOS ] > iOS ์ด๋•Œ iOS ์„ ํƒ (๋งฅ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด macOS๋ฅผ ์„ ํƒํ•˜๋ฉด ๋จ) What language do you want to use?? [ Swift / ObjC ] > Swift ํŒŸ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์–ธ์–ด ์„ ํƒ Would you like to include a demo .. 2023. 1. 29.
[iOS Swift] Deeplink ์‚ฌ์šฉํ•˜๊ธฐ 1. URL scheme ์ง€์ •ํ•˜๊ธฐ 2. ๋”ฅ๋งํฌ ์ง€์ •ํ•˜๊ธฐ 1. URL scheme ์ง€์ •ํ•˜๊ธฐ URL Scheme์€ url์ด ์‹œ์ž‘๋˜๊ธฐ ์ „ url ์•ž์— ๋ถ™๋Š” ํ”„๋ฆฌํ”ฝ์Šค ์ŠคํŠธ๋ง (์˜ˆ๋ฅผ ๋“ค์–ด https:// ๊ฐ€ ์žˆ์Œ) ์•ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ url์ด์ง€๋งŒ ์‚ฌํŒŒ๋ฆฌ์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด ์•ฑ์— ์ง€์ •๋œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•จ (1) ์•ฑ์—์„œ URL Scheme ๋“ฑ๋กํ•˜๊ธฐ Info.plist ํŒŒ์ผ์— URL scheme ๋“ฑ๋ก Info.plist > URL Types ์„น์…˜ Identifier์™€ ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํ‚ด์„ ์ž…๋ ฅํ•ด ์คŒ Identifier๋Š” ๋ฒˆ๋“ค id์™€ ๋™์ผ (2) Schene delegate ๋ฉ”์†Œ๋“œ ์ •์˜ํ•˜๊ธฐ ์•ฑ์— ๋”ฅ๋งํฌ ์ฒ˜๋ฆฌ ์š”์ฒญํ•˜๊ธฐ ์ฝ”๋“œ๋ ˆ๋ฒจ์—์„œ ํ•ด๋‹น ์ฝ”๋“œ ๋™์ž‘ ์‹œํ‚ค๋ฉด ๋จ ํ˜น์€ ์‚ฌํŒŒ๋ฆฌ์˜ ์ฃผ์†Œ์ฐฝ์—์„œ ์ง€์ •.. 2022. 12. 29.