Giter Site home page Giter Site logo

labellab's Introduction

📱 Popopot

깃허브리드미

macOS12+ Swift5.7 SwiftUI Firebase

✨ About App

"깃허브 라벨을 쉽게 업로드하자"

개발자들이 새로운 저장소를 만들 때, 다른 사람 혹은 자신이 만든 라벨 템플릿을 쉽게 업로드할 수 있는 애플리케이션입니다.
App store Link

📹 Demo

Login to github Upload labels to repository
로그인 업로드
Make your own template Copy others template
템플릿추가 카피

🎆 Screenshots

Label Upload To Repository My Label Template Copy Others Template
스크린샷 2022-10-31 14 27 50 스크린샷 2022-10-31 14 27 43 스크린샷 2022-10-31 14 28 03

⚙️ Tech Stack

  • SwiftUI - macOS UI 를 SwiftUI로 구성했습니다.
  • Clean architecture - AppState 에서 상태와 화면 이동 정보를 관리하는 아키텍처
  • XCTest - 45개의 테스트로, Domain Logic을 쉽게 검증할 수 있습니다. (Mock Data Layer, Mock Service Layer를 활용한 유닛 테스트 구현)
  • async/await - async/await 를 통해 비동기 처리를 구현했습니다.

🫂 Authors

HoJongE Avery
@HoJongE @Avery

🔏 License

MIT

labellab's People

Contributors

hojonge avatar chaneeii avatar

Stargazers

Jaeyong avatar  avatar

Watchers

 avatar  avatar

Forkers

imparang

labellab's Issues

[Feature] Github Authorization get Access token & Firebase sign In with access Token

인증이 필요한 작업을 할 때, 인증정보가 없다면 인증 과정을 진행하는 창을 띄운다.

  • token 을 통해 github access token 을 요청한다.
  • access token 을 통해 firebase authentication 에 로그인한다.

🤔 Completion conditions

  • token 으로 github access token 을 요청한다.
  • access token 으로 firebase authentication 에 로그인한다.

👀 Related issues

  • Related issue1 (#3)

[Feature] Github Authorization UI

인증이 필요한 작업을 할 때, 인증정보가 없다면 인증 과정을 진행하는 창을 띄운다.

  • Popup UI 구현
    image
    image

🤔 Completion conditions

  • 로그인 X UI 구현
  • Github 세팅완료 UI 구현

👀 Related issues

  • Related issue1 (#3 )

[Feature] Issue Label Maker Empty UI

Please write a story

  • Please write tasks
    • Additional clarification if necessary

스크린샷 2022-08-23 오후 1 58 45

🤔 Completion conditions

  • CheckPoint1
  • CheckPoint2

👀 Related issues

  • Related issue1 (#issue-number1)
  • Related issue2 (#issue-number2)

[Feature] Upload to Github UI 구현

  • Repository List UI 구현
    image
  • Repository Upload Popup UI 구현
    image

🤔 Completion conditions

  • Repository List UI 구현
  • Repository Upload Popup UI 구현

👀 Related issues

[Feature] 템플릿 이름, 설명, 태그 변경 이벤트 처리 방법 및 Interactor 구현

image

위 화면에서, 템플릿 이름과 설명은 단순 텍스트 필드로 구성되있으며, 엔터를 치거나 편집이 끝날 경우 즉각적으로 DB 업데이트가 이루어져야 할 것으로 보인다.

방법

  1. 만약 텍스트 필드에 변경 사항이 일어나면, 변경 사항을 저장하는 버튼이 활성화되고, 버튼을 클릭하면 변경사항을 업데이트 하는 방식 -> 제일 쉬운 방식이며, 그러나 유저의 인터랙션이 한 번 더 일어나야 하므로 UX적인 측면에서 좋지 않은 방법
  2. 텍스트 필드에서 편집 후 엔터를 치거나, 윈도우의 다른 부분을 클릭해서 포커스를 벗어나는 상황, 즉 텍스트 필드 편집이 끝났을 때 관련 속성 업데이트를 진행함. 아주 자연스러운 방법이라고 생각된다. 유저는 텍스트 필드를 수정하면 당연히 수정한 데이터로 업데이트 된다고 생각할 것이기 때문

따라서 2번 방법을 선택하는데, 한 가지 이슈가 있다면, 텍스트 필드를 연속적으로 수정해서 데이터 업데이트 요청이 단시간에 계속해서 이루어지는 경우, 이전 요청이 끝날 때 까지 다음 요청을 기다려야 한다는 것이다.
네트워크 요청이기 때문에 먼저 간 작업이 먼저 끝나는 것을 보장할 수 없기 때문에, Concurrent 하게 요청한다는 것이 말이 안 된다. 제일 먼저 수정한 데이터가 제일 마지막에 완료된다면 유저의 의도와 어긋나게 된다.

따라서 async task 를 Serial Dispatch Queue 에 넣어서 해결할 수 있을 것으로 보임 한 번 시도해보자!

Task(priority: .userInitiated) {
    for _ in 0...100_0000 {
        print("First")
    }
}

Task(priority: .userInitiated) {
    for _ in 0...100_0000 {
        print("Second")
    }
}

RunLoop.current.run(until: .now.addingTimeInterval(3000))

// 당연히 First 와 Second 가 섞여서 나오게 된다.

#22

🤔 Completion conditions

  • 템플릿 제목 업데이트 기능 구현
  • 템플릿 설명 업데이트 기능 구현

Reference

[Feature] MyTemplateListInteractor 구현하기!

image

위 화면에 존재하는 기능을 수행하는 Interactor 를 구현합니다! 다음과 같은 Task 가 존재할 것으로 생각됩니다.

  • Template 추가하기 -> Template 을 추가한 뒤에 추가한 템플릿으로 이동해야 함!
  • Template 오픈 여부 변경하기!
  • Template 삭제하기!
  • Template 불러오기!

🤔 Completion conditions

  • Template 오픈 여부 변경하기 구현 및 테스트
  • Template 삭제하기 구현 및 테스트
  • Template 불러오기 구현 및 테스트
  • Template 추가하기 구현 및 테스트

[Feature] Github Authorization App State Binding

인증이 필요한 작업을 할 때, 인증정보가 없다면 인증 과정을 진행하는 창을 띄운다.

  • 구현된 인증 기능과 UI 를 연결한다.

👀 Related issues

  • Related issue1 (#3)
  • Related issue2 (#4)
  • Related issue3 (#5 )

[Feature] Github Authorization deep link handle

인증이 필요한 작업을 할 때, 인증정보가 없다면 인증 과정을 진행하는 창을 띄운다.

  • Github redirect url 로 전달된 deep link 를 파싱하고, access token 을 request 한다.

🤔 Completion conditions

  • DeepLink handling
  • request github access token
  • save access token to keychain

👀 Related issues

  • Related issue1 (#3 )

[Feature] Github Authorization App 등록

인증이 필요한 작업을 할 때, 인증정보가 없다면 인증 과정을 진행하는 창을 띄운다.

  • Github Authorization app 등록
  • Github 토큰 요청 후 정상적으로 LabelLab 앱을 여는지 확인

🤔 Completion conditions

  • redirect url 을 LabelLab URL Scheme 으로 등록
  • LabelLab URLScheme 등록
  • Github token 요청 사이트 여는지 확인
  • 정상적으로 LabelLab 으로 redirect 되는지 확인

[Feature] Upload to Github API 구현

  • Repository 불러오기 API 추가
  • Repository 에 Label 업로드하기 API 추가
  • Repository Label 삭제하기 API 추가

🤔 Completion conditions

  • Repository Loading API
  • Repository Label Upload API
  • Repository Label Delete API

👀 Related issues

  • Related issue1 (#16)

[Feature] Issue Label Maker UI

사용자가 본인의 라벨컬렉션을 확인할 수 있다

  • Please write tasks
    • Additional clarification if necessary

스크린샷 2022-08-23 오후 1 57 04

🤔 Completion conditions

  • CheckPoint1
  • CheckPoint2

👀 Related issues

  • Related issue1 (#issue-number1)
  • Related issue2 (#issue-number2)

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.