IOS (19) 썸네일형 리스트형 [IOS] UI Test 오늘은 저번 포스팅에 이어서 UI Test를 진행하는 방법에 대해 알아 보겠다. 먼저 Project의 General 탭 하단에 + 버튼을 눌러 UI Testing Bundle을 생성해 주면 된다. 이렇게 Test Bundle을 생성하게 되면 test 진행을 위한 swift 파일이 만들어지게 되는데 해당 파일에서 Test 코드를 작성하여 테스트를 진행하면 된다. 그런데 UI Test에서 봤던 testExample 메소드와는 차이점이 있는 걸 확인할 수 있다. app을 launch 시키는 로직이 존재하고 있는데 UI Test를 위해서 app을 실행한다고 이해하면 되겠다. func testExample() throws { // UI tests must launch the application that they.. [IOS] Unit Test 사내에서 Unit Test와 UI Test 고도화를 위해 새로운 TF가 신설되었고 해당 팀의 구성원으로 들어갈 수 있는 기회를 얻었다. 지금까지 테스트 코드를 작성하면서 작업을 진행해오지 않았던 터라 어디서부터 시작을 해야 될지 감이 오지 않고 있는 상태이다. 물론 맛보기로 간단한 테스트 코드 작성과 테스트 진행 플로우를 익혀보고자 경험 삼아 진행해 본 적은 있었지만 오래전의 일이라 기억이 가물가물한 상태이다. 그래서 이번 기회에 처음부터 다시 Unit Test를 배워본다는 느낌으로 감을 살려보고자 글을 작성해 보려 한다. 먼저 Unit Test Bundle을 만드는 방법에 대해 소개하고자 한다. 프로젝트 생성하기 전 시점이라면 프로젝트 생성 시 아래 이미지와 같이 Include Tests를 체크하면 자.. [IOS] Submodule 설정 앱 내의 새로운 피쳐 개발이나 수정 작업이 아닌 프레임워크 작업이라는 좋은 경험을 회사에서 하게되었다. 이번 포스팅에서는 해당 작업을 위한 세팅 작업과 시작하게된 계기를 간단하게 소개하려한다. 어느 환경에서 무엇을 위해 어떤식으로 쓰였는지에 대한 예시를 들자면 A_Project와 B_Project가 존재하고 있으며 각각의 프로젝트는 동일한 비즈니스 로직을 가지고 있는 View를 가지고 있다고 가정하면 될것같다. 그리고 A_Project에서 디자인 수정 요청이 들어왔으며 해당 작업은 B_Project에서도 동일하게 변경될것을 요청한다고 했을때 각 프로젝트에 개별적으로 변경사항 작업을 진행하여 따로따로 반영하는 방법이 있을수 있고 또는 해당 화면을 프레임워크화 하여 변경사항을 한번의 수정 작업으로 두개의 프.. [IOS] Fastlane 최근 개인 프로젝트에 Fastlane을 도입하여 배포하는 과정의 수고를 덜어주는 자동화 시스템을 구현 했다. 해당 툴을 사용하면 일일이 Xcode에서 빌드 넘버 올리고 아카이브하고 기다렸다가 버튼 누루면서 업로드 하는 등 그러한 행위 없이 Fastlane 하나로 단순화 시켜 배포를 진행할 수 있다. 그리하여 Fastlane 툴을 프로젝트에 도입하는 방법에에 대해 소개하겠다. 먼저 Fastlane 세팅 작업을 위한 Xcode 커맨드 라인 툴을 설치 하도록 하겠다. xcode-select --install 그리고 Fastlane을 install 하고 sudo gem install fastlane 아래 명령어를 입력 후 나온 로그중 버전이 현재 최신 버전과 동일한지 확인한다. 필자는 Fastlane 레포에 들.. [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 발생 우려가 첫번째 이유였고 개발을 공부할 당시 맥북이 다소 좋지 않은 사양이어서 로드하는데에 시간이 소요 되었다는 점이 두번째 이유였다. 출근후에 코드로 레이아웃을 구현해도 된다고 전달 받았지만 이미 작성되어있는 부분들의 유지 보수 측면에서도 그렇고 혼자서 코드로 진행을 한다고 해버리면 프로젝트상에서 일관성을 깨버린다고 생각을 했기때문에 빠른 속도로 스토리보드를 이용한 레이아웃 구현을 훑어봤다. 그리고 그 과정에서 코드로 진행 했을때의 느끼지 못했던 앱의 흐름을.. [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를 제공해줄 수 없다. 그리하여.. [IOS] Timer 이번 포스팅에서는 Timer를 사용해서 정해진 interval 간격을 두고 label의 text를 업데이트 해주는 과정을 간단하게 포스팅하려한다. 먼저 업데이트 상황을 눈으로 볼 수 있게 정중앙에 label을 하나 위치시키겠다. 그리고 count라는 변수를 만들어서 값이 바뀌면 label의 text를 변경해주게끔 옵저버 프로퍼티를 사용하겠다. var count = 0 { didSet { label.text = String(count) } } Timer가 작동되어 1초마다 count값을 변경시켜주도록 하면 label의 text의 값이 변경된 값으로 변경되는걸 볼 수 있을것이다. Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] (.. [IOS] UserDefaults 이번 포스팅에서는 UserDefaults를 사용하여 앱이 삭제되기 전까지 기본 자료형 타입의 데이터를 디바이스에 저장시킬수 있는 방법에 대해 알아보겠다. UserDefaults는 사용자 기본 설정 같은 단일 데이터 값을 저장할때 주로 사용하고, 싱글톤 패턴으로 접근할 수 있어 어디서든 접근이 가능하다. 일반적으로 shared라는 타입프로퍼티로 진행하는 편이지만 Apple에서는 미리 standard라는 타입 프로퍼티로 싱글톤 패턴을 진행하게끔 마련해놓았다. SomeClass.shared . . . UserDefaults.standard 데이터를 저장하는 법에 대해 알아보자면 일단 싱글톤 객체로 접근한 다음 set 이라는 메소드를 사용한다. 그리고 첫번째 인자에는 저장을 하고자 하는 데이터의 값을 넣어주고 .. 이전 1 2 다음