1주차 개발일지
[복습을 위한 질문]
- Q1. 개발자에게 필요한 역량 3가지는 무엇인가?
- 소통 능력
- 스스로 자기주도적으로 공부하는 습관 ( 구글링, 스택오버플로우 등 )
- 지속적인 학습 ( ex. 개발자는 죽을 때 까지 공부해야 한다.)
- Q2. 플랫폼이란 무엇인가?
-
플랫폼이란 필요한 서비스를 제공하는 것이다.
-
플랫폼은 정해진 규칙과 규정을 바탕으로 규제되어 있으며 사용자 메뉴얼이 있다.
플랫폼의 조건
-
수요자(사용자)와 공급자(관리자)가 존재한다.
-
사용자들이 이용(상호작용) 할 수 있는 환경이 존재한다.
예시) 에어비앤비 - 집주인(공급자)과 여행자(수요자)를 연결해주는 숙박 플랫폼
- Q3. 플랫폼의 특성을 고려해볼 때, IOS는 어떻게 적용되나요?
- IOS에서는 모바일 플랫폼으로써 apple developer에 정의된 메뉴얼을 따른다.
-
안정성
-
성능
-
비즈니스
-
디자인
-
법적 요구 사항
App Store 심사 지침
- Q4. 공식문서(개발문서 및 HIG) 를 봐야하는 이유는 무엇인가요? Apple에서 정의한 지침을 따르고 제공하는 가이드라인에 맞추어 개발해야 하기에 apple developer 공식문서와 Human Interface Guidelines 및 Swift 공식문서를 확인하고 익혀야 한다.
1. Info.plist / AppProject 속성
Information Property List Files
Info.plist 파일은 프로젝트를 생성 시 자동으로 생성되며, 실행 패키지에 관한 필수 설정 정보가 포함된 구조화된 텍스트 파일이다. (애플리케이션에 관한 기본정보가 들어있는 파일)
일반적으로 UTF-8로 인코딩 되며 내용은 XML을 사용합니다.
root XML노드는 키,밸류(Keys and Value)로 구성된 딕셔너리(1대1 대응) 형태이며 시스템은 키와 값을 사용하여 앱과 앱의 설정을 가져옵니다.
∴ 플러그인, 프레임워크, 앱에 Info.plist(정보 속성 목록 파일)가 있어야 합니다.
Xcode의 구성
- Toolbar
- 앱 빌드 및 실행, 작업 진행 상황 보기, 기본 창 구성을 위한 도구 모음입니다.
- Editor area
- 코드, 사용자 인터페이스 파일, 속성 목록, 프로젝트 설정 등을 포함하여 프로젝트의 내용을 보고 편집하기 위한 편집기 영역입니다.
- Navigator area
- 파일, 기호, 중단점 및 빌드 정보를 포함하여 프로젝트의 일부를 보기 위한 네비게이터 영역입니다.
- Debug area
- 디버깅 중 앱 실행을 제어하고 변수, 레지스터 및 상태 정보를 표시하기 위한 디버그 영역입니다.
- Inspector area
- 프로젝트 또는 네비게이터 또는 편집기 영역에서 선택한 개체에 대한 정보를 보고 편집하기 위한 검사기 영역입니다.
1. PROJECT
- 모든 파일, 리소스, 소프트웨어 빌드에 필요한 모든 정보의 저장소
- 프로젝트에는 앱을 구축하는 데 사용되는 모든 요소가 포함되어 있으며, 해당 요소 간의 관계(relationships)를 유지한다.
- 프로젝트는 product를 build하는 방법을 명시하는 target을 하나 이상 포함하며 모든 target에 대한 기본 build setting을 정의한다.
1-1. Info
Deployment Target | - Minimuim OS 지원 버전 |
---|
Configurations | - 기본적으로 Debug, Release를 지원 |
- 개발 버전, 릴리즈버전, 무료버전, 유료버전, 베타 등 다양한 환경에서 테스트를 하기 위해 Configuration을 추가할 수 있음 | |
Localizations | -지원하는 언어(지역) |
-Base : 영어
-로컬라이징 해주고 싶은 언어를 설정해주는 곳
(로컬라이징: 나라별로 언어를 설정하는 것) |
1-2. Build Settings
- Build Settings
-
아주 중요하고 민감한 값으로, project.pbxproj 파일에 Build Setting을 저장하고 있다.
-
Basic / Customized / All 필터 옵션
- Customized 필터 옵션을 통해 수정된 값들만 모아서 볼 수 있다.
-
Target Build Setting보다는 Project Build Setting을 이용하기
- 프로젝트 안에서도 개발용, 배포용 타겟을 별도로 관리하는 경우가 많다.
Target 별로 빌드셋팅을 바꿀 수 있으나 가급적 같아야 하는 경우가 더 많다.
-
Level 단위로 Build Setting 보기
- 현재 적용되어 있는 Build Setting이 어느 차원에서 정의되었는지(기본 값을 쓰고 있는지, 프로젝트에 적용된 값을 쓰고 있는지, 타겟별로 override를 한것인지, xcconfig에서 정의된 값을 쓴지) 등을 볼 수 있음.
-
Build Setting의 의미 파악하기
- Build setting의 값은 매우 많기 때문에 알고 싶은 값을 선택한 후 Xcode의 우측 패널을 열어 Quick Help를 사용할 시, 각 값들에 보다 상세한 설명과, 값을 바꾸었을 때 어떤 변화가 있을지 정보를 얻을 수 있다.
-
불필요한 Build Setting의 변경을 최소화 합니다.
1-3. Package Dependencies
- Package Dependencies
- Swift Package 를 추가하는 곳
- 프로젝트 간에 코드를 공유하거나 다른 개발자의 코드를 활용할 수 있습니다.
2. TARGET
- Xcode에서 Build를 실행하여 생성되는 최종 제품 (product)
- 앱이 될 수도 있고, 프레임워크가 될 수도 있고, Unit Test번들일 수도있다.
- Target은 빌드할 product를 지정하며 프로젝트 또는 workspace의 파일 집합에서 product의 빌드 방법(by Build Settings / Phases)을 지정한다.
- 프로젝트에는 여러 개의 Target이 포함될 수 있으며, 각 Target은 하나의 product를 생성한다.
- Target은 Target 내에서 지정한 build setting에 의해 override 되지 않는 이상 기본적으로 Project Build Setting을 상속받는다.
- Target은 같은 파일로 만들어도 결과적으로는 다른 Product를 만드는 것이다.
2-1. General
General
-
Identitiy
- Supported Destinations
- 애플리케이션이 지원하는 디바이스 설정
- 멀티 플랫폼 지원 여부 설정
- Minimum Deployments
- 최소 지원 버전 설정
- PROJECT의 버전과 TARGETS의 버전이 다를 경우 TARGETS에 지정된 버전을 따른다.
- Identity
- App Category : 애플리케이션 분류 (교육, 게임, … 등)
- Display Name : 프로젝트 명
- Bundle Identifier : 각 App 마다 가진 고유의 식별자, 번들 ID (앱 스토어 업로드를 위한 고유 값)
- Version : 애플리케이션 버전
- Build : (동일한 버전 내에서) 업데이트를 할 때 설정 → 빌드 횟수 관리 Build는 매번의 프로젝트 빌드시 번들 버전을 표시하기 위해 사용 개발자가 프로그램을 트래킹 하기위해 사용
- Deployment Info : 앱을 배포 할때 지원 항목 설정
- iPhone Orientation : 아이폰의 물리적 방향 지정
- iPad Orientation : 아이패드의 물리적 방향 지정
- Portrait : 세로 모드
- Upside Down : 디바이스가 뒤집어진 상태 (일반적으로 사용하지 않음)
- Landscape Left : 가로 모드 (장치를 왼쪽으로 회전한 경우)
- Landscape Right : 가로 모드 (장치를 오른쪽으로 회전한 경우)
- Status Bar Style : 상태바 스타일 지정
- Requries full screen : 전체 화면 미디어를 표시할 때 상태 표시줄을 일시적으로 숨긴다
-
App Icons and Launch Screen
- 앱 아이콘 및 런치 스크린 설정
- App Icons Source : Assets.xcassets 파일로 이동하며, 상황별 아이콘이 있다. (하나라도 비어 있으면 검수 시 reject 당할 수 있다 !)
- Launch Screen File : 앱 실행 시 나오는 splash 화면.
-
Supported Intents
- 가령, 어떤 App이 SiriKit와 상호작용을 하려면 Intents가 필요하다. 이럴 경우 Supported Intents에 추가해줘야 한다.
-
Frameworks, Libraries, and Embedded Content
- 앱에서 쓰이는 라이브러리를 embeded 시킬지 or 안시킬지에 대한 설정.
- embeded 시킬 시 → 앱에 library가 포함된 채로 배포.
- embeded 안 시킬 시 → 앱 실행 시에 library 참조.
-
Development Assets
- 앱에는 넣지 않고 Development 단계에서만 쓰고 싶은 Assets들을 넣습니다.
2-2. Signing & Capabilities
- Signing
- 애플에서 받는 개발자 인증 관련 항목을 설정합니다.
- Automatically manage signing 체크 시 → 내 인증과 관련된 자료를 Xcode가 알아서 서버에서 가져옴.
- **Provisioning Profile**
- "프로비저닝 프로파일은 iOS 디바이스를 Apple 인증서와 연결하는 역할을 담당합니다."
- Tag를 추가 및 제거할 뿐만 아니라 Tag 간에 Resource를 이동하는 데 사용할 수 있습니다.
- 태그를 사용하여 주문형 배포를 위해 자산을 그룹화할 수 있음 ⇒ 앱의 일부로 모든 이미지를 배송하는 것과 달리 필요할 때 앱에서 다운로드할 수 있는 이미지 그룹을 정의할 수 있습니다.
2-4. Info
- Info : 파일 유형 및 서비스 정보 추가
- Custom iOS/macOS Application Target Properties : 사용자 지정 대상 속성
- **Document Types**
- 문서 유형 설정은 앱에서 만들고 편집 할 수 있는 문서 유형을 지정하고 iOS 또는 Mac OS에서 해당 문서 유형에 대해 표시되는 사용자 정의 아이콘을 제공한다.
- Exported Type Identifiers & Imported Type Identifiers
- 앱에서 내보내거나 가져올 수있는 모든 파일 유형에 대해 내보내고 가져온 UTI를 추가한다.
- 일반적으로 앱에 고유 한 문서 유형과 달리 UTI는 일반 텍스트 또는 .png. 예를 들어 UTI는 앱간에 클립 보드에 복사 및 붙여 넣기를 지원
- **URL Types**
- URL 유형 설정을 사용하면 사용자 지정 프로토콜을 사용하여 다른 앱과 데이터를 교환하기 위한 사용자 지정 스키마 지정 가능
- 파일의 유형 및 서비스 정보 추가, 앱과 관련된 속성 앱이 만들거나 열 수 있는 파일의 유형
2-5. Build Settings & Build Phases & Build Rules
- Build Settings
- PROJECT의 빌드세팅과 같은 역할을 하며 응용 프로그램의 컴파일 방법을 설정한다.
- CPU 아키텍처, Swift 버전, 컴파일러 최적화 등과 같은 설정.
- Build Phases
- Dependency와 유저의 컴파일 코드를 포함하는 정보로써 앱이 어떤 파일들을 갖고 배포되는지를 보여줍니다.
- 프로젝트로 빌드하는 동안 빌드 시스템에서 수행한 작업을 편집하고 재정렬.
- 타깃의 제품을 빌드하기 위해 필요한 파일들을 단계별로 어떻게 처리할지 구성한 목록이다.
- 의존성이 있는 다른 타깃들, 컴파일 단계에서 사용할 소스들, 링크 단계에서 사용할 라이브러리나 프레임워크, 앱 번들에 복사할 리소스 파일들을 단계별로 지정하게 된다.
- Build Rules
- 일반적으로 사용되는 방법은 아니며 Build Phases와 유사하지만 Build Rules는 빌드 프로세서에 적용 될 수 있지만 Phases는 빌드 프로세스 자체의 일부이다.
- Build Rules는 추가 소스 코드 파일을 컴파일하여 빌드 프로세스를 사용자 지정하는 데 사용 할 수 있다.
- 빌드 프로세스 중에 특정 유형의 파일을 처리할 때 빌드 시스템이 사용하는 규칙을 설정합니다.
- 대부분의 개발자는 보통 다룰 일이 없다고 한다.
기존 Info.plist
- Information Property List
- Application Scene Manifest : Scene 기반의 생명주기(Life Cycle) 관련 정보 설정
- Enable Multiple Windows : 여러 Scene을 설정 할 수 있는지 체크하는 속성
- Scene Configuration : 새 Scene을 만들 때 UIKit의 기본 설정값
- **Application Session Role :** 2가지 역할 (Application / External Display) - 기본화면?…
- Item 0 (Default Configuration)
- Configuration Name : 설정 이름
- Delegate Class Name : 대신 코드를 실행해 줄 클래스 이름
- Storyboard Name : 스토리보드 이름 -Target Info 속성에서 보면 Session Role에 main 스토리보드 설정 되어있다. -기본화면 설정 같음…?
➡️ 변경되어 Target 탭에 Info
🙋🏻♂️Info.plist - Privacy 관련
- info.plist에 Privacy가 도저히 찾아 지지 않아 많이 해맸습니다.
- Xcode 업데이트에 따라 보여지는게 달랐으며 info.plist에서 add row 를 통해 생성할 수 있습니다.
2. 스토리보드 컴포넌트 종류 및 AutoLayout 개념
- UIView / UILabel / UIButton
- UIScrollView
- UIStackView
- UINavigation Controller / UITabbarController
Storyboard
- iOS 어플리케이션의 UI 흐름을 시각적으로 표현한 것으로 화면의 내용과 화면과 화면 간의 연결을 보여줍니다.
UIKit
❗️IOS 개발을 처음 시작할 때 가장 처음 마주하게 될 프레임워크는 UIKit 이라고 할 수 있다. Xcode 13 로 프로젝트를 만들면 가장 먼저 ViewController.swift 파일에 UIKit이 import 되어 있다.
**1. UIKit이 어떤 기능을 하는 지**
-
UIKit은 프레임워크다. (Framework)
-
UIKit프레임 워크는 iOS와 tvOS앱을 위한 필수적인 인프라를 제공한다.
-
앱은 기본 동작을 UIKit에 의존하며 UIKit은 특정 요구에 맞게 동작을 커스터마이즈 할 수 있는 다양한 방법을 제공한다.
- 핵심 오브젝트 (core object) 제공
- 오브젝트들의 인터렉션이나 콘텐츠 요소를 UIKit이 지원하고 있다.
-
UIKit의 필수 리소스
UIView
❗️공식문서에서 UIView는 화면의 직사각형 영역을 관리하는 객체라고 합니다.
- View는 앱의 유저 인터페이스(User Interface)에 있어서 가장 기본적인 구성 요소이며, UIView 클래스 모든 view의 공통적인 동작을 정의합니다.
- view객체는 객체의 bounds 사각형 안에서 컨텐츠를 만들며 이 컨텐츠와의 모든 상호 작용들을 처리합니다.
- UIView 클래스는 인스턴스화하고 background color(배경색)을 설정할 수 있는 구체적인 클래스입니다.
- 또한, 이 클래스를 상속하여 좀 더 정교한 콘텐츠를 그릴 수 있습니다.→ 앱에서 흔히 보이는 레이블, 이미지, 버튼 및 기타 UI요소들을 나타내려면 직접 만드는 것보단 UIKit 프레임워크가 제공하는 view를 상속하여 사용하세요. (버튼, 레이블, 이미지 등 모두 UIView를 상속하여 만든 객체들)
- View객체는 앱을 통해 사용자와 상호작용 하기 위한 가장 주된 방법이기 때문에 많은 책임이 따릅니다.
Drawing and Animation
- View들은 UIKit또는 Core Graphics를 이용하여 직사각형 영역안에 컨텐츠를 그립니다.
- View의 속성들을 새로운 값으로 애니메이션 할 수 있습니다.
Layout and Management
- View들은 0개 이상의 subview를 포함합니다.
- view들은 그들의 subview의 size나 position을 조절할 수 있습니다.
- 오토레이아웃을 사용하여 view의 계층의 변화에 따라 view의 크기와 위치를 변경하는 룰을 정합니다.
Event handling
- View는 UIResponder (응답자) 를 상속받아 터치 및 다른 이벤트에 대해 응답할 수 있습니다.
- 일반적인 제스쳐를 처리하기 위한 gesture regognizers (제스처 인식기)를 설치할 수 있습니다.
UILabel
- Text를 한 줄 이상 표시하는 View입니다.
- Label Text의 전체 모양을 구성하고 특성 문자열을 사용하여 텍스트 내의 하위 문자열 모양을 사용자 정의할 수 있습니다.
- 프로그래밍 방식으로 또는 Interface Builder의 Attributes inspector를 사용하여 인터페이스에 Label을 추가하고 사용자 정의하십시오.
- 인터페이스에 Label을 추가하는 방법
- 콘텐츠를 나타내는 문자열 또는 특성 문자열을 제공합니다.
- 속성이 지정되지 않은 문자열을 사용하는 경우 Label의 모양을 구성합니다.
- 인터페이스에서 Label의 크기와 위치를 제어하는 Auto Layout 규칙을 설정합니다.
- 접근성 정보 및 현지화된 문자열을 제공합니다.
**Accessing the text attributes (텍스트 속성 액세스)**
**Sizing the label’s text (레이블 텍스트 크기 조정)**
**Managing highlight values (하이라이트 값 관리)**
**Drawing a shadow (그림자 그리기)**
**Drawing and positioning overrides (도면 및 위치 재지정)**
**Getting the layout constraints (레이아웃 제약 조건 가져오기)**
**Accessing additional attributes (추가 속성 액세스)**
**Supporting types (지원 유형)**
너무 많아서 … 공식문서 첨부해서 공부….
UIStackView
**UINavigationController**
**UITabBarController**
- Gray Button
- 제목, 부제목, 이미지 및 기타 모양 속성(Property)을 가질 수 있는 회색 스타일 버튼을 표시합니다.
- Tinted Button
- 제목, 부제, 이미지 및 기타 모양 속성을 가질 수 있는 색조(Tinted) 스타일 단추를 표시합니다.
- Filled Button
- 제목, 부제, 이미지 및 기타 모양 속성을 가질 수 있는 채워진(Filled) 스타일 단추를 표시합니다.
- Pull Down Button
- 풀 다운 버튼은 작업 목록을 나타내는 메뉴를 표시합니다. → 눌렀을 시 리스트 보임 (작업 목록 나열 등)
- 하위 메뉴를 제공할 때 유용
- 팝업 단추와 달리, 풀다운 단추는 사용자가 선택한 메뉴 항목에 상관없이 항상 동일한 내용을 표시합니다.
- Pop up Button
- 팝업 버튼을 클릭하면 단독 선택 목록을 나타내는 메뉴가 표시됩니다. (이름순 / 최근 추가순 / 최근 재생순)
- 상호 배타적인 옵션 (mutually exclusive) 또는 상태의 무계층 목록 (flat list)을 표시합니다.
- 선택한 선택 항목은 팝업 버튼의 제목으로 표시됩니다.
- 팝업 버튼이 자신의 콘텐츠에 영향을 미치는 선택을 도와준다.
3. 다양한 Constraint 제약 조건을 통해 실제 프로덕트 애플리케이션 프론트 구성해보기
🔥넷플릭스 구현 영상🔥
⚙️Info 세팅
- app category : video
- display name : Netflix
- Appearance : Light - 라이트 모드 고정 색과 음양이 자동으로 바뀌어 기본 디자인이 변경 될까봐
- iOS deployment target : iOS 16.0
- App Icon : AppIcon
- Launch Screen File : Launch Screen.storyboard
👏🏻사용한 UIKit 컴포넌트
- UITabBarController - 화면 아래 탭바
- 넷플릭스 로고, airplay, 돋보기(검색), 프로필 로고 (Tab Bar Item으로 구현)
- **UINavigationController -** 화면 위 네비게이션
- 홈, New&Hot, 저장된 컨텐츠 목록 (Bar Button Item으로 구현)
- **UITabBarItem**
- **UIBarButtonItem**
- **UIStackView**
- **UIScrollView**
- Vertical Scroll View
- Horizontal Scroll View
- **UILabel**
- **UIImageView**
Q. info.plist가 무엇인가요?
- 실행 패키지에 관한 필수 정보가 포함된 구조화된 텍스트 파일이다.
Q. info.plist가 왜 필요하죠?
- 필수 정보가 포함된 파일로 기본 뼈대를 생성하고 설정을 변경및 수정하기 위해서
Q. ViewController는 무엇인가요?
- 화면 구성 요소들인 뷰를 관리하며 화면과 데이터 사이의 상호작용 을 관리한다.
Q. segue는 무엇인가요?
- iOS에서 여러 ViewController 사이의 전환 시에 사용하는 객체이다.
- segue를 통해 화면 전환 뿐 아니라 데이터 전달도 가능하다.
- 그러나 segue가 많아지거나 ViewController가 많아지면 performSegue나 present 추천
Q. Autolayout은 무엇인가요?
- 오토레이아웃 view의 위치 - 앵커 (x,y축), 사이즈 를 지정해주면 화면에 자동으로 그려줌
- 위치와 view size가 제일 중요!!
아직 까지 해결 못해서 물어보고 싶은 점
- 분명 safe area 를 사용했는데 어째서 배터리와 시간이 시뮬레이터에 보이지 않는지 궁금…
참고 레퍼런스 (내가 찾아본)
Xcode 구성
Apple Developer Documentation
Target 이란
[iOS] Xcode Target이란?
IOS 점유율 확인 사이트
App Store
Xcode에서 Build Setting 제대로 관리하기
Xcode에서 Build Setting 제대로 관리하기
Intent extensions
Apple Developer Documentation
Info.plist 의 key and values
About Info.plist Keys and Values
Info.plist 파일의 변경 → Xcode13 이후로 수정된 부분
- 이것 때문에 서칭할때 헷갈리는 부분이 많았음
- 기존 Info.plist는 manifest 몇 가지 기본 설정만 있고 여러 창이 비활성화 되어있음.
- 어디서 수정해야 하냐!?
- 빌드 시 대상에 대한 전체 Info.plist를 만들고 기본값에서 변경한 내용에 대한 Info.plist 프로젝트 파일만 생성하는 것으로 보인다.
- Info.plist 를 수정을 원할 시 Target settings → Info 에서 수정해야 함
- Target에서 info 설정 수정 시 기존의 위치 info.plist 에도 추가/수정 된다. → 동기화 상태
- 하지만, 둘 중 한 곳에서 설정을 변경했을때 동기화 되지 않고, 프로젝트를 닫고(Xcode 종료) 다시 열어야 해결되는 버그가 있기도 한다고 한다.
- Project Navigator에 생긴 plist 파일에는 없고,Build Setting > Info.plis Values 에서만 설정할 수 있는 옵션도 있다.
- 또한 Packaging 탭에서 Xcode가 plist 파일을 생성하지 않도록 설정할 수도 있다.
원인 - Xcode 13 Release Note
Apple Developer Documentation
Scene에 대해 (의미, 생명주기, 쓰임)
- Xcode 12 → Xcode 13 바뀐점
- 하나의 앱에 하나의 Window가 존재했었다. → Window 개념이 Scene으로 대체되고 하나의 앱에 여러 Scene을 가질 수 있게 되었다.
- Scene : 디바이스에서 실행 중인 앱 UI의 하나의 인스턴스. 하나의 App에는 여러 개의 Scene 인스턴스가 있을 수 있다. 이를 통해 아래 사진과 같은 Multi-scene환경을 만들 수 있고, 각 scene를 보여주거나 숨길 수 있다.
- Scene들은 같은 메모리와 앱 프로세스 공간을 공유하며 서로 동시에 실행된다.
[iOS] iOS 앱의 생명주기(App, Scene)에 대하여
[iOS] iOS13이후의 AppDelegate와 SceneDelegate
[iOS 앱개발] Multiple Window를 위한 SceneDelegate
- View들은 0개 이상의 subview를 포함합니다.
- view들은 그들의 subview의 size나 position을 조절할 수 있습니다.
- 오토레이아웃을 사용하여 view의 계층의 변화에 따라 view의 크기와 위치를 변경하는 룰을 정합니다.
UILabel 관련 공식 문서
Apple Developer Documentation
[iOS] Pull Down Button 과 Pop Up Button
피드백 ui 많이하기 및 간격 조절하기
그리고 화면 구성 safa area맞추기