최근 UIKit을 통해 작업할 일이 생겼는데생각보다 TableView의 활용도가 꽤 많다는걸 느꼈습니다. 오늘은 TableView를 사용한다면 알아야할 것중 하나인 lifeCycle에 대해 블로깅을 해보려고 합니다. 아래 예시의 UI는 code base로 구현합니다. 테스트 해볼 UI는 아래와 같아요 TableView 가장 기본적인 TableView 형태로 만들고나서,tableView의 delegate, dataSource 프로토콜에서 lifeCycle 역할을 하는 메서드들을 나열해보자면 아래와 같습니다. UITableViewDelegate willDisplay cell이 나타날때 쯤 호출func tableView(_ tableView: UITableView, willDisplay cell: UITa..
평소 네트워크 통신을 할때 Alamofire를 사용하면서직접 URLSession을 사용해 이미지 업로드를 구현해보며 내부 동작을 파악하고 싶어 해당 블로깅을 작성해봅니다. 기본적으로 URLSession의 request 헤더 부분에 'Content-Type: application/json'을 사용하게 되는데,이미지나 대용량 파일 등을 전송하기 위해선 multipart/form-data로 전송하는게 적합 합니다. multipart/form-data먼저 application/json | multipart/form-data 각각 request body를 보내는 방법 부터가 다른데 아래를 먼저 보고 가봅시다.// application/jsonlet body: [String: Any] = [ "name": ..
최근 LiveActivity를 적용해보면서 App Extension 경험과 Tuist에 녹여내는 과정중에 삽질을 많이 하게 돼 복습도 할겸 블로깅을 해보려고 합니다! 겪었던 문제 1. Tuist를 통해 Widget Extension을 추가해야 함2. Widget Extension에서도 Asset을 따로 만들어야 함 일반적으로는 App Extension의 경우 target membership을 아래와 같이 체크하면 해결 되는데, tuist를 적용하게 되면 아래와 같은 방법으로 추가해줘야 합니다. 먼저 Project.swift 파일을 열기위해 아래 명령어를 터미널에 입력해주시고tuist edit Project 객체에 target을 추가해줍니다.// Project.swiftlet project = Proje..
URL을 통해 여러 이미지를 받아오는 작업 많이 해보셨을 겁니다.하지만 해당 이미지 하나당 크기가 엄청 크다면? 오늘은 위와 같이 큰 여러개의 이미지를 다운받아야 하는경우 사용자 경험 개선과 과부하되는 메모리 문제에 대해 해결하는 방법다운 샘플링에 대해 블로깅 해보려고 합니다. 먼저 서론에서 언급했던 상황에서의 메모리는 아래와 같습니다. 이미지를 불러오는데도 당연히 오래걸리고 스크롤 했을때 버벅였던 현상이 있었습니다. 그 이유는 WWDC18 - Momory Deep Dive에서 나옵니다. 이미지의 경우 메모리 사용량은 width(너비), height(높이)에 의해 결정이 되는데요.위와 같은 상황에서도 실제로 이미지 하나당 4000 * 3000 이런식으로 이미지 크기가 어마어마 했습니다. 문제 접근 방..
협업을 하다보면 xcodeproj, xcworkspace 에서 충돌이 나는 문제를 자주 겪어볼텐데요.저도 아래 사진처럼 일일히 충돌나는부분을 수정하느라 몇시간동안 삽질을 했었습니다.. 충돌을 해결할 수 있는 툴은 몇가지가 있지만 그 중에서 요즘 모듈화로 잘 알려진 Tuist라는 툴을 사용해보면서 정리를 해보려고 합니다. 모듈화는 추후 차근차근 스터디해보고 업데이트 할 예정입니다.오늘은 세팅하는것까지만! 그럼 Tuist에 대해 한번 정리해보겠습니다. 블로깅 시점 (24.09.02) Tuist 버전은 4.25.0 입니다알고가기1. Tuist를 사용하게 되면 기존에 사용하던 xcodeproj, xcworkspace 파일이 필요없습니다.프로젝트 설정하고 적용을하면 새로 만들어주기 때문이에요. 2. git 과..
요즘 SwiftUI로 기존 앱을 리팩토링하고 있는데 이런 @ 골뱅이들이 너무 많아 한번은 싹 훑고 가야겠다는 생각이 들어 오랜만에 블로깅을 해봅니다 :) 오늘은 가장 헷갈렸던 @StateObject, @ObeservedObject에 대해 알아보려고 합니다~! 참고로 @골뱅이는 '어트리뷰트'또는'어노테이션' 이라고 읽습니다. 결론 아래 영상을 먼저보시죠 @ObersevedObject@StateObject 추후 @State에 대해서도 블로깅 하겠지만, 상위뷰의 값이 바뀌어 View가 다시 그려지는 경우 (리렌더링) @ObservedObject의 값이 초기화 되며,@StateObject의 경우는 값을 유지합니다. 즉, @StateObject를 사용하는 뷰는 상위뷰의 리렌더링에도 뷰를 유지하는거죠. @Sta..
그동안 GCD의 개념을 잘못 이해하고 있어 제대로 각인시키고자 블로그를 작성해봅니다. 아래 코드에서 동작순서는 어떻게 되고 어떤게 먼저 끝나는지 헷갈렸던 부분이 있었습니다. 헷갈렸던 코드let queue = DispatchQueue.global()queue.async { task1() task2() task3()}//Task 1 시작//Task 1 완료★//Task 2 시작//Task 2 완료★//Task 3 시작//Task 3 완료★ 이전에는 async 내부의 로직들이 비동기로 처리되는줄 알고 있었습니다..🫠 위 로직의 실행 순서task1 → task2 → task3 코드블럭 { } 안에 있는 로직들은하나의 task로 보기때문에 순서대로 실행이 됩니다. task가 하나이기 때문에 아래..
요근래 App store connect에서 한번이라도 앱 심사 제출을 해봤다면 아래 메일을 받은적이 있을겁니다. 내용을 요약하면 PrivacyInfo 파일에 해당 API 사용이유를 추가하지 않으면 24년 5월부터 앱이 승인되지 않습니다. 는 내용인데요. 오늘은 Privacy Manifests에 대한 내용으로 블로깅을 해보려고 합니다. 알아볼 내용 PrivacyInfo 앱 내 대응 3rd-party 라이브러리 대응 1. PrivacyInfo 왜 갑자기 생겼나? 공식문서에 보면 주요 기능을 제공하기 위해 사용하는 일부 API는 기기신호에 접근하여 악용될 가능성이 있어, (핑거프린팅 이라 불린다네요.) 앱 또는 서드파티 라이브러리에서 API를 사용하는 이유를 설명하게 하기 위함 이라고 합니다. 심사제출을 하고..
존재는 알았지만 언제 공부할까 각 보다가 이제서야 해봅니다. 오늘은 영구적으로 로컬에 데이터를 저장하고 관리하는 CoreData에 대해 정리해보려고 합니다. 들어가기전에 Q: UserDefaults도 로컬에 저장할 수 있지 않나? 객체도 저장할 수 있잖아? (UserDefault로 객체를 저장해보자!) A: 맞지만, 사실 UserDefaults는 간단한 정보를 저장하기에 적합합니다. 그리고 CoreData를 사용해보려는 가장 큰 이유! CloudKit을 사용해 여러장치에 동기화가 가능합니다. 예를들어, A라는 앱을 쓰다가 다른 아이폰 기기로 바꿔도 CloudKit을 통해 기존에 사용했던 A앱의 데이터를 그대로 가져다 쓸 수 있다는것. 1. CoreData 핵심 3요소 1. NSManagedObjectMo..
보통 테스트를 할땐 dev서버를, 배포할땐 production 서버와 연결해서 테스트 하는데요. 현재 운영중인 앱에서도 각 환경별로 분기처리가 되어있는데 유독 aws관련한 json파일만 수동으로 바꿔줘야하는것에 불편함이 있었고 왜 이것만 안되지? 라는 의구심이 들었습니다. 오늘은 해당문제를 해결했던 방법과 환경변수 설정해주는 방법에 대해 블로깅 해보겠습니다. 1. Scheme 분류 스킴(Scheme)을 환경에따라 -Dev, -Release 이런식으로 구분하기 쉽게 분류를 해주도록 합니다. New Scheme - '{프로젝트이름}-Dev' or '{프로젝트이름}-Release' 2. Scheme 역할 설정 Scheme에따라 어떤 환경에서 실행(Run, Test, Archive 등)할 지 설정해주는 부분입니..
- Total
- Today
- Yesterday
- 2023년 회고
- removeLast()
- RTCCameraVideoCapturer
- iOS error
- Swift joined()
- Swift 프로그래머스
- Swift
- Swift 알고리즘
- Swift Error Handling
- CS 네트워크
- swift programmers
- Swift Leetcode
- swift reduce
- Swift RIBs
- Swift inout
- 원티드 프리온보딩
- swift 고차함수
- RIBs tutorial
- swift protocol
- Swift joined
- ios
- Swift 내림차순
- swift (programmers)
- Combine: Asynchronous Programming with Swift
- Class
- Swift 프로퍼티
- Swift final
- swift property
- Swift init
- Swift ModernRIBs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |