목록분류 전체보기 (88)
iOS 개발일지

iOS 앱 개발자 데뷔 과정 8주차 마무리 - Diary App - 다이어리 앱 마무리 진행 - 3개의 탭 (달력, 검색, 설정) 으로 이루어진 탭바 컨트롤러로 앱 구성 검색 화면의 테이블뷰는 달력 화면 하단의 테이블뷰와 셀의 구성이 같기 때문에, 따로 파일을 만들지 않고 그대로 가져와 사용했다. 탭바를 구현하기 위해 우선 탭바 컨트롤러를 만들고, 탭바로 보여줄 뷰컨트롤러를 설정했다. class TabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() configureTabBarController() } func configureTabBarController() { let firstVC = HomeVie..

iOS 앱 개발자 데뷔 과정 39회차 #0. Memo - Realm 관련 코드 분리 (Repository) 프로젝트를 진행하며 Realm에 관련된 코드가 많아졌다. 이 코드를 전부 메인 뷰컨트롤러에서만 관리하기에는 가독성이 안좋고, 사용성도 좋지 않다. 따라서 Repository 형식으로 코드를 분리하고 관리하는 것이 좋다. extension을 이용한 방법과, class를 이용해 인스턴스로 접근하는 방법 등 여러 방법이 있다. protocol을 활용하면 코드를 하나하나 읽어보지 않더라도 어떤 기능을 하는 메서드가 있는지 보기 쉽다. - FSCalendar 오픈소스 라이브러리인 FSCalendar를 활용해 달력을 띄우고, 날짜별 이벤트를 관리할 수 있다. collectionView기반이기 때문에 retur..

iOS 앱 개발자 데뷔 과정 38회차 #0. Memo - 파일앱 (UIDocumentPickerViewController) 을 활용한 백업 압축 라이브러리를 활용해 압축 파일을 생성하고, 생성한 파일을 UIActivityController로 전달 백업의 순서는 크게 백업할 파일의 위치 확인 ➡️ 파일 압축 ➡️ 압축한 파일을 저장/UIActivityView 띄우기 의 3단계로 볼 수 있다. do-catch 를 통해 간단하게 얼럿만 보여주도록 작성했지만, 여러 에러 상황에 대응할 수 있도록 코드를 작성하는 것이 중요하다. 여기까지 구현하고 백업 버튼을 누르면, 아래처럼 해당 경로에 설정한 이름으로 zip 파일이 생성된다. - 파일앱 (UIDocumentPickerViewController) 을 활용한 복구..

iOS 앱 개발자 데뷔 과정 37회차 #0. Memo - App Sandbox 미국에서 어린 아이의 안전을 위해 모래통 (sandbox) 에서만 놀도록 하는데서 유래한 보안 모델이다. iOS는 앱 하나당 전부 Sandbox화 되어있어, 다른 앱에 대한 접근이 불가능하다. - Bundle Container 앱의 번들로 파일, info.pilist, Resource 등을 그룹화 Compile Source(.swift) 가 바이너리 형태의 실행 파일로 변환 - Data container ( = AppData 폴더) Documents 개발자가 접근 가능한 디렉토리는 Documant, Library, tmp, System Data 이므로 Document의 서브디렉토리를 통해 관리 사용자가 앱을 통해 생성한 문서,..

iOS 앱 개발자 데뷔 과정 36회차 #0. Memo - Property Observer 를 활용한 reloadData #1. Checklist - Realm Update SwipeActionsConfigurationForRowAt 메서드를 통해 Realm 데이터를 업데이트 할 수 있다. - Realm Filter, Sort Filter : https://www.mongodb.com/docs/realm/sdk/swift/crud/filter-data/#operators-1 참고 Sort : https://www.mongodb.com/docs/realm/sdk/swift/crud/read/#sort-query-results 참고 필터는 위처럼 활용할 수 있는데, 검색하고자 하는 String 값은 작은 따옴..

iOS 앱 개발자 데뷔 과정 35회차 #0. Memo - Realm Table 설계 1. Schema 설정 [MongoDB Documentation] 참고 테이블과 컬럼의 구조를 설계하고, 저장될 데이터의 타입과 옵셔널 여부에 대한 특성을 각 컬럼에 부여한다. 컬럼 중 하나를 Primary Key로 설정하며 보통 ID에 대한 컬럼을 별도로 지정한다. 2번 사진 참고 2. Schema에 맞게 Realm Model 설계 3. Primary Key 설정 별도 (String, Int) 로 설정하거나, UUID / Object를 사용할 수 있다. 2번 사진 참고 - Realm Create 1. import RealmSwift No Such Module 에러가 발생할 경우, 빌드하면 해결된다. 2. Realm 파일..

iOS 앱 개발자 데뷔 과정 7주차 마무리 #2. Assignment - Netflix Code Base로 연습하기 - BaseViewController, BaseView, CostomView 등을 활용해서 코드 베이스로 UI 구성 - Code Base tapGestureRecognizer 구현 BaseViewController에서 구현하고 호출하면 상속받은 클래스들은 별도의 작업 없이 제스쳐를 사용할 수 있다. 여기서 tapGestureRecognizer.cancelsTouchesInView = false 가 중요하다!! 기본값은 true인데, false로 바꿔주지 않을 경우 didSelectItemAt과 같은 터치가 작동하지 않는다. - 재생버튼을 누를 경우, 얼럿을 통해 LoginViewContro..

iOS 앱 개발자 데뷔 과정 34회차 #1. Checklist - BaseViewController 뷰컨트롤러에서 공통적으로 작성되는 코드를 구조화함으로써 가독성을 높이고 코드 중복도 줄일 수 있다. 사용할 때는 UIViewController 대신 만들어놓은 BaseViewController를 상속시킨다. - CustomView 뷰컨트롤러의 루트뷰를 커스텀뷰로 교체하여, 루트뷰 위에서 동작하는 UILabel, UIButton과 같은 뷰들의 레이아웃을 UIView에서 책임지게 하는 설정 방법이다. view의 기본값은 nil로 설정되어 있고, nil인 경우에는 뷰컨트롤러가 내부적으로 loadView를 호출해 view를 반환한다. - loadView 만들어놓은 커스텀뷰를 사용하기 위해서는 뷰를 교체하는 작업이..