전체 글

부지런, 부지🏃🏻
iOS/이모저모

[AppStore 배포 이슈!] ITMS-91053: Missing API declaration

2023년 가을부터 Apple 필수 API를 사용하는 앱을 App Store Connect에 업로드할 때 이메일을 받게 된다. 해당 API 사용 이유를 앱의 PrivacyInfo 파일에 설명하지 않으면, 2024년 5월부터 앱이 통과 되지 않는다. 앱 또는 제3자 SDK가 사용하는 Apple 필수 API의 각 카테고리에 대해, 앱 또는 제3자 SDK의 PrivacyInfo 파일에 있는 NSPrivacyAccessedAPITypes 배열에 추가해야 한다. 해당 내용의 메일을 받은 사람들이 많은 것 같다. 나 또한 처음 메일을 받고 어? 싶었지만, 별거 아니였다. ㅎ.ㅎ cmd + n 파일추가 눌러서 privacy를 검색하면 바로 나올것입니다. 프로젝트 파일에서 PrivacyInfo.xcprivacy를 생성..

iOS/이모저모

[iOS] CI/CD 구축기 Fastlane + AzureDevOps [2]

AzureDevOps CI환경에서의 Fastlane실행 구축 들어가기 앞서 전체적인 흐름을 설명해드리겠습니다! 크게 보면 Auzre DevOps CI환경에서 Fastlane 실행 -> Fastlane이 빌드 후, 배포 하는 방식으로 진행됩니다. AzureDevOps Pipeline 실행 Pipeline 1단계 : 원격 Git 리포지토리에서 특정 커밋으로 코드를 가져와(checkout) 로컬 리포지토리를 업데이트하는 작업. 이 단계에서는 자동화된 빌드 및 테스트 작업을 시작하기 전의 초기 과정입니다 Pipeline 2단계 : CI환경에서의 Xcode 버전 선택, 로컬에서 돌아가는 버전과 CI환경에서 돌아가는 버전을 통일 시켜야합니다. 통일 되지 않을 경우, Swift버전 문제 혹은 라이브러리 간의 버전 이..

iOS/이모저모

[iOS] CI/CD 구축기 Fastlane + AzureDevOps [1]

왜? CI / CD 를 도입할려고 했어요? 기존 앱 배포하는게 너무 귀찮은 과정이 많아서... 주위에서 CI/CD에 대한 말을 많이 들어서... 그리고.. 멋있어 보여서 ㅎ.ㅎ 기존 프로세스는 얼마나 귀찮은 과정을 거친걸까? ⏳ 기존 배포(심사 요청) 과정 버전과 빌드버전을 올린다. 3인 이상의 개발자가 동시에 개발할 경우, 1년에 한번씩 프로파일과 인증서를 - 발급받고 공유한다. 테스트 코드 실행 (테스트 코드가 사실상 없지만 ㅎ.ㅎ 이제부터 도입하고 열심히 하려고 합니다) Analyze를 실행 -> 기다림 -> 완료 Archive 실행 -> 기다림 -> 완료 앱스토어 커넥트 들어가서 릴리즈 정보 등 입력하고 심사 요청 심사 통과하면 스토어 출시 💻 fastlane 설치하기 brew install fa..

CS, 알고리즘/CS

CI/CD 란 무엇일까?

CI/CD - 지속적인 통합 / 지속적인 배포 지속적 통합 과 배포 지속적 통합(CI)은 코드 변경 사항을 공유 소스 코드 리포지토리에 자동으로 자주 통합하는 사례를 나타낸다 지속적 배포 (CD)는 코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스로, 두 가지 부분으로 구성되며, 지속적 제공에는 자동 프로덕션 배포 기능이 없는 반면, 지속적 배포는 업데이트를 프로덕션 환경에 자동으로 릴리스를 진행한다. CI/CD를 그러면 사람들이 왜 쓰는걸까? 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 된다. How? 어떻게 도움이 되는 걸까 릴리스 속도를 단축하여 더 신속하게 제공 지속적인 피드백 검토시간 단축 더 빠른 버그 수정 위의 장점들제..

iOS/Swift

[Swift] Generics 제네릭

Generics 타입에 의존하지 않는 범용코드를 작성할 때, 사용 제네릭을 사용하면, 중복을 피하고 코드를 유연하게 작성할 수 있다. Swift의 강력한 특징 중 하나이고 Swift 표준 라이브러리 대부분은 제너릭 코드로 되어 있다 예를 들어 Swift의 Array 와 Dictionary 타입은 둘다 제너릭 콜렉션 Int 값을 가진 배열, 또는 String 값을 가진 배열 또는 실제로 Swift에서 생성될 수 있는 다른 모든 타입에 대한 배열을 생성 가능 모든 지정된 타입의 값을 저장하기 위한 딕져너리를 생성할 수 있고 해당 타입에 대한 제한은 없다. Generic Function 제너릭이 해결하는 문제 아래와 같이 일반적으로 a 와 b 가 같은 타입이 아니면 바꾸는 것은 불가능하다. Swift는 타입 ..

회고록 및 일상

[나는 바보다 2] 이상한게 있으면, 관련 클래스를 다 찾아보자

0.들어가기 앞서 나는 바보다 시리즈는 제가 개발과정중 너무나도 당연하면서도 어처구니 없는 실수를 했던것을 기록하여 스스로 반성하고자 만든 시리즈입니다. 1. 나는 바보다. 클린아키텍처 + MVVM 과 RxSwift를 적용해서 프로젝트 리팩토링중, 서비스 -> 레포지 -> 유스케이스 -> 뷰모델 까지는 데이터가 다 잘 전달 되는데.. 뷰컨에서 구독을 해도 바인딩을 해도 정보가 나타나지 않는것이었다... 2시간동안 잡고 있었는데.. 하... 2. 다시는 바보가 되지말자. 범인은 베이스 뷰컨트럴로에 viewDidLoad에 binding함수를 넣지 않은 것 이었다. class BaseViewController: UIViewController { var disposebag = DisposeBag() func l..

iOS/RxSwift

[RxSwift] RxCocoa (binding, Traits, Driver..등)

RxCocoa RxCocoa란 기존 Cocoa Framework에 Rx기능을 합친 RxSwift기반의 라이브러리 RxSwift와 별도로 추가해주어야 사용할 수 있다 RxCocoa는 단방향성을 갖고 있다 Producer는 값을 생성하고, Consumer는 값을 처리 한다. ObserverType, ObservableType observableType : 값을 관찰할수 있습니다. observerType : 값을 주입시킵니다. Binding 데이터 생산자와 소비자가 존재( 생산자 = Observer, 소비자 = UI Component) 생산자가 생성한 데이터를 소비자에게 전달하고 소비자가 데이터를 소비한다 Binder 소비자 역할 observerType Observable이 아니기 때문에 구독자 추가 X Er..

iOS/RxSwift

[RxSwift] Erro 처리 catch, retry 연산자

OnError 로 처리하면 되지 않낭? Error 이벤트는 Observable 을 종료시키게 된다. 그래서 종료시키지 않고 다음과 같이 이벤트를 발생키시고 completed 가 발생되도록 error handling 을 하고자 하는 것이당! RxSwift 에서는 보통 세가지 방법으로 Error Handling 을 할 수 있다. catch : 특정 값으로 Error 복구 retry : 재시도 하기 materialize / dematerialize : Sequence 를 제어해서 처리 Catch Catch연산자는 Next와 Completed 연산자는 그대로 방출한다. API 요청 코드에서 Catch가 많이 사용된다. Error이벤트가 전달되면 새로운 Observable을 전달한다. 네트워크 에러가 있을 경우,..

iOS/RxSwift

[RxSwift] Create Operators [2]

repeatElement 동일한 요소를 반복적으로 방출하는 옵저버를 생성 while과 비슷, 고로 방출되는 요소의 갯수 꼭 제한해야함 -> 아니면 무한으로 쭈욱 방출 take연산을 이용해 갯수 제한 Observable.repeatElement(element) .take(7) .subscribe { print($0) } .disposed( by: disposebag) deferred 특정 조건에 따라 옵저버블을 생성할 수 있다. if문 사용가능 즉시 옵저버블을 생성하는 create와 달리 구독을 해줘야 옵저버블이 생기기 때문에, 당장은 필요하지 않지만 필요한 상황에 구독하여 생성할 수 있다 네트워크 API에서 결과를 받아와 just처럼 옵저버블을 바로 만들어 주는 경우도 있지만, deferred를 통해 구..

iOS/RxSwift

[RxSwift] Create Operators [1]

just, of, from just : 하나의 항목을 방출하는 Observable을 생성 ObservableTypeProtocol에 타입메서드로 선언되어있다. 파라미터로 하나의 요소를 받고 Observable로 리턴 파라미터로 전달된 요소를 그대로 방출! let element = "jife" Observable.just(element) .subcribe { event in print(event) } .disposed( by: disposebag) //next(jife) //completed //출력값 Observable.just([1,2,3]) .subcribe { event in print(event) } .disposed( by: disposebag) //next([1,2,3]) //completed..

최지철
JIFE ARCHIVE