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

์ „์ฒด ๊ธ€184

[Swift] ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ• init, property, method ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์˜์กด์„ฑ(Dependency)์ด ๋ฌด์—‡์ธ์ง€, ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„ ๋ดค์Šต๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•ด์š”. ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ ์ฃผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋“ค ๊ฒฝํ—˜ํ•˜์…จ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ์–ด ๋ณด์‹œ๋ฉด ๊ฐ์ด ์žกํž ํ…Œ์ง€๋งŒ ๊ทธ๋ž˜๋„ DI๋ฅผ ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์ž˜ ๋  ๊ฑฐ์—์š”! DI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๋ฉด ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! iOS ์•ฑ์„ ๋งŒ๋“ค๋•Œ ์šฐ์„  ๊ฐœ๋ฐœ ์ผ์ •์— ๋งž์ถ”์–ด ์ž‘๋™์ด ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๊ฒ ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๊ณ  ๊ทธ์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ๋งŽ์•„์ง€๋ฉด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์™€ ์˜์กด๊ด€๊ณ„๋„ ๋งŽ์•„์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข€๋” ํšจ๊ณผ์ ์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๊ฒŒ .. 2022. 5. 5.
[Swift] ์˜์กด์„ฑ ์ฃผ์ž… ์™œ ํ•„์š”ํ• ๊นŒ? DI ์•Œ์•„๋ณด๊ธฐ ์ฒ˜์Œ Swift๋กœ iOS ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ํ•ด๋„ ๊ตฌํ˜„์— ์ดˆ์ ์„ ๋‘์—ˆ์ง€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์€ ํ•˜์ง€ ๋ชปํ–ˆ๋˜๊ฑฐ ๊ฐ™์•„์š”! ์ด์ œ ์–ด๋Š๋ง ์–ธ์–ด๊ฐ€ ์ต์ˆ™ํ•ด ์ง€๊ณ  ์‚ฌ์šฉ์ž ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ, ์•ฑ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜๋”๋ผ๊ตฌ์š”! ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Swift ์–ธ์–ด๋ณด๋‹ค๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ฃผ๋กœ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ์ธ DI์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค~ DI๋‚˜ loC๊ฐ€ ์˜์กด์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ฃผ์ž…ํ•  ๊ฒƒ์ด๋ƒ์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฑ ์–ด๋Š ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ์„œ Swift๋กœ ์–ด๋–ป๊ฒŒ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์„์ง€, ์˜์กด์„ฑ์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค. ์˜์กด์„ฑ์ด๋ž€? ์˜์กด์„ฑ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค~ class Zoo { let animal: Bear init() {.. 2022. 4. 29.
[Swift] insetBy ์•Œ์•„๋ณด๊ธฐ insetBy(dx:dy) Core Graphic์˜ CGRect์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ offset์ด point๋ผ๋ฉด inset์€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์žˆ๋Š” ๊ณต๊ฐ„. ์•ˆ์ชฝ์œผ๋กœ ๋งˆ์ง„์„ ์คŒ ์ค‘์•™์ ์„ ๊ธฐ์ค€์œผ๋กœ dx, dy ๊ฐ’์„ ํ†ตํ•ด ์กฐ์ •๋œ, ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ๋” ํฌ๊ฑฐ๋‚˜ ๋” ์ž‘์€ ์‚ฌ๊ฐํ˜•์„ ๋ฐ˜ํ™˜ Parameters dx x ์ขŒํ‘œ ๊ฐ’ ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ํฌ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์Œ์ˆ˜๋ฅผ, ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์–‘์ˆ˜๋ฅผ ์ง€์ •ํ•จ dy y ์ขŒํ‘œ ๊ฐ’ ์›๋ณธ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋‹ค ํฌ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์Œ์ˆ˜๋ฅผ, ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ์–‘์ˆ˜๋ฅผ ์ง€์ •ํ•จ ์˜ˆ์‹œ newView.bounds = originalView.bounds.insetBy(dx: 20, dy: 0) inset by ์ „ : (0.0, 0.0, 100.0, 40.0) inset by ํ›„ : (20.0, 0.0, 60.0, 40.. 2022. 4. 23.
[iOS/Swift] xib๋ฅผ ์ด์šฉํ•œ Custom UIView ๋งŒ๋“ค๊ธฐ UIViewController, UITableViewCell, UICollectionViewCell, UICollectionReusableView ๋“ฑ์„ ์ƒ์† ๋ฐ›๋Š” subclass ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ xib๋ฅผ ํ•จ๊ป˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ UIView๋Š” ํŒŒ์ผ ์ƒ์„ฑ์‹œ ํ•จ๊ป˜ xib๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹น ์šฐ์„ ์€ UIView์˜ Subclass์ธ CommonTextField๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค ์ƒˆ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  Class ๋ช…์„ ์ž…๋ ฅํ•œ ํ›„ Subclass๋Š” UIView๋กœ ์ƒ์† ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค Next๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ง„ํ–‰ํ•ด ์ค๋‹ˆ๋‹ค. ์ด์ œ xib ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  User Interface ์„น์…˜์—์„œ ๋ณด์ด๋Š” View๋ฅผ ์„ ํƒํ•ด ์ฃผ๋ฉด xib ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ €๋Š” ์ด์ „์— ์ƒ์„ฑํ•œ UIView ๋ฅผ.. 2022. 4. 10.
[iOS/Swift] ๋ช‡ ์ดˆ ํ›„์— ์ฝ”๋“œ ์‹คํ–‰ํ•˜๊ธฐ DispatchQueue asyncAfter DispatchQueue ํด๋ž˜์Šค์— ์žˆ๋Š” public func asyncAfter(deadline: DispatchTime, execute: DispatchWorkItem) ์„ ์‚ฌ์šฉํ•ด ์ค๋‹ˆ๋‹ค deadline์€ DispatchTime์„ ๋ฐ›๋Š”๋ฐ .now() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. execute์—๋Š” deadline ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํด๋กœ์ €๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค 3์ดˆ ํ›„์— execute์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹น DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: { // ์‹คํ–‰ํ•  ์ฝ”๋“œ ์ž‘์„ฑ }) ์˜ˆ์‹œ DispatchQueue.main.asyncAfter(deadline: .now() + 3, exec.. 2022. 3. 19.
[iOS/Swift] custom font ์ง€์ •ํ•˜๊ณ  UIFont ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์‹œ์Šคํ…œ ํฐํŠธ๊ฐ€ ์•„๋‹Œ ์›ํ•˜๋Š” ๊ธ€๊ผด์„ iOS ํ”„๋กœ์ ํŠธ์— ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ…ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”! ๊ฐ‘์ž๊ธฐ ์ด์œ ์—†์ด ํฌ๋ž˜์‰ฌ ๋‚˜๋Š” ์ด์œ ๋„ ์•Œ์•„๋ด…์‹œ๋‹น ์šฐ์„  ์›ํ•˜๋Š” ๊ธ€๊ผด์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์ฃผ์„ธ์š” ์ €๋Š” ์ฃผ๋กœ "๋ˆˆ๋ˆ„" ๋ผ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์š” ์ƒ์—…์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํฐํŠธ๋ฅผ ๋ชจ์•„๋†“์€ ์‚ฌ์ดํŠธ์—ฌ์„œ ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ๊ธ€๊ผด์„ ์ฐพ์•„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š” https://noonnu.cc/ ๋ˆˆ๋ˆ„ ์ƒ์—…์šฉ ๋ฌด๋ฃŒํ•œ๊ธ€ํฐํŠธ ์‚ฌ์ดํŠธ noonnu.cc ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๋ผ์ด์„ ์Šค ์š”์•ฝํ‘œ๋ฅผ ๊ผญ ํ™•์ธํ•ด ๋ณด์„ธ์šค ์ฃผ๋กœ ํฐํŠธ๋ฅผ ๋ฐ›์„ ๋•Œ ๋‘ ๊ฐ€์ง€ ํ™•์žฅ์ž๊ฐ€ ์žˆ์„ ๊ฑฐ์—์š”! .otf Open Type Font .ttf Tru Type Font xCode๋Š” ๋‘๊ฐ€์ง€ ํ™•์žฅ์ž ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹น ํฐํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ๋ฉด ์ฃผ๋กœ zip ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ ๊ฑฐ์—์š” ๋”.. 2022. 3. 19.
[Github Desktop] ๋กœ๊ทธ์•„์›ƒ, ๋กœ๊ทธ์ธ ํ•˜๋Š” ๋ฐฉ๋ฒ• we couldn't find that repository. Check that you are logged in ๊นƒ์—์„œ ์ƒˆ๋กœ์šด repository๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊นƒํ—ˆ๋ธŒ ๋ฐ์Šคํฌ ํƒ‘์—์„œ ์ž‘์—…ํ•˜๋ ค ํ•˜๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ์ด๋Ÿฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด๋‹ค ใ… ใ…  We couldn't find that repository. Check that you are logged in, the network is accessible, and the URL or repository alias are spelled correctly ์ฒ˜์Œ์— ์ด์œ ๋ฅผ ๋ชฐ๋ผ์„œ ๋‹นํ™ฉํ–ˆ๋Š”๋ฐ ์•Œ๊ณ  ๋ณด๋‹ˆ private repository ์ƒ์„ฑ ๊ณ„์ •๊ณผ ๊นƒํ—ˆ๋ธŒ ๋ฐ์Šคํฌํƒ‘์— ๋กœ๊ทธ์ธํ•œ ๊ณ„์ •์ด ๋‹ฌ๋ž๋˜ ๊ฒƒ! ๊ทผ๋ฐ ์ด๋†ˆ์˜ ๋งฅ ๊นƒํ—ˆ๋ธŒ ๋ฐ์Šคํฌํƒ‘ ์•ฑ์— ์•„๋ฌด๋ฆฌ ์ฐพ์•„๋ด๋„ ๋กœ๊ทธ์•„์›ƒ, ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์•ˆ๋ณด์—ฌ์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ control + , ์ปจํŠธ๋กค๊ณผ ์‰ผํ‘œ๋ฅผ ๊ฐ™์ด ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด Preferences.. 2022. 3. 14.
๋“œ๋””์–ด ๋ชฌํ„ฐ๋ ˆ์ด ์—…๊ทธ๋ ˆ์ด๋“œ ํ–ˆ๋‹ค ๊ทธ๊ฐ„ ๋งก์•„ ํ•˜๋˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์–ด์„œ ๋ชฌํ„ฐ๋ ˆ์ด ์—…๋ฐ์ดํŠธ๋ฅผ ๋ง์„ค์˜€๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ๋„ ๋งˆ๋ฌด๋ฆฌ ๋˜์–ด 2์ฐจ๋กœ ๋„˜์–ด๊ฐ”๋‹ค! ์˜ค๋Š˜ ๋“œ๋””์–ด ๋ชฌํ„ฐ๋ ˆ์ด๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  xCode๋„ ์—…๋ฐ์ดํŠธ ํ–ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋ญ ์ถฉ๋Œ ๋‚œ๋‹ค๊ฑฐ๋‚˜ ๊ฐ‘์ž๊ธฐ ๋นŒ๋“œ๊ฐ€ ์•ˆ๋œ๋‹ค๊ฑฐ๋‚˜ ๊ทธ๋Ÿฐ๊ฒƒ๋„ ์—†๊ณ  ์˜คํžˆ๋ ค ๋””์ž์ธ์ ์œผ๋กœ ์œ ๋ คํ•ด์ง„(๋Š๋‚Œ์ ์ธ ๋Š๋‚Œ) ๊ธฐ๋ถ„์ด๋ผ ์ข‹๋‹น! ํ‚ค๋ณด๋“œ๋ฅผ ํ™ฉ์ถ•์—์„œ ์ €์ ์œผ๋กœ ๋ฐ”๊ฟจ๋Š”๋ฐ ํ‚ค์••์ด ์ข€ ๋Š๊ปด์ง€๋Š” ํŽธ์ด๋ผ ์†๋ชฉ์ด ์กฐ๊ธˆ ํ”ผ๋กœํ•œ๊ฑฐ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ ๋‹ค๊ฐ๋‹ค๊ฐํ•œ ๋Š๋‚Œ์ด ๋„ˆ๋ฌด ์ข‹๋‹ค. ํ‚ค๊ฐ์€ ์ข‹๊ณ  ์Šคํ…Œ๋นŒ๋„ ์ž˜ ์žกํ˜€ ์žˆ์ง€๋งŒ ํ†ต์šธ๋ฆผ์ธ์ง€ ์Šคํ”„๋ง์Œ์ธ์ง€ ๋ญ”๊ฐ€ ๊ฑฐ์Šฌ๋ฆฌ๋Š” ์†Œ๋ฆฌ๊ฐ€ ๋‚œ๋‹ค. ์ค‘์ €๊ฐ€๋„ ์•„๋‹ˆ๊ณ  ๋ธŒ๋žœ๋“œ ํ‚ค๋ณด๋“œ๋ฅผ ์‚ฐํ„ฐ๋ผ ์†์ƒํ•˜๋‹ค.. ๋‹ค๋งŒ ์ŠคํŽ˜์ด์Šค ์น ๋•Œ๋งˆ๋‹ค ์—„์ฒญ๋‚œ ์พŒ๊ฐ์ด....ใ…Žใ…Žใ…Žใ…Ž ๊ฐ„์ด์œคํ™œํ•˜๋Š” ๋™์˜์ƒ ๋ณด๊ณ  ๋„์ €ํžˆ ๋ชปํ•˜๊ฒ ์–ด์„œ ๋‘๊บผ์šด ์žฅํŒจ๋“œ๋ฅผ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค... 2022. 2. 20.
[Swift] PHPhotoLibraryChangeObserver ์™€ LimitedAccessAlert ์ด์ „ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ PHPhotoLibraryChnageObserver์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ… ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~ PHPhotoLibraryChnageObserver๋ž€? ์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด PH / Photo Library / Chnage Observer ์ž…๋‹ˆ๋‹ค. PhotoKit์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ์„œ ์‚ฌ์šฉ์ž์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ™œ์„ ํ•ฉ๋‹ˆ๋‹ค ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ํ™•์ธํ•ด ๋ดค์„ ๋•Œ PHAsset์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ์‚ฌ์ง„์ด๋‚˜ ๋™์˜์ƒ์„ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด ๋  ํ…๋ฐ ์™œ ์˜ต์ €๋ฒ„ ํ˜•ํƒœ๋กœ ํ”„๋กœํ† ์ฝœ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฑธ๊นŒ์š”? ์šฐ์„  ์‚ฌ์šฉ์ž์˜ PHAsset์„ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด let allPhotos = PHAsset.fetchAssets(with: phFetchOptions) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ์ฒด๋“ค.. 2022. 2. 10.
[Swift] PhotoKit ์‚ฌ์šฉํ•ด์„œ ์ปค์Šคํ…€ ์•จ๋ฒ” ๋งŒ๋“ค๊ธฐ - UICollectionViewController cell์— PHAsset ๋„ฃ๊ธฐ ์ด์ „ ๊ธ€์—์„œ PhotoKit์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ถŒํ•œ์„ ์–ป์–ด์˜ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋Œ€์‘ํ•ด๋ณด์•˜๋Š”๋ฐ์š” PHPhotoLibraryChnageObserver๋ฅผ ๋จผ์ € ํฌ์ŠคํŒ… ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์•„๋ฌด๋ž˜๋„ UICollectionViewController๋กœ ์ปค์Šคํ…€ ์•จ๋ฒ”์˜ ํ‹€์„ ๋งŒ๋“  ํ›„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ PHAsset์— ๋Œ€ํ•œ ๊ธ€ ๋ถ€ํ„ฐ ์ ๊ฒŒ ๋˜์—ˆ์–ด์šค PHAsset ์ด๋ž€? ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค๋Š” ๋žฉํƒ‘์ด๋‚˜ ์ปดํ“จํ„ฐ์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ํ•œ์ •์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์š”์ฆ˜์€ ์„ฑ๋Šฅ์ด ์˜›๋‚ ์— ๋น„ํ•ด ๋งค์šฐ๋งค์šฐ ์ข‹์•„์กŒ์ง€๋งŒ) ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์ง„์„ ๊ธ์–ด๋‹ค๊ฐ€ ์•ฑ์— ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ UITableViewCon.. 2022. 2. 7.
[Swift] PhotoKit ์‚ฌ์šฉํ•ด์„œ ์ปค์Šคํ…€ ์•จ๋ฒ” ๋งŒ๋“ค๊ธฐ - Permission ์ฒ˜๋ฆฌํ•˜๊ธฐ PHPhotoLibrary์˜ authorizationStatus์™€ requestAuthorization ๐Ÿ‘‹ SNS ์•ฑ์ด๋‚˜ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์•ฑ์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž ๊ฐค๋Ÿฌ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ๋ฐ์š”, ์‚ฌ์‹ค ์• ํ”Œ์—์„œ๋Š” ์ด๋ฏธ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก UIImagePickerController์™€ PHPickerViewController์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค์— ์ ‘๊ทผ ๊ถŒํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ง„์„ ์„ ํƒํ•˜๊ณ  ์ด ์‚ฌ์ง„ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ์ฃ ! ๐Ÿ‘‹ ๊ทธ๋Ÿฌ๋‚˜ UI/UX๊ฐ€ ๊ธฐ์กด iOS์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ˜•ํƒœ์™€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋ฉด ์ง์ ‘ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ๊ฑฐ๋‚˜ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ OS์—์„œ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ง์ ‘ ๊ตฌํ˜„์„ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ๊นŒ๋‹ค๋กญ๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ ์ด์ „์— ์ปค์Šคํ…€ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”, ์ด๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉด์„œ ์•Œ๊ฒŒ๋œ.. 2022. 2. 5.
[iOS/xCode] ๋‚ด๋ถ€ ํŒŒ์ผ Bundle๋กœ ๋ชป ์ฐพ์„ ๋•Œ ํ•ด๊ฒฐ๋ฒ• ๋„คํŠธ์›Œํ‚น์„ ํ•  ๊ฒฝ์šฐ json ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ api ๋กœ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ๋‚˜ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๋‚ด๋ถ€์— ์žˆ๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์ด๋•Œ ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ์— ์ •์ƒ์ ์œผ๋กœ ๋“ค์–ด ์žˆ์œผ๋‚˜ ๊ทธ path๋ฅผ bundle๋กœ ์ ‘๊ทผ ๋ชปํ•˜์—ฌ nil์„ ๋ฑ‰์–ด ๋‚ด๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ๋ฒ•์ž…๋‹ˆ๋‹ค~ ์šฐ์„  ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ฆญํ•ด ์ฃผ์„ธ์š” Target์„ ์„ ํƒํ•ด ์ฃผ์‹œ๊ณ  ๋„ค๋น„๊ฒŒ์ด์…˜์—์„œ Build Phases๋ฅผ ํด๋ฆญํ•ด ์ค๋‹ˆ๋‹ค ์—ฌ๊ธฐ์— Copy Bundle Resources ๊ฐ€ ๋ณด์ด๋Š”๋ฐ ์ด ํ•ญ๋ชฉ์„ ๋ˆŒ๋Ÿฌ์„œ ํŽผ์ณ์ฃผ์„ธ์š” + Build Phases ๋ž€? ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋นŒ๋“œ ๋‹จ๊ณ„ ์ž…๋‹ˆ๋‹ค ๋นŒ๋“œ ์˜ต์…˜์ด๋‚˜ ๋นŒ๋“œ์‹œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์„ค์ •์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด Build Phases ์ž…๋‹ˆ๋‹ค + ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ Bu.. 2022. 1. 17.