2023년 가을부터 Apple 필수 API를 사용하는 앱을 App Store Connect에 업로드할 때 이메일을 받게 된다. 해당 API 사용 이유를 앱의 PrivacyInfo 파일에 설명하지 않으면, 2024년 5월부터 앱이 통과 되지 않는다. 앱 또는 제3자 SDK가 사용하는 Apple 필수 API의 각 카테고리에 대해, 앱 또는 제3자 SDK의 PrivacyInfo 파일에 있는 NSPrivacyAccessedAPITypes 배열에 추가해야 한다. 해당 내용의 메일을 받은 사람들이 많은 것 같다. 나 또한 처음 메일을 받고 어? 싶었지만, 별거 아니였다. ㅎ.ㅎ cmd + n 파일추가 눌러서 privacy를 검색하면 바로 나올것입니다. 프로젝트 파일에서 PrivacyInfo.xcprivacy를 생성..
AzureDevOps CI환경에서의 Fastlane실행 구축 들어가기 앞서 전체적인 흐름을 설명해드리겠습니다! 크게 보면 Auzre DevOps CI환경에서 Fastlane 실행 -> Fastlane이 빌드 후, 배포 하는 방식으로 진행됩니다. AzureDevOps Pipeline 실행 Pipeline 1단계 : 원격 Git 리포지토리에서 특정 커밋으로 코드를 가져와(checkout) 로컬 리포지토리를 업데이트하는 작업. 이 단계에서는 자동화된 빌드 및 테스트 작업을 시작하기 전의 초기 과정입니다 Pipeline 2단계 : CI환경에서의 Xcode 버전 선택, 로컬에서 돌아가는 버전과 CI환경에서 돌아가는 버전을 통일 시켜야합니다. 통일 되지 않을 경우, Swift버전 문제 혹은 라이브러리 간의 버전 이..
왜? CI / CD 를 도입할려고 했어요? 기존 앱 배포하는게 너무 귀찮은 과정이 많아서... 주위에서 CI/CD에 대한 말을 많이 들어서... 그리고.. 멋있어 보여서 ㅎ.ㅎ 기존 프로세스는 얼마나 귀찮은 과정을 거친걸까? ⏳ 기존 배포(심사 요청) 과정 버전과 빌드버전을 올린다. 3인 이상의 개발자가 동시에 개발할 경우, 1년에 한번씩 프로파일과 인증서를 - 발급받고 공유한다. 테스트 코드 실행 (테스트 코드가 사실상 없지만 ㅎ.ㅎ 이제부터 도입하고 열심히 하려고 합니다) Analyze를 실행 -> 기다림 -> 완료 Archive 실행 -> 기다림 -> 완료 앱스토어 커넥트 들어가서 릴리즈 정보 등 입력하고 심사 요청 심사 통과하면 스토어 출시 💻 fastlane 설치하기 brew install fa..
CI/CD - 지속적인 통합 / 지속적인 배포 지속적 통합 과 배포 지속적 통합(CI)은 코드 변경 사항을 공유 소스 코드 리포지토리에 자동으로 자주 통합하는 사례를 나타낸다 지속적 배포 (CD)는 코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스로, 두 가지 부분으로 구성되며, 지속적 제공에는 자동 프로덕션 배포 기능이 없는 반면, 지속적 배포는 업데이트를 프로덕션 환경에 자동으로 릴리스를 진행한다. CI/CD를 그러면 사람들이 왜 쓰는걸까? 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 된다. How? 어떻게 도움이 되는 걸까 릴리스 속도를 단축하여 더 신속하게 제공 지속적인 피드백 검토시간 단축 더 빠른 버그 수정 위의 장점들제..
Generics 타입에 의존하지 않는 범용코드를 작성할 때, 사용 제네릭을 사용하면, 중복을 피하고 코드를 유연하게 작성할 수 있다. Swift의 강력한 특징 중 하나이고 Swift 표준 라이브러리 대부분은 제너릭 코드로 되어 있다 예를 들어 Swift의 Array 와 Dictionary 타입은 둘다 제너릭 콜렉션 Int 값을 가진 배열, 또는 String 값을 가진 배열 또는 실제로 Swift에서 생성될 수 있는 다른 모든 타입에 대한 배열을 생성 가능 모든 지정된 타입의 값을 저장하기 위한 딕져너리를 생성할 수 있고 해당 타입에 대한 제한은 없다. Generic Function 제너릭이 해결하는 문제 아래와 같이 일반적으로 a 와 b 가 같은 타입이 아니면 바꾸는 것은 불가능하다. Swift는 타입 ..
0.들어가기 앞서 나는 바보다 시리즈는 제가 개발과정중 너무나도 당연하면서도 어처구니 없는 실수를 했던것을 기록하여 스스로 반성하고자 만든 시리즈입니다. 1. 나는 바보다. 클린아키텍처 + MVVM 과 RxSwift를 적용해서 프로젝트 리팩토링중, 서비스 -> 레포지 -> 유스케이스 -> 뷰모델 까지는 데이터가 다 잘 전달 되는데.. 뷰컨에서 구독을 해도 바인딩을 해도 정보가 나타나지 않는것이었다... 2시간동안 잡고 있었는데.. 하... 2. 다시는 바보가 되지말자. 범인은 베이스 뷰컨트럴로에 viewDidLoad에 binding함수를 넣지 않은 것 이었다. class BaseViewController: UIViewController { var disposebag = DisposeBag() func l..
RxCocoa RxCocoa란 기존 Cocoa Framework에 Rx기능을 합친 RxSwift기반의 라이브러리 RxSwift와 별도로 추가해주어야 사용할 수 있다 RxCocoa는 단방향성을 갖고 있다 Producer는 값을 생성하고, Consumer는 값을 처리 한다. ObserverType, ObservableType observableType : 값을 관찰할수 있습니다. observerType : 값을 주입시킵니다. Binding 데이터 생산자와 소비자가 존재( 생산자 = Observer, 소비자 = UI Component) 생산자가 생성한 데이터를 소비자에게 전달하고 소비자가 데이터를 소비한다 Binder 소비자 역할 observerType Observable이 아니기 때문에 구독자 추가 X Er..
OnError 로 처리하면 되지 않낭? Error 이벤트는 Observable 을 종료시키게 된다. 그래서 종료시키지 않고 다음과 같이 이벤트를 발생키시고 completed 가 발생되도록 error handling 을 하고자 하는 것이당! RxSwift 에서는 보통 세가지 방법으로 Error Handling 을 할 수 있다. catch : 특정 값으로 Error 복구 retry : 재시도 하기 materialize / dematerialize : Sequence 를 제어해서 처리 Catch Catch연산자는 Next와 Completed 연산자는 그대로 방출한다. API 요청 코드에서 Catch가 많이 사용된다. Error이벤트가 전달되면 새로운 Observable을 전달한다. 네트워크 에러가 있을 경우,..
repeatElement 동일한 요소를 반복적으로 방출하는 옵저버를 생성 while과 비슷, 고로 방출되는 요소의 갯수 꼭 제한해야함 -> 아니면 무한으로 쭈욱 방출 take연산을 이용해 갯수 제한 Observable.repeatElement(element) .take(7) .subscribe { print($0) } .disposed( by: disposebag) deferred 특정 조건에 따라 옵저버블을 생성할 수 있다. if문 사용가능 즉시 옵저버블을 생성하는 create와 달리 구독을 해줘야 옵저버블이 생기기 때문에, 당장은 필요하지 않지만 필요한 상황에 구독하여 생성할 수 있다 네트워크 API에서 결과를 받아와 just처럼 옵저버블을 바로 만들어 주는 경우도 있지만, deferred를 통해 구..
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..