본문 바로가기

스위프트

(24)
[IOS] Submodule 설정 앱 내의 새로운 피쳐 개발이나 수정 작업이 아닌 프레임워크 작업이라는 좋은 경험을 회사에서 하게되었다. 이번 포스팅에서는 해당 작업을 위한 세팅 작업과 시작하게된 계기를 간단하게 소개하려한다. 어느 환경에서 무엇을 위해 어떤식으로 쓰였는지에 대한 예시를 들자면 A_Project와 B_Project가 존재하고 있으며 각각의 프로젝트는 동일한 비즈니스 로직을 가지고 있는 View를 가지고 있다고 가정하면 될것같다. 그리고 A_Project에서 디자인 수정 요청이 들어왔으며 해당 작업은 B_Project에서도 동일하게 변경될것을 요청한다고 했을때 각 프로젝트에 개별적으로 변경사항 작업을 진행하여 따로따로 반영하는 방법이 있을수 있고 또는 해당 화면을 프레임워크화 하여 변경사항을 한번의 수정 작업으로 두개의 프..
[IOS] TableView (with xib) 이번 포스팅은 xib 파일을 사용한 tableView 구현에 대해 알아보겠다. AppDelegate 혹은 SceneDelegate에서의 rooViewController 설정은 앞 포스팅에서 확인 할 수 있다. [IOS] TableView (with Storyboard) 전 포스팅에 이어서 스토리보드를 사용해 tableView를 구현하는 법을 알아보겠다. AppDelegate 스토리보드 base & Scene을 사용하지 않을때는 plist 파일에서 기본적으로 세팅되어 있는 Appliation Scene Manif devddong.tistory.com [IOS] TableView (with Code) 이번에 입사 하게 될 새로운 직장의 앱 레이아웃 구현이 스토리보드와 xib파일들로 구성되어 있다고 전달받았다..
[IOS] TableView (with Storyboard) 전 포스팅에 이어서 스토리보드를 사용해 tableView를 구현하는 법을 알아보겠다. AppDelegate 스토리보드 base & Scene을 사용하지 않을때는 plist 파일에서 기본적으로 세팅되어 있는 Appliation Scene Manifest 정보를 삭제하여 Scene Configuration 설정들을 삭제해준다. 그리고 SceneDelegate 파일을 삭제하고 SceneDelegate가 생기면서 AppDelegate에 새로 생긴 메소드 2가지(새로운 scene이 생성되거나 삭제될때 호출되는 메소드)를 삭제 해준다. 후에 AppDelegate에서 window를 선언만 해주고 빌드를 해보면 잘 나오는걸 볼 수 있을 것이다. var window: UIWindow? 혹시나 나오지 않는다면 스토리보드에..
[IOS] TableView (with Code) 이번에 입사 하게 될 새로운 직장의 앱 레이아웃 구현이 스토리보드와 xib파일들로 구성되어 있다고 전달받았다. 하지만 필자는 Snapkit이라는 오픈소스를 사용하여 코드로 진행하는 걸 추구하고 있었다. 추후에 협업시 예상치 못한 conflict 발생 우려가 첫번째 이유였고 개발을 공부할 당시 맥북이 다소 좋지 않은 사양이어서 로드하는데에 시간이 소요 되었다는 점이 두번째 이유였다. 출근후에 코드로 레이아웃을 구현해도 된다고 전달 받았지만 이미 작성되어있는 부분들의 유지 보수 측면에서도 그렇고 혼자서 코드로 진행을 한다고 해버리면 프로젝트상에서 일관성을 깨버린다고 생각을 했기때문에 빠른 속도로 스토리보드를 이용한 레이아웃 구현을 훑어봤다. 그리고 그 과정에서 코드로 진행 했을때의 느끼지 못했던 앱의 흐름을..
[RxSwift] Operators (2) Transforming Operators toArray Observable이 방출하는 모든 요소를 배열에 담은 다음 Completed 시점에 이 배열을 방출(하나의 요소를 방출)하고자 할때 toArray 연산자를 사용한다. 소스 Observable이 종료되기 전까지 구독자에게 이벤트가 전달되지 않는다. let subject = PublishSubject() subject .toArray() .subscribe { print($0) } .disposed(by: disposeBag) subject.onNext(1) // 구독자로 전달되지 않음 subject.onNext(2) // 구독자로 전달되지 않음 subject.onCompleted() // Observable이 종료되어 구독자애게 하나의 배열을 전달하..
[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인 샘이..
[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이라는 속성의 기본값은 ..