본문 바로가기

전체 글35

[SwiftUI 스터디] Swift 5.9 Observation 며칠전에 어느때와 다름없이 앱스쿨 저녁반에서 놀고있는데 튜나센세가 SwiftUI로 간단한 앱을 만들고 계시더라구요 신나게 구경하고 있는데 이번에 새로 나온 Observation을 사용하시는거에요! 굉장히 간단하고 편해보이더라구요 그래서 이번엔 Observation에 대해 공부해보았습니다! https://developer.apple.com/documentation/observation Observation | Apple Developer Documentation Make responsive apps that update the presentation when underlying data changes. developer.apple.com 기존의 ObservableObject를 marco를 통해 @Obser.. 2023. 10. 8.
[SwiftUI 스터디] Combine, URLSession, dataTaskPublisher를 활용해 Github 유저 프로필 가져오기 안녕하세요~! 요즘 즐겁게 SwiftUI 스터디를 하고 있는데요ㅎㅎ 이번주는 뭘 공부할까 하다가 날씨의 i 2.0 업데이트에서 WidgetKit을 처음 적용할때 컴바인을 활용했었는데 위젯이 업데이트될때 새로운 데이터를 받아오지 못하는 이슈가 있었습니다. 결국 기존에 익숙하게 사용하던 URLSession으로 리팩토링해서 업데이트 했던 생각이 나서 이번엔 SwiftUI에서 Combine을 활용해 데이터를 받아오는 연습을 해보려 합니다. 연습하기 좋을 API가 뭐가 있을까 하다가 개발자라면 항상 사용하는 깃허브 API를 활용해 화면에 그려보자! 생각하게 되었습니다. 우선 제 아이디로 깃허브 API를 검색해보니 이렇게 잘 나오는 모습을 볼 수 있었습니다! 이 JSON을 참고해 간단하게 앱에서 사용한 모델을 만들.. 2023. 9. 23.
[날씨의 i] 쌓여가는 앱 용량..realm 데이터와 iOS 데이터 확인하고 임시파일 삭제하기 (Realm CRUD, RealmStudio, iOS FileManager, tmp) 위젯을 모두 완성하고..! 즐거운 마음으로 2.0 업데이트를 신청하려 하는데 앱 용량이 궁금해서 확인해보니 400MB..?였습니다?? 그렇게 큰 앱이 아닌데 이상하다..해서 내부를 살펴봤습니다. 앱 용량은 익스텐션을 3개나 활용해서 이전보다 늘어났을 수 있다고 해도 문서 및 데이터가 52.6MB..?로 생각보다 많이 데이터가 있었습니다. 위젯을 개발하면서 테스트하기 위해 여러 사진을 설정했었는데 그 사진들이 지워지지 않고 앱 안에 쌓여있나..? 해서 새로운 사진을 몇 장 설정해보았습니다. 그랬더니 이렇게 바로바로 용량이 쌓이고 있었습니다ㅎㅎ realm에서 업데이트할때 기존의 사진을 대체하는 메소드를 만들어서 사진이 한 장씩 계속 바뀐다고 생각했는데 잘 못 만들었나..? 생각하며 코드를 다시 확인했습니다... 2023. 9. 18.
[날씨의 i] WidgetKit 4탄! - 위젯 TimelineProvider 이해하기, 위젯 새로고침, 날씨 서버와 통신하기 (2.0 업데이트 도전~!) WidgetKit 시리즈의 마지막입니다! 위젯... 정말.. 쉽지 않았습니다... 그래도 어느정도 생각한대로 앱을 구성하고, 현재 2.0 업데이트 심사도 요청한 상태라 어느정도 후련한 마음입니다! 부디 한번만에 앱이 통과되길! 우선 이전에 Combine으로 코드를 구성했었는데요! 앱이 데이터를 가져오고, 오류없이 동작하기는 하나 일부 화면이 새로 안 그려지는 치명적인 문제가 있었습니다..! 아직 왜 그런지 원인을 찾지 못했는데 아직 Combine에 대한 이해가 부족한 것 같아서 더 공부한 뒤에 다시 도전해보려 합니다. 일단 앱 업데이트를 해야하니 제게 익숙한 방식인 CompletionHandler로 리팩토링하니 다행히 잘 동작했습니다! 우선, 위젯에서 위치정보를 수집하고 동작하는것은 아이폰에 부담을 줄 .. 2023. 9. 17.
[날씨의 i] WidgetKit 3탄! - 위젯 사진 설정 (AppExtension, AppGroup, Realm 연동, GeometryReader 활용해 위젯패밀리 크기 대응하기 새로 시작한 위젯을 하나하나 만들어가며..! 어느정도 통신을 하고, 화면을 그리도록 만들었습니다! 그런데 화면을 그리면서 크게 세 가지 문제점이 있었는데 1. 위젯이 원래 앱에서 저장된 파일 URL 경로를 찾지 못한다 2. 위젯이 큰 사이즈의 사진을 지원하지 않는다는 점과 3. 유저가 설정한 사진에 따라 날씨 표시되는 부분의 레이아웃이 변경되는 문제였습니다. 우선 1번으로 스트레스를 많이 받았는데요... 앞서 NotificationCenter를 사용할때 realm으로 저장한 사진을 FileManager로 URL을 저장하고, 알림 설정 트리거를 보낼때 URL을 같이 보내 사진을 접근할 수 있도록 만들었습니다. 그 방법 그대로 사용을 했는데 이상하게 위젯에서는 파일URL에 접근을 잘 못했습니다ㅠㅠ 분명 원래.. 2023. 9. 14.
[날씨의 i] WidgetKit 2탄! (서버와 데이터 연동하기, 위젯 구성하기) 험난했던 AppGroup과 UserDefaults 세팅을 끝내고 본격적으로 위젯을 구성해보겠습니다. 우선 WidgetKit의 SwiftUI는 제가 평소에 하던 것과 조금 달라서 헷갈렸었는데요 차근차근 정리해보겠습니다. 우선 WidgetBundle로 메인 위젯을 설정합니다. 저는 일단 LiveActivity는 제외하고 기본 위젯으로만 구성해보려 합니다! 위젯은 크게 TimelineEntry Provider Widget 으로 구성되어 있습니다. 셋 다 프로토콜인데요, 첫번째로 TimelineEntry는 date를 필수 프로퍼티로 가지는 프로토콜입니다. 위젯을 업데이트하는데 기준이 되는 시간과, 위젯에 표시할 컨텐츠를 설정합니다. 저는 위젯에 그려줄 데이터들을 함께 구성했습니다. 두번째로 Provider는 위.. 2023. 9. 10.