728x90

๐Ÿ“ฑ App Development Study 63

[Udemy iOS & Swift Bootcamp] SwiftUI๋ž€? ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• !

*SwiftUI: Apple์˜ ์ƒˆ๋กœ์šด UI ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Declarative Swift Code ๋กœ ๋งŒ๋“ค์–ด์ง. ์ดˆ๋ณด์ž๋“ค์„ ์œ„ํ•ด iOS ์•ฑ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๊ธฐ ์‰ฝ๋„๋ก ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์ฝ”๋“œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ๋งŒ๋“  ๊ฒƒ. ์บ”๋ฒ„์Šค์— ๊ทธ๋ƒฅ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๋ฉด ํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ทฐ๊ฐ€ ์ œ๊ณต๋˜์–ด ํ™”๋ฉด์—์„œ ๋ฏธ๋ฆฌ ๋ณด๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. UI๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฒŒ ๊ฐ€์žฅ ํฐ ์žฅ์  ! SwiftUI๋ฅผ ๋งŒ๋“  ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์• ํ”Œ์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ(์›Œ์น˜, ๋งฅ, iPhone) ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. Project Catalyst๋กœ Mac ์•ฑ์œผ๋กœ ๋ฐ”๋กœ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. iOS 14 ์ด์ƒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜์—์„œ๋งŒ ๊ตฌ๋™๊ฐ€๋Šฅํ•จ. iPhone 6S ์ด์ƒ. iPad Air2 ์ด์ƒ. ht..

[Udemy iOS & Swift Bootcamp] Command Line and Terminal

*Shell(์‰˜)๊ณผ Kernel(์ปค๋„ฌ) Shell: ์‚ฌ์šฉ์ž์™€ ์šด์˜์ฒด์ œ ๊ฐ„์— ๋Œ€ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด ํ•ด์„๊ธฐ ์—ญํ•  Kenel: ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ. ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ•˜๋“œ์›จ์–ด๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ *Shell ์ข…๋ฅ˜ 1) ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์‰˜(GUI) 2 ์ปค๋งจ๋“œ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค(CLI) *Bash = Bourne Again Shell : Unix ๊ธฐ๋ฐ˜ Command Line ์‹œ์Šคํ…œ *Command Line ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ? : ๋” ํฐ ํ†ต์ œ๋ ฅ์„ ์œ„ํ•ด. ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฆ„. * Command Line ๋ช…๋ น์–ด ls ํด๋” ๋ณด๊ธฐ cd ( change directory) ํด๋” ์ด๋™ cd ~ ๋ฃจํŠธ ํด๋”๋กœ ์ด๋™ mkdir ํด๋” ์ƒ์„ฑ touch Text2.txt Text2.txt ํŒŒ์ผ ์ƒ์„ฑ oepn Text..

[Udemy iOS & Swift Bootcamp] iOS Application Lifecycle

์•ฑ์˜ ์ƒํƒœ ๋”ฐ๋ผ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ์ผ๋“ค์ด ์žˆ๋‹ค. ์ด ๋•Œ iOS App Lifecycle ์˜ UIApplicationDelegate ํ•จ์ˆ˜๋“ค์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์ž. https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle Managing your app’s life cycle | Apple Developer Documentation Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events. developer.apple...

[Udemy iOS & Swift Bootcamp] ViewController Lifecycle

1. viewDidLoad() ํ˜ธ์ถœ. ๋ชจ๋“  IBOutlet, IBAction ๋“ฑ ๋ทฐ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฐœ์ฒด๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด access ๊ฐ€๋Šฅ์ƒํƒœ๊ฐ€ ๋จ. 2. viewWillAppear() ํ˜ธ์ถœ. ํŠน์ • UI ์š”์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์ˆจ๊น€์ฒ˜๋ฆฌ 3. viewDidAppear() ํ˜ธ์ถœ ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์„œ ๋ณด์—ฌ์ง€๊ฒŒ ๋จ. 4. viewWillDisappear() ํ˜ธ์ถœ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ๋ทฐ์—์„œ ์–ด๋–ค ํ™”๋ฉด ๋ฐ UI ์š”์†Œ๋ฅผ ์‚ญ์ œํ• ์ง€ 5. vieDidDisappear() ํ˜ธ์ถœ ๋ทฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋จ. https://developer.apple.com/documentation/uikit/uiviewcontroller

[Udemy iOS & Swift Bootcamp] ์ฑ„ํŒ… ์™„์„ฑํ•˜๊ธฐ 3 (์ƒ๋‹จ Navigation Bar ๊พธ๋ฏธ๊ธฐ)

3. ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ” ๊พธ๋ฏธ๊ธฐ ๋ฐ‹๋ฐ‹ํ•œ ์ƒ๋‹จ๋ฐ”๋ฅผ ๊พธ๋ฉฐ์ฃผ์ž. 1) ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ navigation controller์˜ navigation bar ๋ฅผ ์ด์šฉํ•ด์„œ ์ „์ฒด navigation bar์˜ bar tint ๋ฅผ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํฐํŠธ ์ƒ‰์ƒ๊ณผ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ƒ๋‹จ Navigation ๋ฐ”๋ฅผ ๋ณด์ด๊ฑฐ๋‚˜ ์ˆจ๊ธฐ๊ณ  ์‹ถ์œผ๋ฉด navigationController์˜ isNavigationBarHidden ์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด๋œ๋‹ค. https://developer.apple.com/documentation/uikit/uinavigationcontroller UINavigationController | Apple Developer Documentation A container view controller t..

[Udemy iOS & Swift Bootcamp] ์ฑ„ํŒ… ์™„์„ฑํ•˜๊ธฐ 2 (์ตœ์‹  ๋ฉ”์„ธ์ง€(๋งจ ์•„๋ž˜)์œผ๋กœ ํ™”๋ฉด ์Šคํฌ๋กคํ•˜๊ธฐ.)

2. ์ตœ์‹  ๋ฉ”์„ธ์ง€(๋งจ ์•„๋ž˜)์œผ๋กœ ํ™”๋ฉด ์Šคํฌ๋กคํ•˜๊ธฐ. ์ฑ„ํŒ…์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ, ํ™”๋ฉด ์Šคํฌ๋กค์„ ๋งจ ์•„๋ž˜๋กœ ๋‚ด๋ ค์„œ ์ตœ์‹  ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค. tableView ์—์„œ ํŠน์ • ์…€๋กœ ์Šคํฌ๋กค ํ•˜๋Š” ํ•จ์ˆ˜๋Š” scrollToRow ํ•จ์ˆ˜ ์ด๋‹ค. ํŠน์ •์…€ ์ธ๋ฑ์Šค์ธ indexPath, ์Šคํฌ๋กค ํฌ์ง€์…˜(top, bottom, middle), ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ true or false ์ธ์ž๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. func loadMessages(){ db.collection(K.FStore.collectionName).order(by: K.FStore.dateField).addSnapshotListener { (querySnapshot, err) in self.messages = [] if let e = err { print("Error ge..

[Udemy iOS & Swift Bootcamp] ์ฑ„ํŒ… ์™„์„ฑํ•˜๊ธฐ 1 (๋ฐœ์‹ ์ž/์ˆ˜์‹ ์ž ๊ตฌ๋ถ„ํ•˜๊ธฐ)

์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“  ์ฑ„ํŒ…์•ฑ์—์„œ ๋ถ€์กฑํ•œ 3๊ฐ€์ง€๋ฅผ ์ฑ„์›Œ๋ณด์ž. 1. ๋ฐœ์‹ ์ž/์ˆ˜์‹ ์ž ๊ตฌ๋ถ„ํ•˜๊ธฐ 2. ์ตœ์‹  ๋ฉ”์„ธ์ง€(๋งจ ์•„๋ž˜)์œผ๋กœ ํ™”๋ฉด ์Šคํฌ๋กคํ•˜๊ธฐ. 3. ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๊พธ๋ฏธ๊ธฐ 1. ๋ฐœ์‹ ์ž/์ˆ˜์‹ ์ž ๊ตฌ๋ถ„ํ•˜๊ธฐ 1) ๊ธฐ์กด์— ๋งŒ๋“ค์—ˆ๋˜ Cell ์— another user ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ํ•˜๊ธฐ. ์™ผ์ชฝ์˜ ๊ธฐ์กด Cell ์— right Image ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์™ผ์ชฝ์— ๋ถ™์—ฌ๋„ฃ๊ณ  You ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๊ฐ€ ๋ณธ์ธ์ด๋ฉด Me, ์ƒ๋Œ€๋ฐฉ์ด๋ฉด You ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค. 2) MessageCell ์Šคํฌ๋ฆฝํŠธ์— leftImageView ๊ฐ์ฒด ์ถ”๊ฐ€ํ•˜๊ธฐ. ์ด๋ฏธ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ์ฒด๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์ž. 3) ChatViewController ํด๋ž˜์Šค์— ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ extension ChatViewController: UITa..

[Udemy iOS & Swift Bootcamp] Keyboard ๋‹ค๋ฃจ๊ธฐ

์ฑ„ํŒ… ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ค‘, ํ‚ค๋ณด๋“œ๊ฐ€ ์ž…๋ ฅ์ฐฝ์„ ๊ฐ€๋ฆฌ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ํ‚ค๋ณด๋“œ๊ฐ€ ์œ„๋กœ ์˜ฌ๋ผ์˜ฌ ๋•Œ, ์ž…๋ ฅ์ฐฝ๋„ ํ•จ๊ป˜ ์˜ฌ๋ผ์™€์•ผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆํŽธํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๋ฐ”๋กœ IQKeyboardManagerSwift. https://cocoapods.org/pods/IQKeyboardManagerSwift IQKeyboardManagerSwift Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. cocoapods.org 1. IQKeyboardManagerSwift ์„ค์น˜ํ•˜๊ธฐ Podfile ์— pod 'IQKeyboardManag..

[Udemy iOS & Swift Bootcamp] Firebase's Cloud Firestore

* Cloud Firestore: ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Firebase์˜ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. Firestore | Firebase ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ NoSQL ํด๋ผ์šฐ๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ ์ธก ๊ฐœ๋ฐœ ๋ฐ ์„œ๋ฒ„ ์ธก ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋™๊ธฐํ™”ํ•˜์„ธ์š”. firebase.google.com Firebase์— 2๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋‹ค. ๊ธฐ์กด firebase ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ Realtime Database, ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์—…๋ฐ์ดํŠธ๋œ Cloud Firestore. ๊ธฐ์กด firebase์— ์ฟผ๋ฆฌ๋‚˜ MongoDB ๊ฐ™์€ ํ˜„๋Œ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์›ํ•ด์„œ ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋” ์ž์„ธํ•œ ์ฐจ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. [Cloud Firestore VS Realtime Databa..

[Udemy iOS & Swift Bootcamp] Type Casting

Type casting ์— ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ๋ฌธ์„ ์•Œ์•„๋ณด์ž. is ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ™•์ธ์šฉ let cell = UITableViewCell() if cell is UITableViewCell { print("The types match!") } as? ๋‹ค์šด์บ์ŠคํŒ…์„ ํ™•์ธํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ. ์ฃผ๋กœ if ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•จ. if let messageCell = cell as? MessageCell { //Then can use messageCell's capabilities } as! ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ ๊ฐ•์ œ ๋‹ค์šด ์บ์ŠคํŒ…. Forced Downcast let messageCell = cell as! MessageCell as ํƒ€์ž…์„ ์Šˆํผ ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๋Š”, ํ•ญ์ƒ ์˜ณ์€ Upcast let newCell = mes..

728x90