iOS(78)
-
[UIkit] 이미지 사이즈에 따른 동적 컬렉션뷰 셀
🧸 시작컬렉션뷰셀이 이미지 사이즈에 따라 셀의 사이즈도 바뀐다! 🧸 폴더로 이동한다.import UIKitimport DesignSystemclass CustomCollectionViewController: UIViewController, UICollectionViewDelegate { var collectionView: UICollectionView! var imageList: [UIImage] = [] override func viewDidLoad() { super.viewDidLoad() // 이미지 목록 초기화 imageList = [ DesignSystemDemoAppAsset.shirt..
2025.02.03 -
[알고리즘] Swift -프로그래머스 연습문제 #258712(카카오 인턴십_가장 많이 받은 선물)
문제링크https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 분석 선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다. 두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다. 예를 들어 A가 B에게 선물을 5번 줬고, (A -> B) B가 A에게 선물을 3번 ..
2024.11.13 -
[UIKit] Missing package product 'FirebaseCore'
🧸 시작의존성 관리를 Cocoapod에서 Swift Package Manager(SPM)으로 변경하면서 Firebase 설치오류가 나타났다.처음에는 캐시에 대한 문제때문인 줄 알고 빌드 클린 [Cmd] + [Shift] + [K] 도 하고 open ~/Library/Developer/Xcode/DerivedData해당 폴더에 남아있는 데이터도 지우고 다시 실행해보고 진짜 하루종일. 빌드만 했는데 실패.오류를 클릭하니까 나오는 메시지로... Pods/FirebaseCrashlytics/run: No such file or directory이렇게 나와있었다 FirebaseCrashlytics run 하는 것에 대한 오류 같은데 ... 너무 예전에 추가했어서 어떤 것을 수정했는 지 기억이 나지 않았다. ..
2024.11.12 -
[UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (3): Rxswift
🧸 시작2024.11.08 - [SWIFT/UIKit] - [UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit [UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit🧸 시작이전 글에서는 스토리보드를 활용해 키보드가 올라오거나 내려갈 때마다 제약조건을 변경해 UI를 조정하는 방법을 사용했다. 이번 글에서는 코드 기반의 접근 방법으로 동일한 작업을nlestory.tistory.com 이전 글에서는 Snapkit과 NotificationCenter를 사용하여 키보드 이벤트를 처리하는 방법을 다뤘다면, 이번에는 RxSwift로 이 과정을 좀 더 간결하고 반응형으로 구현하는 방법을 구현할 예정이다.RxSwift를 활용하면 Notification..
2024.11.12 -
[UIKit] 텍스트필드 입력(클릭) 시 키보드 올리기/내리기 (2): Snpakit
🧸 시작이전 글에서는 스토리보드를 활용해 키보드가 올라오거나 내려갈 때마다 제약조건을 변경해 UI를 조정하는 방법을 사용했다. 이번 글에서는 코드 기반의 접근 방법으로 동일한 작업을 구현하려 한다. Snapkit 라이브러리를 이용하여 코드 기반 레이아웃 설정을 중심으로 다룰 것이다. 키보드가 화면을 가리는 문제를 해결하고 레이아웃을 조정하는 방법에 대해 설명할 것이다. 이 과정에서 NotificationCenter 을 사용한 키보드 알림 처리와 Snapkit을 사용하면서 유용한 방법을 소개할 것이다. 🧸 UI 구현먼저 스토리보드를 사용하지 않고 코드베이스로 UI를 구현하기 위해서 세팅을 해준다. 처음 세팅 방법은 아래 글을 참조하면 된다.초기 프로젝트 코드베이스로 세팅하기 [UIKit] 스토리보드..
2024.11.08 -
[UIkit] Xcode pbxproj 충돌 해결방법
🧸 시작xcode의 프로젝트 패키지인 .pbxproj의 파일에서 충돌이 났을 경우에 어떻게 해결해야할 지 정말 귀찮은 일이다.일단 .pbxproj 파일은 프로젝의 파일이랑 폴더에 대한 정보를 가지고 있어 파일/폴더 추가, 수정 삭제 등의 내용이 반영된다.계속 파일이 추가되는 상황에서 여러 명의 사람이서 프로젝트를 할 경우에 자꾸 충돌이 나면 정말 화가 난다.그래서 이를 빠르게 해결하는 방법이 있다. 🧸 .git 파일이 존재하는 폴더로 이동한 후 .gitattributes 파일 생성vi .gitattributes명령어를 입력하던지 파일을 추가하여 .gitattributes 파일을 생성한다. 🧸 .gitattributes 파일을 열어 내용 추가*.pbxproj binary merge=union이렇게 ..
2024.05.20 -
[Swift] ARC (Automatic Reference Counting), 강한참조(strong), 순환참조(retain cycle), 약한참조(weak), 미소유참조(unowned)
👉 ARC (Automatic Reference Counting) 이란? 힙은 메모리를 해제해주지 않으면 메모리누수가 발생하기 때문에 힙 영역의 메모리를 관리하는 방법 객체가 더 이상 필요하지 않을 때 메모리에서 자동으로 해제한다. 👉 ARC 장/단점 장점 개발자가 참조해제 시점을 파악할 수 있다. 런타임시점에 추가 리소스를 발생하지 않는다. 단점 순환참조 발생 시 영구적으로 메모리가 해제되지 않을 수 있다. 👉 RC (Reference Counting) 란? 객체를 현재 누가 가지고 있는 지(참조하고 있는 지)를 숫자로 나타낸 것 👉 RC 계산 시점 컴파일 타임에 언제 참조되고 언제 해제되는 지 결정되어 런타임때 그대로 실행한다. ✔️ 컴파일 / 런타임 컴파일(Compile): 작성된 소스코드를 컴퓨터..
2024.03.29 -
[UIKit] Thread 16: "*** +[NSURLComponents setPercentEncodedQueryItems:]: invalid characters in percentEncodedQueryItems"
🧸 시작 Thread 16: "*** +[NSURLComponents setPercentEncodedQueryItems:]: invalid characters in percentEncodedQueryItems" 에러 발생 setPercentEncodedQueryItems: 인코딩된 백분율의 잘못된 문자항목 쿼리 유요하지 않은 문자가 쿼리항목으로 가서 에러가 발생한 경우이다. 🧸 에러 발생한 기존 코드 func asURLRequest(completion: @escaping (URLRequest) -> Void) { guard var urlComponents = URLComponents(string: Constants.APIURL.KakaoAPI.searchURL) else { return } urlComp..
2023.05.06 -
[UIKit] 테이블뷰 섹션 타이틀 폰트 설정
🧸 시작 변경 전 변경 후 🧸 코드 var tableViewSectionHeader = ["즐겨찾기", "내 주변 병원"] extension HomeViewController: UITableViewDelegate, UITableViewDataSource { //섹션의 개수 func numberOfSections(in tableView: UITableView) -> Int { return tableViewSectionHeader.count } //섹션의 타이틀 텍스트 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return tableViewSectionHeader[section] } //..
2023.05.05 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(3)
🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(2) 🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(1) 🧸 시작 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭 nlestory.tistory.com 🧸 시작 ✔️ 사용자 입력 처리 사용자는 자신이 좋아하는 장소에 플래그를 지정하고 목록을 필터링하여 자신이 좋아하는 장소만 표시할 수 있다. 이 기능을 만드려면 사용자가 자신의 즐겨찾기만 집중할 수 있도록 목록에 스위치를 추가한 다음 사용자가 랜드마크를 즐겨찾기로 표시하기 위해 탭하는 변 모양의 버튼을 추..
2023.05.04 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(2)
🧸 이전 글 [SwiftUI] SwiftUI 기초 -공식 튜토리얼(1) 🧸 시작 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭하면 해당 화면이 나오게 되는 데 여기에서 간편하 nlestory.tistory.com 🧸 시작 ✔️ 목록 및 네비게이션 구축 이전 글에 이어지는 내용으로 이번 튜토리얼에서는 모든 랜드마크에 대한 정보를 표시할 수 있는 보기를 만들고 사용자가 랜드마크에 대한 상세 보기를 보기 위해 누를 수 있는 스크롤 목록을 동적으로 생성한다. 🧸 랜드마크 모델 만들기 이전에는 하드코딩으로 정보를 입력했다면 이번에는 데이터를 저..
2023.05.04 -
[SwiftUI] SwiftUI 기초 -공식 튜토리얼(1)
🧸 시작 애플 디벨로퍼 공식 홈페이지에 있는 튜토리얼을 진행할 것이다. ✔️ 뷰 생성 및 결합 랜드마크의 세부 정보를 표시하는 뷰를 빌드하는 것으로 시작한다. 뷰를 배치하기 위해서 스택을 사용하여 이미지 및 텍스트 뷰를 구성한다. 지도를 추가하기 위해서 MapKit도 추가한다. 🧸 새 프로젝트 만들기 및 캔버스 탐색 SwiftUI 로 앱 만들기 파일 만들기 Interface -> SwiftUI 로 변경하고 Next 🧸 Inspector 로 수정하기 command + 클릭해서 Show SwiftUI Inspector... 를 클릭하면 해당 화면이 나오게 되는 데 여기에서 간편하게 변경할 수 있다. 아니면 스토리보드에서 사용하듯이 오른쪽 인스펙터화면을 늘려주면 간편하게 속성을 변경할 수 있다. 오른쪽에 보..
2023.05.03 -
[UIKit] Thread 1: "-[NSLayoutConstraint center]: unrecognized selector sent to instance 0x6000030d12c0"
🧸 시작 Thread 1: "-[NSLayoutConstraint center]: unrecognized selector sent to instance 0x6000030d12c0" 이러한 에러 발생 NSLayoutConstraint center 를 사용하고 싶은 데 연결된 인스턴스가 그것을 찾을 수 없다는 뜻 ? 째든 이 에러는 컴포넌트연결이 잘못되었다는 뜻 내가 사용하고자하는 컴포넌트와 연결이 되었는 지 잘 확인해보면 된다. 오른쪽 창에서 자신이 원하는 것과 연결이 되었는 지 확인한다. UIViewController 에서도 왼쪽 동그라미가 채워졌는 지 확인하고 채운 것이 내가 원하는 것과 연결이 잘 되었는 지 확인한다. 스토리보드를 사요하다보면 컴포넌트들이 너무 많아져서 실수하는 것 같다 ..
2023.04.06 -
[UIKit] info파일 이동하기
🧸 시작 Build input file cannot be found: '/Users/.../Info.plist'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? info파일을 다른 폴더로 이동했더니 빌드가 안된다 ㅎㅎ 위의 에러가 발생한다. 이를 해결하기 위한 방법이다. 🧸 info.plist 파일을 클릭한다. Info파일을 클릭하면 오른쪽에 Location을 Relative to Project로 변경해준다. 🧸 Project > Build Settings > Packing 으로 이동 Build Settings으로 이동한 다음 검색으로 info.plist을 한다..
2023.03.29 -
[iOS] Concurrency Programming (동시성 프로그래밍) 3 : Operation
👉 이전 글 [iOS] Concurrency Programming (동시성 프로그래밍) 2 : GCD, DispatchGroup, DispatchWorkItem 👉 시작 2023.03.15 - [iOS/iOS] - [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) 👉 시작 프로그래밍 nlestory.tistory.com 👉 시작 동시성 프로그래밍을 하기 위해서 iOS에서 제공하는 기술인 GCD와 Operation 중 오늘은 Operation 에 대한 공부한 내용이다. 👉 Operation 단일 작업과 관련된 코..
2023.03.16 -
[iOS] Concurrency Programming (동시성 프로그래밍) 2 : GCD, DispatchGroup, DispatchWorkItem
👉 이전 글 [iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기) 👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ nlestory.tistory.com 👉 시작 위의 글에서는 동시성 프로그래밍과 비슷한 개념에 대해서 공부했다. 동시성 프로그래밍을 하기 위해서 iOS에서 제공하는 기술인 GCD와 Operation가 있다 이번에는 GCD에 대해서 공부해보았다. 👉 GCD (Grand Central Dispatch) = Dispatch 시스템에서 관리하는 디스패치 큐에 작업을 제출하여 멀티코어 하드웨어에서 ..
2023.03.15 -
[iOS] Concurrency Programming (동시성 프로그래밍) 1 : Sync (동기), Async (비동기)
👉 시작 프로그래밍을 하면서 가장 어려웠던 부분이 비동기 처리였던 거 같다. 예전에 비동기라는 개념을 몰랐던 학생시절에 프로젝트를 만들면서 엄청난 고생을 했던 적이 떠오른다 ,, ㅎㅎ 서버와 통신하면서 반드시 필요한 비동기처리,, iOS에서 비동기를 처리할 때 GCD를 사용하여 구현한다. 디스패치큐와 컴플리션 블럭을 활용하여 처리한다. 그렇다면 비동기와 비슷하게 생긴 동시성은 무엇인가? 이번에는 동기와 비동기, 직렬과 동시에 대해서 알아보았다. 👉 Sync (동기) / Async (비동기) ✔️ Sync (동기) 프로그램의 흐름과 이벤트의 발생 및 처리를 종속적으로 수행하는 방법이다. 작업이 끝나는 것을 기다린 후 다음 작업을 처리한다. import UIKit class ViewController: ..
2023.03.15 -
[iOS] UIView의 Life Cycle (생명주기)
👉 시작 이제 스토리보드가 아닌 코드베이스 UI로 구현하는 것이 편해지고 익숙해졌다. MVC패턴을 구현하면서 View 와 ViewController 를 분리하게 되면서 UIView 를 많이 다루게 되었다. UIView를 UIViewController에 연결하면서 호출순서가 헷갈리기 시작했다. UIView의 메서드들을 공부하면서 서로의 호출순서를 비교해보기로 했다. 또한 코드베이스 UI를 만들면 init(frame: ) 을 사용하는 데 required init(coder: )를 생성해야 에러가 사라지는 것을 볼 수 있다. xcode에서 바로 에러를 잡아주어서 단순히 넘어갔지만 공부를 해보기로 했다. 먼저 공부를 하고 나서 사용했어야 했는데 순서가 잘못되었지만 그래도 지금이라도 궁금해져서 다행이다 ㅎㅎ 제대..
2023.03.09 -
[iOS] super.viewDidLoad() 호출하는 이유
👉 시작 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } 프로젝트를 처음 생성하면 ViewController 에 ViewDidLoad()는 기본으로 구현되어 있는 메소드이다. 생명주기 메소드를 작성하다가 호출할 때마다 superClass를 작성하는 것이 자연스럽게 호출하게 되었다. 당연히 슈퍼클래스의 내용을 상속받아 재정의하는 의미라고는 알고 있었지만 까먹고 작성하지 않았을 때가 있었는 데 호출을 하지 않아도 에러가 나지 않았다. 이 부분에서 super.viewDidLoad() 메소드를 호출하는 이유가 궁금해져서 찾아보았다. 👉 SuperClass (슈퍼클래스) 를 호출..
2023.03.07 -
[iOS/Swift] RxSwift 기본 개념
👉 RxSwift 란? ‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. By Marin Todorov. ‘RxSwift — Reactive Programming with Swift.’ 관찰 가능한 시퀀스와 함수 스타일 연산자를 사용하여 비동기 및 이벤트 기반 코드를 구성하는 라이브러리이다. 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그램을 쉽게 하도록 도와준다. ✔️ RxSwift 사용하는 이유 ? 비동기..
2023.03.05