분류 전체보기 27

SwiftUI Firebase Realtime Database CRUD 제대로 사용하기

1. 개요 Firebase 실시간 데이터베이스는 클라우드 호스팅 데이터베이스이다. 데이터는 JSON으로 저장되며 연결된 모든 클라이언트에 실시간으로 동기화되는 장점이 있다. 또한 Firebase Realtime Database는 모든 클라이언트가 하나의 실시간 데이터베이스 인스턴스를 공유하고 자동으로 최신 데이터 업데이트를 할 수 있어서 여러 플랫폼(Android, iOS 및 JavaScript SDK)으로 교차 플랫폼 앱을 구축할 때 유용하다. 나는 SwiftUI로 Firebase Realtime Database를 공부하는데, CRUD(쓰기, 읽기, 수정, 삭제) 을 제대로 다루는 방법을 찾고자 했다. 내가 직면한 문제는 CRUD는 모두 정상 작동 하지만, 실시간 데이터 읽기 시 각 이벤트가 발생할 때..

SwiftUI 2022.12.08

Git attribution

Git에는 경로별로 파일이나 폴더를 어떻게 관리할 것인지 설정을 할 수 있다. 이것을 Git attribution이라고 한다. 이 설정은 .gitattribution이라는 파일에 저장해놓고 관리할 수 있다. 기본적으로 숨김 처리해서 사용하고 다음처럼 생겼다. 여기저기서 알아본 결과, 이 파일로 Merge 할 때 파일, 폴더를 선별하거나 텍스트가 아닌 파일을 Diff 할지 말지, checkin/out을 어떻게 필터링할지 정할 수 있다고 한다. 이 게시글에서는 바이너리 파일을 Diff 하지 않도록 설정하는 방법만 소개하고자 한다. * Diff: 파일 충돌이 일어났을 때, 어떤 코드를 선택해서 적용할지 제시해주는 유틸리티 바이너리 파일은 이진수 혹은 16진수로 이루어진 파일을 말한다. 4CB2B14F292F2..

Error 2022.11.28

ATS Policy에 의한 HTTP 통신 제약

SwiftUI를 이용해서 Web에 있는 JSON API를 호출할 때 다음과 같은 코드를 사용한다. class WebService { func fetchData(url: String) async throws -> [Person] { guard let url = URL(string: url) else { return [] } let (data, _) = try await URLSession.shared.data(from: url) let nkdata = try JSONDecoder().decode([Person].self, from: data) return nkdata } } 하지만 학습하거나 테스트를 할 때 종종 우리는 에러를 마주하곤한다. 내가 학습하면서 확인한 에러는 다음과 같았다. 나는 정부에서 제공..

SwiftUI 2022.11.28

의도치않은 ObservedObject 객체 초기화 실수

SwiftUI에서 관찰중인 객체의 변경에 반응해서 화면을 업데이트해서 보여줄 때 쓰는 것이 바로 StateObject, ObservedObject, EnvironmentObject 이 세가지 이다. 이런 생각을 해본 적이 있다. 'StateObject, ObservedObject, EnvironmentObject 이 모두를 동시에 사용할 수 있을까?' 우리 팀에서 만든 토이프로젝트에서 위 세가지 모두를 동시에 사용했는데,이로서 나타난 나의 실수를 기술하고자 한다. 우리가 만든 토이프로젝트의 간단 예를 설명해주자면,1. 통아저씨 게임2. 돌림판 게임3. 계산기이 세가지가 모두 포함된 어플이다.여기서 위 세가지 기능의 모든 결과를 @EnvironmentObject resultData 에 넣어줘야한다. 하지만..

실수 2022.11.07

SwiftUI 문서 구조화 해보기 - 초급

1. 이름의 중요성 개발 공부를 하면서 많이들 놓치는 부분이 바로 내가 작성한 코드 문서에 필요한 모든 내용을 한 파일에 쏟아 붓는 것이다. 기능 구현을 위해서 코드를 작성하다보면 이것도 필요하고, 저것도 필요하고 다 필요하다고 생각되어 한 문서에 모든 것을 다 때려넣는다. SwiftUI를 공부하면서 가장 어려운 것은 문서 작성 시 문서 이름과 내용이 일맥상통해야한다는 것이다. 이는 변수명, 함수명, 사용자 정의 타입명을 지정할 때도 똑같다. 제 3자가 혹은 나중에 본인이 본인이 작성한 코드를 읽을 때, 함수명 혹은 변수명을 어떻게 지었느냐에 따라 코드를 분석할 때 이해도가 달라진다고 한다. 문서를 구조화 할 때도 문서마다 이름을 달리 지을 것이고 그 이름에 맞는 내용이 문서에 담겨있어야 전체적인 프로그..

SwiftUI 2022.11.07

Button 컴포넌트 사용에 대한 실수(완성도 높이기)

SwiftUI를 사용하면서 기능 구현, 보여지는 시각적 디자인에만 신경쓰다보면 놓치는 부분이 한두가지 있기 마련이다. 하지만 많은 예제를 만들면서 나는 그동안 무심코 지나쳤던 내용이 있었고 그에 관한 글을 작성해보려고 한다. 내가 무심코 지나쳤던 부분은,, 바로 Button 컴포넌트이다. 다음 계산기 프로그램을 확인해보면, 빨간 테두리가 9번에 대한 버튼이다. '버튼'은 버튼으로 보이는 것을 눌렀을 때 작동해야하지만, 문제는 텍스트 '9'를 눌렀을 때만 버튼이 동작한다. 즉, 텍스트 '9' 외 다른 버튼 배경을 누르면 버튼의 동작을 수행하지않는다. 이에 대한 코드는 다음과 같다. Button{ if(flag == true){ totalNumber = "0" flag = false } if totalNum..

실수 2022.10.31

ViewModifier를 어떻게 쓸 수 있을까

수업시간에 배운 ViewModifier를 어떻게 쓸 수 있을지에 대해 고찰을 해봤다. 모바일 개발은 처음 하는 사람들은 나처럼 위의 개념에 대해 생소한 사람들이 많을 것이다. 그래서 수업시간에 우리 팀에서 만든 계산기 어플을 이용해서 응용하는 방법을 소개하고자 한다! 정확하진 않지만! 나는 쉽게 이해하기 위해 다음과 같이 이해했다. ViewModifier는 CSS 파일과 같은 기능을 한다. (수정자, 속성을 하나의 묶음으로 만든 것) 수업시간에 계산기 어플을 만드는데, ViewModifier와 하위뷰를 이용하여 문서를 구조화하고 가독성이 좋은 코드로 편집해보기로 했다! 계산기 코드 문서의 구조는 위와 같다. 하지만 위에 보는 것처럼 구현해야 할 버튼이 무척 많고, 계산기 코드 문서의 대부분을 차지하는 것..

SwiftUI 2022.10.26