๐ MixPanel ์ฌ์ฉhttps://docs.mixpanel.com/docs/what-is-mixpanel What is Mixpanel? - Mixpanel Docs docs.mixpanel.com ์ฌ์ด๋ ํ๋ก์ ํธ๊ฐ ๊ฑฐ์ ๋ง๊ฐ์ด ๋์ด๊ฐ๊ณ , ๋ฐฐํฌํ๊ธฐ ์ ์ธ๋ฐ ์ฑ ๋ด์์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋๋์์ Events๋ฅผ ์ถ์ ํด๋ณด๋ผ๋ผ๋ ์กฐ์ธ์ ์ป์๊ณ , ๊ทธ๊ฒ์ ์ ์ฉํ๊ธฐ ์ํด MixPanel ์ด๋ผ๋๊ฒ์ ์ถ์ฒ๋ฐ์์ต๋๋ค. ( Firebase๊ฐ์ ๊ฒ๋ค๋ ๋์ง๋ง, ์ธ์ฌ์ดํธ๋ก ํต๊ณ๋ฅผ ํ์ธํ๋๋ฐ์ ์์ด์ MixPanel์ด ํธํ๋ค๊ณ ํ๋ค์ ! ) ๊ทธ๋ฐ๋ฐ, ์ ์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ฉด MixPanel์ ๋ํ ์ ๋ณด๊ฐ ๋ง์ด ์๋์์ต๋๋ค ! ๋ฐ๋ก ํ ์คํธ์ฉ ํ๋ก์ ํธ ํ์ผ์ ๋ง๋ค์ด์ ํ ์คํธ๋ฅผ ์๋ํ๊ณ , ์ํ๋๋๋ก ์ฑ๊ณตํด์ ๊ธฐ๋กํ์ฌ ๋จ๊ฒจ๋ด ๋๋ค. ..
๐ Invalid Bundle( ํ๋ฉด ๋ฐฉํฅ์ธ orientations ์ค์ ์ ๋ง์ฃผํ ์ ์๋ ์๋ฌ ) ์ด์ iPadOS ์ฑ์ TestFlight์ ๋ฑ๋กํ๋ค๊ฐ ๋ง๋ ์๋ฌ์ด๋ค. ํ๋ฉด์ ๊ฐ๋ก๋ชจ๋๋ก ๊ณ ์ ์ํค๋๋ผ, ํด๋น ์ค์ ํ ๋ค์ TestFlight์ ์ฌ๋ฆด๋ ๋ฐ๊ฒฌ๋ ๊ฒ์ธ๋ฐ, ํ๋ฉด์ ๊ฐ๋ก๋ชจ๋, ์ธ๋ก๋ชจ๋ ์ค์ ํ ๋ ๋ณดํต PROJECT - TARGET - Build Setting์์์ด ์ต์ ์ ์ค์ ํด์ค ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ฐฉํฅ์ ์ค์ ํ๊ณ , TestFlgith์ ์ฌ๋ฆด๋ Archive๋ฅผ ์งํํ๊ณ ๋๋ฉด ํ ํ์ ์ฌ๋ผ๊ฐ์ง์๊ณ ERROR ITMS-90474: "Invalid Bundle. iPad Multitasking support requires these orientations: 'UIInterfaceOrientati..
๐ 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)
App Icon์ ์ถ๊ฐํ๊ณ Test Flight์ ์ฌ๋ฆฌ๋ ค๊ณ , Archive ํ ๋ ๋ฐ๊ฒฌํ ์๋ฌ์ด๋ค. ERROR : Invalid App Store Icon. The App Store Icon in the asset catalog in '์ฑ์ด๋ฆ' can't be tranparent nor contain an alpha chaennel.ํด์ : ์๋ชป๋ ์ฑ์คํ ์ด ์์ด์ฝ์ ๋๋ค. '์ฑ์ด๋ฆ'์ ์์ฐ ์นดํ๋ก๊ทธ์ ์๋ App Store ์์ด์ฝ์ ํฌ๋ช ํ๊ฑฐ๋ ์ํ ์ฑ๋์ ํฌํจํ ์ ์์ต๋๋ค. ์ฆ, Xcode์์ 1024x1024์ฌ์ด์ฆ์ ์ฑ ์์ด์ฝ ์ฌ์ง์ ๋ฃ์์ํ ๋ฐ, ํด๋น ํ์ผ์ ํฌ๋ช ๋๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.์ด ํฌ๋ช ๋๋ฅผ ์์ ์ฃผ๊ณ ๋ค์ ์ฌ๋ ค์ฃผ๋ฉด ๋๋ค ! 1. ์์ด์ฝ์ผ๋ก ์ถ๊ฐํ ์ด๋ฏธ์งํ์ผ์ ๋ฐํํ๋ฉด์ ๋ณต์ฌ๋ณธ์ ํ๋ ๋ง๋ ๋ค...
๐ Onboarding ์ด๋ฒ MC3 ํ๋ก์ ํธ์์ ์จ๋ณด๋ฉํ๋ฉด ๊ตฌํ์ ๋งก์์ด์,์๋ ์ ์จ๋ณด๋ฉ์ ๊ตฌํํ ๋๋ ๊ทธ๋ฅ ๋๋๋๋ก ๋ง ๊ตฌํ์ ํด์ ์ ๋ฆฌ๊ฐ ์๋์์ง๋ง์ด๋ฒ์ ๋ค์ํ๋ ๊น์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค ํฉ๋๋ค. 1. ์ฌ์์ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ก์ปฌ ๋ฐ์ดํฐ ๋ณ์ + ์ต์ด ์คํ์ ์จ๋ณด๋ฉ ํ๋ฉด ๋์ฐ๊ฒ ํ๋ ์์ ์ฑ์ด ์ฌ์์ ์ฌ๋ถ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์ , ๊ธฐ๊ธฐ์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ก ์ ์ฅํฉ๋๋ค.@AppStorage๋ฅผ ์ด์ฉํฉ๋๋ค.์ต์ด ๊ตฌ๋์์๋ง ํด๋น ๋ฐ์ดํฐ ๊ฐ์ด true์ด๋ฏ๋ก ์จ๋ณด๋ฉํ๋ฉด์ด .fullScreen์ผ๋ก ๋์์ง๊ณ , ์ดํ์ false๋ก ๋ฐ๊ฟ์ฃผ๋ฉด์์ฌ์คํ์์๋ ๋จ์ง ์๊ฒ ํฉ๋๋ค.import SwiftUIstruct ContentView: View { // ์จ๋ณด๋ฉ ํ๋ฉด์ ์ฑ ์ต์ด ์คํ๋ ํ๋ฒ๋ง ๋์ฐ๋๋ก ํ๋ ๋ก์ปฌ ๋ณ์ @AppStorage("..
๐ WatchOS - SwiftUINavigationLink - PlainButtonStyle๋ก ๋ฒํผ์ ์๊ฐ์ ์์ ์ ์ฉ X PlainButtonStyle()๋ชจ๋ OS์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฒํผ ์คํ์ผ๋ก, ์ ํด ์ํ(IDLE)์์๋ ๋ฒํผ์ ์ฝํ ์ธ ์ ์ด๋ ํ ์์์ ์์๋ ์ ์ฉํ์ง ์์ WatchOS๋ฅผ ๊ฐ๋ฐํ๋์คVGrid์์ ForEach๋ฌธ์ผ๋ก ๋ฐ์ดํฐ๋ค์ List๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ,๊ฐ Cell๋ค์ NavigationLink๋ก ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์์ ์ ํ๋ค. ๋จผ์ CellView๋ฅผ ๊ทธ๋ฆฌ๋ ์์ ์ ๋จผ์ ํ๊ณ , ์ดํ NavigationLink๋ก DetailView๋ก ๋์ด๊ฐ๊ฒ ์์ ํ์๋ค.import SwiftUIstruct WatchMarkerListView: View { let tempData = [..
โ 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() ..
โ ๋ทฐ๋ฅผ ์ ํ์ํค๋ ์ ๋๋ฉ์ด์ ์ธ 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..