| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Cocoa Pod
- 테스트 타겟
- spm 에러
- Firestore
- swiftdata
- 무한스크롤
- webp
- 팀 개발을 위한 git
- fetchdescriptor
- NSTextStorage
- JPG
- swift 모듈화
- Tuist
- 타뷸레이션
- xcode 엔터 표시
- 클린 아키텍처
- github 시작하기
- NSTextStorageDelegate
- TestFlight
- SwiftUI
- .pbxproj
- contentalignmentpoint
- JPEG
- 코드스쿼드
- 함께자라기
- nidthirdpartylogin
- png
- 캐러셀
- xcode 공백 표시
- heic
- Today
- Total
목록iOS (49)
Sure, Why not?
흔하게 경험할 수 있는앱의 4가지 요소 이를 직접 구현하면서재미있기도 하고,신기하기도 하면서,나중에도 또 들여다볼 일이 반드시 있을 것 같아 기록하고자 한다. [ 2 / 22 ]중간에 나오는 AppID는 App Store Connect -> 앱 정보에서 Apple ID를 확인하면 된다. 문의하기메일 보내는 방법은서버에 직접 문의 내용을 전달이메일 앱을 직접 열기앱에서 직접 이메일 작성할 수 있는 공식 API 사용하기정도로 추려낼 수 있을 것이다. 그 중에 3번으로 MFMailComposeViewController 을 사용하여 문의하기를 구현하기로 결정하였다.https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller MF..
어제가 새해였던 것 같은데..1월에 정신없이 달리고, 정신 차려 달력 보니 2월 1일이다.시간이 정말 빠른 것 같다. 하하1월의 다양한 경험 속에서인상 깊었던 이슈 해결 과정을 기록하고자 한다. 네트워크통신을 비동기작업으로 하는 도중에, 데이터는 정상적으로 받아와지는 것을 확인했으나,UI업데이트가 매끄럽지 않다는 것을 확인하였다. 해당 이슈의 원인을 여러 방면으로 탐색하는 와중에,비동기 데이터 처리의 순서가 명확하지 않는 문제를 발견하게 되었다. 먼저 3가지의 키워드를 간단하게 짚고 넘어가고자 한다. 비동기는 어떠한 작업이 끝날 때까지 기다리지 않고, 다음 코드가 바로 실행되는 방식을 말한다.콜백 함수는 특정 시점에 실행되는 함수를 말하며,async는 비동기 함수임을 선언하고, await은 비..
배경노란색 배경색은 ScrollView이고,안에 Label이 들어가 있는 모습이다. 나는 숫자가 입력될 때 오른쪽 끝에 정렬되도록 설정되기를 원한다.사용자는 긴 내용을 스크롤을 통해 확인할 수 있도록 말이다. 그런데 현재 라벨은 스크롤뷰에 맞춰서 제약조건이 설정된 상태인데,좌측에서 우측으로 어떻게 바꾸는지를 정리할려고 한다. 크게 2가지 방법이 있는데,contentOffset VS contentAlignmentPoint처음에 contentOffset 으로 기존에 있는 방식으로 적용할려다 보니,수동 계산이 많이 필요로 하고,나는 숫자 입력될 때마다 변화가 일어나길 원하는데,그럴 때마다 계산로직이 필요로 했다. 그래서 더 쉽고 내가 원하는 결과를 이끌어낼 수 있는 방법을 찾다가contentAlignment..
Cannot convert value of type 'PredicateExpressions.Equal, UUID>, PredicateExpressions.KeyPath, UUID>>' to closure result type 'any StandardPredicateExpression' SwiftData Predicate 내부에서 외부 변수 참조 시 발생되는 에러사진과 같이 직접 외부 변수를 참조하니 컴파일 에러가 발생하였습니다. SwiftData의 Predicate는 쿼리로 변환되어야 하기 때문에, 컴파일 시점에 모든 조건이 정적으로 분석이 되어야합니다.그래서 외부 변수를 직접 참조하면 런타임에 값이 변경될 수 있기 때문에, 컴파일 타임에 에러가 발생되었습니다. 해결방법 그래서 외부 변수를 외부에 선..
들어가기 앞서클린 아키텍처와 모듈화에 노력을 기울였던 이유는 더 나은 구조와 유지보수를 위한 갈망이 있었습니다.하지만 구현에 집중하다 보니 테스트가 부족했던 점이 아쉬웠고,그로 인해 도메인 테스트의 필요성을 강하게 느끼게 되었습니다. 테스트 타겟 설정 Tuist 기존 프로젝트에 테스트 타겟이 없는 경우,테스트 타겟을 추가하는 방법을 정리하고자 합니다. https://docs.tuist.dev/ko/references/project-description/structs/target#properties What is Tuist? | Tuist docs.tuist.dev타겟의 속성은 위에 내용이 정리되어 있습니다. 추가하는 방법은 정말 간단한데요 해당 Project.swift에서 기존 모듈에 대한 테스트 타겟..
기존 프로젝트에서 SPM으로 써드파티를 다운하고,최근에 추가할 일이 생겨, SPM으로 추가할려했는데 에러가 발생했습니다. 껐다 켜보기도 하고,Package.resolved 파일 삭제해보기도 하고,패키지 캐시를 초기화한다음 다시 다운하기도 했는데,해결되지 않았어요 ㅠㅠ… 이유가 뭘까..?가만 생각해보니저는 소스트리로 버전관리를 하는데최근에 소스트리를 업데이트하고, 이러한 문제를 겪게 된 것같아서검색해보니비슷한 상황을 겪는 사람들을 볼 수 있었습니다. Sourcetree 측에서도 이 문제를 인지하고 있으며, bareRepository = explicit 설정을 덜 공격적인 방식으로 추가하는 방법을 검토 중이라고 하네요 해결 방법소스트리에서 설정에 들어가서, Allow Sourcetree to modify ..
들어가기 앞서기존에 모듈을 나눠서 관리할 때, 라이브러리나 프레임워크를 사용하게 됩니다.초기에 저는 둘의 차이점을 깊게 이해하지 못하고 무지성으로 라이브러리로 선택하여 모듈을 나눴는데요. UIKit으로 빌드해서 UI를 확인하는 것이 귀찮아서 SwiftUI미리보기 기능을 ViewController에 확장하여 미리보기를 할려고 하였는데,Runtime linking failure 에러가 발생하였습니다. SwiftUI 미리보기 기능을 사용하면서 왜 staticLibrary로 설정된 모듈에서 미리보기가 제대로 작동하지 않는지 그 이유와라이브러리와 프레임워크 그리고 정적 동적에 대해 학습해보겠습니다. 🤔 Library? Framework?🙋♂️둘다 공통점은 코드의 재사용성을 높이기 위한 구조입니다.그러나 포..
🤔 모듈화?🙋♂️하나의 큰 프로그램을 여러 개의 작은 부분(모듈)로 나누는 과정입니다.각 모듈은 독립적이며,서로 다른 역할과 책임을 수행해야 합니다. 🤔 모듈화의 필요성🙋♂️그러면 모듈화는 왜 하는 것일까요?유지보수: 나누어진 부분에서 수정하면 되기 때문재사용성: 만들어둔 모듈을 다른 프로젝트에서 재사용이 가능합니다.협업: 여러 사람이 동시에 각각의 모듈을 개발할 수 있어, 팀 작업이 더 효율적입니다.iOS 개발을 하다 보면, 프로젝트가 커질수록 코드의 유지보수성과 확장성을 염두한다면, 모듈화의 필요성을 자연스럽게 깨닫게 됩니다.여러 기능이 엮어 있는 프로젝트 경우에모듈화를 통해 코드 간의 결합도를 낮추고, 각 모듈이 독립적으로 동작함으로써,위에 3가지뿐만 아니라 더 많은 장점을 얻고자 하는..
🤔 Dynamic Programming이란?🙋♂️동적 계획법은 영문은 다이나믹 프로그래밍이지만,본질적으로 기억하며 풀기로 이해하는 것이 적절합니다.답을 구하기 위해서 했던 계산을 계속해야 하는 최적 부분 구조의 문제에서 동적 계획법이 효과를 발휘합니다.복잡한 문제를 해결하기 위해문제를 작은 하위 문제들로 나누어서, 그 해답을 저장하고재사용해서중복 계산을 피하는 것을 말합니다. 🤔 메모이제이션, 타뷸레이션🙋♂️동적 계획법에서 두 가지 방식이 있습니다.Top-Down 방식 (메모이제이션)큰 문제에서 작은 하위 문제로 나아가서, 계산된 결과를 재사용하는 방식입니다.이러한 과정을 통해 중복 계산을 피할 수 있으며,재귀를 사용하는 상황에서 캐싱하여 효율성을 높일 수 있습니다.필요한 하위 문제만 계산하..
들어가기에 앞서,DB를 세팅하기 위해, Firestore를 자연스럽게 학습할 기회가 생겼습니다.DB, DBMS, SQL 같은 용어들을 대략적으로는 알고 있지만, 갑자기 질문들어오면 어떻게 설명해야 할지 막막할 때가 있기에,기본 용어를 정리하고 Firestore를 학습하고자 합니다. 🤔 DataBase?🙋♂️아래 4가지 특성이 있는 데이터의 집합소라고 생각하면 됩니다.통합된(Integrated) 데이터 → 각 사용자들의 데이터를 한 곳에 모여 있습니다.저장된(Stored) 데이터 → 컴퓨터 하드웨어 저장 장치에 저장되어 있습니다.운영(Operational) 데이터 → 고유 기능을 수행하기 위해 필요로 합니다.공용(Shared) 데이터 → 여러 사용자들이 공동 소유, 관리, 활용합니다. 🤔 DataB..