분류 전체보기 146

동시성 프로그래밍이 왜 필요할까?

위 글은 인프런 Allen님의 다음 강의내용을 정리한 것입니다. iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션 동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., - 강의 소개 | 인프런... www.inflearn.com iOS 를 처음공부할 때 유데미의 강의를 보면서도, UI와 관련된 여러 작업을 하면서도 DispatchQueue 라는 것을 사용하였다. 그때는 그저 따라하기만 하다가 이러한 작업들이 Concurrent Programming과 관련있다는 것을 알게되었고, 꽤나 중요한 내용인것 같아 공부하면서 ..

공식문서로 UIKit공부하기: UIKit에 대해서

Apple Developer Documentation developer.apple.com 애플 공식문서에 나와있는 UIKit과 Xcode가 iOS와 tvOS를 위해서 제공하는 기본적인 기능들에 대해서 알아보자 🖍 Overview UIKit 프레임워크는 iOS와 tvOS앱을 개발하기 위해서 필요한 필수적인 요소들을 제공해준다. 개발자가 원하는 콘텐츠를 화면에 출력하거나, 콘텐츠와 상호작용하거나, 시스템과 상호작용하도록 할 수 있다. 또한 앱도 기본적인 동작을 UIKit에 의존하고, UIKit은 이러한 동작들을 개발자의 의도에 맞도록 커스텀하는 여러 방법들을 제공해준다. Xcode는 앱을 처음만들었을때의 기본 템플릿을 제공해준다. 예를 들어서, 아래의 사진은 Single View App 프로젝트를 생성했을 ..

iOS 2022.03.27

SceneDelegate에 대해서...

라섹수술을 한 후에 안약넣는 시간을 종종 잊어서 안약넣을 시간을 알려주는 앱이 있으면 좋겠다고 생각했다. 간단하게 개발하는 과정에서 앱의 백그라운드에서도 푸시 알림기능을 추가하였는데, 이 푸시알림을 등록하는 시점을 어디로 잡아야할지 고민하게 되었다. 원래도 iOS앱의 라이프 사이클을 대강알고 있던 터라 앱이 백그라운드에 들어가면 뷰도 사라질 것이고 그럼 viewDidDisappear(_:)메서드에 푸시알림으로 추가하면 되지 않을까? 🤔 라고 생각했지만 틀린생각이였다. 기존의 AppDelegate는 process LifeCycle과 UI LifeCycle을 다루었는데, 앱을 종료하는 것은 viewDidDisappear메서드와 관련있는 UI LifeCycle 과는 관련이 없었기 때문이다. 나는 사용자가 앱을..

iOS 2022.03.27

02. Introduction To Operating System

운영체제란? 운영체제는 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어로, 컴퓨터 하드웨어와 각종 소프트웨어, 그리고 사용자를 연결해주는 계층을 말한다. 좁은 의미의 운영체제 좁은 의미로 이야기하는 운영체제를 커널이라고 부른다. 운영체제의 핵심적인 부분을 커널이라고 부르고, 컴퓨터를 부팅한 후부터 계속 메모리에 올라가 있다. 넓은의미의 운영체제 넓은 의미로 이야기 할 때는 커널을 포함해서 주변 시스템을 다루는 유틸리티를 포함한 것을 의미한다. 운영체제의 목적 운영체제의 목적은 크게 두가지로 나누어 볼 수 있다. 하드웨어를 효울적으로 관리, 컴퓨터를 편리하게 사용 운영체제의 위치가 하드웨어의 바로 윗부분, 소프트웨어와 사용자의 아랫부분에 설치되기 때문에 하드웨어를 효율적으로 관리하는 것이 가장 중요한 역할..

운영체제 2022.03.19

SwiftUI: Text() 사용법

Text는 기본적으로 SwiftUI에서 문자를 화면에 출력하기 위해 제공하는 메서드이다 Text를 다룰 때 어떤 옵션이 있는지 알아보고 여러가지 자료형, Date, Bool, Int형에 대해 출력하는 방법에 대해서도 알아보자. 기본적인 사용법. Text("Hello World") Text 메서드 안에 문자열을 주면 UI에 텍스트가 나타난다. 하지만 이대로 사용하기에는 글씨가 너무 작고, 스타일도 기본 스타일이다. Text("Hello, world!") .font(.system(.largeTitle, design: .default)) .fontWeight(.regular) .font 보통 위와 같이 .font(.system(...))으로 사용한다. '.'을 입력하면 Xcode에서 제공해주는 여러가지 옵션을..

iOS/SwiftUI 2022.03.08

SwiftUI에서 info.plist가 누락된 문제

SwiftUI 프로젝트를 생성했을 때 info.plist파일이 누락되는 것을 볼 수 있다. 어떻게 된 일일까? 먼저 이러한 문제는 Xcode13 에서 프로젝트를 생성했을 때 나타나는 문제이다. 만약 Xcdoe 12 이하의 버전에서 프로젝트를 생성하고 Xcode 13에서 프로젝트를 열었다면 아무 문제가 없다. SwiftUI 프로젝트를 Xcode 13에서 생성하면 info.plist 파일이 없는 것을 볼 수 있다. Project Navigator의 모습이 다음과 같다. 왜 info.plist 파일이 없어졌나? 그 원인은 Xcode 13 Release Note 에서 찾아볼 수 있었다. Apple Developer Documentation developer.apple.com 빌드 시 대상에 대한 전체 Info...

iOS/SwiftUI 2022.03.07

SwiftUI: @Binding 이란?

@State는 데이터의 변화를 확인해서 바로 뷰에 적용하는 것이라고 했다. 이번에 배울 내용은 @Binding! Binding이라는 의미는 기본적을 "묶는다" 는 의미를 가지고 있다. 데이터의 상태로 서로 묶어서 뷰와 뷰끼리의 데이터 공유가 가능하게 해준다. 변수의 Binding을 설정하고 나면, 다른 곳에서 정의한 변수처럼 바로!! 사용가능하다. 다른 표현은 isActivated변수의 기본값을 true로 하고있는 것 뿐이다. @Binding 변수가 정의된 구조체를 호출할 때는 '$'를 변수이름앞에 첨가해주면 된다😋 MyContentView.swift에서 isActivated 변수를 넘겨주는 것이다

iOS/SwiftUI 2022.03.07

SwiftUI에서 커스텀 셀, 리스트 구현하기.

비디오의 목록을 출력하기 위해 UIKit의 tableView역할을 하는 List를 사용해보았다. 어떻게 사용자가 만든 커스텀 Cell을 테이블뷰에 적용하는지, 또 NavigationView를 SwiftUI에서 적용해보았다. 자 그럼 커스텀 셀을 구현해보자. 우리가 만들고자하는 커스텀 셀의 UI는 다음과 같다. 이미지(썸네일)이 나오고, 동여상의 제목과 업로드날짜가 적혀있는 형태이다. 이를 VStack, HStack으로 구분해보면, 이미지와 텍스트부분이 HStack으로 쌓이고, 타이틀과 업로드날짜가 VStack에 쌓인다. 이미지, 제목, 업로드 날짜는 Video라는 구조체에 정의되어 있고, 파라미터로 구조체를 전달받아 출력한다. struct VideoCell: View { var video: Video v..

iOS/SwiftUI 2022.03.07

SwiftUI 날씨앱 UI 짜며 배운점(22.03.07)

간단하게 SwiftUI를 사용해서 실제 온도를 보여주는 것이 아닌! UI만을 작성해보고 배운점을 정리해본다. 백그라운드의 그라디언트는 LinearGradient 구조체를 사용하여 지정할 수 있다. LinearGradient(gradient: Gradient(colors: [isNight ? .black : .blue, isNight ? .gray : Color("lightBlue")]), startPoint: .topLeading, endPoint: .bottomTrailing) .edgesIgnoringSafeArea(.all) gradient프로퍼티로 Gradient 구조체를 매개변수로 받는다. 그라데이션으로 사용할 색상(여기서는 밤에는 검정-회색, 낮에는 파랑-하늘) lightBlue는 내가 정의해..

iOS/SwiftUI 2022.03.07

Swift: private과 fileprivate

private과 fileprivate접근수준의 차이는 fileprivate 접근수준으로 지정한 요소는 같은 파일의 어떤 코드에서도 접근할 수 있지만, private 접근수준으로 지정한 요소는 같은 파일이라도 다른 타입이라면 접근이 불가능하다. 하지만 extension으로 같은 타입을 확장하는 코드가 같은 파일에 존재하는 경우에는 사용할 수 있다. public struct SomeType { private var privateVariable = 0 fileprivate var fileprivateVariable = 0 } // 같은 타입의 익스텐션에서는 private요소에 접근할 수 있다. extension SomeType { public func publicMethod() { print("\(self.p..

Swift 2022.02.21