본문 바로가기

분류 전체보기

(51)
[RxSwift] Operators (1) RxSwift에서는 새로운 Observable을 생성한다거나, 방출되는 요소를 필터링, 혹은 여러 Observable을 하나로 합친다거나 하는 다양한 메소드들이 있다. 그리고 이런것들을 연산자(Operator)라고 부른다. (연산자는 새로운 Observable을 return한다.) 연산자는 보통 subscribe 앞에 추가한다. 즉 구독자(observer)에게 전달되기 전까지 전달 되어야 할 데이터를 원하는 만큼 가공한 후에 전달되게끔 의도할 수 있다. Create Operators just 먼저 just 연산자에 대해서 알아보겠다. just 연산자는 하나의 항목을 방출하는 Observable을 생성한다. (파라미터로 하나의 요소를 받아서 Observable을 return) let element = "S..
[RxSwift] Subject & Relay 지난 포스팅에서 Observable은 이벤트를 observer에게 전달하고, observer는 Observable을 구독하여 전달되는 이벤트를 처리한다고 했다. Observable은 observer와 달리 다른 Observable을 구독하지 못하며(observer만이 구독 가능) observer는 다른 observer로 이벤트를 전달하지 못한다.(Observable만이 이벤트 전달 가능) 여기서 Observable과 observer의 역할을 동시에 수행할수 있는 Subject라는 것이 나왔다. Subject는 다른 Observable로부터 이벤트를 받을수도 있으며 Subject를 구독하고 있는 구독자에게 이벤트를 전달할수도 있다. 그러니 Subject는 Observable인 동시에 observer인 샘이..
[RxSwift] Observables & Observer 이번에 이직을 준비하면서 한동안 블로그 관리를 하지 못했다. 그리고 그 과정에서 과제를 받아 미니프로젝트를 진행하게 되었고 RxSwift를 프로젝트에 도입해볼 기회가 생겼었다. RxSwift를 사용하기 전에는 주로 비동기적으로 발생하는 결괏값을(Networking 작업, 시간이 오래걸리는 작업 등등) 사용하기 위해 complition block을 통한 비동기 처리 사용으로 작업을 해왔더라면 RxSwift에서는 Observable이라는 클래스로 감싸진채로 값을 바로 return 받아 비동기 처리를 동기 처리한것 마냥 사용을 할 수 있다는걸 알게 되었다. RxSwfit를 사용하지 않고 callback 함수의 구현으로 비동기 처리를 진행 한다고 가정했을때 상황에 따라 계속적인 callback이 발생할수도 있어..
[ISSUE] LaunchScreen 대체 LaunchScreen이 보여지고 난 후에 rootViewController인 TabBar에서 GoogleAdMob을 사용하여 전면 광고를 띄우는 프로세스가 있었다. 광고를 present 하기 전에 먼저 Google에서 부여 받은 UnitID를 사용하여 광고 load를 먼저 했었는데 가끔 가다 load하는 시간이 길어지는 상황이 발행해서 한참 있다가 전면광고가 present 되버리는 issue가 발생했다. 광고 load 시점은 앱이 실행되자 마자 appDelegate의 didFinishLaunchingWithOptions 메소드 내부에서 하단 코드와 같이 맨 처음 load가 진행 되게끔 작성해놨었다. func application(_ application: UIApplication, didFinishLa..
[Swift_Library] ProgressHUD 이번 포스팅에서는 커스터마이징 되어진 ActivityIndicator를 보다 손쉽게 사용할 수 있는 ProgressHUD 오픈 아리브러리 사용법에 대해서 간단히 알아보겠다. 해당 라이브러리의 README를 보며 진행할것이며 Github 주소는 아래와 같다. relatedcode/ProgressHUD ProgressHUD is a lightweight and easy-to-use HUD for iOS. - relatedcode/ProgressHUD github.com 일단 라이브러리를 CocoaPod을 통해 install 하겠다. pod 'ProgressHUD' 그리고 cell을 터치했을때 ActivityIndicator가 실행 되게끔 TableView를 하나 만들겠다. QUICK START quick s..
[ISSUE] 저전력 모드 화면 꺼짐 방지 현재 프로젝트에서 3분에서 5분 사이의 Audio 파일이 재생되는 ViewController가 있었다. 그리고 그 VC는 Audio의 재생이 끝날때까지 특정 animation을 동작하는 프로세스를 가지고 있어 무엇보다 시청각이 주 컨텐츠인 VC였다. 하지만 사용자가 디바이스의 설정에서 저전력 모드를 활성화 했을때 일정 시간이 지나면 앱의 화면이 잠겨 버리는 issue가 발생했다. 해당 VC만큼은 저전력 모드 활성화로 인한 화면 자동 잠금이 이루어지지 않아야 한다는 요청이 있었다. 그리하여 idleTimerDisabled이라는 Bool 타입의 속성을 컨트롤하여 issue를 해결했고 그 과정을 포스팅하겠다. 일단 Apple 공식 문서의 설명을 참고하자면 idleTimerDisabled이라는 속성의 기본값은 ..
[Swift_Grammar] Initialization 초기화란 새로운 인스턴스를 사용할 준비를 하기 위해 저장 프로퍼티의 초깃값을 설정하는 등의 일을 말한다. 초기화(Initializer)는 init 키워드를 사용하여 정의하며 하단 예제 코드와 같은 모양을 가지고 있다. init class SomeClass { init() { ... } } struct SomeStruct { init() { ... } } enum SomeEnum { case someCase init() { self = .someCase } } 구조체와 클래스의 인스턴스는 처음 생성할 때 Optional한 프로퍼티를 제외한 모든 저장 프로퍼티에 초깃값을 지정해주어야 한다. 만약 값을 꼭 가지고 있지 않아도 되는 속성이 있다면 Optional 처리를 해줘서 기본값을 nil로 설정해 줄 수 있..
[ISSUE] AVFoundation ( 3 ) - AVAudioEngine 이번에는 audio의 rate와 pitch를 control 하기 위해 AVAudioEngine을 사용하여 Player를 구현하는 과정에서 생긴 issue에 대해서 포스팅하겠다. AVFoundation의 강력한 클래스 중 하나인 AVAudioEngine은 한 개체의 출력이 다른 개체의 입력이 되도록 오디오 처리 개체를 체인으로 연결하는 것이다. 시작 부분에 오디오를 공급하고 중간에 처리를 적용한 다음 오디오를 출력으로 재생하여 많은 노력없이 실시간으로 오디오 조작을 수행 할 수 있다. 하지만 'local에 위치한 audio파일' 이라는 제한이 있었다. 어쩔수 없이 해당 URL에 있는 audio 파일을 stream이 아닌 디바이스에 다운로드 받는 프로세스로 변경을 하였다. ( 앱에서 제공하는 노래의 개수는 ..
[ISSUE] AVFoundation ( 2 ) - AVAudioPlayer AVPlayer 포멧 관련 issue를 다뤘던 저번 포스팅에 이어서 이번에는 AVAudioPlayer로 진행하며 겪은 issue에 대해 얘기하겠다. 일단 AVAudioPlayer는 AVPlayer와는 다르게 로컬에 저장된 오디오 파일의 재생 기능만을 제공한다. 또한 addPeriodicTimeObserver와 같이 주기적으로 호출되어 현재 재생시간에 따라 인터페이스를 변경하고 싶을때 주로 사용하는 메소드가 따로 구비되어있지 않았다. Apple 공식문서와 많은 블로그에서 AVAudioPlayer는 Stream이 불가능하다고 말한다. 하지만 왜 나는 stream이 가능한걸까..... ( 뭔가 잘못이해하고 있는거 같은데 이거에 대해 아시는 분은 댓글 달아주시면 감사하겠습니다!!) AVAudioPlayer의 i..
[IOS] AVPlayer AVFoundation Framework를 기반으로 MP3파일을 재생하는 과정에 대해 포스팅하겠다. 이번 편은 AVPlayer에 대해 다룰것이며 그 전에 AVFoundation에 대해 먼저 알아보겠다. AVFounation Apple의 미디어 Framework인 AVFoundation은 지금 설명하려는 audio playback 기능 말고도 많은 미디어 처리 작업을 제공한다.( video, 카메라, 편집 등등) 또한 이 Framework를 사용하여 HTTP Live Streaming을 통해 실시간으로 mp3파일을 재생하고 제어할 수 있다. 하지만 AVFoundation은 하단 이미지와 같이 UIKit Framework보다 Low한 level에 위치해 있어 재생에 관련된 UI를 제공해줄 수 없다. 그리하여..