iOS 55

CoreData를 사용해서 데이터 저장하기(Create)

Core Data 세팅에서 만든 Item 엔티티를 통해서 새로운 데이터를 저장하는 방법을 알아보자. newItem이라는 이름으로 새로운 Item 객체를 만들어보자. 엔티티 속성에서 Class Definition을 선택하였기 때문에 클래스 처럼 사용할 수 있다. Item을 살펴보면 context 레이블에 우리의 데이터가 임시로 저장될 context를 지정해주어야 한다. AppDelegate에 정의되어 있는 persistentContainer를 통해서 어떻게 context를 지정할 수 있을까? let context = AppDelegate.persistentContainer.viewContext // error 위와 같은 방법으로는 context를 정의할 수 없다. AppDelegate는 AppDelegat..

Core Data 세팅, 동작 구조

새로운 프로젝트를 만들고자 한다면, 프로젝트 생성 시 Use core Data 항목에 체크를 하고 프로젝트를 생성하면 자동으로 세팅된다. 예시로 사용할 CoreDataTest 앱을 생성해보자. 생성된 프로젝트 파일을 다르면 이전까지 만들었던 템플릿 과는 다름을 알 수 있다. CoreDataTest.xcdatamodeld 에 앞으로 우리가 사용할 데이터와 구조를 저장한다. AppDelegate.swift 파일에도 Core Data를 사용하지 않을 때와는 달리 추가적인 코드가 작성되어 있다. 주석을 지운 모습은 다음과 같다. persistentContainer 변수에 붙은 lazy 키워드를 사용해서 변수를 생성하면, 프로그램이 시작할 때 메모리를 할당해주는 것이 아니라 그 변수가 필요할 때 변수에 메모리를 ..

Persistent Data Storage

지금까지는 데이터를 유지하기 위해서 단일 테이블만 사용하였다. UserDefaults 나 plist, Decodable 프로토콜을 사용해서 하나의 테이블에 key-value형식으로 데이터를 저장했던 것이 그러하다. 하지만 여러 개의 테이블이 서로 관계가 있다는 것을 표현하기 위해서는 UserDefaults, plist, Decodable프로토콜만으로는 부족하다. 따라서 database가 필요하다. 데이터를 유지하기 위한 몇 가지 방법들을 살펴보자. Method Use UserDefaults 빠르게 작은 비트의 데이터를 저장할 때 사용한다. 사용자의 이름, 음악의 on/off 등 Codable 사용자가 지정한/만든 객체를 개별적인 plist를 통해 저장할 수 있게 해준다. Keychain 작은 비트의 데이..

Userdefaults로 데이터 Persistency 유지하기

Userdefault는 사용자 기기내에 데이터를 Persistence하게 유지하기 위해서 사용하는 클래스이다. 싱글톤이기 때문에 어디서든 동기화된 데이터를 사용할 수도 있게 해준다. let defaults = UserDefaults.standard defaults 라는 변수를 통해서 유저의 데이터에 접근하거나 새로운 데이터를 저장할 수 있다. 데이터의 저장은 set 메서드를 사용한다. set메서드를 사용하여 User의 default preference에 데이터를 저장할 수 있다. value에는 저장할 데이터가 오고, forKey에는 데이터의 이름이 온다. 데이터를 꺼내 사용할 때는 forKey에서 지정한 이름을 사용한다. 여러 데이터를 저장한 모습을 살펴보자. defaults.set(0.24, forKe..

LottieFiles 를 이용한 iOS 앱에 애니메이션 추가하기.

lottie files를 이용해 앱이 시작하고, 메인화면을 출력하기 전에 간단한 애니메이션을 사용할 수 있다. 메인화면이 아니더라도 앱 내부에 애니메이션을 추가하고 싶을 때 사용할 수 있다. 먼저 Main Screen이라는 Label을 화면 정중앙에 위치시켜보자. 여기서는 stroyboard 파일에 설정하지 않고, 코드로 작성하였는데, 그 이유는 애니메이션이 실행된 후에 Label이 출력되기를 원하기 때문이다. MainViewController.swift에 작성하였다. let titleLabel: UILabel = { let label = UILabel() label.textColor = .black label.textAlignment = .center label.text = "Main Screen" l..

iOS/StoryBoard 2022.01.25

SwfitUI를 이용한 간단한 뉴스 앱 만들기

SwiftUI를 이용한 간단한 뉴스 앱을 만들어보자. 뉴스의 내용은 Hacker News의 내용을 가져올 것이다. H4X0 R News SwiftUI라는 이름으로 프로젝트를 생성해주자. 먼저 가져와줄 데이터를 받기 위해서 hacker new api문서를 참조하자. 우리는 뉴스 홈페이지에 있는 뉴스를 가져올 것이므로 다음 URL을 사용한다. JSON의 구조에 따라 구조체를 만들어준다. url 의url의 타입이 옵셔널인 이유는, url이 포함되어 있지 않은 글도 존재하기 때문이다. url의 값이 nil인데, JSON을 매칭 하려 하면 에러가 발생하기 때문에 꼭 옵셔널로 설정해주어야 한다. JSON을 파싱 해서 뷰에서 사용할 수 있도록 해주는 NetworkManager 클래스를 만들었다. 뷰에서 저장된 데이터..

iOS/SwiftUI 2022.01.24

SwiftUI: Basic

SwiftUI 는 애플의 공식 튜토리얼 페이지 에서 공부할 수 있다. UIkit과 작성하는 방법이 많이 다르다. 각각에 대한 뷰를 만들고 적용시키는 방식으로 되어있다. 먼저 Xcode 를 통해 SwiftUI 프로젝트를 생성해보자. 프로젝트 생성시 interface 로 SwiftUI를 선택하고 프로젝트를 생성하면 된다. ContentView란 출력되는 화면 그자체를 의미한다. 프로젝트의 화면 오른쪽의 resume 버튼을 누르면 작성한 코드의 뷰를 미리 볼수 있다(preview) preview를 이용해서 뷰를 수정하였을 때의 화면을 미리미리 확인할 수 있다. fontWeight나 font와 같은 옵션을 모두 외우고 있을 수 없기 때문에 구글 검색을 적극적으로 활용하자. SwiftUI에서는 겉에서 한번 감싼 ..

iOS/SwiftUI 2022.01.23

Compression Resistanse

label 오브젝트 두개로 시작해보자. 간격은 top, leading, trailing 20씩 주었다. compression registance Priority는 지금 작동하지 않는 상황이다. 단어를 그대로 보면, compresion은 "압축", Registance는 "저항" 이다. 밀려서 눌려버리는 상태를 막아서 내크기를 유지한다는 의미이다. 값이 커질수록 우선순위가 높아져서 크기를 유지시켜준다. "압축되어 찌그러질 때"나타나는 상황이므로, 현재 나의 오브젝트보다 더 큰 오브젝트가 존재할때 필요하다. 따라서 위 그림에서는 필요하지 않다. 위 이미지는 오른쪽의 Label을 너무 길게 만들어서 왼쪽에 있는 Label을 찌그러트릴 수 있기 때문에 에러가 발생한다. 나 자신의 오브젝트를 압축할 것인지, 다른 ..

iOS/AutoLayout 2022.01.17

Hugging Priority

Priority설명을 하기 전에, Label의 경우 크기가 정해져 있지 않기 때문에 크기를 지정해 주지 않아도 contraint 에러가 발생하지 않는 다는 것을 알아두자. trailing contraint가 빠져있기 때문에 이후에 다른 뷰와 겹칠 수 있어 발생하는 경고이다. trailing을 40으로 설정해주었더니 에러가 발생한다. 오브젝트의 size inspector에서 priority를 설정할 수 있다. 내가 가지고 있는 컨텐츠 값 그대로 유지를 할 수 있는 우선순위를 Hugging Priority라고 한다. 숫자가 높을수록 우선순위가 높아 우선 수행된다. 우선순위 값은 1~1000사이이다. 1000이라는 값은 어떤 설정에서도 그 속성은 풀리지 않음을 의미한다. 무조건 그 값을 유지한다는 의미이다...

iOS/AutoLayout 2022.01.17

Firebase를 이용한 앱개발2: 프로젝트에 Firebase추가하기

Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com Firebase홈페이지에 접속해 오른쪽 위의 콘솔로 이동한다. 프로젝트 만들기 프로젝트 이름 지정 구글에서 제공하는 여러가지기능을 사용하고 싶다면 체크한 후 프로젝트를 만든다. 나는 채팅앱 프로젝트에서는 사용하지 않을 것이므로 체크하지 않았다. 프로젝트가 생성되고 나면 Firebase를 추가할 앱으로 iOS를 선택해주자. 앱의 도메인을 입력한다. 닉네임과 비밀번호는 선택사항이다. 앱의 도메인은 Xcode에서 Bundle Identifier를 확인해 동일하게 입력해준다. GoogleService-Info.plist 파일을 다운로드하여 오..