Giter Club home page Giter Club logo

asyncswift's People

Contributors

e-know avatar insub4067 avatar lingostar avatar song-cool avatar unnnyong avatar yebinkim avatar yeniful avatar

Stargazers

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

Watchers

 avatar  avatar

asyncswift's Issues

[Refactor] TicketingViewObserved func naming 관련

onAppear 에서 fetch 기능을 수행하고 있어
fetch... 라는 함수를 따로 만들어 onAppear 에서 호출하는게 어떤가 싶습니다

func onAppear() {
guard
let url = URL(string: "https://raw.githubusercontent.com/Async-Swift/jsonstorage/main/ticketing.json")
else { return }
let request = URLRequest(url: url)
let dataTask = URLSession.shared.dataTask(with: request) { data, response, _ in
guard
let response = response as? HTTPURLResponse,
response.statusCode == 200,
let data = data
else { return }
DispatchQueue.main.async { [weak self] in
do {
let ticketing = try JSONDecoder().decode(Ticketing.self, from: data)
self?.ticketing = ticketing
} catch {
self?.ticketing = nil
}
}
}
dataTask.resume()
}

[Refactor] Friends List 닉네임 표기 방식, QR을 통한 친구 등록 방식 수정

배경

  • 친구 목록을 보여주는 Friends List에서 닉네임이 없는 경우 이름 | 으로 표기되어있는 상황
  • 직접 만나서 QR을 통해 친구를 등록하는 경우, QR 인식을 2번 해야하는 상황

내용

  • 등록된 친구의 닉네임이 없는 경우 대응
  • QR코드로 친구 등록시 양쪽에 친구가 서로 추가되도록 수정

작업 범위

  • Friends 리스트에서 닉네임 없을 경우 | 제거
  • QR로 친구 추가시 서로 추가되도록 수정

[Release] v1.0.0

TODO

  • App Store screen shots
  • App Store description
  • v1.0 Release note
  • QA 작성중

Release note

[Error] Link 타고 앱 작동시, 이미 앱이 구동 중이라면 Stamp View가 다시 안 그려지는 버그

배경

Deep Link 혹은 Universal Link 타고 앱 작동시, 이미 앱이 구동 중이라면 Stamp View가 다시 안 그려지는 버그가 있습니다.

원인

openURL 을 MainTab Observed에서 로직을 관리하고 있습니다.

앱이 백그라운드에 없다면
1.앱 구동과 동시에 현재 Event를 KeyChain에 저장
2. StampView에 onAppear를 통해 저장된 KeyChain을 불러서 Stamp Image를 불러옴
으로 정상적으로 작동합니다.

다만, 앱이 백그라운드에 작동한다면

  1. MainTab Observed에서 현재 이벤트를 KeyChain에 저장함
    으로 끝나버립니다.

StampView Observed를 @ObservedObject로 선언한다면 위와 같은 에러를 해결할 수 있을것 같지만 다음과 같은 문제를 불러옵니다.

  • StampView가 Reload될 때마다 URLRequest가 너무 많아진다.

그래서 제가 EnvironmentObject에 어떤 변수를 설정해서 onChange를 활용해서 event가 KeyChain에 저장될 때 마다 StampImage를 불러올 지
고민이 됩니다.

저번에 extention을 벗기자는 이유가 외부에서 접근이 어렵다는 이유로 알고 있었는데
외부에서 접근을 할 때가 이와 같은 상황이었는지 궁금합니다.

[StampView] AppData에 들어가 있는 StampView Logic 을 Observed 로 이동

WHAT

private var currentStamp: Stamp?
var isStampExist: Bool {
if currentStamp == nil {
fetchCurrentStamp()
}
return KeyChain.shared.getItem(key: currentStamp?.title) != nil
}

WHY

StampView 에서 사용하는 정보를 StampView+Observed 가 아닌 AppData 에서 가지고 있습니다
아키텍쳐의 의도에 따라 AppData가 아닌 StampView+Observed 로 이동이 필요합니다

[iOS Bug] .alert 를 다수 호출할 경우

스크린샷 2022-09-13 오전 1 28 00

.alert() {
  Alert()
}

👆👆 위와 같이 content 로 Alert() 를 넘겨주는 경우 한개 이상이 호출하게 되면 alert 를 전부 먹지 않는 현상을 발견하였습니다

.alert("일정 등록") { }

👆👆 하지만 String 을 parameter 로 넘겨 주는 alert 의 경우 다수가 호출되어도 문제가 발견되지 않았습니다

[Release] v1.0.1

  • Selection 누락된거 확인
  • App Store Description "티케팃" 오타수정

[ProfileView] 구조에 대한 설명

탭의 목적

유저가 프로필을 등록하고 생성된 QR을 통해 다른 유저의 QR을 스캔해 서로 프로필을 공유하는 일종의 소셜 기능을 합니다.

View

  • ProfileView
    -> 해당 뷰에서 스캐너는 fullCover 로 띄웁니다
    • ProfileRegisterView
    • ProfileEditView
    • ProfileFriendsListView
      -> 해당 뷰에서 스캐너는 fullCover 로 띄웁니다
      • ProfileFriendDetailView

DB 및 데이터 저장

Firebase Firestore 을 이용하고 있습니다.
FirebaseManager (singleton) 을 통해 CRUD 을 실행합니다.
유저의 프로필ID는 키체인에 저장되며 저장된 ID를 통해 본인의 도규먼트에 접근하며
도규먼트에 내가 저장한 유저들의 ID를 String Array로 저장합니다.

QR 기능

CIFilter.qrCodeGenerator() 를 통해 UIImage 로 생성된 QR을 보여주게 됩니다
QR에는 유저를 친구추가할수 있는 데이터를 담고 있습니다.

QR Scanner

패키지 레퍼지토리

CodeScanner 를 사용해서 스캔합니다.
스캔을 통해 받아온 데이터를 형식 검사 후 형식이 맞다면 친구추가를 진행합니다.

URL Validation

유저는 본인의 링크을 공유할수 있으며
입력받은 URL은 UIApplication.shared.canOpenURL() 를 통해 검사하여
URL만 입력 받고 있습니다.

친구 추가 기능

스캔을 통해 등록을 시도하는 데이터에 대해 이미 등록이 되어있다면
중복 등록되지 않도록 검사를 통해 막고 있습니다.

[Refactor] NetworkManager 로 urlSession Logic 이동

반복되는 Logic 을 Manager 로 분리하여 효율적으로 관리가 가능해보입니다

func fetchJson() {
guard let url = URL(string: "https://async-swift.github.io/jsonstorage/asyncswift.json") else { return }
let request = URLRequest(url: url)
let dataTask = URLSession.shared.dataTask(with: request) { data, response, _ in
guard
let response = response as? HTTPURLResponse,
response.statusCode == 200,
let data = data
else { return }
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
do {
let decodedData = try JSONDecoder().decode(Event.self, from: data)
withAnimation {
self.event = decodedData
}
self.calculateEventStatus()
} catch let error {
print("\(error.localizedDescription)")
}
}
}
dataTask.resume()
}

func onAppear() {
guard
let url = URL(string: "https://raw.githubusercontent.com/Async-Swift/jsonstorage/main/ticketing.json")
else { return }
let request = URLRequest(url: url)
let dataTask = URLSession.shared.dataTask(with: request) { data, response, _ in
guard
let response = response as? HTTPURLResponse,
response.statusCode == 200,
let data = data
else { return }
DispatchQueue.main.async { [weak self] in
do {
let ticketing = try JSONDecoder().decode(Ticketing.self, from: data)
self?.ticketing = ticketing
} catch {
self?.ticketing = nil
}
}
}
dataTask.resume()
}

[Refactor] 이미지 파일 GitHub -> FireStorage 이동

배경

  • 현재 이미지 파일이 GitHub에 올라와 있어 앱에서 사용되는 이미지 원본 리소스(연사자 프로필 사진 등)에 누구나 접근 가능한 상태

내용

  • 이미지 리소스 접근성을 낮추기 위해 리소스를 FireStorage로 이동하는 리팩토링 작업 진행

작업 범위

  • 이미지를 가져오기 위한 매니저 -> StorageManager(가칭) 추가
  • EventView -> EventViewObserved 에서 이미지 패치 로직 변경
  • StampView -> fetchStampsImages() 에서 이미지 패치 로직 변경
  • TicketingView -> onAppear() 에서 이미지 패치 로직 변경

[StampView] List 구현

WHERE

@ViewBuilder
var stampBack: some View {
Image("Seminar002StampBack")
.resizable()
.aspectRatio(contentMode: .fit)
.shadow(color: Color(.sRGB, red: 0, green: 0, blue: 0, opacity: 0.2), radius: 20, x: 40 * observed.cardAnimatonModel.frontDegree / 90, y: 4)
.rotation3DEffect(Angle(degrees: observed.cardAnimatonModel.frontDegree), axis: (x: 0, y: 1, z: 0))
}
@ViewBuilder
var stampFront: some View {
Image("Seminar002StampFront")
.resizable()
.aspectRatio(contentMode: .fit)
.shadow(color: Color(.sRGB, red: 0, green: 0, blue: 0, opacity: 0.2), radius: 20, x: 40 * observed.cardAnimatonModel.backDegree / 90, y: 4)
.rotation3DEffect(Angle(degrees: observed.cardAnimatonModel.backDegree), axis: (x: 0, y: 1, z: 0))
}

WHY

Seminar 002 외에 다른 Stamp를 찍으면 반영되지 않습니다

[Architecture] 에 대한 설명

들어가며

본 Project 는 AsyncSwift Korea 가 User 들을 위해 행사용으로 제작한 App 입니다.
Architecture 를 선택함에 있어 추후에 유지보수가 쉬운 방향으로 고민하였습니다.

Framework

사용된 기술 : SwiftUI

이유 :

  1. 유지보수의 편의성을 생각했을 때 비교적 많은 사람들이 접근 할 수 있을꺼라 생각했습니다.
  2. 추후에 디자인이나 프로젝트를 크게 엎을 경우 스프린트로 빠르게 개발할 수 있기 때문입니다.
  3. min target : ios ver 15 로 설정 하였으며 AsycImage 등 최신 component 가 사용되었습니다.

Design Pattern

사용된 기술 : MVO ( Model, View, Observed) Pattern

이유 :

  1. SwiftUI에서 사용 가능한 보다 간결한 Pattern 을 고민 하였습니다.
  2. MVVM 이라는 네이밍 보다 보다 직관적으로 기능을 표현한다 생각했습니다.

JSON Storage

사용된 기술 : GitHub Pages

요구 조건 :

  1. json 의 내용이 수정되어도 항상 고정된 주소값을 갖는다.
  2. API 혹은 Backend Deploy 없이 손쉽게 사용할 수 있을 것.

이유 :

  1. json을 수정하고 동일한 파일명으로 다시 올려도 url은 변하지 않습니다.
  2. Github Gists 를 사용하지 않은 이유는 내용이 수정될 경우 URL이 바뀌기 때문입니다

url : https://async-swift.github.io/jsonstorage/asyncswift.json

Image Storage

사용된 기술 : Firebase Storage

이유 :

  1. Project 에 다양한 사람을 초대해서 접근 권한을 줄 수 있기 때문입니다.
  2. 비교적 손쉽게 다양한 사람들에게 익숙한 플랫폼이기 때문입니다.
  3. Firebase Cloud Messaging 이 Project 에 implement 되어있으며 한 플랫폼에서 모두 관리가 가능하기 때문입니다

Notification

사용된 기술 : Firebase Cloud Messaging

이유 :

  1. Image Storage 와 더불어 하나의 프로젝트에 여러 구글 계정을 초대해 프로젝트와 관련된 정보를 한 플랫폼에서 관리할 수 있기 때문입니다.
  2. 이미 다른 프로젝트에 적용해보며 사용법과 장단점을 파악하고 있기 때문입니다.

[Universal Link] 링크 접속 페이지 뷰 필요

유니버셜 링크로 이동 후 앱 설치가 되어 있을 경우 위와 같은 배너가 완성이 됩니다.

앱 설치가 안되어 있다면 앱스토어 설치를 유도 할 수 있는 이미지가 필요합니다.

(readme.md 파일 위로 올라가야 합니다.)

[StampView] State Tree 작성하기

WHY

  • 현재 View 내에서 Logic 과 Flow 가 분명하지 않습니다. 따라서 Readable 한 Code 작성을 위해 정리가 필요해보입니다
  • Universal Link, KeyChain Logic 수정등 Refactoring 진행할때에 보다 정리된 Code 와, Review 를 위함입니다

[Docs] 이슈 템플릿 등록, PR 템플릿 내용 추가

배경

  • 이슈 생성시 포맷을 참고하거나, 일일이 작성하기에 번거로움
  • PR template 보완

내용

  • 이슈 템플릿 (배경 / 내용 / 작업 범위) 추가
  • PR Template에 이슈를 닫기 위한 Close 추가

작업 범위

  • 이슈 템플릿 추가
  • PR Template 수정

[기능제안] Stamp 인증

- 개요 QR코드 유효성

사람들이 QR코드를 오픈 키노트 외에는 찍을 방안이 없었습니다.

개선안

행사 당일을 서버에서 인증 받아와서 GPS를 기반(행사장 좌표값 유효범위 내)으로 당일 인증하게 된다면 조금 더 유저 입장에서 편하지 않을까요?

[KeyChain] KeyChain 의존성 낮추기

Why?

  • KeyChain 의존성을 낮추기 위해서 SingleTon 구현 취소
  • KeyChain에 데이터 갖고 있는 것을 막기 위해서 KeyChainManager 구현

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.