λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
728x90

🍎 iOS61

[WWDC20] The Push Notifications primer (APNs / iOS ν‘Έμ‹œ 등둝) ν‘Έμ‹œ μ•Œλ¦Όμ΄ 무엇인지, μ™œ μ‚¬μš©ν•˜λŠ”μ§€ μ„€λͺ…ν•΄μ£Όκ³  앱에 μΆ”κ°€ν•  수 μžˆλŠ” 방법을 μ„€λͺ…ν•΄μ£ΌλŠ” μ˜μƒμ— λŒ€ν•΄ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€! Introducing Push Notification ν‘Έμ‹œ μ•Œλ¦Όμ˜ κΈ°λŠ₯ Engagement : ν‘Έμ‹œ μ•Œλ¦Όμ„ ν†΅ν•΄μ„œ 앱이 μƒν˜Έμž‘μš© ν•  수 μžˆλ‹€. Provide updates : 앱에 μ‹€μ‹œκ°„μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό μ œκ³΅ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. Dynamic experiences : μ•± λ‚΄μ˜ 변경사항이 μžˆμ„ λ•Œ λ‹€μ΄λ‚˜λ―Ήν•œ κ²½ν—˜μ„ 쀄 수 μžˆλ‹€. ν‘Έμ‹œ μ•Œλ¦Όμ„ μΆ”κ°€ν–ˆμ„ λ•Œ 이점은 무엇이 μžˆμ„μ§€? Foreground not required : 앱이 항상 ν¬κ·ΈλΌμš΄λ“œμ— μžˆμ„ ν•„μš”κ°€ μ—†λ‹€. ν‘Έμ‹œ μ•Œλ¦Όμ€ μ•±μ˜ μƒνƒœμ™€ 관계없이 μ „λ‹¬λ˜κ³  ν•„μš”ν•œ 경우 μ‹€ν–‰λœλ‹€. Power efficient : ν‘Έμ‹œ μ•Œλ¦Όμ€ μ „λ ₯을 많.. 2023. 2. 14.
[WWDC18] iOS Memory Deep Dive iOS Memory Deep Dive - WWDC18 - Videos - Apple Developer Discover how memory graphs can be used to get a close up look at what is contributing to an app's memory footprint. Understand the true... developer.apple.com [WWDC18] iOS Memory Deep Dive Why reduce memory :: μ™œ λ©”λͺ¨λ¦¬λ₯Ό 쀄여야 ν•˜λŠ”μ§€? Memory footprint :: λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— λŒ€ν•œ 이둠적인 이야기 Tools for profiling footprint :: λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 확인할 수 μžˆλŠ” 툴 μ†Œκ°œ Images :: λ©”λͺ¨λ¦¬λ₯Ό 많이 .. 2022. 11. 27.
[WWDC19] Advances in Collection View Layout - Part 1 Advances in Collection View Layout - WWDC19 - Videos - Apple Developer Collection View Layouts make it easy to build rich interactive collections. Learn how to make dynamic and responsive layouts that range... developer.apple.com πŸ‘‹ WWDC19 - Advances in Collection View Layout Current State-of-the-Art UICollectionView λŠ” iOS 6 μ—μ„œ 처음 μ†Œκ°œλ˜μ—ˆλ‹€. 데이터λ₯Ό λ Œλ”λ§ν•˜λŠ” ν΄λž˜μŠ€μ™€ CollectionView 의 layout 을 κ΄€λ¦¬ν•˜λŠ” λ‘κ°œμ˜ ν΄λž˜μŠ€κ°€ ν•„μš”ν–ˆ.. 2022. 10. 17.
[WWDC19] Data Flow Through SwiftUI - Part 2 Working With External Data πŸ’¬ Part1 μ—μ„œλŠ” ... μœ μ €μ™€ SwiftUI λ·° κ°„ 데이터 흐름에 λŒ€ν•΄ μ–˜κΈ°ν•΄λ΄€μ—ˆλ‹€. @State ν”„λ‘œνΌν‹° 래퍼λ₯Ό 톡해 값이 변경됨을 νŠΈλž˜ν‚Ήν•˜λŠ” λ³€μˆ˜λ₯Ό λ‘˜ 수 있고, @Binding 을 톡해 μžμ‹λ·°μ—μ„œλ„ 같은 데이터λ₯Ό 바라보도둝 ν•  수 μžˆμ—ˆλ‹€. πŸ™‹‍♀️ Part2 μ—μ„œλŠ”? λ·° λ‚΄λΆ€μ—μ„œμ˜ λ™μž‘μ„ κ΄€λ¦¬ν•˜λŠ” @State λ³€μˆ˜λ‘œλŠ” λΆˆκ°€λŠ₯ν•œ μ™ΈλΆ€μ—μ„œ λ°œμƒν•˜λŠ” 이벀트, μ™ΈλΆ€μ—μ„œ κ΄€λ¦¬λ˜λŠ” λ°μ΄ν„°λŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Όν• μ§€ 닀뀄본닀. 결둠적으둜 μœ μ € μΈν„°λ ‰μ…˜μ΄ μ•„λ‹Œ timer, notification 처럼 μ™ΈλΆ€μ—μ„œ λ°œμƒν•˜λŠ” μ΄λ²€νŠΈλ„ λ™μΌν•œ νλ¦„μœΌλ‘œ λ™μž‘ν•œλ‹€. action 생성 -> State κ°’ λ³€κ²½ -> 뷰에 λŒ€ν•œ μƒˆλ‘œμš΄ μΉ΄ν”Ό -> μœ μ €μ—κ²Œ μƒˆλ‘­κ²Œ λ³΄μ—¬μ€Œ SwiftUI.. 2022. 8. 30.
[WWDC19] Data Flow Through SwiftUI - Part 1 Principles of Data Flow Tools for Data Flow SwiftUI μ—μ„œ μ†Œκ°œλ˜λŠ” Property, BindableObject,@Environment , @Binding ,@State 미리 μŠ€ν¬ν•˜μžλ©΄ BindableObject -> ObservableObject 둜 이름이 변경됨 이번 μ˜μƒμ„ ν†΅ν•΄μ„œ ν•΄λ‹Ή νˆ΄λ“€μ΄ μ–΄λ–»κ²Œ, μ–Έμ œ μ“°μ΄λŠ”μ§€ μ•Œκ²Œ 될 것이닀! Principle SwiftUI 데이터 ν”Œλ‘œμš°λ₯Ό λ””μžμΈν•˜κΈ° μœ„ν•œ λ‘κ°œμ˜ 원리λ₯Ό μ•Œμ•„λ³΄μž. First principle "Data Access as a Dependency" 토글을 μƒκ°ν•΄λ³΄μž. ν† κΈ€ λ·°λ₯Ό 그리기 μœ„ν•΄μ„œλŠ” Bool νƒ€μž…μ˜ 데이터가 ν•„μš”ν•˜κ³ , 데이터가 μƒˆλ‘œμš΄ κ°’μœΌλ‘œ 변경될 λ•Œλ§ˆλ‹€ λ·°λ₯Ό λ³€κ²½ν•΄μ€˜μ•Ό ν•œλ‹€. 데이터가 변경될 λ•Œ.. 2022. 8. 30.
[WWDC19] LLDB: Beyond "po" LLDB λŠ” μ•± λŸ°νƒ€μž„ 쀑에 디버깅 ν•  수 μžˆλŠ” νˆ΄μ΄λ‹€. "po" 기본적으둜 LLDB μ—μ„œ po ~~ λͺ…λ Ήμ–΄λ₯Ό μž‘μ„±ν•˜λ©΄ ν•΄λ‹Ή νƒ€μž…κ³Ό ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ 보여쀀닀. CustomDebugStringConvertible ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜κ³ , debugDescription 을 μΆ”κ°€ν•˜λ©΄ Object 이름이 λ‚˜νƒ€λ‚˜λŠ” 곳에 μ»€μŠ€ν…€ν•˜κ²Œ μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆλ‹€. Sub structure 에 λŒ€ν•œ μ»€μŠ€ν…€μ΄ ν•„μš”ν•˜λ‹€λ©΄ CustomReflectable 을 μ°Ύμ•„λ³΄μž. po λͺ…λ Ήμ–΄λŠ” 객체λ₯Ό ν”„λ¦°νŒ…ν•˜λŠ” 것 외에도, λ©”μ†Œλ“œ 호좜 λ“±μ˜ λ™μž‘μ„ ν•  수 μžˆλ‹€. po λŠ” 사싀 νŠΉμ • λͺ…λ Ήμ–΄λ₯Ό alias 둜 λ‹¨μΆ•μ‹œν‚¨ 것이닀. λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ™μΌν•˜κ²Œ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€. expression --object-description 을 쀄인것 "po" Un.. 2022. 7. 4.
[iOS] SwiftUI LazyVStack LazyHStack :: lazy load views μ•ˆλ…•ν•˜μ„Έμš”! μ˜€λŠ˜μ€ SwiftUI 의 Lazy ν‚€μ›Œλ“œλ₯Ό μ •λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ§€λ‚œλ²ˆμ— VStack, HStack, ZStack 에 λŒ€ν•΄μ„œ 정리λ₯Ό ν–ˆμ—ˆλŠ”λ°, ZStack 을 μ œμ™Έν•˜κ³ λŠ” μ•žμ— Lazy λΌλŠ” ν‚€μ›Œλ“œκ°€ 뢙은 LazyVStack, LazyHStack 이 μžˆμŠ΅λ‹ˆλ‹€ πŸ‘€ Lazy λΌλŠ” ν‚€μ›Œλ“œκ°€ λΆ™λŠ” 건 μ–΄λ–€ 차이가 μžˆλŠ”μ§€ κΆκΈˆν•΄μ„œ μ°Ύμ•„λ΄€μ–΄μš”. πŸ‘€ LazyVStack LazyHStack :: lazy load views LazyVStack 은 VStack κ³Ό λ™μΌν•˜κ²Œ vertical (μ„Έλ‘œ) λ°©ν–₯으둜 ν•­λͺ©λ“€μ„ λ³΄μ—¬μ£ΌλŠ” λ·°μ΄μ§€λ§Œ, 각 ν•­λͺ©μ΄ ν•„μš”ν• λ•Œλ§Œ μƒμ„±ν•©λ‹ˆλ‹€. LazyHStack 은 Horizontal (κ°€λ‘œ) λ°©ν–₯으둜, LazyVStack κ³Ό λ°©ν–₯만 λ‹€λ₯΄κ³  λ™μΌν•©λ‹ˆλ‹€! Stack 이 lazy ν•˜λ‹€λŠ” 것.. 2022. 6. 7.
[iOS] SwiftUI property wrapper @State @Binding @State SwiftUI λŠ” state 둜 μ„ μ–Έν•œ ν”„λ‘œνΌν‹°μ˜ μ €μž₯μ†Œλ₯Ό κ΄€λ¦¬ν•œλ‹€. ν•΄λ‹Ή ν”„λ‘œνΌν‹°μ˜ 값이 변경될 λ•Œ, SwiftUI λŠ” 값에 μ˜μ‘΄ν•˜κ³  μžˆλŠ” λ·° κ³„μΈ΅κ΅¬μ‘°μ˜ 뢀뢄을 μ—…λ°μ΄νŠΈν•œλ‹€. State ν”„λ‘œνΌν‹°λŠ” ν•˜λ‚˜μ˜ λ·° μ•ˆμ—μ„œ μ‚¬μš©λ˜λŠ” κ°’μœΌλ‘œ, 일반적으둜 private ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ„œ μ‚¬μš©ν•œλ‹€. State instance λŠ” κ°’(value)을 읽고 μ“Έ 수 μžˆλŠ” ν˜•νƒœμ΄κΈ° λ•Œλ¬Έμ—, value 와 λ™μΌν•˜μ§€λŠ” μ•Šλ‹€. state κ°€ κ°–κ³ μžˆλŠ” value 에 μ•‘μ„ΈμŠ€ν•˜κΈ° μœ„ν•΄μ„œλŠ”, property name 을 톡해 μ ‘κ·Όν•˜λ©΄ λœλ‹€. ν•΄λ‹Ή 값은 wrappedValue 속성을 λ°˜ν™˜ν•œλ‹€. wrappedValue λŠ” state λ³€μˆ˜κ°€ μ €μž₯ν•˜κ³  μžˆλŠ” 값을 μ ‘κ·Όν•˜λŠ” ν”„λ‘œνΌν‹°μ΄μ§€λ§Œ, wrappedValue λ₯Ό 직접 μ ‘κ·Όν•΄μ„œλŠ” μ•ˆλœ.. 2022. 6. 2.
[iOS/SwiftUI] Text, Image κΈ°λ³Έ 정리 + μ‹œμŠ€ν…œ 이미지 ✍️ Text Text λŠ” ν•œμ€„ μ΄μƒμ˜ 읽기 μ „μš© κΈ€μžλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ View μž…λ‹ˆλ‹€. Text initializer Text μƒμ„±μžλŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ°, μ΄λ―Έμ§€λ‘œλ„ 생성할 수 μžˆλŠ”κ²Œ UIKit κ³ΌλŠ” λ‹€λ₯Έκ±° κ°™μ•„μš”. NSAttributedString 을 μ‚¬μš©ν•˜λ©΄ κ°€λŠ₯ν•˜κΈ΄ ν–ˆμ§€λ§Œ, 기본적으둜 이미지λ₯Ό ν…μŠ€νŠΈμ™€ μ—°κ²°ν•  수 있게 μ œκ³΅ν•΄μ£Όλ„€μš”. init(String) → λ‹¨μˆœ λ¬Έμžμ—΄, Localized κ΄€λ ¨ μƒμ„±μžλ„ λ”°λ‘œ μžˆμ–΄μš”. init(AttributedString) → NSAttributedString μ΄λž‘ λ‹€λ¦…λ‹ˆλ‹€. (+iOS15) init(Image) → λ‹€λ₯Έ Text λ“€μ΄λž‘ μ—°κ²°ν•˜κΈ°μœ„ν•œ Image init(_ date: Date, style: Text.DataStyle) Text.DataStyle .. 2022. 5. 5.
728x90