Deep_Dev
article thumbnail
[SwiftUI] In-App Review ์—ฐ๋™
๐ŸŽ iOS/SwiftUI 2024. 10. 12. 16:31

๐Ÿ“š ์ธ์•ฑ๋ฆฌ๋ทฐ(In-App Review) ์ด๋ฒˆ์— ํŒ€ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์‹œ์ž‘์ด ์กฐ๊ธˆ์”ฉ ๊ณ„์† ๋ฏธ๋ค„์ง€๋ฉด์„œ, ๊ฐœ๋ฐœํ•˜๊ณ ์‹ถ์€๋ฐ ํ•˜์ง€๋ชปํ•ด์„œ ์ตœ๊ทผ์— ์กฐ๊ธˆ์”ฉ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ธํ”„๋กœ์ ํŠธ ์•ฑ์— ์ธ์•ฑ๋ฆฌ๋ทฐ๋ฅผ ๋„ฃ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ธ์•ฑ๋ฆฌ๋ทฐ๋Š” ์•ฑ ๋‚ด์—์„œ ์•ฑ์˜ ์•ฑ์Šคํ† ์–ด ํ‰์ ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธธ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.์‚ฌ์‹ค ์ œ๊ฐ€ ์ด๊ฑธ ์ ์šฉํ•˜๋ ค๋Š” ์•ฑ์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์ง„ ์•Š์ง€๋งŒ ๊พธ์ค€ํžˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ํ™•์žฅ์„ฑ์ด ๋„“์ง€ ์•Š์€ ๋‹จ์ผ ๊ธฐ๋Šฅ ์•ฑ์ด๋ผ.. ํ™•์žฅ์„ ํ•œ๋‹ค๋ฉด ์—„์ฒญ ํฌ๊ฒŒ ํ•ด์•ผํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์˜๊ฒฌ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์„ ์กฐ๊ธˆ ๋” ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์„œ ์ ์šฉํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ SwiftUI๋ฅผ ์ฒ˜์Œ ๊ณต๋ถ€ํ•  ๋•Œ, ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ ์•ฑ์ธ๋ฐ ๋ฐฉ์น˜ํ•ด๋’€๋‹ค๊ฐ€ ๋‚˜์ค‘์— ๋ณด๋‹ˆ๊นŒ ๊ณ„์† ์“ฐ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋”๋ผ๊ตฌ์š”?์ตœ๊ทผ์— ์ด๊ฒƒ์ €๊ฒƒ ์กฐ๊ธˆ์”ฉ ์—…๋ฐ์ดํŠธ ์ค‘์ž…๋‹ˆ๋‹ค ! Stor..

article thumbnail
[SwiftUI] Invalid frame dimension
๐ŸŽ iOS/SwiftUI 2024. 8. 19. 20:25

๐Ÿ“š Error : Invalid frame dimension SwiftUI๋กœ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํ”„๋ ˆ์ž„์„ ๊ฐ€๋กœ๋กœ ๊ฐ€๋“ ์ฑ„์šฐ๋ ค๊ณ  width์— .infinity๋ฅผ ์ ์šฉํ•˜์˜€๋”๋‹ˆ ๋ณด๋ผ์ƒ‰ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์—ˆ๋‹ค.  ์ด๊ฒŒ ๋ญ๋ƒ๋ฉด .. ํ”„๋ ˆ์ž„์˜ ์น˜์ˆ˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค !   โœ… Solve1. width๊ฐ€ ์•„๋‹Œ maxWidth๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ( ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ• ) Text("Hi") .frame(maxWidth: .infinity) .frame(height: 100, alighment: .center)  2. UIScreen ์‚ฌ์ด์ฆˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.Text("Hi") .frame(width: UIScreen.main.bounds.width, height: 100, alighment: .center)

[SwiftUI] Onboarding ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ
๐ŸŽ iOS/SwiftUI 2024. 8. 10. 15:50

๐ŸŽ Onboarding ์ด๋ฒˆ MC3 ํ”„๋กœ์ ํŠธ์—์„œ ์˜จ๋ณด๋”ฉํ™”๋ฉด ๊ตฌํ˜„์„ ๋งก์•˜์–ด์„œ,์˜›๋‚ ์— ์˜จ๋ณด๋”ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ทธ๋ƒฅ ๋˜๋Š”๋Œ€๋กœ ๋ง‰ ๊ตฌํ˜„์„ ํ•ด์„œ ์ •๋ฆฌ๊ฐ€ ์•ˆ๋˜์—ˆ์ง€๋งŒ์ด๋ฒˆ์— ๋‹ค์‹œํ•˜๋Š” ๊น€์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.  1. ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•  ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜ + ์ตœ์ดˆ ์‹คํ–‰์‹œ ์˜จ๋ณด๋”ฉ ํ™”๋ฉด ๋„์šฐ๊ฒŒ ํ•˜๋Š” ์ž‘์—…์•ฑ์ด ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ธฐ๊ธฐ์— ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.@AppStorage๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.์ตœ์ดˆ ๊ตฌ๋™์‹œ์—๋งŒ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ฐ’์ด true์ด๋ฏ€๋กœ ์˜จ๋ณด๋”ฉํ™”๋ฉด์ด .fullScreen์œผ๋กœ ๋„์›Œ์ง€๊ณ , ์ดํ›„์— false๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด์„œ์žฌ์‹คํ–‰์‹œ์—๋„ ๋œจ์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.import SwiftUIstruct ContentView: View { // ์˜จ๋ณด๋”ฉ ํ™”๋ฉด์„ ์•ฑ ์ตœ์ดˆ ์‹คํ–‰๋•Œ ํ•œ๋ฒˆ๋งŒ ๋„์šฐ๋„๋ก ํ•˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜ @AppStorage("..

article thumbnail
[SwiftUI] Custom Alert View
๐ŸŽ iOS/SwiftUI 2024. 6. 16. 21:37

โœ… Custom Alert   ํ•ด์ปคํ†ค์„ ํ•  ๋•Œ,์ด๋Ÿฐ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ์—ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ์กด์˜ Alert๋ฅผ Customํ•˜๋ฉด ๋‚˜์˜ค๋Š”๊ฒƒ์ด๋‹ค.  import SwiftUIstruct ContentView: View { @State private var isAlertPresented = false var body: some View { ZStack { VStack { Button("Show Custom Alert") { isAlertPresented.toggle() } .padding() ..

article thumbnail
[SwiftUI] View -> Flip ๊ธฐ๋Šฅ
๐ŸŽ iOS/SwiftUI 2024. 6. 16. 20:28

โœ… ๋ทฐ๋ฅผ ์ „ํ™˜์‹œํ‚ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ธ Flip ๊ธฐ๋Šฅ   1. MainViewimport SwiftUIstruct ContentView: View { @State var isFlipped = false var body: some View { VStack(spacing: 0) { ZStack { if isFlipped { FrontView() } else { BackView() } } .scaleEffect(x: isFlipped ? -1 : 1) .f..

article thumbnail
[SwiftUI] SwiftData
๐ŸŽ iOS/SwiftUI 2024. 4. 22. 20:00

โœ… SwiftData Why is SwiftData ? - SwiftData๋Š” ์™œ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ์š” ? CoreData์™€ Realm์˜ ์žฅ์ ์„ ํ•ฉ์นœ๋“ฏํ•œ ๋Š๋‚Œ What is SwiftData ? ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทธ ์ž์ฒด๋Š” ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ. ์™ธ๋ถ€ ํŒŒ์ผ ํ˜•์‹ ์—†์ด ์ „์ ์œผ๋กœ ์ฝ”๋“œ์— ์ง‘์ค‘ํ•˜๊ณ  Swift์˜ ์ƒˆ๋กœ์šด ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ• ํ•œ API ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ @ . โœ… @Model ํด๋ž˜์Šค๋ฅผ persistent ๋ชจ๋ธ์ด๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• . ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—”ํ‹ฐํ‹ฐ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ฒŒ๋˜๊ณ , ๋˜ persistent ๋ชจ๋ธ์ด๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ์•ฑํ•œํ…Œ ์ด์ œ ์ด๊ฑด ์Šคํ‚ค๋งˆ์•ผ ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค. PersistentModel : AnyObject, Obersvable,..

article thumbnail
[SwiftUI] TextEditor BackgroundColor ์ ์šฉ
๐ŸŽ iOS/SwiftUI 2024. 4. 22. 10:27

TextEditor์˜ Background Color๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด .scrollContentBackground(.hidden)์œผ๋กœ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์„ ์ˆจ๊ธฐ๊ณ  .background(.clear)๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ์ƒํƒœ์—์„œ, TextEditor(text: $memoContent) //.scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .cornerRadius(10) .lineSpacing(10) ์ฃผ์„์„ ์ง€์›Œ์ฃผ๋ฉด, TextEditor(text: $memoContent) .scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .corne..

article thumbnail
[SwiftUI] NavigationStack
๐ŸŽ iOS/SwiftUI 2024. 4. 4. 22:06

โœ… ๊ธฐ์กด์˜ ๋ฐฉ์‹ : NavigationView ๊ธฐ์กด์—๋Š” NaivgationView์™€ NavigationLink๋ฅผ ํ†ตํ•ด ํƒ€์ดํ‹€๊ณผ ๋ทฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๋๋‹ค. var body: some View{ NavigationView { NavigationLink { ๋ทฐ(color: .red, order: 1) } label: { Text("ํƒ€์ดํ‹€") } } } ๐Ÿ’ก Stack์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ NavigationView์˜ ์–ด๋–ค ๋‹จ์ ์„ ๊ทน๋ณตํ–ˆ๋Š”์ง€ ? NavigationView์˜ ์ฃผ์š” ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” SwiftUI์—์„œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์•ฑ์˜ ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ๋ทฐ๊ฐ€ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์ž๋™์œผ๋กœ ํ‘ธ์‹œ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ, NavigationView๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ง‰๋Œ€์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„..