RC Week 1 - Xcode 기초

Jiyoon·2021년 12월 1일
2

iOS

목록 보기
4/16
post-thumbnail

첫 수업은 첫 수업인만큼 오리엔테이션 느낌으로 진행됐다
개발자가 가져야 할 태도 및 플랫폼의 개념 등등
사실상 라이징 캠프 수업의 핵심은 수업이 아닌 과제를 진행하는 나머지 일주일인 것 같다,,, 과제량이 정말 많다🤯
하지만 그만큼 얻어가는 것이 정말 많다고 느끼는 중이다.

첫 주차 과제는 UI 구성에 관련된 기본적인 지식들을 공부하고 이를 활용하여 원하는 화면 페이지 하나를 만드는 것이었다.
자료 조사는 여러 블로그들을 많이 참고했음!

1. Xcode

Info.plist = Information Property List Files

🍎공식 애플 개발자 문서에 나온 내용:
"key-value 타입으로 번들을 설정하는 것"
"필수적인 환경 설정 정보들을 포함하는 구조화된 텍스트 파일"

Bundle: 실행 가능한 코드와 그 코드가 사용하는 자원을 포함하고 있는 디렉토리이다. info.plist, assets, string파일 등 우리가 한 프로젝트를 만들 때 필요한 모든 파일을 포함하고 있는 덩어리를 뜻 한다.
내용은 XML을 사용하고 root XML 노드는 키, 밸류(Keys & Values)로 구성된 딕셔너리 형태이다.

**XML(eXtensible Markup Language, 확장성 마크업 언어)**: HTML 같은 고정된 형식이 아닌 확장이 가능한 언어. 태그가 한정되어 있지 않고 문서의 내용에 관련 태그를 사용자가 직접 정의할 수 있다.

**Markup Language**: 태그 등을 이용해 문서나 데이터의 구조를 나타내는 언어이다. 일반적으로는 데이터를 기술하는 정도로만 사용되어 프로그래밍 언어와와는 구분시킨다.

시스템은 이 키와 밸류를 사용하여 앱과 앱의 설정을 가져오며 플러그인, 프레임워크, 앱에 Info.plist가 있어야 한다.

Info.plist 화면

Xcode에서 프로젝트를 생성하면 자동으로 생성된다.

Key&설명 예시:

Key설명
Localization native development region개발 지역, 언어
Application Scene ManifestScene 기반의 생명주기 관련 정보 설정
Enable Multiple Windows여러 scene을 설정할 수 있는지 체크하는 속성
Scene Configuration새 Scene을 만들 때 UIKit의 기본 설정값
Application Session Role2가지 역할(Application / External Display)
Configuration Name설정 이름
Delegate Class Name대신 코드 실행해 줄 클래스 이름
Storyboard Name스토리 보드 이름

더 많은 keys에 대한 정보:
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009248-SW1

정말 많은 종류의 key들이 있어서,,, 나중에 개발을 배워나가며 차차 어떤 것들이 있는지 학습하는 것이 효율적일 것 같다는 생각에 깊게 공부하진 않았다. 이론만 공부하면 머리에 안남는걸 알기에!

Info.plist 역할 예시

1. 권한 허용 메세지

우리가 흔히 앱에서 카메라나 마이크에 접근할 때나 블루투스 연결 및 위치 정보 접근 허용 등, 개인 정보 보호를 위해 이러한 권한 허용 메세지를 자주 맞닥뜨린다. 이런 권한 허용 메세지를 띄울 때 info.plist가 사용된다.

위에서 언급했듯이 종류가 매우 다양하다. Information Property List 옆의 + 버튼을 누르고 "Privacy -"로 시작하는 부분에 해당하는 것들이 전부 권한 허용 여부를 물어볼 수 있는 선택지들이다.

2. Bundle 버전 확인

쉽게 생각해서 앱 버전이라고 생각하면 될 것 같다. ex) 버전 3.0.1

Bundle version string(short) 부분이 앱의 버전을 보여준다.
아무것도 만들지 않은 초기 상태의 info.plist에는 이 항목이 없는데 이전에 클론코딩 해본 앱을 보면 들어가 있는 걸 보니 앱을 빌드하면 자동으로 생기는 것 같다.

위와 같이 화면에 앱 버전을 나타내야 하는 경우에 해당 정보를 사용할 수 있다. 중요한 점은 infoDictionary에서 key를 통해 검색할 때 property list에 나와있는 'Bundle Version string'이 아닌 XML로 표현된 'CFBundleShortVersionString'로 검색을 해야 한다.


Project/Targets 설정

프로젝트의 가장 상위 항목에서 Project나 Targets에 관한 설정을 할 수 있는 곳이다.
전반적으로 다뤄야 하는 설정은 Project에서 하고 Targets은 이 설정을 상속받고 개별적인 설정을 해주면 된다. 실제 product가 되는 것은 Targets이다.

1) General

Identity

  • Bundle Identifier는 프로그램 식별자이다.

Deployment Info

  • IOS 앱을 위한 화면 위치, 상태 바와 같은 UI 옵션들을 지정해 줄 수 있다.

Supported Intents

  • 어떤 App이 SiriKit와 상호작용을 하려면 Intents가 필요하다. 이럴 경우 이곳에 추가해준다.
    • Intents: iOS에서 말하는 Intents는 Sirikit에 포함된 프레임워크로, 앱과 시스템의 커뮤니케이션을 도와준다.

Frameworks, Libraries, and Embedded Content

  • Firebase와 Kingfisher같은 프레임워크나 라이브러리를 사용해야 할 때 이곳에 추가해준다.

Development Assets

  • PRODUCT에는 넣지 않고 DEVELOPMENT 단계에서만 쓰고 싶은 Assets들을 넣을 수 있는 곳이다.

Deployment Target⭐️
기본적으로 iOS Deployment Target 은 Minimuim OS 지원 버전이라고 생각하면 쉽다.
예를들어 앱을 실행 중에 앱의 평점을 메길 수 있는 SKStoreReviewController의 경우는
iOS 10.3 버전부터 지원하는 기능이다.

PROJECT iOS Deployment Target vs TARGETS iOS Deployment Target
-> TARGETS이 PROJECT를 OVERRIDE 한다.
PROJECT iOS Deployment Target 과 TARGETS iOS Deployment Target 이 다를 경우에는?
-> TARGETS iOS Deployment Target 이 Minumum 버전이 된다.

출처: https://adervise1.tistory.com/104 [검소한 블로그]

2) Signing & Capabilities

Signing

  • Team, Bundle Identifier, Provisioning Profile 등을 설정하는 곳이다. 앱 배포, 다른 서비스(In-App Purchase 등) 사용 시에 반드시 필요하다.

Capabilities

  • push notifications, Apple Pay와 같은 Apple의 앱 서비스를 구성하는 기능을 추가할 수 있다.

3) Build Settings

말 그대로 빌드 되는 방법을 설정하는 곳.

아주 중요하고 민감한 값이라 이 값들을 어떻게 설정하느냐에 따라 생산성에 큰 차이가 생길 수도 있고, 심지어는 알 수 없는 런타임 오류가 발생할 수도 있다. 따라서 값을 변경하려면 바꾸려는 이유와 맥락이 팀 전체에 잘 공유 되어야 한다.

Build Setting의 값은 너무나도 많아서 각각의 의미 파악이 어렵다. 따라서 모르는 값은 선택한 후 Xcode의 우측 패널 - Quick Help를 열어보며 바뀌었을 때 어떤 변화가 있을지 알아본 후 바꾼다.

4)Build Phases

빌드 시 수행하는 작업들 설정하는 곳.

Compile sources(빌드 할 때 컴파일 할 소스 코드 목록), Copy bundle resources(PRODUCT에 리소스 복사) 등이 있다.

출처
https://velog.io/@eunjiha/iOS-Xcode-IDE-이해하기

Assets

어플리케이션을 개발할 때는 수 많은 리소스 파일(음악, 이미지)들이 필요한데 디바이스마다 필요로 하는 크기나 비율이 달라 여러 디바이스에 같은 파일을 그대로 사용할 수 없다. 그래서 필요한 것이 Asset.

위와 같이 중간 패널의 Image Set에 iPad 등의 기기를 위해 2x 와 3x의 크기를 추가할 수 있다.

에셋 카탈로그의 대표적 종류

  • App Icon Type: 어플리케이션 아이콘에 사용되는 이미지이다. 확장자는 .appiconset.
  • Image Set Type: 객체가 사용하는 이미지 파일이다. 확장자는 .imageset.
  • Data Set Type: 객체가 사용하는 모든 종류의 파일이다. 확장자는 .dataset. 일반적으로 모든 바이너리 파일을 말하지만, 실행파일(executable file)은 사용할 수 없다.
  • Launch Image Type: 어플리케이션이 실행될 때 사용되는 이미지 파일이다. 확장자는 .launchimage.

출처
https://woojin-hwang.github.io/xcode-asset/

Storyboard

UI 제작을 할 때 Storyboard, xib, code 세 가지 방식 중 하나를 선택해서 짤 수 있다. 각자의 장단점은 물론 존재한다.

  • Storyboard: 전체 흐름 파악하기 용이, ViewController와 유기적 구성이 돼있어 사용하기 편하다.
  • XIB: 재사용할만한 셀들을 구성한다. 경험상 보통 테이블 뷰를 만들 때 테이블에 들어가는 셀들이 반복되기 때문에 재사용할 수 있어 xib로 짜는 걸로 알고 있다.
  • Code: 다이나믹한 UI를 구성할 때. 처음엔 storyboard로 화면 구성을 익히고 코드로 짜는 법을 배우는 게 좋을 듯 하다.

ViewController

하나의 View(화면 구성 요소들) 관리와 화면과 데이터 사이의 상호 작용을 관리하는 객체이다. 윈도우 객체로부터 전달된 이벤트를 받아 내부적으로 구현된 비즈니스 로직을 실행하고, 그 결과로 얻어진 데이터를 가공시켜 화면에 표현하는 등, 우리가 하는 대부분의 작업들의 중심에 있다.

ViewController 이외에 컨트롤러에는 여러 종류가 있는데 NavigationController, TableViewController, TabBarController, Split ViewController, CollectionView Controller, 등등 이 있다.

ViewController의 종류와 View의 관리에 대한 세부 내용
https://boidevelop.tistory.com/13

확인해보니 이번주 AutoLayout 과제할 때는 TabBarController를 사용하는 것 같다.

ViewController에는 컨트롤러 내부에 모든 객체의 대장인 RootView가 있고 View들의 구조는 루트뷰의 서브뷰, 서브뷰의 서브뷰로 계층을 이루고 있다.

ViewController에는 루트뷰가 연결되어 있고 루트부터 가장 하위의 서브뷰까지 계층 구조를 따라 참조가 이어진다. 이 때문에 뷰컨트롤러가 하위의 모든 뷰에 대한 참조를 가지고 있지 않아도 모든 뷰에 접근 가능하다!

Segue - ViewController 서로 연결

스토리보드에서 뷰 컨트롤러 사이의 화면 전환을 위해 사용하는 객체이다. 즉, 스토리보드에서 하나의 Scene으로부터 다른 Scene으로의 전환을 보여주는 연결을 뜻한다.

Segue의 종류

  1. Show
    가장 일반적인 세그웨이, 새로 나타나는 화면은 오른쪽에서 왼쪽으로 이동하며 보인다.
    내비게이션 스택에 쌓으면서 보여주며 내비게이션바에 Back 버튼이 생긴다.
  2. Show Detail
    아이패드에서 UISplitViewController를 사용할 때 사용하며, 내비게이션 스택에 영향을 주지 않고 화면이 바뀐다. (아이폰 앱에서는 큰 의미 없음)
  3. Present Modally
    기존 뷰 컨트롤러를 덮는 새로운 뷰 컨트롤러를 나타나게 하며, 주로 아래에서 위로 나타나는 애니매이션 사용할 때 쓴다.
  4. Popover Presentation
    아이패드에서 팝업창을 띄우는 것이다. (아이폰 앱에서는 큰 의미 없음)

0개의 댓글