Giter Site home page Giter Site logo

timertiti / titi_ios Goto Github PK

View Code? Open in Web Editor NEW
24.0 1.0 5.0 131.35 MB

공부를 위한 타이머 TimerTiTi 티티

Home Page: https://apps.apple.com/us/app/timertiti-티티-공부를-위한-타이머/id1519159240

Swift 99.96% Ruby 0.04%
app combine stopwatch swift timer uikit xcode ios instagram swiftui

titi_ios's People

Contributors

minsangkang avatar shinhyogeun avatar sujeong000 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

titi_ios's Issues

일반회원가입 이메일 입력창 개발 (8h)

Background | Issue 발행 배경

로그인 프로세스 중 일반회원가입의 이메일 입력창을 구현한다

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 로그인 화면에서 회원가입 버튼을 누르면 | | 이메일 입력창이 표시된다.
  • mac이 아닌 기기의 경우 | 키보드의 done 버튼을 눌러 | 회원가입 프로세스가 진행된다.
  • mac인 경우 | 화면 하단에 다음 버튼이 표시되어 해당 버튼을 눌러 | 회원가입 프로세스가 진행된다.
  • iPhone인 경우 | 좌우 여백을 고정하여 | UI가 표시되도록 한다.
  • iPad 이상인 경우 | 좌우 컨텐츠 크기를 400으로 고정하여 | UI가 표시되도록 한다.
  • iPad 이상인 경우 | textField focus 전환시 | scrollView의 위치를 조정한다.
  • dark & light 모드가 전환되는 경우 | .accentColor 모디파이어를 통해 | 알맞은 컬러로 변경한다.

Reference

현지화 구조 개발 (8h)

Background | Issue 발행 배경

기존 iOS 언어에 따른 Localization 방식에서 TiTi 앱 내 Setting을 통해 언어를 선택할 수 있는 새로운 구조로 Localization을 구현

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 현지화가 필요한 문장의 경우 | 언어 key값에 따라 | 현지화된 문장이 표시된다.
  • 사용자가 Setting으로 선택하지 않은 경우 | iOS 언어에 따라 | 한국어, 영어, 중국어 중 하나의 값을 가진다.
  • font가 적용된 현지화 문장의 경우 | 언어 key값에 따라 | font체가 선택되어 표시된다.
  • 언어 key 값의 경우 | 사용자가 Setting으로 선택한 값에 따라 | 한국어, 영어, 중국어 중 하나의 값을 가진다.
  • 사용자가 system 언어를 선택하면 | UserDefaults 저장 값을 제거하여 | 한국어, 영어, 중국어 중 하나의 값을 표시한다.

Reference

Log 설정 바텀시트 추가 (12h)

배경

현재 Setting 창에 새로운 기능이 추가되기에 앞서 추가 Depth를 통해 Setting창의 정리가 필요한 시점에 도달했다고 느껴졌다.
또한 Log 창과 관련된 테마 컬러, 목표 시간 설정기능들을 Log 창 내로 이동하는 개선이 필요하다고 느껴졌다.


요구사항

  • LogVC 설정버튼 추가
  • BottomSheetViewController 생성
  • LogSettingVC 생성

닉네임 입력 화면 개발 (4h)

Background | Issue 발행 배경

로그인 프로세스 중 닉네임 입력 화면을 개발한다. 이메일 입력 화면, 또는 비밀번호 입력 화면에서 전환되도록 구현한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • SignupEmailModel은 | SignupType, SignupVenderInfo? 값을 인자로 받아 | init 되도록 개선한다.
  • loginView 화면에서 | 회원가입을 하는 경우 | SignupType 값을 의존성 주입하여 SignupEmailModel을 생성한다.
  • emailView 화면에서 | password 화면으로 이동하는 경우 | SignupInfosForPassword를 의존성 주입하여 SignupPasswordModel을 생성한다.
  • 비밀번호 입력 화면에서 | done 버튼을 통해 info들을 통해 | 의존성주입을 통해 SignupNicknameModel을 생성한다.
  • 로그인 화면에서 | Google로 로그인, Apple로 로그인을 통해 | 의존성주입을 통해 SignupNicknameModel을 생성한다.
  • 닉네임이 입력된 후 | done 버튼을 통해 | 정규식을 체크한다.

비밀번호 재설정 프로세스 UI 구현

Background | Issue 발행 배경

비밀번호 재설정 기능을 제공하기 위한 닉네임 입력 화면, 이메일 입력 화면, 비밀번호 재설정 화면을 구현한다.
개발이 진행되기에 앞서 TLR 작업이 먼저 필요하다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Singin 화면에서 비밀번호 찾기 누를 시 | | 닉네임 입력화면이 표시된다.
  • 닉네임 입력화면이 표시되면 | focus 활성화를 통해 | 키보드가 표시된다.
  • 키보드의 done 버튼을 누르면 | 닉네임 정규식 확인, node.js 서버 내 닉네임 확인을 통해 | 오류 문구가 표시된다.
  • 키보드의 done 버튼을 누르면 | 정규식, 닉네임이 일치하는 경우 | 이메일 입력 화면으로 전환된다.
  • 이메일 입력화면이 표시되면 | focus 활성화를 통해 | 키보드가 표시된다.
  • 키보드의 done 버튼을 투르면 | 이메일 정규식 확인, node.js 서버 내 이메일 확인을 통해 | 오류문구가 표시된다.
  • 키보드의 done 버튼을 누르면 | 정규식, 이메일이 일치하는 경우 | 비밀번호 재설정 화면으로 전환된다.
  • 비밀번호 재설정 화면이 표시되면 | focus 활성화를 통해 | 키보드가 표시된다.
  • 비밀번호가 입력된 후 done 버튼을 누르면 | 정규식 확인을 통해 | 오류 문구가 표시된다.
  • 비밀번호가 입력된 후 done 버튼을 누르면 | 정규식이 일치하는 경우 | 비밀번호 재 입력 화면이 표시된다.
  • 비밀번호 재입력 입력된 후 done 버튼을 누르면 | 일치하지 않는 경우 | 오류 문구가 표시된다.
  • 비밀번호 재입력 입력된 후 done 버튼을 누르면 | 일치하는 경우, node.js POST 요청을 통해 | 비밀번호 변경이 요청된다.
  • 비밀번호 변경 요청이 정상적으로 수신된 경우 | | 비밀번호 변경 완료 화면이 표시된다.
  • 비밀번호 변경 완료 화면 내 로그인하러 갈래요 버튼이 눌린 경우 | | dismiss 된다.

Mac용 TiTi ver7.15.6 업데이트 (2h)

Background | Issue 발행 배경

서버이전에 따라 Mac에서 새로운 서버를 통한 기록동기화 기능을 사용하기 위하여 7.15.6 버전으로 업데이트한다

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • mac용 빌드가 되기 위하여 | mac/7.15.3 브렌치를 rebase 하여 | 동작되도록 한다.
  • appstore로 배포한다.
  • firestore의 정보들을 업데이트 한다.

firestore로부터 server URL를 수신받는 구조로 로직 수정 (8h)

Background | Issue 발행 배경

서버 url 변경 및 서버 이용불가시 안전하게 데이터가 저장되기 위하여 로직을 수정한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 서버를 이용하고자 하는 화면에 진입시 | firestore를 통해 받은 url을 통해 | 접근한다.
  • firestore를 통해 url을 받을 수 없는 경우 | 네트워킹 문제, 서버 이전에 해당하므로 | 로그아웃이 아닌 사용불가 UI가 표시된다.

새로운 Admob 계정 연결 (4h)

Background | Issue 발행 배경

새로운 Admob 계정을 연결하여 광고수입을 받을 수 있도록 구현한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Admob 계정을 연결한다.
  • TestFlight로 팀내 테스트를 진행한다.
  • 문제가 없는 경우 바로 반영한다.

일반로그인 화면 구현 (8h)

Background | Issue 발행 배경

회원 관리 기능을 제공하기 위하여 이메일로 로그인, 또는 회원가입을 할 수 있는 일반로그인 화면을 구현한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • LoginSelectView에서 | 이메일로 로그인 클릭시 | navigation으로 LoginView로 이동된다.
  • LoginView로 들어오면 | | TextField 및 버튼이 표시된다.
  • textField값이 변경되면 | 정규식에 맞는지 확인하여 | 로그인 버튼이 활성화된다.
  • textField 외부를 터치시 | 키보드가 표시된 경우 | 키보드가 닫힌다.
  • 키보드가 표시된 경우 | done 버튼을 눌러 | 다음 textField로 이동한다.

Login 및 Signup UI 개선, keyboard 가림문제 개선 (8h)

Background | Issue 발행 배경

TestServer를 통해 기록동기화를 사용하시는 분들이 존재하며 오래전부터 지원했기 때문에 키보드가 가려지는 문제를 해결하고자 한다.
UI를 개선하며 디바이스별로 키보드 가림문제를 해결하고자 UI조정 분기처리 로직을 구현한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Login 및 Signup 페이지로 이동시 | testMode인 경우 storyboard 형식이 아닌 | SignupLoginVC가 표시되도록 한다.
  • Login 및 Signup 페이지로 이동시 | 아이폰인 경우 | 세로화면으로 고정한다.
  • Login 및 Signup 페이지로 이동시 | 로그인인 경우 | 이메일 textField를 가린다.
  • viewWillLayoutSubviews 메소드가 불릴시 | | 레이아웃 조정 함수가 실행된다.
  • UIResponder.keyboardWillShowNotification 수신시 | | y값 계산을 통해 높이가 조절된다.
  • textFieldDidBeginEditing 수신시 | textField에 해당되는 origin 값을 계산하여 | 키보드와 y값 계산을 위한 origin 값을 저장한다.
  • textFieldDidEndEditing 수신시 | 키보드가 내려가는 상태와 동일하여 | y값을 초기화한다.
  • 높이조절시 | 키보드의 y값과 textField의 y값을 계산하여 키보드의 y값이 작거나 같은 경우 | bounds.origin.y 값을 조정한다.
  • 레이아웃 조정 함수가 불릴시 | | width를 조절한다.
  • width 조정시 | 디바이스 타입에 따라 | width를 조정한다.

Apple 로그인 기능 개발 (4h)

Background | Issue 발행 배경

회원가입 프로세스 중 Apple 로그인을 통한 회원가입 프로세스를 개발한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Apple로 로그인 버튼을 누르면 | | Apple 로그인 팝업창이 열려 로그인이 되도록 한다.
  • CustomView로 만든 Apple 로그인 버튼을 누르면 | ASAuthorizationControllerDelegate를 통해 | Apple 로그인이 되도록 한다.

로그인 문제 해결 (ATS, KeyChain 문제 해결) (4h)

Background | Issue 발행 배경

iOS17로 올라가면서 Network 또는 KeyChain 문제가 발생하여 로그인이 안되는 문제로 유추되는 상황이 발생하였다.
시뮬레이터, 또는 다른 디바이스에서 앱을 제거시 정상적으로 KeyChain이 초기화될 수 있도록 개선한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • AppDelegate 내에서 | didFinishLaunchingWithOptions 메소드 실행시 | logined 값에 따라 초기화가 될 수 있도록 한다.
  • ServerURL 요청시 | ATS(App Transport Security)가 문제없이 동작되어 | 네트워크를 송수신할 수 있어야 한다.
  • 로그인시 | Network로 부터 token을 수신받은 경우 | KeyChain에 정상적으로 저장될 수 있도록 한다.
  • dev모드 빌드시 | keyChain 영역을 분리하여 접근하여 | release 모드와 영향이 없도록 해야 한다.

Month Widget 인앱데이터 표시 기능 구현 (16h)

배경

  • TiTi 현재 월 전체의 날짜별 기록을 한눈에 볼 수 있는 기능이 없는 상태이므로, 첫 위젯으로 Month 위젯을 제작한다
  • 앱에서 저장한 데이터를 위젯에서 표시할 수 있도록 구현한다.

요구사항

  • 앱 -> Shared Container 데이터 저장
  • Shared Container -> 위젯 데이터 추출
  • 위젯: 데이터 표시

현지화 추가반영 및 중국어 정식 지원 (12h)

Background | Issue 발행 배경

기존 NSLocalizedString 기반 현지화를 Localized.string 기반으로 지원되도록 추가 반영하며, 중국어를 정식 지원할 수 있도록 한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 현지화 문구가 필요한 경우 | Localized.string 함수를 통해 | 현지화 문장으로 표시한다.
  • 현지화 문구표시가 필요할 때 | Typographys.font 함수를 통해 | 폰트를 표시한다.
  • Setting 탭을 현지화한다.
  • Timer 탭을 현지화한다.
  • Stopwatch 탭을 현지화한다.
  • Tasks 화면을 현지화한다.
  • Todo 탭을 현지화한다.
  • Log 탭을 현지화한다.
  • 위젯을 현지화한다.
  • 기타 현지화를 반영한다.

이메일 입력화면 Model 생성, Common View로 분리 및 개선 (8h)

Background | Issue 발행 배경

이메일 입력창과 같이 비슷한 UI로 표시되는 특징을 분석하여 커스텀뷰 및 Modifier를 생성한다
또한 @StateObject를 사용하여 Model로 데이터를 다루도록 개선한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 이메일 입력화면으로 이동시 | SignupEmailModel을 생성하여 | @StateObject로 생성하여 지닌다.
  • 프로퍼티래퍼들의 경우 | @EnvironmentObject, @focusstate와 같은 꼭 SwiftUI View내 존재해야 하는 것이 아니면 | SignupEmailModel 내 @published 변수로 지니도록 개선한다.
  • SwiftUI View 내에서 | Model 내 @published 변수의 값, 또는 $를 통한 양방향바인딩을 사용하여 | 값을 표시하고 수정할 수 있도록 한다.
  • Model 내 로직이 필요한 경우 | Model 내 로직을 통해 @published 값이 변화되어 | SwiftUI View 내에서 .onChange 모디파이어를 통해 수신받아 로직이 실행될 수 있도록 한다.
  • Model 내에서 네트워킹 결과 등 수신된 경우 | Model 내 로직을 통해 @published 값이 변화되어 | SwiftUI View 내에서 .onReceive 모디파이어를 통해 수신받아 로직이 실행될 수 있도록 한다.
  • 인증키를 발급받으면 | SignupEmailInfo를 생성하여 | 비밀번호 입력화면으로 의존성 주입이 되도록 한다.
  • 회원가입과 관련된 모든 화면에서 공통적으로 사용되는 View들을 | Common View 내 분리하여 생성하여 | 각 회원가입 화면에서 사용할 수 있도록 개선한다.
  • 회원가입과 관련된 모든 화면에서 공통적으로 사용되는 Modifier들을 | Common Modifier 내 분리하여 생성하여 | 각 회원가입 화면에서 사용할 수 있도록 개선한다.

조사 필요

Setting 내 로그인하기 추가 (2h)

Background | Issue 발행 배경

회원 관리 기능을 개발하기 위하여 로그인 화면으로 이동하는 것이 필요하다. 따라서 Setting 내 로그인하기 버튼을 추가하여 LoginSelectView로 이동하는 것을 확인한다.

Acceptance Criteria | 허용 기준

Given | When | Then

  • Setting 화면으로 진입하면 | | 프로필 섹션과 로그인하기 버튼이 표시된다.
  • 로그인하기 버튼을 누르면 | | LoginSelectView가 fullscreen modal로 표시된다.
  • LoginSelectView에서 dismiss를 누르면 | | fullscreen modal이 닫힌다.

Login화면 키보드 표시에 따른 화면이동 구현 (4h)

Background | Issue 발행 배경

Login 화면에서 키보드 높이에 따라 TextField가 가려지는 문제를 해결하고자 한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Login 화면에서 키보드가 표시되는 경우 | @StateFocus 값에 따라서 | 입력중인 TextField가 가려지지 않도록 표시된다.
  • Login 화면에서 키보드가 사라지는 경우 | | 원상복귀되어 표시된다.

앱 업데이트 강제성 분기처리 구현 (4h)

Background | Issue 발행 배경

서버 ip변경 및 기타 주요업데이트를 진행하기에 앞서 api를 통해 수신받은 앱 최신버전 정보 및 강제성 필요 여부에 따라 업데이트를 해야만 사용 가능한 경우와 업데이트를 하지 않아도 사용 가능한 경우를 분기처리하고자 함.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 앱 launch 시점에 | firestore에서 최신버전 정보를 수신받아 | 강제성 필요여부에 따라 Alert를 표시한다.
  • 앱의 sceneDidBecomeActive 시점에 | firestore에서 최신버전 정보를 수신받아 | 강제성이 필요한 경우 Alert를 표시한다.
  • 최신버전을 수신할때 | | GetLastestVersionUseCase -> LastestVersionRepository -> FireStoreAPI -> Network를 통해 정보를 수신받는다.

VC, VM, Manager 명칭 관련 리펙토링 작업 (3h)

배경

Manager, Controller, ViewModel 명칭들을 일관되도록 작성하고, 불필요한 코드가 제거되어야 Android 개발자에게 관련 코드를 보여주기에 용이하고, 이해하시기 더욱 좋을 것으로 예상되어 진행합니다.

요구사항

  • VC, VM 명칭 반영
  • RecordController → RecordsManager 명칭 정정
  • DailyViewModel → DailyManager 명칭 정정(DailyViewModel 과 DailyManager 병합) 및 리펙토링
  • 사용되지 않는 class 및 struct 제거
  • 기타 변수명, 함수명 수정
  • TiTiColor 변수명 및 삭제 리펙토링

Setting창 리펙토링 (8h)

배경

현재 Setting 창에 새로운 기능이 추가되기에 앞서 추가 Depth를 통해 Setting창의 정리가 필요한 시점에 도달했다고 느껴졌다.
또한 Log 창과 관련된 테마 컬러, 목표 시간 설정기능들을 Log 창 내로 이동하는 개선이 필요하다고 느껴졌다.


요구사항

  • Setting창 섹션, 셀 정리
  • Setting: 설정 섹션 추가창 구현
    • Setting > 알림
    • Setting > UI
    • Setting > 컨트롤

설문조사 한글, 영문 분리되어 표시되도록 개선 (2h)

Prerequisite | 선행되어야 하는 PR들

Related | 관련된 Issue들

Background | Issue 발행 배경

설문조사를 받아야 하는 시점이 발행하였고, 현재 외국인 사용자들이 많은 상태이나, 현재코드상으로는 한글용 설문조사만 뜨게 되어있는 상태.
선택된 언어에 따라 한글용, 영문용 설문조사를 띄우도록 개선하는 상황이 필요해졌다.

Acceptance Criteria | 허용 기준

Given When Then
Survey를 fetch하는 getSurveys 함수를 부를시 NetworkURL.Firestore.surveys url 값을 사용시 NetworkURL 내에서 Language.currentLanguage 값에 따라 한글용 url, 영문용 url를 반환해요

Month Widget 달력 UI 구현 (16h)

배경

  • TiTi 현재 월 전체의 날짜별 기록을 한눈에 볼 수 있는 기능이 없는 상태이므로, 첫 위젯으로 Month 위젯을 제작한다
  • 위젯뷰를 개발하기에 앞서 systemMedium 형태의 위젯을 개발하는 기본 틀을 제작한다

요구사항

  • MonthWidgetData.now 기준으로 달력 표시
  • MonthWidgetView 달력 표시 로직 구현

한글이 아닌 언어의 경우에 한글이 표시되는 문제 해결 (4h)

배경

한글의 경우 한글용 TiTi가, 그 외의 언어의 경우 영어용 TiTi가 정상적으로 표시되어야 했으나,
Locale.current.languageCode 값을 통해 디바이스의 설정된 언어를 가지고 오는 과정에서 잘못된 값을 반환하는 문제를 확인하였다.
따라서 해당 문제를 고친 후 정상적으로 디바이스의 설정된 언어에 따라 한글용, 영어용이 표시되도록 개선이 필요하다.


요구사항

  • Locale.preferredLangues.first 를 통해 디바이스 언어값 확인
  • Language 구조체 내 .en, .ko 반환되도록 로직 수정
  • Localizable.strings 파일을 그대로 활용할 수 있도록 Bundle.localizedBundle 변수 구현

Setting 최신버전 수신 복구, 불필요 로직 제거 (4h)

Background | Issue 발행 배경

강제 업데이트 로직을 반영하기 위한 업데이트를 하기에 앞서 최신버전 수신 로직 변경에 따라 최신버전이 표시되도록 수정한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Setting 화면에 진입시 | useCase를 통해 | 최신버전을 표시한다.
  • ? 문구가 표시되는 화면에 진입시 | 관련 UI 및 url들을 제거하여 | 표시되지 않도록 개선한다.
  • DailyTimetableGraph 표시시 | 기록이 24시간 연속된 경우 | 그래프가 벗어나는 문제를 해결한다.
  • 같은시간대에 TimeTable이 겹치는 경우 | 누적시간이 긴 막대를 먼저 그린 후 | 누적시간이 작은 막대를 후에 그린다.

로그인 및 회원가입 선택화면 개발 (4h)

Background | Issue 발행 배경

회원 관리 기능을 개발하기 위하여 로그인 및 회원가입을 선택할 수 있는 화면을 개발한다.

Acceptance Criteria | 허용 기준

Given | When | Then

  • LoginSelectView에 진입하면 | | Apple, Google, Email 로그인 버튼이 표시된다.
  • Email Login을 누르면 | | LoginView로 Navigation 되어야 한다.
  • 로그인없이 서비스 이용하기를 누르면 | | dismiss 되어야 한다.

비밀번호 입력화면 개발 (6h)

Background | Issue 발행 배경

로그인 프로세스 중 일반회원가입의 비밀번호 입력창을 구현한다

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 비밀번호 TextField의 경우 | 기본값으로 원문 표시가 비활성화, 텍스트가 입력된 경우 | 우측에 원문 표시를 할 수 있는 버튼이 표시된다.
  • 비밀번호 입력 후 | done 버튼을 누르는 경우 | 비밀번호 정규식을 확인한다.
  • 비밀번호 정규식이 확인되면 | 올바른지 여부에 따라 | 경고문구 또는 비밀번호 재입력으로 진행된다.
  • 비밀번호 재입력이 표시된 상태에서 | 비밀번호 원문을 터치하는 경우 | 비밀번호 재입력이 사라진다.
  • 원문 표시여부에 따라 | SignupSecureFieldView 내에서 | TextFieldView 또는 SecureTextFieldView가 표시되도록 한다.

앵프라맹스

  • 화면에 진입시 자동으로 passwordTextField가 활성화되며 키보드가 표시된다.
  • SecureTextField에 입력시 첫글자는 원문으로 보여야 한다.
  • SecureTextField 우측에 눈 아이콘을 통해 원문을 볼 수 있어야 한다.
  • SecureTextField 에 원문이 표시된채로 입력할 수 있어야 한다.
  • SecureTextField 입력이 완료되면 secure 상태로 표시되어야 한다.
  • 키보드의 done 버튼을 눌러 다음 TextField로 이동한다.
  • 만약 정규식에 어긋나는 경우 TextField가 그대로 유지되며 text는 지워진채로 하단에 경고문이 표시되며 빨간색으로 표시되어야 한다.
  • TextField의 값이 입력되면 빨간색에서 파란색으로 변경되어 표시되어야 한다.
  • 비밀번호를 다시 변경하고자 TextField를 선택시 이후에 입력된 TextField는 초기화되며 사라져야 한다.
  • 아이패드의 경우 TextField 활성화에 따라 스크롤되어 화면에 가려지지 않도록 한다.
  • 아이패드의 경우 우측 여백을 통해 스크롤이 될 수 있도록 한다.
  • 최종적으로, 사용자는 키보드 입력과 done 버튼만으로 모든것을 할 수 있어야 한다.
  • 또한 사용자가 선택한 Textfield에 따라 초기화되어 표시되어야 한다.

Widget 경고문구 및 여백, 배경색 문제 해결 (2h)

Background | Issue 발행 배경

새로운 iOS17이 배포되면서 기존에 동작되던 위젯이 정상적으로 표시되지 않는 문제를 발견, 신속한 대응이 필요하다.
오류문구는 다음과 같다.
Please adopt containerBackground API

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • widget 선택창에서 | TiTi를 선택한 경우 | 미리보기가 잘 표시되어야 한다.
  • TiTi 위젯을 추가한 경우 | | 정상적으로 표시되어야 한다.
  • TiTi 위젯을 추가한 경우 | | 배경색이 정상적으로 표시되어야 한다.
  • TiTi 위젯 설정창에서 | | 배경색이 정상적으로 표시되어야 한다.

Login화면 화면크기변화에 따른 UI조정 및 Localization 반영 (4h)

Background | Issue 발행 배경

SwiftUI로 만들어지는 LoginSelectView에서 화면크기 변화를 인지하여 width를 조정한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 화면크기 변화를 인지하여 | width 크기에 따라 | UI를 조정한다
  • UI 조정시 | DeviceType에 따라 | width 길이를 조정한다
  • Text로 표시되는 String 문구들을 | LocalizedString에 따라 | 현지화되어 표시된다

Network Error 핸들링 개선 (4h)

Background | Issue 발행 배경

TestServer를 통해 로그인, 회원가입을 하는 기능을 네트워크 결과값을 optional 값으로 전달하는 식으로 구현된 상태이다.
따라서 success, fail에 따라 Result가 전달되도록 개선하고자 한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • NetworkStatus는 | 네트워킹 성공 및 실패에 따라서 | statusCode값을 지닌 형태 또는 FAIL, TIMEOUT 값을 반환한다.
  • NetworkResult는 | 네트워킹으로 수신받은 data 존재여부에 따라 | Data? 값과 NetworkStatus 값을 반환한다.
  • NetworkError는 | statusCode 값과 수신받은 error message 내용에 따라 | error를 반환하는 역할을 담당한다.
  • Network 요청을 하면 | 네트워킹 성공, 또는 에러 경우에 따라 | Result<반환타입, NetworkError> 를 반환하도록 한다.
  • Network 요청을 수신받은 경우 | success, fail 여부에 따라 | 분기처리 하여 수행되도록 한다.
  • Network 요청이 fail로 받은 경우 | NetworkError 값에 따라 | 분기처리 하여 에러를 표시할 수 있도록 한다.
  • 회원가입 버튼을 누른 경우 | textField 입력값이 잘못된 경우 | 관련 문구를 표시한다.
  • 회원가입 버튼을 누른 경우 | 네트워크 문제인 경우 | 관련 문구를 표시한다.
  • 회원가입 버튼을 누른 경우 | 기존 회원과 겹치는 정보가 있는 경우 | 관련 문구를 표시한다.
  • 로그인 버튼을 누른 경우 | 네트워크 문제인 경우 | 관련 문구를 표시한다.
  • 로그인 버튼을 누른 경우 | 일치하는 회원정보가 없는 경우 | 관련 문구를 표시한다.

Google 로그인 기능 개발 (4h)

Background | Issue 발행 배경

회원가입 프로세스 중 Google 로그인을 통한 회원가입 프로세스를 개발한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Google로 로그인 버튼을 누르면 | | Google 로그인 팝업창이 열려 로그인이 되도록 한다.
  • CustomView로 만든 Google 로그인 버튼을 누르면 | | Google 로그인이 되도록 한다.

Checklist

  • SPM: GoogleSingIn 추가
  • OAuthClientID xcconfig 추가
  • OAuth 클라이언트 ID 및 맞춤 URL 스킴 추가
  • 선택사항: 백엔드 인증 구성
  • 인증 리디렉션 URL 처리
  • 사용자의 로그인 상태 복원 시도
  • Google 로그인 버튼 추가
  • 프로필 정보 가져오기

Reference

Signin 화면 내 닉네임 찾기, 비밀번호 찾기, 문의하기 추가

Background | Issue 발행 배경

비밀번호를 잊어버리는 사용자들을 대처하기 위해 하단에 닉네임 찾기, 비밀번호 찾기, 문의하기 버튼들을 추가한다

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • Signin 화면으로 진입시 | TLR 기반으로 | 하단에 닉네임 찾기, 비밀번호 찾기, 문의하기 버튼이 표시된다.
  • 닉네임 찾기 버튼을 누를 시 | TLR 기반으로 | 메일발송 화면이 표시된다.
  • 문의하기 버튼을 누를 시 | TLR 기반으로 | 메일발송 화면이 표시된다.

Calendar Widget 설명, 추가방법 추가 (8h)

배경

Calendar Widget의 컬러, Daily 목표시간 설정등과 더불어 위젯이 어떤걸 나타내는지, 어떻게 추가하는지에 대해 사용자에게 알리는 내용이 추가적으로 필요하겠다는 생각이 들었다.
우상단에 info 버튼을 추가하여 사용자가 추가로 확인가능한 정보를 제공하고자 한다.


요구사항

  • Navigation Bar 내 info 버튼 추가
  • info 버튼 menu 설정
  • HowToUseWidgetVC 생성
  • HowToUseWidgetVC WebView 구현
  • HowToAddWidgetVC 생성
  • HowToAddWidgetVC 내용 구현

공지사항 팝업 표시 기능 구현 (8h)

Background | Issue 발행 배경

서버 이전과 같이 중대 공지사항을 팝업으로 표시하기 위한 기능을 개발한다.

Acceptance Criteria | 허용 기준

Given(조건, 상황) | When(행동) | Then(결과)

  • 앱에 진입하면 | firestore를 통해 공지사항 내용 받아 | 공지사항을 표시하기 위한 정보를 받는다.
  • 공지사항 정보를 받은 경우 | 0.5초 딜레이 이후 | 팝업으로 표시한다.
  • 오늘 그만보기를 누르면 | 날짜를 UserDefaults 내 저장하여 | 같은날짜의 경우 표시되지 않도록 한다.

Reference

Develop, Release Scheme, Configuration 분리(2h)

Background | Issue 발행 배경

Github Flow로 개발하는 과정에서 개발중인 기능과 중간에 출시되는 기능간의 분리를 통해 원활한 개발이 될 수 있도록 한다.

Acceptance Criteria | 허용 기준

| Given | When | Then |

  • Develop Scheme 을 선택하는 경우 | 빌드, Archive 시 | 개발용 app bundle id가 분리되어 실행되어야 한다. |
  • Configuration의 경우 | Develop, Release에 따라 | 각기 다른 Configuration을 토대로 실행되어야 한다. |

Calendar Widget 설정창 추가 (8h)

배경

새롭게 추가되는 Calendar Widget의 설명과 컬러, Daily 목표시간 설정 등 위젯 설정창이 앱 내부에 필요하겠다는 생각이 들었다.
Calendar Widget의 설정창을 추가로 새롭게 제작한다.


요구사항

  • SettingCalendarWidgetVC 생성
  • CalendarWidgetView 표시 구현
  • UserdefaultsManager.Keys 값 추가
  • Targettime 설정 기능 추가
  • 기록이 없는 경우 표시를 위한 뷰 추가

Month 위젯뷰 기본 틀 제작 (24h)

배경

  • TiTi 현재 월 전체의 날짜별 기록을 한눈에 볼 수 있는 기능이 없는 상태이므로, 첫 위젯으로 Month 위젯을 제작한다
  • 위젯뷰를 개발하기에 앞서 systemMedium 형태의 위젯을 개발하는 기본 틀을 제작한다

요구사항

  • MonthWidgetView 제작
  • MonthWidget 제작
  • MonthWidgetEntryView 제작
  • MonthWidget_Previews 코드 작성
  • dark: iPad 10.2-inch, iPhone 13 Pro, iPad Pro 12-inch
  • light: iPad 10.2-inch, iPhone 13 Pro, iPad Pro 12-inch
  • MonthWidgetEntry 생성
  • SelectColorIntent 생성
  • MonthWidgetProvider 제작
  • MonthWidgetData 생성
  • MonthWidgetView Intent 값에 따른 color 표시 구현
  • MonthWidgetEntryView: widgetURL 설정

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.