[iOS] Fastlane CI/CD 구축 시 발생 오류 및 해결법
·
iOS/iOS 지식
거창하게 오류 해결법인데 사실 자잘한 버그..(지만 계속 실행 실패하고 눈물 흘린 것들)을 정리하고자 함. 이전글 🐥[iOS] Fastlane + Github Action으로 CI/CD 구축하기(1) - Fastlane을 통한 TestFlight 업로드[iOS] Fastlane + Github Action으로 CI/CD 구축하기(2) - Fastlane Match를 활용한 인증서 관리 및 Github Action 연동 1. 빌드 시 타임아웃 오류 /opt/homebrew/lib/ruby/gems/3.3.0/gems/fastlane-2.226.0/fastlane_core/lib/fastlane_core/project.rb:437:in `rescue in build_settings': [!] xcodebu..
[iOS] Fastlane + Github Action으로 CI/CD 구축하기(2) - Fastlane Match를 활용한 인증서 관리 및 Github Action 연동
·
iOS/iOS 지식
이전글 🐥[iOS] Fastlane + Github Action으로 CI/CD 구축하기(1) - Fastlane을 통한 TestFlight 업로드 이전글에 이어 이번엔 아래 내용들을 기록해보도록 하겠음(1) Fastlane Match를 통해 인증서를 관리  (2) Github Action을 Fastlane과 연계해서 TestFlight 업로드 (Feat. SSH, Github Secrets) Fastlane Match?대부분의 블로그를 찾아보면 이 Match를 사용하는데 왜 사용할까에 대한 의문을 가졌음.회사에서 팀으로 앱을 개발한다고 했을 때 인증서와 프로필을 관리한다면 인증서 만료 시점, 또는 새로운 기기에 설치한다고 했을 때 이 인증서를 갱신하고 다운로드 하는 과정에서 많은 리소스가 소모되게 됨...
[iOS] Fastlane + Github Action으로 CI/CD 구축하기(1) - Fastlane을 통한 TestFlight 업로드
·
iOS/iOS 지식
개인앱을 앱스토어에 빌드하고 아카이브 하는 과정이 너무 귀찮아서 배포를 자동화 할 수 있는 방법을 찾아보았음.CI/CD 도구를 이용하면 배포 자동화를 쉽게 할 수 있는데 이 과정에 대해 단계별로 기록해봄. 다음글 🐥 [iOS] Fastlane + Github Action으로 CI / CD 구축하기(2) - Fastlane Match를 활용한 인증서 관리 및 Github Action 연동[iOS] Fastlane CI / CD 구축 시 발생 오류 및 해결법 CI / CD란?CI(Continuous Integration): 지속적인 통합작업한 코드를 주기적으로 빌드하고 테스트해서 레포지토리에 통합하는 것을 말함지속적 통합을 통해 개발 생산성을 높이고 코드 퀄리티를 향상시킬 수 있다.  CD(Continuo..
Swift Concurrency(3) - Behind the scenes
·
iOS/iOS 지식
Swift Concurrency(1), (2)에서는 기본적인 async-await 동작과 continuation에 대해 다뤄 보았음.이번 글은 Swift Concurrency의 동작원리에 대해 알아보고자 하며 WWDC 영상을 정리한 글임.아래 영상을 보거나 글을 먼저 읽고 이 글을 읽는 것을 추천함. (WWDC 21) Swift concurrency: Behind the scenes Swift Concurrency(1) - Async와 AwaitSwift Concurrency(2) - Continutation GCD와 스레드 익스플로전GCD를 사용할 때 어떤 문제가 발생할 수 있을지 먼저 살펴보겠음.네트워킹을 통해서 여러 주제의 뉴스 피드를 가져오고 이를 데이터베이스에 순차적으로 저장하는 앱을 만든다고 ..
[iOS] Keychain으로 민감정보 저장하기
·
iOS/iOS 지식
앱에 저장해야할 정보는 어떻게 저장하면 좋을까UserDefaults를 사용하면 앱의 첫 진입여부나 간단한 설정정보를 저장할 수 있었음.하지만 민감정보(아이디, 패스워드, 카드 정보 등)을 UserDefaults에 저장하는 것은 좋은 방법이 아닐 수 있음. UserDefaults vs KeychainUserDefaults샌드박스 내부에 저장되는 key-value 형태의 데이터 저장 인터페이스임. 앱을 삭제할 경우 데이터가 삭제됨.앱 시작시점에 UserDefaults.plist 파일이 메모리에 로드되기 때문에 많은 데이터를 저장하는 것은 성능저하를 일으킬 수 있음.그렇기 때문에 간단한 설정정보만 저장하는 것이 권고됨. Keychain디바이스 안에 암호화된 데이터 저장공간으로 앱 삭제 후 재설치해도 데이터가 ..
[iOS] StackView를 사용한 채팅 UI 구현
·
iOS/쫌쫌따리 트러블슈팅
채팅앱을 만들면서 채팅 UI를 어떻게 그려야할지에 대한 트러블 슈팅프로필 영역과 닉네임은 고정으로 값이 있는 영역이고 채팅은 케이스가 세개임1. 텍스트만 있는 경우2. 이미지만 있는 경우3. 텍스트 + 이미지가 함께 있는 경우  텍스트 영역 & 하단 이미지 영역을 하나의 스택뷰로 감쌈 스택뷰를 사용한 이유처음에는 스택뷰를 사용하지 않고 UI를 작성하였는데텍스트만 있는 경우나 이미지만 있는 경우에 제약조건을 재설정해주어야 하는 번거로움이 있었음그에 따라서 시간을 나타내는 Label에 대한 제약조건도 변경되어야 하기 때문에 상당히 번거롭게 느껴짐  스택뷰를 사용하면 텍스트 or 이미지가 없는 경우 그냥 Hidden만 시키면 됨또 스택뷰의 Bottom과 시간 Label의 bottom을 맞춰놓으면 스택뷰의 크..
[iOS] StackView의 Distribution과 Alignment
·
iOS/iOS 지식
StackView 알아보기 전에 먼저 알아야할 개념Content Hugging Prioritoy  & Content Compression Resistence Priority Label 두개를 일렬로 놓은 상황에서 오토레이아웃을 잡으면 문제가 생김 Content Hugging Prioritoy공간이 남을 경우 적용우선순위가 높은 뷰는 본인 공간 유지우선순위가 낮은 뷰가 남은 공간을 차지 Content Compression Resistance Priority공간이 부족할 경우 경우 적용우선순위가 높은 뷰는 본인 공간 유지우선순위가 낮은 뷰가 남은 공간을 차지오른쪽 Label의 Content Hugging Priority를 높이면 오른쪽은 본인 크기만큼 유지왼쪽 Label은 남은 공간만큼 늘어남 공간을 좁게 ..
Swift Concurrency(2) - Continutation
·
iOS/iOS 지식
Continuation이라는 개념이 있음이전에 Swift Concurrency에서 wait-resume을 통해 쓰레드의 제어권을 시스템에 반환하고 돌려받는 과정이 있다고 했음! 여기서 작업이 재개될 때 스레드는 변할 수 있음 왜냐하면 애플이 스레드 관리를 시스템에서 하기 때문에 추가적인 스레드의 생성 없이 적절한 스레드를 배정해주기 때문임이 과정이 있기 때문에 Swift Concurrency는 스레드 익스플로전을 방지할 수 있다고 볼 수 있음 스레드 익스플로전은 뭔가요?CPU 코어보다 스레드의 수가 많아지는 것을 말함스레드가 과도하게 생성되면 일 많이 하고 좋은 거 아닌가요? 라고 생각할 수 있음하지만 과한 스레드 생성은 빈번한 컨텍스트 스위칭으로 인한 오버헤드나, 블락된 스레드를 기다리면서 가지고 있는..
Swift Concurrency(1) - Async와 Await
·
iOS/iOS 지식
Swift Concurrency는 동시성 프로그래밍을 가능하게 해줌 동시성 프로그래밍은 뭘까요?스위프트에서는 동시성을 "비동기 및 병렬코드의 일반적인 조합"이라고 지칭한다고 함  비동기가 뭔가요..?네트워크나 파일 구문분석같은 경우에는 시간 소요가 많음이런 작업들이 계속되는 동안 UI업데이트와 같은 작업을 계속 진행할 수 있고, 이것을 비동기로 수행된다고 함 그럼 병렬코드는 뭐에요..? 여러 코드가 동시에 실행됨을 의미함. 코어가 4개라면 이 네개에서 코드의 실행이 동시에 일어남 근데 GCD를 쓰면 우리가 DispatchQueue를 통해서 동시성 프로그래밍을 할 수 있는데 왜 Swift Concurrency를 쓸까이유가 여러개로 알고 있지만 오늘은 사용적인 관점만 보도록 하겠음!! 평소에 사용하던 URL..
[Swift] Protocol(1) - (some과 any는 왜 필요할까?)
·
iOS/iOS 지식
Swift에서는 Protocol이라는 일급객체가 있음!Protocol이 뭐에요? 라고 물어보면 어떻게 대답할 수 있을까.. 상당히 모호함공식문서에 따르면 프로토콜은 특정 유형이 구현해야 하는 요구사항의 정의임특정 작업이나 기능에 맞는 메서드, 속성, 요구사항의 청사진이라고 함예를 들어서 "동물"이라는 프로토콜이 있다고 해보면 동물은 닭도 있고 소도 있고.. 매우 다양함이 동물들은 "먹이를 먹는다"라는 공통의 동작이 있고, 이 동작을 일관되게 수행함그렇기 때문에 프로토콜로 eat이라는 요구사항을 정의하고, 채택한 곳에서 해당 함수를 각각의 동물에 맞게 구현할 수 있음protocol Animal { func eat()}struct Cow: Animal { func eat() { pri..