asyncswift's People
asyncswift's Issues
[Refactor] TicketingViewObserved func naming 관련
onAppear 에서 fetch 기능을 수행하고 있어
fetch... 라는 함수를 따로 만들어 onAppear 에서 호출하는게 어떤가 싶습니다
AsyncSwift/AsyncSwift/Observed/TicketingView+Observed.swift
Lines 26 to 51 in 8a0476d
[Refactor] Friends List 닉네임 표기 방식, QR을 통한 친구 등록 방식 수정
배경
- 친구 목록을 보여주는 Friends List에서 닉네임이 없는 경우
이름 |
으로 표기되어있는 상황 - 직접 만나서 QR을 통해 친구를 등록하는 경우, QR 인식을 2번 해야하는 상황
내용
- 등록된 친구의 닉네임이 없는 경우 대응
- QR코드로 친구 등록시 양쪽에 친구가 서로 추가되도록 수정
작업 범위
- Friends 리스트에서 닉네임 없을 경우 | 제거
- QR로 친구 추가시 서로 추가되도록 수정
[Release] v1.0.0
[Error] Link 타고 앱 작동시, 이미 앱이 구동 중이라면 Stamp View가 다시 안 그려지는 버그
배경
Deep Link 혹은 Universal Link 타고 앱 작동시, 이미 앱이 구동 중이라면 Stamp View가 다시 안 그려지는 버그가 있습니다.
원인
openURL 을 MainTab Observed에서 로직을 관리하고 있습니다.
앱이 백그라운드에 없다면
1.앱 구동과 동시에 현재 Event를 KeyChain에 저장
2. StampView에 onAppear를 통해 저장된 KeyChain을 불러서 Stamp Image를 불러옴
으로 정상적으로 작동합니다.
다만, 앱이 백그라운드에 작동한다면
- MainTab Observed에서 현재 이벤트를 KeyChain에 저장함
으로 끝나버립니다.
StampView Observed를 @ObservedObject로 선언한다면 위와 같은 에러를 해결할 수 있을것 같지만 다음과 같은 문제를 불러옵니다.
- StampView가 Reload될 때마다 URLRequest가 너무 많아진다.
그래서 제가 EnvironmentObject에 어떤 변수를 설정해서 onChange를 활용해서 event가 KeyChain에 저장될 때 마다 StampImage를 불러올 지
고민이 됩니다.
저번에 extention을 벗기자는 이유가 외부에서 접근이 어렵다는 이유로 알고 있었는데
외부에서 접근을 할 때가 이와 같은 상황이었는지 궁금합니다.
[StampView] AppData에 들어가 있는 StampView Logic 을 Observed 로 이동
WHAT
AsyncSwift/AsyncSwift/Observed/AppData.swift
Lines 15 to 22 in 8a0476d
WHY
StampView 에서 사용하는 정보를 StampView+Observed 가 아닌 AppData 에서 가지고 있습니다
아키텍쳐의 의도에 따라 AppData가 아닌 StampView+Observed 로 이동이 필요합니다
[iOS Bug] .alert 를 다수 호출할 경우
[Release] v1.0.1
- Selection 누락된거 확인
- App Store Description "티케팃" 오타수정
[StampView] 스탬프 기록시 custom 알림 띄우기
- UT 결과 스탬프 기록에 대한 인지가 안된다는 지적이 있어 Custom 알림으로 전달 기능이 필요합니다
test
[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만 입력 받고 있습니다.
친구 추가 기능
스캔을 통해 등록을 시도하는 데이터에 대해 이미 등록이 되어있다면
중복 등록되지 않도록 검사를 통해 막고 있습니다.
[iOS Bug] SFSymbols 가 .fill 로 보여지는 현상
[Architecture] View 에 종속되어 있는 Observed Extension 벗기기
WHERE
AsyncSwift/AsyncSwift/Observed/EventView+Observed.swift
Lines 10 to 11 in 8a0476d
HOW
final class EventViewOberserved: ObservableObject { }
WHY
View 외부에서 Observed 에 접근할수 없어 Testable 한 코드가 아닙니다.
[Refactor] NetworkManager 로 urlSession Logic 이동
반복되는 Logic 을 Manager 로 분리하여 효율적으로 관리가 가능해보입니다
AsyncSwift/AsyncSwift/Observed/EventView+Observed.swift
Lines 20 to 43 in 8a0476d
AsyncSwift/AsyncSwift/Observed/TicketingView+Observed.swift
Lines 26 to 51 in 8a0476d
[Issue] TicketingView 에서 WebView 연결시 Loading 시간
WebView 연결시 즉각적으로 열리지 않고 다소 시간이 소요되는 것으로 보여지며
Loading 시간동안 보여질 ProgressView 제작이 필요해 보입니다
[TicketingView] View 에 들어가있는 Logic Observed 로 옮기기
WHAT
AsyncSwift/AsyncSwift/Views/TicketingView.swift
Lines 17 to 24 in 8a0476d
WHY
View 에서 Logic 에 대해 많은 관여를 하고 있습니다. 아키텍쳐가 추구하는 추상적 개념과 맞지 않습니다
[Issue] DS_Store 파일 삭제
내용
상위 경로에 포함된 DS_Store 를 삭제함으로써 파일 충돌을 방지합니다.
[App] Build Schme 분리
두 개의 Build Scheme 으로 분리
- Release
- Beta
[Refactor] 이미지 파일 GitHub -> FireStorage 이동
배경
- 현재 이미지 파일이 GitHub에 올라와 있어 앱에서 사용되는 이미지 원본 리소스(연사자 프로필 사진 등)에 누구나 접근 가능한 상태
내용
- 이미지 리소스 접근성을 낮추기 위해 리소스를 FireStorage로 이동하는 리팩토링 작업 진행
작업 범위
- 이미지를 가져오기 위한 매니저 -> StorageManager(가칭) 추가
- EventView ->
EventViewObserved
에서 이미지 패치 로직 변경 - StampView ->
fetchStampsImages()
에서 이미지 패치 로직 변경 - TicketingView ->
onAppear()
에서 이미지 패치 로직 변경
[Refactor] 코드로 구현된 스켈레톤을 redacted 함수로 리팩토링
내용
현재 손수 만든 스켈레톤 뷰를 보여주게끔 되어있는데
불필요한 코드의 양을 줄이기위해 SwiftUI 에서 기본적으로 제공하는 스켈레톤 기능으로 리팩토링이 필요합니다
관련 내용 👇👇
링크
[StampView] List 구현
WHERE
AsyncSwift/AsyncSwift/Views/StampView.swift
Lines 37 to 54 in 8a0476d
WHY
Seminar 002 외에 다른 Stamp를 찍으면 반영되지 않습니다
[Architecture] 에 대한 설명
들어가며
본 Project 는 AsyncSwift Korea 가 User 들을 위해 행사용으로 제작한 App 입니다.
Architecture 를 선택함에 있어 추후에 유지보수가 쉬운 방향으로 고민하였습니다.
Framework
사용된 기술 : SwiftUI
이유 :
- 유지보수의 편의성을 생각했을 때 비교적 많은 사람들이 접근 할 수 있을꺼라 생각했습니다.
- 추후에 디자인이나 프로젝트를 크게 엎을 경우 스프린트로 빠르게 개발할 수 있기 때문입니다.
- min target : ios ver 15 로 설정 하였으며 AsycImage 등 최신 component 가 사용되었습니다.
Design Pattern
사용된 기술 : MVO ( Model, View, Observed) Pattern
이유 :
- SwiftUI에서 사용 가능한 보다 간결한 Pattern 을 고민 하였습니다.
- MVVM 이라는 네이밍 보다 보다 직관적으로 기능을 표현한다 생각했습니다.
JSON Storage
사용된 기술 : GitHub Pages
요구 조건 :
- json 의 내용이 수정되어도 항상 고정된 주소값을 갖는다.
- API 혹은 Backend Deploy 없이 손쉽게 사용할 수 있을 것.
이유 :
- json을 수정하고 동일한 파일명으로 다시 올려도 url은 변하지 않습니다.
- Github Gists 를 사용하지 않은 이유는 내용이 수정될 경우 URL이 바뀌기 때문입니다
url : https://async-swift.github.io/jsonstorage/asyncswift.json
Image Storage
사용된 기술 : Firebase Storage
이유 :
- Project 에 다양한 사람을 초대해서 접근 권한을 줄 수 있기 때문입니다.
- 비교적 손쉽게 다양한 사람들에게 익숙한 플랫폼이기 때문입니다.
- Firebase Cloud Messaging 이 Project 에 implement 되어있으며 한 플랫폼에서 모두 관리가 가능하기 때문입니다
Notification
사용된 기술 : Firebase Cloud Messaging
이유 :
- Image Storage 와 더불어 하나의 프로젝트에 여러 구글 계정을 초대해 프로젝트와 관련된 정보를 한 플랫폼에서 관리할 수 있기 때문입니다.
- 이미 다른 프로젝트에 적용해보며 사용법과 장단점을 파악하고 있기 때문입니다.
[Universal Link] 링크 접속 페이지 뷰 필요
[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를 기반(행사장 좌표값 유효범위 내)으로 당일 인증하게 된다면 조금 더 유저 입장에서 편하지 않을까요?
[EventView] Animation 제거
WHAT
AsyncSwift/AsyncSwift/Observed/EventView+Observed.swift
Lines 33 to 35 in 8a0476d
WHY
이쁘지가 않습니다
[KeyChain] KeyChain 의존성 낮추기
Why?
- KeyChain 의존성을 낮추기 위해서 SingleTon 구현 취소
- KeyChain에 데이터 갖고 있는 것을 막기 위해서 KeyChainManager 구현
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.