프로젝트 22

025 ~ 027. Dark mode, iPad support and Mac catalyst (다크모드, 아이패드 지원 그리고 맥 카탈리스트)

Dark mode 좌측 하단의 Environment Overrides의 Appearance를 통해 시뮬레이터의 다크모드와 라이트모드를 전환할 수 있다. 사진에서와 같이 현재는 다크모드로 전환해도 인터페이스상의 큰 문제는 없다. 이는 앱을 제작 할 때 대부분 기본 컬러들을 사용했기 때문인데, 이 경우 darkmode에 자동으로 대응한다. 단, 셀에서 날짜를 표시하는 레이블들이 기본 색상이 아닌 Custom Color를 사용했는데, 기존에 설정했던 LightGray가 아닌 DarkGrey로 설정하는 경우 다크모드에서 시인성이 매우 안 좋은 것을 확인 할 수 있다. 이렇게 CutomColor를 사용 할 때는 다크모드에 자동으로 대응하지 못하기 때문에 두 가지의 경우를 모두 생각해 적용 할 필요가 있다. 물론,..

022 ~ 024. Memo delete, share and Keyboard Notification (메모 삭제, 공유 그리고 Keyboard Notification)

Memo delete (메모 삭제) storyboard 뷰어의 툴바에 버튼을 추가한다. Bar Button은 위와 같이 설정하면, 모양은 쓰레기통으로, 색은 붉은 색으로 바뀐다. Flexible Space Bar Button Item은 위와 같이 버튼과 버튼 사이의 공백을 유동적으로 바꿔준다. 이후 새로 추가한 버튼을 뷰어의 컨트롤러 파일과 Action으로 연결한다. 해당 버튼을 누르면 동작할 시나리오는 삭제 확인 팝업 표시. 확인 버튼과 취소 버튼 표시. 확인 버튼 클릭 시 해당 메모 삭제. 취소 버튼 클릭 시 팝업 닫기. 의 구성이다. 따라서 이전 강의들에서 사용했던 팝업 생성 코드를 그대로 사용한다. // // ViewerViewController.swift // test // // Created ..

018 ~ 021. DB, Memo Editing (데이터베이스, 메모 수정)

DB (데이터베이스) DB 작성 iOS 앱의 DB는 CoreData를 사용해서 만들어 진다. CoreData는 프로젝트 생성 시에 이미 활성화 해 둔 상태이고, 기본적인 내용 또한 자동으로 추가 된다. 바로 앱 이름의 '.xdatamodeld' 파일이 DB이자 CoreData 파일이다. 해당 파일은 데이터 저장 방식의 설계도 역할을 한다. 좌측 하단의 'Add Entity' 버튼을 툴러 Entity를 생성하고, 컨텐츠와 날짜를 저장 할 Attribute를 각각 생성한다. 최종적으로는 위와 같은 모습이 되어야 하며, Entity의 Attribute Inspector의 'Codegen'이 Class Definition으로 되어 있어야 한다. 이 상태로 빌드를 시도하면 에러가 발생하는데, 임시로 생성해 뒀던 ..

014 ~ 017. Memo Viewer and Data Connection (메모 뷰어, 데이터 연결)

메모 뷰어 위와 같이 새로운 화면이 우측에서 좌측으로 표시되는 걸 Push라고 한다. 또한, 뒤로 가기를 선택했을 때 기존의 화면이 좌측에서 우측으로 사라지고 이전의 화면을 보여주는 것을 Pop이라고 한다. 메모를 선택하면 메모 뷰어를 push 하고, 하단에 toolbar를 추가해 편집과 공유가 가능하도록 한다. 메인 스토리보드에서 라이브러리로 진입해 View Controller를 추가해 새 Scene(씬)을 생성한다. 해당 씬은 메모 뷰어로, 특정 메모를 선택하면 해당 씬으로 전환이 되어야 한다. 따라서 메인 화면의 Cell(셀)과 새 씬은 연결한다. 이후 표시되는 팝업에서 Show를 선택하면 자동으로 Navigation Bar와 뒤로 가기 버튼이 추가된 것을 확인할 수 있다. 이제는 해당 셀에 추가적..

009 ~ 013. Date Format, Write Memo, Cancel, Save (날짜 포맷, 메모 작성, 취소, 저장)

Date Format (날짜 포맷) 기존의 TableView에서 표시하던 날짜의 형식은 솔직히 말하면 사용자에게 제공할 만한 정보가 아니다. 불필요한 정보가 포함되어 있고, 시인성이 떨어진다. 따라서 해당 부분을 조금 더 친절하게 바꿀 필요가 있다. class Memo { var content: String var date: Date init(content: String) { self.content date = Date() } static var dummyMemoList = [ Memo(content: "What I daid to you remains like a will.") } override func tableView(_ tableView: UITableView, cellForRowAt indexP..

005 ~ 008. Main Layout, Memo Class, Memo List

Main Layout Main.storyboard에는 기본적으로 한 개의 Scene(씬)이 추가되어 있다. 그리고 이 씬은 ViewController 클래스와 연결되어 있다. 그냥 사용해도 괜찮지만 강의에선 해당 씬과 뷰 컨트롤러를 삭제한 상태로 개발을 시작한다. 따라서 해당 씬을 Delete로 삭제하고, 기존의 ViewController.swift 파일도 삭제하고 시작한다. 삭제 후엔 라이브러리를 통해 Navigation Controller를 선택한다. 라이브러리는 'Shift + Cmd + L'로 접근할 수 있다. 이후 엔 두개의 화면이 표시되는데, 좌측은 화면 이동을 담당하는 객체이고, 우측이 실제 화면이 출력되는 Scene이다. 따라서 목록을 표시할 수 있는 Table View Controller..

001 ~ 004. Project Creation & Settings, App Icon & Launch Screen (프로젝트 생성과 설정, 앱 아이콘과 런치 스크린)

Project Creation (프로젝트 생성) Xcode의 Welcome 화면에서 새 Xcode 프로젝트를 선택한다. 보이지 않는다면 OS X의 상단바에서 Window를 선택후 'Welcome to Xcode'를 선택해 준다. 단축키가 존재하니 외우고 싶다면 외워도 좋다. 해당 화면 없이 OS X의 상단바에서 File>New를 선택 후 'Project'를 선택해도 새 프로젝트를 만들 수 있다. 마찬가지로 단축키가 존재하니 외우고 싶다면 외워도 좋다. 강의는 Xcode 11에서 진행되어 화면 구성이 약간 다르다. Xcode 12 이상에선 template 선택 시 iOS의 App을 선택해 주면 된다. ProductName 단순명사(ex. memo, note, apple 등)를 사용하지 않는다. 접두어나 접..