[iOS] TLDR 개발 일지 - TLDR 앱 출시
·
iOS 프로젝트/TLDR
앱스토어 등록 완료 앱스토어 등록을 완료했습니다~!! 앱스토어에 TLDR이라고 검색하면 저희 앱이 나와요 ㅎㅎ 링크는 https://apps.apple.com/kr/app/tldr/id6444666209 여기! PC는 아래 QR을 아이폰으로 인식하세요. TLDR 앱은 미리 앱 소개 포스팅도 했었는데요. (TLDR 개발 일지 - 앱 소개) 조금 더 편하게 개선하였으니 구경 한 번씩 해보세요. 피드백 사항이 있다면 댓글로 알려주시면 감사하겠습니다. 감사합니다! 아직은 초보 개발자입니다. 더 효율적인 코드 훈수 환영합니다! 공감과 댓글 부탁드립니다.
[iOS] TLDR 개발 일지 - Summarize 화면 View 구현
·
iOS 프로젝트/TLDR
Summarize 화면 Summarize 화면은 요약 글의 키워드와 요약 글을 볼 수 있는 화면입니다. 요약 글에는 키워드가 하이라이트 처리되어 있는데요. 키워드 리스트 중 하나를 클릭하면 그 키워드만 하이라이트가 됩니다. Summarize 화면의 핵심 View는 상단의 키워드 리스트와 텍스트 하이라이트입니다. 텍스트 하이라이트는 UITextView 원하는 문자에만 색상 넣기(여러 개도 OK)에서 다루었기 때문에 여기에서 따로 작성하진 않을게요. 키워드 리스트 키워드 리스트는 키워드 길이마다 셀의 길이를 다르게 해줘야 합니다. 즉, 동적으로 셀의 길이를 결정해줘야 해요. 이 처리를 해주지 않으면 이런 웃긴 모양이 되어버려요 ㅋㅋ 그럼 어떻게 동적으로 셀의 크기를 결정해줄까요? 저는 UICollection..
[iOS] TLDR 개발 일지 - 홈 화면 기능 구현
·
iOS 프로젝트/TLDR
홈 화면 기능 구현 TLDR 홈 화면은 긴 글을 입력하고 버튼을 누르면 서버에 긴 글을 전송합니다. 오늘은 ViewModel 구현과 서버에 전송하는 부분에 대해 다루겠습니다. ViewModel 구현 홈 화면의 기능이 많지 않기 때문에 ViewModel도 그리 길지 않습니다. ViewModel은 구조체를 이용해서 구현했습니다. 상속, 객체 비교같은 클래스의 특성을 이용하지 않기 때문에 구조체를 이용했어요. 그리고 ViewModel에서 text 데이터를 가지고 있게 했습니다. 사용자가 text를 입력하면 updateText 메서드를 통해 해당 Observable의 데이터를 갱신합니다. text가 갱신되면 ViewController의 데이터 바인딩 부분에서 View를 업데이트 합니다. TextView에 tex..
[iOS] TLDR 개발 일지 - 홈 화면 View 구현
·
iOS 프로젝트/TLDR
서론 이번 포스팅은 홈 화면 View 구현에 대한 이야기입니다. 서버 통신 관련 내용은 다음 포스팅에 작성할게요. 이번 구현 내용에서도 MVVM에 대한 고민점이 포함되어 있습니다. ViewController를 View로만 사용한다는 게 직접 해보니 꽤 어렵네요... 이미 잘 되어 있는 MVVM 프로젝트를 참고하면서 하면 과정이 효율적일 수 있습니다만, 제가 직접 고민하는 과정이 사라질 거 같아서 일부러 보지 않고 있습니다. 혹시나... 궁금해하시는 분이 계실 거 같아서 ㅎㅎㅋㅋ 프로젝트가 작은 편이라 제가 먼저 한 번씩 고민해본 뒤에 모범 MVVM 프로젝트를 참고해서 다시 한 번 리팩토링을 할 계획입니다. 답답하셔도 조금만 참아주세요 ㅎㅎ 홈 화면 스크린샷 홈 화면 스크린샷을 먼저 보여드릴게요. 상단에 ..
[iOS] TLDR 개발 일지 - 구현(공통, 런치 화면 v2)
·
iOS 프로젝트/TLDR
MVVM Observable 구현 MVVM은 Observable을 이용해 구현했습니다. RxSwift, Combine도 있지만 일단 가장 기본적인 방법으로 구현해보고 싶었습니다. 프로퍼티 옵저버를 이용해 value가 변경되면 등록한 리스너를 실행합니다. 이렇게 MVVM의 데이터 바인딩을 구현하였습니다. 추후 RxSwift나 Combine을 이용해 리팩토링을 할건데 둘 중 무엇을 선택할지는 그때 상황을 봐야할 거 같네요. 웬만하면 프레임워크인 Combine을 선택하지 않을까 싶습니다. HttpError 구현 Http 에러 상황에 따라 catch를 다르게 하면 예외처리를 좀 더 세부적으로 할 수 있겠다고 생각했습니다. 그래서 HttpError라는 열거형을 구현했어요. 근데 명확하게 구현하는 게 무척 어렵더라..
[iOS] WWDC18 - Image and Graphics Best Practices
·
WWDC/iOS
서론 이미지에 대한 WWDC를 찾아보며 이번 포스팅에서 정리할 "Image and Graphics Best Practices"까지 왔습니다. 사실 바로 직전 WWDC 포스팅(WWDC18 - iOS Memory Deep Dive)은 이 세션을 위한 정리였어요 ㅎㅎ iOS Memory Deep Dive의 이미지 파트 부분을 읽고 오시면 이해가 더 잘 되지 않을까 싶습니다. Image and Graphics Best Practices "Image and Graphics Best Practices" 세션은 총 세 개의 주제를 다룹니다. UIImage와 UIImageView, UIKit을 이용해 그리는 방법, 고급 CPU와 GPU 기술입니다. 이번 포스팅에서는 UIImage와 UIImageView에 대한 주제만 ..
[iOS] UserDefaults / CoreData / Realm 간단 비교
·
iOS/개념 & 개발
서론 UserDefaults, CoreData, Realm은 iOS의 대표적인 데이터 저장 방식입니다. 저는 지금까지 진행한 프로젝트에서는 UserDefaults만 사용했었습니다. 많은 데이터를 저장할 필요가 없기 때문이었는데요. 추후 데이터 저장이 필요한 상황에서 기술 선택을 용이하게 하기 위해 비교 글을 포스팅하기로 했습니다. 각각 어떤 특징이 있는지 알아야 필요한 기술이 뭔지 정확히 알 수 있겠죠?? 장단점을 비교하는 것이 주 목적이기 때문에 깊은 내용까진 다루지 않습니다. UserDefaults 먼저 UserDefaults입니다. UserDefaults는 포스팅으로 다룬 적이 있는데요. ([Swift] UserDefaults 알아보기) UserDefaults는 데이터 저장을 위한 가장 기초적인 방..
[iOS] WWDC18 - iOS Memory Deep Dive
·
WWDC/iOS
서론 메모리 공부를 하다 WWDC18의 iOS Memory Deep Dive까지 도달했습니다. 제 실력은 파도풀인데 다이빙하다 머리 깨지지 않을까 걱정했지만 일단 들어봤습니다 ㅎㅎ 내용도 어렵고 말도 너무 빨라 역대급으로 힘들었네요 ㅋㅋ ㅠ 천천히 하나씩 정리해 봅시다. (중간에 Tool에 대한 내용은 다루지 않았습니다. 지금 Xcode 버전으로 다루는 것이 좋을 거 같아서 나중에 따로 포스팅하겠습니다.) Why Reduce Memory 메모리를 줄이는 이유는 뭘까요? 바로 사용자가 더 나은 경험을 할 수 있기 때문입니다. 앱 실행 속도가 빨라지고 시스템이 더 잘 수행됩니다. 앱이 메모리에 더 오래 유지될 수 있고, 그러다보면 다른 앱도 더 오래 메모리에 남아 있을 수 있습니다. 최종적으론 사용자의 더 ..
[iOS] TLDR 개발 일지 - 기획
·
iOS 프로젝트/TLDR
TLDR 앱에서 집중한 점 TLDR 앱은 기능도 하나고 화면도 두 개 뿐인 작은 앱입니다. 지난 프로젝트들과 비교했을 때 기능은 가장 적지만, 기획 고민은 가장 많이 한 프로젝트가 아닐까 싶습니다. 이번 프로젝트는 사용자 입장에서 생각하려고 노력했습니다. 어떻게 구현하면 사용자가 편할까? 사용자가 정말 이 기능을 좋아할까? 라는 생각을 가지고 회의하면서 기획을 구체화했습니다. 메인 화면 메인 화면에서는 텍스트를 입력할 수 있습니다. 지난 포스팅에서 사용자가 붙여넣기를 더 쉽게 할 수 있는 방법이 없을까 고민하고 있다고 말씀 드렸었는데요. 상단바에 TL;DR 텍스트만 있는 게 무의미한 것 같아 이를 수정해서 Reset 버튼과 Paste 버튼을 추가했습니다. Paste 버튼 Paste 버튼은 사용자가 쉽게 ..
[iOS] TLDR 개발 일지 - 앱 소개
·
iOS 프로젝트/TLDR
TLDR 앱 소개 요즘 사람들은 긴 글에 대한 거부감이 심하다고 합니다. 물론 저도 길이가 긴 글보다는 핵심만 딱! 있는 짧은 글을 좋아해요. 그래서 진행한 토이 프로젝트로 긴 글을 입력했을 때 핵심 요약글이 출력되는 앱입니다. 그래서 앱 이름이 TLDR이에요 ㅎㅎ Too Long; Didn't Read의 줄인 말로 너무 길면 읽지 않는다는 의미라고 하네요. (참고로 한국어 앱 이름은 별다줄임 ㅎ;) 이번 포스팅도 핵심만! 짧게! 앱 소개만 작성하고 다음 포스팅부터 개발 일지를 작성해보겠습니다. 개발은 진행 중이고 연말에 앱스토어에 올릴 예정입니다. 현재는 앱스토어 출시 완료했습니다! (https://jeong9216.tistory.com/573) 스플래시 화면 스플래시 화면입니다. 가운데 TL;DR이 ..
[iOS] 화면 방향에 따라 다른 레이아웃 적용하기 - viewWillTransition
·
iOS/개념 & 개발
화면 방향에 따라 다른 레이아웃 적용하기 세로 레이아웃과 가로 레이아웃이 다른 앱을 쉽게 볼 수 있습니다. 대표적인 기본 앱은 계산기가 있죠. 스마트폰을 가로로 회전시키면 세로 레이아웃에 View가 추가된 레이아웃으로 변경됩니다. 스마트폰만 지원한다면 "세로로 고정시키면 되지 않나?"라고 생각할 수 있지만, 아이패드까지 지원한다면 화면 방향에 따라 적절한 레이아웃을 고려하는 것이 사용자 경험을 증가시킬 수 있습니다. 생각해보세요! 계산기 앱에서 가로 방향에서만 나오는 여러 수식 버튼들이 세로 방향에서도 나오고, 그 영향으로 버튼이 콩알만 해지면 훨씬 불편해지겠죠?? (여러 수식들로 멀미가 나는건 덤..) viewWillTransition(to:with:) 이럴 때 사용할 수 있는 메서드가 viewWill..
[Xcode] Xcode 14.0와 iPhone 14 pro 시뮬레이터
·
IT 소식
Xcode 14.0 업데이트 9월 12일 Xcode 14.0 업데이트가 나왔습니다. iOS 16.0, iPad 16.0 등을 지원하고 iPhone 14 Pro 확인이 가능합니다. 즉 변경된 노치를 확인할 수 있다는 것이죠! ㅎㅎㅎ Xcode UI도 변경된 점이 있는데요. https://developer.apple.com/videos/play/wwdc2022/110427/ 한글 자막을 지원하는 WWDC22에서 바뀐 Xcode를 소개하고 있답니다. 대표적으로는 시뮬레이터 선택지가 심플하게 바뀌었답니다. 저 작은 기기의 아이콘은 앱스토어 커넥트에서도 볼 수 있었는데 이곳저곳 돌려가면서 쓰는거여서 그런지 심플하니 매력적인 거 같아요 ㅎㅎ 아이폰 14 Pro 시뮬레이터 사실 이게 본론이죠? 아이폰 14 Pro 시..
[iOS] 작심삼일 개발 일지 - 4 (스토리보드 분리)
·
iOS 프로젝트/작심삼일
서론 작심삼일은 학업과 새로운 프로젝트로 인해 신규 기능 개발은 잠시 접어둔 상태입니다 그렇지만 코드 정리는 꾸준히 해야할 거 같아서 오랜만에 프로젝트를 열어보았는데요. 최근 알아본 스토리보드 최적화를 작심삼일 프로젝트에 적용하려고 합니다. 전에 비해 굉장히 쾌적(?)해져서 정말 뿌듯하더라고요 ㅎㅎ 오늘 사용할 스토리보드 레퍼런스 포스팅은 https://jeong9216.tistory.com/535 에서 볼 수 있습니다. 기존 스토리보드 구성 기존에는 Main 스토리보드에 모든 화면이 존재했습니다. 화면 자체가 많은 앱이 아니라 불편한 점은 없었지만 화면마다 따로 협업할 경우 문제가 생길 수 있습니다. 그래서 스토리보드 레퍼런스를 이용해 여러 개의 스토리보드 파일로 분리하기로 결정했습니다. 스토리보드 레..
[Swift] WWDC16 - Understanding Swift Performance (3)
·
WWDC/Swift
이전 글 Understanding Swift Performance (2) Generic drawACopy는 Generic을 이용해 매개변수 제약 조건을 주고 있습니다. 이는 프로토콜 타입과 무엇이 다를까요? 제네릭 코드는 매개변수 다형성이라고도 하는 보다 정적(static) 형태의 다형성을 지원합니다. 함수 foo는 Generic으로 만들어졌고 Drawable만 받을 수 있습니다. Point는 Drawable 프로토콜을 준수했으니 foo의 파라미터로 사용할 수 있습니다. 이 foo 함수가 실행되면면 Swift는 제네릭 타입 T를 Point 타입에 바인딩 합니다. 함수 foo가 바인딩과 함께 실행될 때 bar가 호출되면 local 변수는 직전에 사용한 타입인 Point를 가지게 됩니다. 타입은 매개변수를 ..
[Swift] Swift Interview Questions - Beginner(초급)
·
Swift/개념 & 응용
서론 raywenderlich의 Swift Interview Questions에 답변을 달아보려고 합니다. Beginner, Intermediate, Advanced로 나뉘어져 있는데 이번 포스팅에서는 Beginner 질문에 대한 답변입니다. Swift 공부를 하면서 제대로 이해를 했는지, 무엇을 모르는지 알 수 있는 좋은 기회가 될 것 같아요 ㅎ Question #1 tutorial1의 difficulty는 1, tutorial2의 difficulty는 2입니다. 구조체는 값 타입이기 때문에 인스턴스의 변화가 다른 인스턴스에 영향을 주지 않기 때문입니다. 만약 Tutorial이 클래스였다면 tutorial1과 tutorial2는 같은 참조 인스턴스를 가지므로 tutorial1의 difficulty도 2..
유정주
'아이폰' 태그의 글 목록 (3 Page)