IOS (23) 썸네일형 리스트형 DYLD, Dynamic Link Editor이 무엇일까? 앱 개발하는 과정에서 대부분 혼자만의 코드로만 프로젝트를 구성하지 않습니다. Github 등 오픈소스나 유료 소스를 바탕으로 특정 기능에 대한 구현을 빌리는 경우가 많습니다. 다수에 의해 검증된 코드들이 많다보니 직접 코드를 구성하는 것보다 성능이 좋은 경우도 많습니다. 이렇듯 외부에 의존성을 두게 되면 일반적으로는 코코아팟 cocoapod, 카르타고, spm 등 의존성 관리도구를 활용하게 됩니다. 일반적으로는 외부 소스나 프레임워크의 사용에 에러나 큰 문제가 없겠지만, 해당 프레임워크가 dynamic framework로 제공되는 경우, 하단과 같은 에러를 만나기도 합니다. dyld: Library not loaded: 뭐. 말 그대로 라이브러리가 로드되지 않았다는 뜻이겠죠. 해당 키워드의 원인은 여러 .. [iOS] 자주 사용하는 컴파일 조건구문에 대하여 (#if, #endif, canImport 등) + available, unavailable iOS를 개발하면서, 타겟 버전이나 플랫폼 조건 등에서 #if, #endif 등 컴파일 조건 구문을 익숙하게 봐오셨을 거라 생각합니다. 사용법을 보기 전에 #if로 시작하고, #endif로 끝나는 구문이 어떤 건지 자세히 알아보면 좋을 것 같습니다. 이렇게 컴파일 단계에서 조건을 추가하기 위해 사용되는 구문을 Compiler Control Statement라고 부릅니다. Compiler Control Statement의 역할은 타겟이 컴파일되는 과정에서 컴파일러의 작동 양상을 바꿀 수 있도록 해줍니다. 크게 보자면 총 3가지로 나눌 수 있고, 각각은 하단과 같습니다. (물론 각각에 대해서도 플랫폼, 버전 등에 따라 많은 조건들이 있네요.) 1. conditional-compilation-block 2. .. iOS Device Screen Size Height, Width 값 얻기(feat. UIScreen.main) 목차 1) iOS ~16.0 2) iOS 16.0 < (version) 3) 기타 참고 1) iOS ~16.0 일반적으로 iOS Device의 Screen Size를 얻기 위해서 다음과 같은 로직을 많이 써왔다. UIScreen.main.bounds.size.height UIScreen.main.bounds.size.width 코드 작업 중 Xcode IDE에 의해 main이 deprecated 될 거라는 경고문을 안내받았다. 경고문에 안내하듯 Context에 의해 찾아진 UIScreen 인스턴스로 대체하라는 방식대로 코드를 작성하라고 안내하고 있다. ex) view.window.windowScene.screen 2) iOS 16.0 < (version) StackOver Flow에서 관련된 질의글을 찾.. iOS 의존성 관리도구 CocoaPods 코코아팟 사용하기 CocoaPods => Swift 및 Objective-C Cocoa 프로젝트 종속성 관리자 타 의존성 관리도구로 카르타고나 spm(swift package manager)이 있다. 이 중 spm은 Apple에서 지원해주는 First Party에 해당한다. 하지만 아직은 SPM을 지원하지 않는 많은 라이브러리들이 있기 때문에 SPM이 아닌 cocoapods도 필요하다고 판단이 되어 도입하였다. 하단 페이지에도 설명되어 있지만, 설치 방법은 간단하다. sudo gem install cocoapods 터미널 창을 열고, cocoapods 설치를 위한 명령어를 실행하면 된다. 대표사진 삭제 사진 설명을 입력하세요. Password를 입력하고 나면 위와 같은 ~ 1 gem installed로 끝나게 되고, co.. [백준]1931_회의실 배정 문항번호: 1931번 회의실 배정 tags: problem solving 1. 문제 분석 목표: 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수 찾기 2. 풀이 계획 입력 제한 : N(1 ≤ N ≤ 100,000) 시간 제한 : 2초 생각한 방향 최대한 회의를 많이 하기 위해서는 가급적 빠른 시간에 끝나는 회의를 선택하는 방법을 선택해야한다. 빠른 시간에 끝나는 회의임을 찾기 위한 정렬 과정이 요구된다. -> sort() 메서드 사용 추가로 다음에 시작할 수 있는 회의는 현재의 종료시간 이후이거나 같은 값을 가져야 한다. -> if 조건문 3. 계획 검증 시간 복잡도 예상 : 최대 100,000개의 데이터가 들어온다고 가정했을 때, Swift에서 제공하는 sort 함수의 시간복잡.. [백준]15652 N과 M(4) 문항번호: 15652 N과 M(4) 1. 문제 분석 1 ~ N의 자연수 중 M개를 고른 수열 같은 수 여러번 고르기 가능. 고른 수열은 비 내림차순이어야 함. A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK 2. 풀이 계획 1부터 N까지 가면서 출력을 하게 된다. Back-tracking : 불필요한 탐색을 하지 않고, 이전 단계로 돌아와 다른 후보해를 탐색해 나가는 방법 이미 탐색한 값보다 작은 값의 경우, 다음 input으로 들어올 수 없으므로, 반복문 안에서 더 낮은 숫자의 반복문이 돌지 않도록 설정해주어야 하겠다. -> for 문의 시작점을 현재의 current Value부터 시작하도록 설정해서 위 조건을 만족 시킴. 사실 전형적인 DFS 문항이라고 생각했지만, 문제의 분류표를 살펴보고 난 후, 백.. [백준]1463_1로 만들기 문항번호: 1로 만들기 1. 문제 분석 정수 X가 사용할 수 있는 연산 X%3 == 0 -> X = X/3 X%2 == 0 -> X = X/2 X = X-1 2. 풀이 계획 입력 제한: 1 [백준]1966_프린터큐 목차 문항 분석 Code 결과 및 분석 문항 분석 입력 제한 큐 자료구조를 활용해야 하는 문제 Swift에서 Array를 활용해 큐를 간단하게 구현하게 될 경우 removeFirst() method : O(N) append() method: O(1) 순서에 맞는 자료 값에 대한 위치 계산을 계속 진행해야 하고, 반복문 안에서 점검을 진행해줘야 한다. Code import Foundation let testcase = Int(readLine()!)! var list = [(Int, Int)]() for _ in 0.. 이전 1 2 3 다음