IOS

    [iOS] App Bundle: 앱 개발의 핵심 구성 요소

    App Bundle iOS앱은 코드, 이미지, 사운드와 같이 앱이 작동하는데 필요한 많은 파일로 구성된다. 이러한 모든 파일은 App Bundle이라는 단일 패키지로 결합된다. App Bundle을 여행에 필요한 모든 것이 들어있는 여행 가방이라고 생각하면 된다. 옷, 신발, 세면도구를 여행가방에 담는 것처럼 개발자는 앱에 필요한 모든 파일을 App Bundle에 담는다. App Bundle에는 각 파일 유형에 대한 특정 구조와 위치가 있으므로 운영체제가 앱을 실행하는데 필요한 항목을 쉽게 찾을 수 있다. App Bundle은 앱을 실행하는 코드가 포함되어있다. 이 코드는 컴파일되어 사용자 입력 처리와, 화면 정보 표시에 이르기까지 앱의 모든 기능을 처리한다. 코드 이외에도 이미지, 사운드, 비디오 같이..

    [iOS] - Drawing Cycle(Layout Cycle)

    iOS에서 메인 쓰레드는 1초에 60번 ~ 120번(기기의 Hz마다 다르다) 화면을 다시그린다. 무조건 60번, 120번을 다시 그리는 게아니라 필요한 경우! 화면을 다시그린다. 화면을 그리는 동안엔 아래와 같은 함수 호출 싸이클이 생긴다. updateConstraints() ➡️ layoutSubviews() ➡️ draw() updateConstraints (오토레이아웃이 업데이트 되야 할 때에만) 제약: 오토레이아웃을 업데이트 한다. 현재 기기의 화면 크기를 기준으로 제약을 업데이트한다. 동적인 오토레이아웃 변경이 일어날 경우 제약조건을 변경한다. 명시적으로 호출할 순 없다. 오토레이아웃으로 인한 제약이 확정되는 시기이다. // 테이블 뷰 셀 같은 컴포넌트 요소를 코드로 구성할 때 활용할 수 있다...

    [iOS] - 파일시스템(Document, Library, tmp...)

    iOS 파일시스템은 SandBox 구조를 띄고있다. Sanbox: 아이들에게 놀이터 모래사장 안에서만 돌 수 있도록하고, 나올 때는 흙을 털고 나오게하는 것처럼, 내부와 외부를 적절하게 분리시키는 구조라고 할 수 있다. iOS는 기본적으로 앱마다 별도의 파일을 생성하여 공유 되지 않도록 하고 외부러부터 들어온 접근에 대해 보호되는 영역으로 시스템이 부정적으로 조작되는 것을 막는 보안형태를 띄고있다. SandBox 구조의 예 A앱에서 문서를 작성하면 B앱에서 열 수 없다. A앱에서 B앱이라는 전달과정을 거쳐야만 해당 파일에 접근할 수 있다. 그렇기 때문에 옛날에는 특정 앱에서 만든 문서는 특정 앱에서만 볼 수 있었지만 지금은 Files앱을 통해 볼 수 있다. 만약 파일 시스템 구조가 SandBox구조가 아..

    [iOS] - 앱의 생명주기 App's Life Cycle (AppDelegate, SceneDelegate)

    앱의 생명주기란 App의 생명주기는 App의 실행/종료 및 App이 Foreground/Background 상태에 있을 때, 시스템이 발생시키는 event에 의해 App의 상태가 전환되는 일련의 과정을 뜻한다. App은 여러가지App이 한 번에 실행될 수 있고, 어떤App을 사용하다가 어떤 App을 사용할 수 있다. 그럼 App이 다른App으로 전환될 수 있고 백그라운드로 전환될 수 있다. 또는 App이 완전히 종료될 수 있다. 이런 시점에 운영체제가 자동으로 호출하는 메서드가 존재하며, 이러한 메서드 실행의 과정을 앱 라이프 사이클(App Life Cycle)이라고 부른다. 앱 라이프 사이클은 AppDelegate와 SceneDelegate에 의해 관리된다. Foreground/Background Fo..

    [iOS] - Storyboard 없이 프로젝트 생성하기

    개발자로써 Storyboard없이 UI를 구성할 줄 알아야 한다고 느낀 후 코드로 UI를 작성하는 연습을 하고있다. 그래서 Storyboard 없이 프로젝트를 생성하는 방법에 대해 기록하려고 한다. 1. 프로젝트 생성 2. Main.storyboard 삭제 스토리보드를 삭제❌❌❌한다. 에러가 발생한다 Main스토리보드를 찾을 수 없으니까.. 3. info.plist 수정 1. Storyboard Name을 삭제한다. 2. Main storyboard file base name을 찾아 삭제한다. ⭐️⭐️⭐️ 커맨드(command) + S 프로젝트 저장!! 4. 초기 ViewController(Root)을 지정한다. 파일명: SceneDelegate.swift class SceneDelegate: UIRes..

    [iOS] 화면이동과 데이터전달.

    1. Code Next: 코드로 화면 이동. 다음 화면이 코드로 작성되어 있을때만 가능한 방법 2. StoryBoard with Code 코드로 스토리보드 객체를 생성해서, 화면 이동 버튼 3. StoryBoard with Segue 스토리보드에서의 화면 이동(간접 세그웨이) 버튼 4. Storyboard with Button 스토리보드에서 버튼의 직접 세그웨이 1. Code Next : 코드로 작성한 컨트롤러로 코드를 통해 이동 다음 넘어갈 화면을 스토리보드가 아닌 코드로 작성해놓았다. 다음 화면은 FirstViewController.swift이다. let firstVC = FirstViewController() //코드로 작성한 FirstViewController를 메모리에 올림 firstVC.som..

    iOS - 애니메이션효과

    UIView.animate(withDuration: 0.3) { //지속시간 self.stackView.layoutIfNeeded() } stackView내부의 객체가 변화한다면 (오토레이아웃)동적으로 변화하게끔 만들어 애니메이션 효과를 줄 수 있다.

    iOS - Code UI(Auto Layout)

    오토레이아웃 width : 정렬 사각형의 너비 height: 정렬 사각형의 높이 top: 정렬 하각형의 상단 bottn: 정렬 사각형의 하단 Horizontal: 수평 Vertical: 수직 Leading: 리딩, 왼쪽 Trailing: 트레일링, 오른쪽 CenterX: 수평중심 CenterY: 수직중심 Anchor 오토레이아웃을 활용해 어떤 중심을 기준으로 얼마나 띄울건지에 대한 것을 Anchor라고 한다. top = topAnchor / leading = leadingAnchor 높이 = heightAnchor / 넓이 = widthAnchor // leading 얼마를 띄울건지 //상속받은 view의 leading을 기준으로 //30만큼 //활성화 //true emailTextFieldView.le..

    iOS - Network 연결 확인하기(Swift)

    Network 프레임워크를 사용해서 현재 기기의 인터넷 연결 상태와 연결 타입을 알 수 있다. 네트워크 연결을 지속적으로 감지하여 연결이 끊기면 실시간으로 알려준다. 1. NetworkMonitor 클래스 생성 Network 프레임워크를 import하고 네트워크 연결을 감지하는 싱글톤 패턴의 클래스를 별도로 만든다. NWPathMonitor로 현재 네트워크 연결 상태를 확인할 수 있다 // file: NetworkCheck.swift import Foundation import Network final class NetworkCheck{ static let shared = NetworkCheck() private let queue = DispatchQueue.global() private let moni..

    iOS. 동시성 프로그래밍 DeadLock, Race condition 해결방법

    💥동시성 프로그래밍의 문제점 데드락(Dead Lock)과 경쟁조건(Race Condition)에 관한 이야기이다. 한 개의 자원에 여러개의 쓰레드가 접근하려고 한다 ==> RaceCondition Racecondition이 발생해 여러가지 쓰레드에서 공유자원에 동시접근을 막기위해 걸어잠굴 수 있다. 각 쓰레드는 공유자원에 여러개의 동시접근을 막기위해 사용중인 동안 다른 쓰레드의 공유자원 접근을 막을 수 있다. 데드락은 아래에서 다루고 있다. https://clamp-coding.tistory.com/72 운영체제(OS) - 식사하는 철학자 문제(Dining Philosophers Problem) 식사하는 철학자 문제 철학자 다섯이서 원형 식탁에 둘러앉아 생각에 빠지다가, 배고플 땐 밥을 먹는다. 그들의 ..