새싹 19

ViewController에 Tabman 넣는 방법 ( ContainerView 활용 )

사진과 보는것 같이 중간에 Tabman을 넣으려면 어떻게 해야할까? 가장 쉽고 따라 할 수 있는 방법을 알려드리겠습니다!! ㅎㅎ 1. 일단 Tabman 라이브러를 설치하고 Tabman 기본 구성을 따라 적습니다. 2. 여기서 가장 중요한 점은 변수로 설정한 baseView의 역할입니다. 역할은 Tabman의 버튼의 레이아웃을 설정하는 겁니다. 3. Tabman의 버튼을 설정합니다. 여기서 핵심은 .custom으로에 레이아웃 설정한 baseView가 들어간다는 겁니다. 이렇게 하면 기초적인 부분은 끝났습니다. 참 쉽죠? 한번 정리를 하자면 Tabman 라이브러리 설치 -> import -> baseView 생성 -> 레이아웃 조정 -> bar 설정 -> addBar에 설정한 baseView 적용 ViewC..

새싹 2023.12.13

DiffableDataSource + SkeletonView 라이브러리 적용하기

SkeletionView를 적용하는 방법은 아래 링크를 통해서 확인 가능합니다. https://github.com/Juanpe/SkeletonView GitHub - Juanpe/SkeletonView: ☠️ An elegant way to show users that something is happening and also prepare them to which con ☠️ An elegant way to show users that something is happening and also prepare them to which contents they are awaiting - GitHub - Juanpe/SkeletonView: ☠️ An elegant way to show users that so..

새싹 2023.11.09

앱 스토어 KO 언어 설정 방법

앱 커넥트에서 기본언어 한국어로 설정 했는데, 앱 스토어 EN으로 올라간적이 있어 설정 방법을 공유해보려고 합니다. 1. 첫번째 해당 xcode 파일의 오른쪽 클릭해서 패키지 내용 보기로 들어갑니다. 2. pbxproj 파일을 엽니다. 3. developmentRegion를 찾아서 en으로 되어 있는 부분을 ko로 변경해주고 닫을 닫아주면 됩니다. 4. Archive를 통해 업데이트를 합니다.

새싹 2023.10.31

새싹 - 앱 출시 프로젝트 회고

새싹 과정 2개월차에 앱 출시 프로젝트를 진행하게 되었습니다. 2개월동안 정말 많은 것들을 배웠습니다. 네트워크(URLSesseion, Alamofire), DB(Realm), 다국어, UIButtonConfiguration, Delegate패턴, 싱글톤 패턴, AutoLayout, 값 전달 , CodeBase, ARC, MVC, MVVM, DiffableDataSource... 등등... (이왜진... 2개월 동안 정말 쉴 새없이 달려왔네요) 2개월이란 시간내에 단순히 지식을 전달하는 형식이 아니라 멘토님께서 정말 기초 개념부터 시작해서 빌드업으로 (진짜 빌드업이... 넘사벽임...갓잭) 비전공자들도 쉽게 이해 할 수 있게 머리속에 때려 넣어주었고 데일리 과제를 통해 복습을 하며 배운 기술을 직접 적용..

새싹 2023.10.25

Realm을 사용시 이미지를 Documents에 저장할때 이미지 URL로 저장하는 방법은?

Realm을 사용시 이미지를 Documents에 저장할때 이미지 URL로 저장하는 방법은? 결론을 미리 말하자면 고유한 ID로 설정하자!! 경로와 jpg로 변환하는 함수를 만들고 // MARK: - 도큐먼트 폴더에 이미지 파일 저장하는 메서드 func saveImageFileToDocument(fileName: String, image: UIImage) { // 1. 도큐먼트 폴더 경로 찾기 guard let documnentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } // 2. 경로 찾기 let fileUrl = documnentDirectory.appendin..

새싹 2023.09.06

URLSession에서 Generic 사용하기

API 통신 하면서 여러 API를 불러오게 되면 각각 URLSession을 만들어 데이터를 불러와야 됐다... 그렇다면 한개의 URLSession만 만들어서 사용할 수 있는 방법은 없을까? 에서 출발한 포스팅입니다. 그럼 시작하겠습니다. 컬렉션 뷰를 사용해서 만들어보겠습니다 일단 VC를 깔끔하게 사용하기 위해서 VC, View, Cell을 분리해주었습니다. ( 배운거 사용하고 싶었어요...) Cell을 먼저 만듭니다. import UIKit import SnapKit class FirstCell : UICollectionViewCell { let imageView = { let image = UIImageView() image.backgroundColor = .gray image.contentMode =..

새싹 2023.09.01

SPM으로 SnapKit을 추가하고 UIView를 상속받을때 Import Snapkit을 하지 않아도 되는 이유!

모두 한번쯤은 사용 해본 SnapKit에 대해 파헤쳐보겠습니다. 바로 본론으로 들어가서 해당 View에 import SnapKit을 해주지 않았는데 해당 View를 상속 받으면 Snapkit이 사용 가능한것에 의문이 들었습니다. 어떻게 이게 가능한걸까요? VC에만 import Snapkit을 해주긴했지만 이것 때문일까요? 네! 그래서 찾아봤습니다. 일단 SnapKit의 정의에 대해 봤는데요 정의 첫줄에 희한한게 있었습니다 ( 원래 가장 첫줄이 중요한거 아시죠? ) == 는 연산자인데... lhs, rhs 뭔가 left, right를 나타내는거 같은 느낌이었고 코드를 해석해보자면... 왼쪽과 오른쪽 타입이 같은지 보고 결과로 Bool로 줘 그럼 또 Snapkit.ConstraintItem은 뭘까요 더이상 ..

새싹 2023.08.29

스토리보드 -> CodeBase 전환시 발생할 수 있는 오류 (Indicator편)

스토리보드로 만들어진 것을 Code로 리팩토링하는 과정에서 kingFisher에서 제공하는 코드가 현 프로젝트에서 작동하지 않아 imageView가 로딩될 동안 indicator를 직접 적용해보자 에서 출발하였습니다. 처음에는 kingFisher에서 제공하는 indicator와 캐싱작업을 도와주는 코드를 사용하였습니다. 실제 프로젝트(스토리보드)에서 적용한 사례입니다. 짧은순간이지만 indicator가 잘 보이시죠? 이거 영상으로 찍느라 고생했어요 흑흑... 진짜 세상에 순간포착인줄.... 이렇게 작용되는 것이 코드 베이스로 적용하게 되면 화면에 로드가 이상하게 되었습니다. 엥??? 왜이럴까요 ㅎㅎ 세상이 나를 억까한다... 프로젝트에서 여러 부분을 확인을 해본 결과 kingFisher에서 제공해주는 코..

새싹 2023.08.28

CodeBase에서 UITabBar 적용하기

코드 베이스로 두가지 방법을 통해 UITabBar를 만들어봅시다. 먼저 스토리보드를 삭제하고 SceneDelegate에서 셋팅을 해줍니다. 1. 첫번째 방법 UITabBarController을 채택한 TabbarViewController로 넘어와서 viewDidLoad()에서 해당 TabBar에서 보여줄 VC를 만들어준다. mainVC의 속성에 접근해서 TabBar를 셋팅해준다. 어떻게 바로 접근이 가능한건가요? 따로 설정해주는것은 없는데... UIVIewCotroller에는 Extension으로 tabbarItem 프로퍼티가 있습니다. 그렇기 때문에 tabbarItem으로 접근해서 tabbar의 속성을 사용할 수 있습니다. 그리고 setViewControllers() 메서드를 사용해서 배열안에 만들어놓..

새싹 2023.08.27

iOS CustomView 만들때 super.init(frame: frame)만 가능한 이유

로직 분리를 위해 CstomView를 만들때 init(frame:CGRect)를 호출하는데 왜 super.init(frame: frame)에 frame을 넣는지 궁금했다. ※ 여기서 잠깐 CGRect에 대해 알고 계신가요? CGRect는 origin과 size로 구성되어 있습니다. origin: x, y 좌표 size: width, height UIView 메소드의 정의를 확인해보니 extension으로 frame이 자료형으로 CGRect로 구성되어 있는 것을 볼 수 있습니다. 아! 자료형이 같으니까 넣을 수 있겠구나 override init(frame: CGRect) { // frame: CGRect로 구성되어 있음 super.init(frame: frame) } 아니... 그래서 frame이 뭐냐고 ..

새싹 2023.08.24