최근 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 과..
https://school.programmers.co.kr/learn/courses/30/lessons/42842 내 풀이import Foundationfunc solution(_ brown:Int, _ yellow:Int) -> [Int] { var size: [Int] = [] var totalSize: Int = brown + yellow for height in 1...totalSize { let width = totalSize / height if (width - 2) * (height - 2) == yellow { size.append(width) size.append(height) } ..
오늘의 알고리즘 문제는 Stack / Queue에 관련된 문제였다.주어진 s에 괄호가 여/닫이 다 되는지 판단하고 답을 내는 문제였고,풀이는 아래와 같다. https://school.programmers.co.kr/learn/courses/30/lessons/12909 내 풀이import Foundationfunc solution(_ s:String) -> Bool { var ans:Bool = false var tempArr: [String] = [] for bracket in s { if !tempArr.isEmpty && tempArr[tempArr.endIndex - 1] == "(" && bracket == ")" { tempArr.remove..
https://school.programmers.co.kr/learn/courses/30/lessons/81301 내 풀이import Foundationlet numDic: [String: Int] = [ "zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9]func solution(_ s:String) -> Int { var tempArr: String = s var tempStrArr: [String] = [] var resultArr: [Int] = [] for i in te..
https://school.programmers.co.kr/learn/courses/30/lessons/132267 테스트 케이스는 통과하는데 제출시 우르르 실패로 떠서 뭐지(?) 싶었다.그런데 역시 내가 문제였고.. 문제를 잘 읽어봤어야 했다.. 처음 제출했던 답은 아래와 같다func solution(_ a:Int, _ b:Int, _ n:Int) -> Int { var currentCola: Int = n var result: Int = 0 while currentCola >= a { currentCola -= a result += 1 // 빈병을 반납하면 콜라 한병을 받는거로 구했음 currentCola += b } re..
요즘 SwiftUI로 기존 앱을 리팩토링하고 있는데 이런 @ 골뱅이들이 너무 많아 한번은 싹 훑고 가야겠다는 생각이 들어 오랜만에 블로깅을 해봅니다 :) 오늘은 가장 헷갈렸던 @StateObject, @ObeservedObject에 대해 알아보려고 합니다~! 참고로 @골뱅이는 '어트리뷰트'또는'어노테이션' 이라고 읽습니다. 결론 아래 영상을 먼저보시죠 @ObersevedObject@StateObject 추후 @State에 대해서도 블로깅 하겠지만, 상위뷰의 값이 바뀌어 View가 다시 그려지는 경우 (리렌더링) @ObservedObject의 값이 초기화 되며,@StateObject의 경우는 값을 유지합니다. 즉, @StateObject를 사용하는 뷰는 상위뷰의 리렌더링에도 뷰를 유지하는거죠. @Sta..
https://school.programmers.co.kr/learn/courses/30/lessons/12950 내 풀이func solution(_ arr1: [[Int]], _ arr2: [[Int]]) -> [[Int]] { var result: [[Int]] = [] for i in 0.. 2차원 배열 문제는 처음이라 접근하는 방법에 어려움이 있었다. 두 배열의 길이는 항상 같음으로 arr1.count를 사용해 배열안에 배열을 생성 [ [ ] ]각 배열의 요소에 접근해서 각각 더해줘야하기 때문에 result[i번째]에 arr1[i번째][j번째] 요소 + arr2[i번째][j번째] 요소의 합 추가 ex) i가 0 // j가 0 인경우 arr1[0][0] ==> 1 arr2[0]..
오늘은 그동안 스트리밍 관련 작업을 고도화 하면서 바뀌었던 구조들과구조를 바꾸면서 겪었던 문제들을 정리해보려고 합니다. 이번 작업을 통해서 AVCaptureSession을 깊게 공부할 수 있던 계기가 됐던것 같고,동료 개발자분과 같이 Objective-C로 된 WebRTC 라이브러리 내부를 까보고 파악해볼 수 있던 계기가 됐던것 같습니다. 기존 구조화면 구성스트리밍 RIB 움직임 감지 녹화 RIB 처음 구성은 아래의 RIB들로 구성되어있었다.스트리밍 요청이 오면 스트리밍 역할을 하는 RIB을 attach,스트리밍이 종료되면 움직임 감지 녹화를 하는 RIB을 attach 하는 방식으로 구현을 했었다. 변경이 필요했던 이유매번 스트리밍 연결 → 종료 할 때마다 시그널링채널을 생성하게 되는 문제가 있었고,..
- Total
- Today
- Yesterday
- RTCCameraVideoCapturer
- swift 고차함수
- RIBs tutorial
- 원티드 프리온보딩
- Class
- ios
- Swift
- swift reduce
- Swift joined
- Swift 프로그래머스
- swift property
- CS 네트워크
- 2023년 회고
- Swift joined()
- Swift init
- Combine: Asynchronous Programming with Swift
- swift programmers
- iOS error
- Swift 프로퍼티
- removeLast()
- Swift inout
- Swift RIBs
- swift (programmers)
- swift protocol
- Swift Error Handling
- Swift ModernRIBs
- Swift final
- Swift 내림차순
- Swift Leetcode
- Swift 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |