분류 전체보기

    [Sesac IOS] 2일차 TIL

    2일차 수업을 듣고 새로 알게된 내용과 공부해야할 것들을 정리한 글입니다. Learned App Icon 앱의 아이콘은 여러 크기로 다양한 곳에서 보여지기 때문에 (푸시 알림, 설정 창, 앱 스토어 등) 각 크기에 맞는 아이콘 이미지 에셋이 필요하다. 앱 아이콘 에셋 폴더가 여러 개라면 프로젝트 설정에서 사용할 아이콘을 선택할 수 있다. 앱 아이콘 에셋의 Attribute Inspector에서 아이콘이 보여질 기기를 선택할 수 있는데, iPhone용 앱은 iPad에서도 설치 가능하기 때문에 일반적으로 두 기기를 체크해서 아이콘을 만든다. 1024x1024 크기의 아이콘 하나로 앱에 필요한 모든 크기의 아이콘을 만들어주는 사이트 appicon.co Xcode 14.0 (베타) 버전부터 큰 사이즈의 아이콘..

    [Sesac IOS] 1일차 TIL

    1일차 교육을 듣고 새로 알게된 점과 더 알아보고 싶은 점들을 정리했습니다. Learned 앱은 크게 화면(Scene), 기능(Logic), 데이터(Data)로 구성된다. 앱이 데이터에 접근하는 방법 앱 내부에 데이터를 저장하여 사용할 수 있지만 백업 및 복구가 필수적이다. 서버에 데이터를 저장하고 네트워킹을 통해 접근할 수 있다. iPhone 저장 공간 설정에서 앱마다 차지하는 용량을 볼 수 있는데 앱 크기는 앱이 자체적으로 가지는 용량이고 문서 및 데이터는 앱 내부에 저장된 데이터(카카오톡 대화의 이미지 파일, 게임의 업데이트 파일 등)를 의미한다. 애플의 정책에 따른 앱 개발 애플의 정책에 따라 앱을 만들어야 앱 스토어에 앱을 출시할 수 있고 그렇지 않으면 스토어에 등록되지 않는다. 애플 로그인을 ..

    [IOS] 뷰에 그림자 만들기

    UIView에는 실제로 뷰를 그리는 역할을 하는 CALayer 타입의 layer라는 프로퍼티가 존재해서 이 layer가 가진 프로퍼티를 사용해 뷰에 그림자를 만들 수 있다. 그림자를 만들때 사용하는 주요 프로퍼티는 아래 4개 정도이다. shadowOffset: CGSize shadowColor: CGColor shadowRadius: CGFloat shadowOpacity: CGFloat 1. shadowOffset The offset (in points) of the layer’s shadow. Animatable. 레이어 그림자의 오프셋. 오프셋은 사전에서 "상쇄하다" 라는 뜻이지만 컴퓨터 과학에서는 "변위차"라는 의미로 사용된다. 따라서 그림자의 위치가 기존 레이어보다 얼마만큼 떨어진 지점에 위치하..

    [IOS] UIButton.Configuration을 사용해서 버튼 커스텀하기

    팀 프로젝트로 만들었던 앱의 UI를 변경하다가 게임을 시작하기 위해 눌러야 하는 준비 버튼이 너무 작아서 눈에 잘 띄지 않는다고 생각했다. 그래서 버튼의 외관(Appearance)를 변경하려다가 IOS 15에서 새로 생긴 Configuration을 사용해보고 싶었다. 기존 메소드를 사용해서 설정하는 방법과 다른 점이 꽤 있어서 관련 내용을 포스팅한다. 내가 주로 사용한 설정값을 위주로 설명한다. Configuration을 초기화하기 위해서는 아래 4가지 메소드 중 하나를 사용한다. UIButton.Configuration.plain() UIButton.Configuration.tinted() UIButton.Configuration.gray() UIButton.Configuration.filed() 말로..

    Git 관련 개념 및 자주 사용하는 명령어 정리

    로컬 저장소 생성 $ git init 현재 디렉토리에 git 파일을 생성해서 로컬 저장소로 만드는 명령어 워킹 트리(Working Tree): 작업하는 파일이 존재하는 영역 인덱스(Index): 워킹 트리의 파일이 저장소로 가기 전에 잠시 거쳐가는 임시 영역 저장소(Repository): 버전 관리가 이뤄지는 영역 로컬 저장소로 만들면 워킹 트리에 있는 파일들의 변경 사항을 추적하고 관리할 수 있습니다. 추적한다는 의미는 디렉토리에서 코드를 수정하거나 파일을 삭제했을 때 다시 되돌리거나 변경을 적용할 수 있음을 의미합니다. 스테이징(stage) $ git add 변경된 파일을 인덱스 영역에 추가합니다. 인덱스 영역에 파일을 추가하는 행위를 스테이징이라고 합니다. $ git add . 파일을 하나하나 추가..

    [IOS] 웹소켓을 사용한 클라이언트 시간 동기화 방법과 문제점

    웹소켓 채팅을 기반으로 실시간 게임을 만들기 위해 했던 시도와 그 과정에서의 생각을 정리한 글이다. 구현하려고 했던 게임의 핵심 기능은 소켓 서버와 연결된 다수의 플레이어들이 자신의 차례에 주어지는 일정 시간동안 특정 메시지를 입력하는 것이었다. 문제는 모든 플레이어들이 동시에 게임을 시작하고 동시에 플레이어들의 차례를 바꿔야했다. 즉, 게임이 진행되는 동안 모든 클라이언트가 동일한 시간을 공유하게 만드는 것이 관건이었다. 서론 기본적으로 게임시작 전, 각 플레이어들이 준비 상태를 서버에 알리면 모든 플레이어의 준비가 끝난 것을 확인한 서버는 게임시작 이벤트를 클라이언트에 보내고 이벤트를 수신한 각 클라이언트는 게임이 진행되는 화면으로 뷰를 전환시키는 과정이 이뤄진다. 본론 1. 게임 화면으로 전환이 완..

    [Xcode] App Build 없이 Simulator 실행 및 기종 변경하기

    기종별로 다수의 시뮬레이터 실행하기 위해 찾아본 방법입니다. 1. Command + Space으로 Spotlight 검색 활성화 후 Simulator 검색 2. Dock의 Simulator 오른쪽 클릭 후 기종 선택 유용한 것 같아서 포스팅합니다. 참고 링크 https://stackoverflow.com/questions/5048524/can-i-start-the-iphone-simulator-without-build-and-run Can I start the iPhone simulator without "Build and Run"? I want to delete an app in the simulator before I "build and run". How can I start the simulator..

    [Swift] JSON 객체를 구조체로 변환하기

    일반적으로 Swift에서 API를 통한 HTTP통신으로 데이터를 주고받을때 Data 타입의 객체를 사용했는데, 소켓 통신을 하면서 JSON 형식의 객체(JSON Object)를 사용했다. JSON 객체를 바로 사용하기엔 불편함이 많아서 구조체로 바꾸기 위해 사용했던 방법을 기록한다. 이전까지 뜻을 정확히 모른 상태에서 사용하다가 이번 기회에 JSON에 대해 알아봤다. JSON이란? JavaScript Object Notation의 약자로 자바스크립트 언어에서 배열 또는 키-값 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트 형식을 사용하는 포맷이다. 프로그래밍 언어와 플랫폼에 독립적이라는 특징이 있어서 다양한 환경에서 사용되며 Swift에서도 객체를 JSON 형식으로 변환하거나 ..

    [Swift] Singleton과 Thread-Safe

    여러 개의 뷰 컨트롤러가 유저의 아이디와 닉네임을 사용해야하는 상황이 있었다. 각 뷰 컨트롤러 클래스에 유저의 아이디와 닉네임을 저장하는 프로퍼티를 정의하여 초기화 시 그 값들을 넘겨주는 방식이었는데, 그렇게 하지않고 유저 정보를 저장하는 공유 객체를 만들어서 필요할때마다 참조하면 편할 것 같다는 생각이 들어 싱글톤 디자인 패턴을 적용하려고 했다. 로그인이 완료된 시점에 싱글톤 객체를 생성하고 로그아웃 시 객체 메모리를 해제하는 방법을 찾다가 우연히 Thread-Safe에 대해 공부하게 된 것을 정리한다. 보통 Swift에서 싱글톤 패턴 구현 방법을 찾으면 아래의 방법이 사용된다. class Singleton { static let shared = Singleton() private init(){} } ..

    [Swift] 초기화(Initialization)란?

    이 글은 스위프트 공식 문서를 한국어로 번역한 Swift Language Guide의 초기화 챕터를 간단하게 정리한 글 입니다. 공식 문서를 번역해주신 분들에게 감사의 말씀을 전합니다. 초기화란? 초기화는 클래스, 구조체, 열거형 타입의 인스턴스를 사용하기 위해 준비하는 단계로서, 타입마다 초기자(initializer)를 정의하여 초기화할 수 있습니다. 초기자는 init 이라는 키워드를 사용하여 정의할 수 있고 이때 여러 파라미터를 갖도록 만들 수 있습니다. 인스턴스를 사용하기 위해서는 내부의 모든 저장 프로퍼티가 초기값을 갖고 있어야 합니다. 따라서 저장 프로퍼티의 선언과 동시에 값을 할당하여 기본값을 설정하거나 그렇게 하지 않고 초기자를 통해 특정 값을 갖도록 할 수도 있습니다. 1. 옵셔널 타입의 ..