본문 바로가기

전체 글640

App Architecture - Settings 몇몇 앱은 환경 설정 선택을 할 수 있는 방법을 제공해줘야 하지만, 대부분의 앱은 이를 피하거나 미룰 수 있다. 성공적인 앱들은 경험을 조정할 수 있는 몇몇 방법을 제공하면서, 대부분의 사용자에 잘 맞게 바로 작동할 수 있습니다. 당신이 시스템에서 어떤걸 얻을 수 있을지 추측해보자. 만약 사용자나 기기, 혹은 환경에 대한 정보가 필요하다면, 사용자에게 묻는 대신 시스템에서 찾아봐라. 예를 들어, 현재 위치를 표시하기 위해 사용자에게 우편번호를 입력하라고 요구하는 대신 현재 위치 정보를 사용하도록 허가를 요구해라. 앱 내에서의 환경 설정 옵션을 우선적으로 처리해라. 앱의 메인 화면은 꼭 필요하거나 자주 바뀌는 옵션을 표시하기 좋은 장소이다. 2차적인 화면엔 종종 바뀌는 옵션을 표시하는 것이 좋다. '설정'.. 2022. 3. 31.
App Architecture - Accessing User Data 사용자 개인 정보가 가장 중요하다. 사람들이 앱을 신뢰할 수 있도록 하려면 필요한 개인정보 보호 관련 데이터와 리소스, 사용 방법을 투명하게 공개하는 것이 중요하다. 다음과 같은 데이터들은 액세스 권한 요청이 필요하다. 위치, 건강, 재정, 연락처 및 기타 개인 식별 정보를 포함한 개인 데이터 이메일, 메시지, 캘린더 데이터, 연락처, 게임 플레이 정보, Apple Music 활동, HomeKit 데이터, 오디오, 비디오 및 사진 콘텐츠와 같은 사용자 생성 콘텐츠 Bluetooth 주변 장치, 홈 자동화 기능, Wi-Fi 연결 및 로컬 네트워크와 같은 보호된 리소스 카메라 및 마이크와 같은 장치 기능 iOS 14.5 및 iPadOS 14.5부터 사용자를 추적하거나 기기의 광고 식별자에 액세스 하려면 Ap.. 2022. 3. 31.
App Architecture - Navigation 사용자들은 앱의 네비게이션이 기대에 부응만 잘 한다면, 그 존재에 대해 잘 눈치채지 못한다. 당신은 네비게이션 바가 그 자체로 주의를 끌지 않으면서, 앱의 목적과 구조를 잘 지지하도록 해야한다. 자연스럽고 친숙하게 느껴져야 하되 화면에 가장 중요한 특징이 되거나, 내용으로부터 시선을 뺏도록 하지 말아야 한다. iOS에는 다음의 세가지 주된 스타일의 네비게이션이 있다. 위계 질서형 네비게이션(Hierarchical Navigation) 목적지 (화면)에 도달하기 위해 단 하나의 선택지를 만든다. 다른 목적지로 가기 위해선, 이전 단계를 되짚어 가야하거나 처음부터 다시 시작해 다른 선택을 해야만 한다. 설정(Settings)이나 메일에서 이 스타일의 네비게이션을 사용한다. 플랫(평면) 네비게이션(Flat N.. 2022. 3. 31.
App architecture - Modality Modality은 디자인 기술로, 사용자가 현재 접하는 내용(화면) 분리돈 모드에서 내용을 보여주며 이를 나가기 위해 확실한 동작을 요구한다. 내용을 Modality로 보여주면 다음과 같은 효과를 얻을 수 있다. 1. 사람들이 독립적인 작업이나 밀접하게 관련된 옵션들에 집중할 수 있게 해준다. 2. 사용자에게 매우 중요한 정보를 확실히 주고, 필요한 경우 바로 동작하도록 할 수 있게 한다. iOS는 앱 내 특정 상황에 사용할 수 있도록 alerts, activity views(share sheets) 와 action sheets를 제공한다. 앱에서 사용자 지정 모달 콘텐츠를 표시하려면 다음 Presentation 스타일 중 하나를 사용할 수 있다. 1. Automatic : 기본적인 프레젠테이션 스타일을.. 2022. 3. 30.
구조체와 클래스의 기본 개념 (꼼꼼한 재은 씨의 Swift : 문법편) [용어 정리] 1. 프로퍼티: 구조체나 클래스 내부에서 정의된 변수나 상수 2. 메소드: 구조체나 클래스 내부에서 정의된 함수 3. 멤버: 프로퍼티, 메소드를 합해서 칭하는 용어 [구조체와 클래스의 공통점] 1. 프로퍼티: 변수나 상수를 사용하여 값을 저장하는 프로퍼티를 정의할 수 있다. 2. 메소드: 함수를 사용하여 기능을 제공하는 메소드를 정의할 수 있다. 3. 서브스크립트: 속성 값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있다. 4. 초기화 블럭: 객체를 원하는 초기 상태로 설정해주는 초기화 블럭을 정의할 수 있다. 5. 확장: 객체에 함수적 기능을 추가하는 확장 구문을 사용할 수 있다. 6. 프로토콜: 특정 형싱의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있다. [클래.. 2022. 3. 29.
App architecture - Loading 콘텐츠가 로딩되고 있을 때, 빈 화면 혹은 정지 화면을 보여준다면 앱이 멈춘것 처럼 보일 수 있으며, 혼란스럽고 좌절감을 낳을 것이고, 잠재적으로 사용자들이 앱을 떠나버릴 수 있다. 현재 로딩 진행 중임을 확실히 하자. 최소한, 무언가 일어나고 있다는 것을 알리는 움직이는 스피너를 보여주자. 얼마나 기다려야 하는지 판단할 수 있는 확실한 진행 상황을 알려주면 더 좋다. 내용을 최대한 빨리 보여주자. 사용자들이 기대하는 화면을 보여주기 전에, 내용을 로딩하는데 기다리게 하지 말자. 즉시 화면을 보여주고, 내용(콘텐츠)가 아직 사용가능하지 않다는 것을 보여주기 위해 문자 입력창, 그래픽 혹은 애니메이션을 사용하도록하자 . 이 요소들은 내용의 로딩이 완료되면 교체된다. 가능하다면, 애니메이션이 재생되는 동안이.. 2022. 3. 29.
App architecture - Onboarding 온보딩이란? 유저들에게 새로운 인터페이스에 대해서 단계적으로 가르치거나 아주 간단한 인트로를 만들어 사용자가 지속적으로 서비스를 이용할 수 있도록 돕는 장치 또는 전략이다. 온보딩은 새로운 사용자들을 환영하고, 다시 돌아온 사용자들과 재 연결할 수 있게 한다. 빠르고 재밌으며, 교육적인 선택적 온보딩 경험은 사용자가 직접 경험하지 않고도 앱의 전반을 이해하는데 도움을 줍니다. 단순히 환경설정하는게 아닌, 앱을 즐길 수 있는 온보딩 화면을 제공하자. 사용자는 당신의 앱을 더 아는 기회에 감사할 수 있지만, 한편으론 그냥 작동하길 기대할 수도 있다. 세팅이나 동의 세부내역 등을 온보딩 경험에 포함시키지 말자. 빠르게 사용할 수 있도록 하자. 시스템이 시작화면을 앱의 첫 화면으로 바꾼 뒤에는, 사용자가 바로 .. 2022. 3. 29.
App architecture - Launching 앱을 시작하는 순간은 사람들이 앱에 대해 느끼는 방식에 상당한 영향을 미칩니다. 사람들이 사용하는 기기나 앱을 마지막으로 연 이후 시간에 관계없이 앱을 시작하는 경험은 빠르고 원활해야 합니다. 아래 지침은 즐거운 출시 경험을 디자인하는 데 도움이 될 수 있다. Responding to the Launch of Your App 시작 화면을 제공한다. 시스템은 앱이 시작되는 순간 시작 화면을 표시하고 앱의 첫 번째 화면으로 빠르게 교체한다. 시작 화면의 기능은 사람들에게 앱이 빠르고 반응적이라는 인상을 주는 동시에 초기 콘텐츠가 로드 되도록 하는 것이다. 시작 화면에서 매끄럽게 전환되도록 하려면 첫 번째 앱 화면과 유사하고 그 자체로 주의를 끌지 않는 일반 화면을 디자인하자. Launch Screen 적절한.. 2022. 3. 29.
iOS - Interface Essentials [Interface Essentials] 대부분의 iOS 앱은 UIKit라는 공동 인터페이스 요소들을 규정하는 개발 프레임워크를 사용해 설계된다. 이 프레임워크(UIKit)는 시스템 전체에 변함없는 모습을 달설하는 동시에, 높은 수준의 커스텀을 가능하게 한다. UIKit요소는 유연하면서 친숙하다. 또 적응 가능하며, 어떤 iOS기기에서 멋지게 보이는 앱을 디자인할 수 있고, 시스템의 형태가 변경될 때마다 자동적으로 업데이트를 한다. UIKit에서 제공하는 인터페이스 요소는 세가지 주요 범주로 나뉜다. Bar - 사용자에게 앱 내 위치를 알리고 탐색을 제공하며 작업을 시작하고 정보를 전달하기 위한 버튼 또는 기타 요소를 포함할 수 있다. View - 텍스트, 크래픽, 애니메이션, 대화형 요소와 같이 사람들.. 2022. 3. 29.
iOS - Themes [iOS Design Themes] 명확성 문자는 각각의 크기마다 읽기 쉬우며, 아이콘은 정확하고 뚜렷하게, 장식은 섬세하며 적절하고, 기능에 명확히 집중해 디자인에 동기부여를 한다. 네거티브 스페이스, 색, 서체, 그래픽 그리고 인터페이스의 요소들은 중요한 내용을 미묘하게 강조하고, 상호작용성을 전달한다. 차이 유연한 움직임과 아름다운 인터페이스는 사람들이 하지 않고 내용을 이해하고, 상호작용하는데 도움을 준다. 내용(컨텐츠)는 대부분 화면의 전체를 채우거나, 반투명과 블러 처리는 뭔가 더 있음을 암시한다. 베젤, 그라디언트와 드롭섀도우(그림자)사용을 최소화함으로서 인터페이스를 가볍게 만들고 내용을 무엇보다 중요하게 만든다. 깊이 뚜렷하게 구분되는 시각 레이어와 사실적인 모션은 위계를 전달하고, 활기를.. 2022. 3. 29.
UI component UI component를 알아보기전에 UIKit이 무엇인지 알아보자. UIKit이란 iOs 애플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크(제공받은 일정한 요소와 틀, 규약을 가지고 무언가를 만드는 일)이다. UIKit 프레임워크는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리등 사용자 이벤트 처리를 위한 클래스 포함. Table View, Slider, Button, Text Field등 애플리케이션의 화면을 구성하는 요소를 포함. UIKit은 iOS와 tvOS 플랫폼에서 사용 [Label] - 정보 텍스트의 한 줄 이상을 표시하는 보기. - 텍스트의 글꼴, 텍스트 색상, 정렬, 강조 표시 및 음영을 제어 가능. [Button] - 사용자 상호 작용에 대한 .. 2022. 3. 28.
Info.plist Info.plist Full name: Information Property List Files 말 그대로 Info.plist파일은 실행 패키지에 관한 필수 설정 정보가 포함된 구조화된 텍스트 파일이다. Info.plist가 필요한 이유? Info.plist는 번들 실행 파일에 대한 필수 구성 정보를 포함하는 구조화된 텍스트 파일이다. 파일 자체는 반적으로 유니코드 UTF-8 인코딩을 사용하여 인코딩되며 내용은 XML을 사용하여 구성된다. 루트 XML 노드는 번들의 다양한 측면을 설명하는 키 및 값 세트의 콘텐츠를 포함하는 사전이다. (시스템은 이러한 키와 값을 사용하여 앱과 앱 구성 방법에 대한 정보를 얻는다. 결과적으로 번들로 제공되는 모든 실행 파일(플러그인, 프레임워크 및 앱)에는 정보 속성 목록.. 2022. 3. 28.
App Project [PROJECT] : 생성하는 모든 프로젝트는 해당 특정 프로젝트의 모든 대상에 대한 기본 빌드 설정을 정의한다. : 하나 이상의 소프트웨어를 만드는데 필요한 모든 파일, 리소스, 정보를 위한 저장소 Info Deployment Target : 해당 iOS 타겟을 설정해줄 때는 iOS 점유율을 참고하여 설정 Configuration : 기본적으로 Debug, Release를 지원하며 개발 버전, 릴리즈버전, 무료버전, 유료버전, 베타 등 다양한 환경에서 테스트를 할 때 사용함 Localization : 로컬라이징(나라별로 언어를 설정하는 것) 해주고 싶은 언어를 설정해주는 곳 Build Settings : 빌드 설정은 어떻게 특정 측면의 제품 빌드과정이 수행될 지에 관한 정보를 포함하는 변수 수정된 Bu.. 2022. 3. 28.
App Life Cycle / Scene Life Cycle / View Life Cycle [App] Life Cycle Not Running : 앱이 실행되지 않은 상태 : 실행되고 난 후, 시스템은 UI가 화면에 보여야한다면 앱을 inactive 상태에, 아니라면 background 상태에 둔다. : foreground로 시작할 때 시스템은 자동으로 앱을 active상태로 전환한다 Inactive : 앱이 foreground에서 실행중이지만 아무런 이벤트를 받지 않고 있는 상태 : 앱의 화면은 보이지만 상호작용이 안되는 상태 Active : 앱이 foreground에서 실행중이며 이벤트를 받고 있는 상태 : 앱의 화면도 보이고 상호작용도 되는 상태 Background : 앱이 background에 있으며 실행되는 코드가 있는 상태 : 대부분 앱은 suspended상태로 이행하는 도중에 일시.. 2022. 3. 28.
Info.plist - Privacy 알아두면 좋은 속성 - 앱 reject 사유로 자주 언급되는 항목 사용예시 - Privacy - Camera Usage Description [Privacy - Access to a File Provide Domain Usage Description] 앱이 파일 공급자가 관리하는 파일에 액세스해야 하는 이유를 사용자에게 알려주는 메시지입니다. [Privacy - AppleEvents Sending Usage Description] 앱이 Apple 이벤트를 보낼 수 있는 기능을 요청하는 이유를 사용자에게 알려주는 메시지입니다. [Privacy - Bluetooth Always Usage Description] 앱이 블루투스에 액세스해야 하는 이유를 사용자에게 알려주는 메시지입니다. [Privacy - Bl.. 2022. 3. 28.
동기 / 비동기와 직렬 / 동시 [GCD] GCD: 우리가 Queue에 작업을 보내면 그에 따른 Thread를 적적히 생성해서 분배해주는 방법 GCD에 대해서 자세히 말하자면 어느 Task를 어느 Thread가 할 것인지, Mutil - Thread로 할 것인지, Sync으로 할지, Async로 할지 등을 처리하는 API queue: OS자체에서 다른 Thread들에게 일을 분산처리 해주는 곳 (선입선출) - GCD에서 사용하는 queue의 이름은 Dispatch Queue 이다. 즉, Dispatch Queue에서 작업이 추가되면 GCD는 작업에 맞는 Thread를 자동으로 생성해서 실행하고, 작업이 종료되면 Thread를 제거하게 된다. 이제 그림을 나타내면 아래와 같다. 코드로 작성해본다면 DispatchQueue.global().. 2022. 3. 28.
HTTP 응답 코드 종류와 HTTP 메소드 종류 HTTP 응답 코드 종류 100 Continue (클라이언트로 부터 일부 요청을 받았으며 나머지 정보를 계속 요청함) 101 Switching protocols 200 OK(요청이 성공적으로 수행되었음) 201 Created (PUT 메소드에 의해 원격지 서버에 파일 생성됨) 202 Accepted(웹 서버가 명령 수신함) 203 Non-authoritative information (서버가 클라이언트 요구 중 일부만 전송) 204 No content, (사용자 요구 처리하였으나 전송할 데이터가 없음) 301 Moved permanently (요구한 데이터를 변경된 타 URL에 요청함) 302 Not temporarily 304 Not modified (컴퓨터 로컬의 캐시 정보를 이용함, 대개 gif 등.. 2022. 3. 28.
URL to Image let url = URL(string: "해당URL입력") let data = try? Data(contentsOf: url!) foodImage.image = UIImage(data: data!) 2022. 3. 28.
HexColor 사용하기 extension ViewController { func hexStringToUIColor (hex:String) -> UIColor { var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() if (cString.hasPrefix("#")) { cString.remove(at: cString.startIndex) } if ((cString.count) != 6) { return UIColor.gray } var rgbValue:UInt32 = 0 Scanner(string: cString).scanHexInt32(&rgbValue) return UIColor( red: CGFloat((rgbValue & .. 2022. 3. 28.
Navigation Controller 관련 코드 1. Navigation bar 없애기 사용이유: Navigation bar를 사용하지 않고 버튼과 UIView를 통해서 Navigation bar를 구현할 때 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: animated) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationController?.setNavigationBarHidden(false, animate.. 2022. 3. 28.
Alamofire 관련 코드 1. Get - queryString import Foundation import Alamofire class FastRequest { func getData() { let url = "해당URL입력" let params = [ "매개변수명" : "값"] AF.request(url, method: .get, parameters: params, encoding: URLEncoding.queryString) .validate() .responseDecodable(of: FastResponse.self) { response in switch response.result { case .success(let response): print("DEBUG>> Success \(response) ") //로그인한 사용자.. 2022. 3. 28.
모듈화 - iOS 라이징테스트 템플릿 라이브러리 이용 팝업 - code 팝업 - storyboard DropDown - pickerView 이외의 선택 View Bottom Sheet 움직이는 Label TapMan - 상단탭으로 화면전환 Side Menu Charts Auto---Banner_Demo TableVie Json To TableView - 템플릿 버전 x Json To TableView - 템플릿 버전 O TableView_Demo - 마켓컬리 마이컬리 ExpandableTableView_Demo - 마켓컬리 카테고리 가로 스크롤 + 테이블뷰 커스텀 CollectionView-in-TableView(라인 1개) 커스텀 CollectionView-in-TableView(라인 여러개) 소셜로그인 FaceBook.. 2022. 3. 28.
화면전환 방법 1. 네비게이션 컨드롤러를 이용한 화면전환 우선 Navigation Controller - ViewController - ViewController 형식으로 만들어준다. Navigation Controller - ViewController를 segue로 "root view controller" 연결하고 첫번째 ViewController에 버튼을 놓아준다. 첫번째 ViewController의 버튼과 두번째 ViewController를 segue로 "show" 연결한다. 2. 화면 일부 / 전부를 덮는 modal 아래와 같이 버튼과 ViewController 두개를 구성해준다. 일부만 덮는) 버튼을 두번째 ViewController와 segue로 "Present Modally" 연결해준다. 전체를 덮는) 버.. 2022. 3. 28.
Navigation back button custom하기 Navigation Controller의 bar를 선택해서 back, back Mask 이미지를 바꾼다. root ViewController에 있는 bar를 선택한다. Back Button부분에 스페이스바를 한번눌러 공백을 만들고 Enter를 눌러주면 < back 에서 2022. 3. 28.
TableView로 스크롤되는 UI 구성하기 오늘은 스크롤 되는 화면을 구성할 때 사용한 방법을 설명해보겠다. 만들어볼 화면은 배달의 민족앱에서 장바구니 화면을 구현해볼 것이다. 0. 앱을 만들기전 기획 기획단계에서는 아래의 항목이 들어가면 좋다. 몇개의 Cell을 사용할 것인지? 각 Cell의 Height Cell 내부의 Label, Button의 여부 1. TableView와 UIView를 사용해서 스크롤이 되지 않는 고정적인 UI만 구성해준다. 상단: UIView 위에 장바구니 Label과 전체삭제 Button 하단: 주문하기 Button과 그 아래의 UIView 2. UI구성을 완료했다면 각 Cell을 만들어보자. cell을 구성하기전 TableViewCell을 아래와 같이 만들어야함. ) 중요! indetifier는 각 Cell의 Clas.. 2022. 3. 28.