Solver 2차 배포를 완료했다. 수정사항은 오류 수정과 UI 업데이트가 있다. 오류 수정SwiftData 가 업데이트 되면서 Data race 오류를 수정했다. [Project-Solver] Data race 오류 기록문제 상황앱에서 fetch를 연속적으로 하게 되면 위와 같이 data race가 발생하는 것을 확인했습니다. 해결 과정문제 파악간단한 Top100Store 부터 살펴보니 fetch() 함수 부분에서 top100 = fetchedTop100 이 fetswift-library.tistory.com UI 업데이트1. 기존 문제점- 스크롤 위치를 추적하면서 바뀌는 요소들이 너무 많아 UI 업데이트가 버벅거리는 현상이 발생했다.- 계정 탭에 이름 바꾸기 항목밖에 없어 필요가 없었다.- 티어 뱃지..
→ Solver
문제 상황앱에서 fetch를 연속적으로 하게 되면 위와 같이 data race가 발생하는 것을 확인했습니다. 해결 과정문제 파악간단한 Top100Store 부터 살펴보니 fetch() 함수 부분에서 top100 = fetchedTop100 이 fetch 마다 호출이 되기 때문에 발생하는 문제였습니다. 비동기적으로 top100 이 여러 번 업데이트되면서 동시성 문제가 발생하기 때문입니다.@Observablefinal class Top100Store { let useCase = FetchUseCase() var top100: Top100Entity? @ObservationIgnored @AppStorage("userId") var userId = "" init..
드디어 프로젝트 1차 배포를 완료하였다. 물론 앱 심사를 진행 중이지만 Thread Sanitizer으로부터 아무런 경고도 받지 못했고, 실기기에서도 테스트하여 MVP기능에는 큰 문제가 없다고 판단하여 앱을 빌드하고 심사를 요청했다. 그리고 심사 승인까지 하루정도 걸린 것 같다. 링크는 아래와 같다 😌 Solver백준 Solved.ac 프로필 앱 apps.apple.com 앱 기능1. 백준 아이디 등록 (Solved.ac에 등록이 되어야 함)아래와 같이 백준 아이디를 입력하게 되면, 따로 비밀번호 입력없이 아이디의 정보를 조회할 수 있다. 약간 OP.GG 사이트와 비슷하다고 보면 된다.2. 백준 프로필 확인아래와 같이 아이디를 입력하게 되면 백준 프로필을 확인할 수 있다. 아래는 내가 푼 상..
프로젝트를 진행하던 도중 문제가 발생했다!!! :) 문제는 SwiftData에서 발생했다. 😂 진행 상황아래와 같이 Clean Architecture의 형태로 만들고 있었는데 Entity, Data, UseCase, Store까지 쭈욱 코드를 작성해나가고 있었다. API 호출 관련 부분까지는 문제가 없었는데... 위와 같이 구현하게 된다면, SwiftData를 Entity로 써야 하는데, SwiftData의 ModelContext가 View로부터 분리가 힘들다는 문제점에서 발생했다. SwiftData는 ModelContext를 @Environment(\.modelContext) private var context 처럼 View에서 가져오는 방법밖에 없었다. 그렇게 된다면 Use case는 반드시 Vie..
사용할 API 정리 아래의 공식문서를 참고하여 앱에 필요한 API를 정리했다. @solvedac/unofficial-documentation 이 프로젝트는 solved.ac API를 문서화하는 커뮤니티 프로젝트입니다. 이 저장소는 원작자의 요청에 따라 언제든 지워질 수 있으며, 현재 API와 일치하지 않을 수도 있는 점 양해 부탁드립니다. solvedac.github.io 앱의 MVP 설정 및 기본 플로우 아이디를 입력하면 내 Solved.ac아이디를 기준으로 내 정보를 보여주는 것이 이 앱의 MVP이다. 알고리즘 공부 시간, 친구 추가, 경쟁 등 다양한 기능을 넣어보고 싶었지만 우선 아래와 같은 최소한의 기능만 우선 구현해 보기로 했다. Widget, Watch앱도 간단하게 만들어볼 예정이다. (이 부..
이전 상황 이전 상황은 아래와 같았다. API를 사용하여 Solved.ac에 있는 유저정보를 가져오고 데이터 저장은 SwiftData를 활용하여 구현하기로 했다. 그리고 선택한 프로그램 아키텍처는 Clean Architecture이다. (잘 적용할 수 있을지 모르겠다...) 클린 아키텍처 무려 로버트 C. 마틴(엉클밥 또는 밥아저씨라고도 불리는...) 선생님이 2012년에 작성하신 글이다. (10년도 더 된...) 12년된 글을 보면서 현재의 가장 최신 SwiftUI, SwiftData를 사용하면서 적용하는 나라니... 참 작아진다. Clean Coder Blog The Clean Architecture 13 August 2012 Over the last several years we’ve seen a ..
프로젝트를 시작하기에 앞서 여러가지 세팅할 것들을 세팅했다. 앱 이름 우선 프로젝트를 시작하려면 프로젝트의 이름을 설정해야 파일도 만들고, Github Repository도 만들수 있어서 앱 이름부터 결정하게 되었다. Solved.ac 와의 연관성과 뜻을 고려하여 Solver 라는 간단한 앱 이름을 우선 설정했다. 앱 디자인 및 기획 앱 디자인의 경우 최대한 기본 컴포넌트를 활용하여 만들것이고, 어떠한 정보를 표시할지, 어떻게 화면에 표시할지는 개인프로젝트의 장점(?)을 살려 프로젝트 생성후 빠르게 기획할 예정이라 우선 프로젝트부터 생성하였다. 커밋 룰 레포지토리는 public으로 할 예정이고, 커밋은 gitmoji를 활용하여 영어로 작성하기로 했다. gitmoji의 경우 아래의 룰을 따르기로 했다. g..
프로젝트 시작 과정 취준을 하면서 백준으로 알고리즘 문제풀이를 하고 있는 도중에 내가 푼 문제들 그리고 나의 티어를 아이폰으로 확인해보고 싶었다. 아이폰으로 나의 알고리즘 풀이 현황과 그것을 위젯으로 표현하고, 알고리즘 풀이에 좀 더 재밌고 동기부여 될 수 있는 앱을 만들어보는 건 어떨까? 하는 생각에서 프로젝트를 시작하게 되었다. 시장 조사(?) 궁금해서 앱스토어를 검색해 봤다. 1개의 앱이 있었지만 위젯기능이 없었고, 무엇보다 내가 앱을 만들어보고 싶었는데 마침 내가 생각한 기능이 있는 앱이 1개밖에 없었기 때문에 충분히 앱으로 만들어 볼 만하다!라는 생각을 가지게 되었다. 어떻게 하면 유저정보를 가져올 수 있을까? 어떻게 하면 나의 유저정보를 가져올 수 있을까? 하는 생각에 백준 API나 Solve..