Skip to content

Conversation

@LURKS02
Copy link
Collaborator

@LURKS02 LURKS02 commented Nov 17, 2024

관련 이슈

✅ 완료 및 수정 내역

  • Picker로 비디오를 선택하여 Input으로 url을 방출하는 로직 구현
  • 컬렉션 뷰가 비디오 썸네일 및 정보를 보여주도록 구현
  • 비디오 상세보기 화면 구현 (재생 / 정지 / 슬라이더)

🛠️ 테스트 방법

  • Mock 객체로 먼저 테스트하고, 실제 객체로 디바이스에서 구동하였습니다.

📝 리뷰 노트

  • Picker에서 동영상을 선택했을 때 업로드하기 위한 UseCase가 아직 없습니다.
  • Picker에서 선택한 비디오는 Picker 클로저 내에서만 유효합니다. 이 부분은 설명할 때 말씀드리겠습니다..
  • 비디오 로드 시 오랜 시간이 걸리는데 UI를 추가해야 할지 고민입니다.

📱 스크린샷(선택)

ScreenRecording_11-18-2024.02-45-07_1.MP4

Copy link
Collaborator

@051198Hz 051198Hz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다!!

Comment on lines 12 to 19
func generateThumbnail() async -> UIImage? {
let imageGenerator = AVAssetImageGenerator(asset: self)
imageGenerator.appliesPreferredTrackTransform = true

let time = CMTime(seconds: 0.1, preferredTimescale: 600)
guard let cgImage = try? imageGenerator.copyCGImage(at: time, actualTime: nil) else { return nil }
let thumbnail = UIImage(cgImage: cgImage)
return thumbnail
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: async로 하신 이유는 작업이 오래 걸리기 때문이겠죠?? 설명 쪼끔만 해주시면 감사하겠슴니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

말씀드린대로 수정했습니다~


import Foundation

final class VideoManager {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Domain에 더 어울리는 클래스 같아요.
하지만 뷰모델에서 떼어내어 유즈케이스에 둬 보자 하고 생각해보면 또 복집해지네요.
다른 분들의 의견도 궁금하네요!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 Feature에 어울리는 클래스인가? 싶기는 한데, 아니면 Core가 완성되면 거기로 옮기는건 어떨까 싶네요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

마땅히 배치할 곳이 없어 Helper에 두었는데, Core에 두는 것이 맞는 것 같네요..

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 Domain보단 파일에 직접 접근하기 때문에 Core혹은 아예 Data쪽으로 분리하는 것도 방법일 수 있을꺼 같아요!

@LURKS02 LURKS02 linked an issue Nov 18, 2024 that may be closed by this pull request
2 tasks
Copy link
Collaborator

@around-forest around-forest left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!
approve는 usecase 추가되고, 윤회님과의 조정 이후 하겠습니다!


import Foundation

final class VideoManager {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 Feature에 어울리는 클래스인가? 싶기는 한데, 아니면 Core가 완성되면 거기로 옮기는건 어떨까 싶네요!

private func initializeDirectory() {
if !fileManager.fileExists(atPath: folder.path) {
try? fileManager.createDirectory(at: folder,
withIntermediateDirectories: true)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: 여기는 컨벤션에 따라 굳이 개행을 하지 않아도 될 듯 싶은데, 혹 개행을 원하시면 at 부터 해주시면 좋을 듯 합니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

개행은 따로 안하도록 수정했습니다!

Copy link
Collaborator

@jungseokyoung-cloud jungseokyoung-cloud left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 하셨습니다!


import Foundation

final class VideoManager {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 Domain보단 파일에 직접 접근하기 때문에 Core혹은 아예 Data쪽으로 분리하는 것도 방법일 수 있을꺼 같아요!

input.sink { [weak self] input in
switch input {
case .viewDidLoad:
guard let self else { return }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: guard let self else { return }코드를 위쪽으로 분리하게 된다면 굳이 두 case에 각각 써줄 필요는 없어 보입니다!

output.send(.videoListDidChanged(videos: self.videoItems))

case .appendVideo(let url):
Task {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: 이 자체를 메서드로 분리해보는 것은 어떤가요?

- title: 파일 시스템 상에서의 파일 이름
- authorTitle: 메타데이터 기반 사용자 이름
- thumbnailImage: 동영상 썸네일
- videoURL: 동영상 url
- duration: 동영상 길이
- date: 생성 날짜
@051198Hz 051198Hz self-requested a review November 19, 2024 03:10
@LURKS02 LURKS02 merged commit 3aed0cd into develop Nov 19, 2024
4 checks passed
@LURKS02 LURKS02 deleted the feature/#14 branch November 19, 2024 04:50
jungseokyoung-cloud added a commit that referenced this pull request Nov 22, 2024
* docs/#feature1 (#5)

* [DOCS]: SwiftLint 추가

* [CHORE]: xcodeproject파일 의존성 수정 및 SwiftLint 스크립트 파일 추가

* [FIX]: 바이너리 파일 생성안되는 버그 수정

* [CHORE]: Implementation, Interface 분리

* [DOCS]: lint 오타 수정

* [DOCS]: Interface에 Script파일 추가

* Update README.md

[DOCS] README.md 수정

* [FEAT]: P2P Socket을 통해 유저 연결 혹은 끊김 정보를 제공하는 로직 구현 (#8)

* [CHORE]: SocketProvider에서 P2PSocket으로 모듈 이름 변경

* [FEAT]: P2PSocket에 외부로 리턴해주는 SocketPeer객체 구현

* [CHORE]: Info에 Bonjour Service관련 plist 추가

* [FEAT]: P2PSocket에 MCPeerID들을 저장하는 Storage 구현

* [FEAT]: P2PSocket을 할 수 있는 Provider 구현

* [CHORE]: Entity 모듈 추가

* [FEAT]: Domain에 BrowsingUser Entity 추가

* [FEAT]: BrowsingUserRepository 인터페이스 구현

* [FEAT]: BrowsingUserRepository 구현

* [REFACTOR]: SockerProvider, Repository CurrentValueSubject에서 PassThroughSubject로 변경

* [FEAT]: BrowsingUser 유즈케이스 인터페이스 구현

* [FEAT]: BrowsingUser 유즈케이스 구현

* [CHORE]: Domain, DomainInterface에서 UseCase, UseCaseInterface로 모듈이름 변경

* [CHORE]: 기존 DataInterface 위치 Data에서 Domain으로 변경

* [STYLE]: SocketPeer 프로퍼티 순서 변경

* [TEST]: Mocking 파일 추가(SocketProvider, Repository, UseCase)

* [TEST]: BrowsingUserUseCase 테스트 코드 작성

* [REFACTOR]: 객체 잘못 잘못적용 되었던 것 수정

* [STYLE]: BrowsingUser에서 BrowsedUse네이밍으로 변경

* [REFACT]: 동기로 오는 이벤트이기에 Expectation 삭제

* [FEAT]: UIColor Extension에 UIColor를 Hex 문자열로 생성할 수 있게 해주는 초기화자 구현

* [FEAT]: UIControl 이벤트를 Publisher로 받을 수 있게 해주는 EventPublisher 구현

* [FEAT] AnyPublisher와 value를 제공하는 ReadOnlyPublisher 구현

* [FEAT] 비디오 리스트를 보여줄 때 사용하는 Presentation Model 구현

* [FEAT]: 비디오의 duration을 보여주는 커스텀 뷰인 DurationView 구현

* [FEAT]: 오른쪽에 아이콘이 있는 커스텀 iconButton 구현

* [FEAT]: 비디오 리스트의 불러온 정보와 추가 버튼을 보여주는 VideoListHeaderView 구현

* [FEAT]: 비디오 리스트 화면에 연결되는 ViewModel과 구현체 구현

* [FEAT]: 비디오 리스트에서 비디오 썸네일과 정보를 보여줄 때 사용되는 컬렉션 뷰 셀 구현

* [FEAT]: 비디오 리스트를 보여주는 화면인 VideoListViewController 구현

* [FEAT]: 비디오를 클릭했을 때 상세 화면을 보여주기 위한 임시 VideoDetailViewController 구현

* [CHORE]: 기능 구현으로 인한 파일 구조 변경 사항 (pbxproj)

* [REFACTOR]: UI Component 설정을 클로저로 하지 않고 setup에서 진행하도록 변경

* [REFACTOR]: import 순서를 사전순으로 정렬하도록 변경

* [CHORE]: DiffableDataSource 적용을 위해서 PresentationModel 네이밍 대신 Item으로 변경

- CollectoinView 관련 파일을 따로 CollectionView로 폴더링하여 정리

* [REFACTOR]: 기존 DataSource 대신 DiffableDataSource를 사용하도록 변경

* [TEST]: 테스트를 위해 Mock 비디오 파일을 추가하는 동작 구현

* [CHORE]: 기능 구현으로 인한 파일 구조 변경 사항 (pbxproj)

* [Feature/#2] 참여자의 상태를 표시할 수 있는 기능 구현 (#6)

* [DOCS]: 더이상 swiftlint 실행파일을 추적하지 않음

* [FIX]: git 캐시파일로 인해 추적하지 않는 파일을 추적하는 버그

* [Chore]: 사용하지 않는 코드 삭제

* [Feat]: 그룹의 정보를 보여주는 뷰의 행동을 추상화한 GroupInfoViewModel 구현

* [Feat]: 그룹 정보를 보여주는 뷰 GroupInfoViewController 구현

* [Feat]: 그룹에 참여한 유저의 정보를 보여주는 뷰 구현

* [Feat]: 그룹의 참가자 수를 보여주는 뷰 구현

* [Chore]: 파일 추가로 인한 프로젝트 변경사항 적용

* [Chore]: 파일 및 폴더 구조 변경

* [Refactor]: 사용하지 않는 코드 삭제

* [Refactor]: 시용하지 않는 파일 삭제

* [Test]: 테스트를 위한 임시 프로토콜 구현

* [TEST]: 코드 동작을 위한 임시 구현체 구현

* [TEST]: 테스트 가능한 코드를 위한 임시 의존성 추가

* [CHORE]: 테스트를 위한 타겟 추가

* [TEST]: 그룹에 유저가 참가할 때, 유저의 연결 상태가 변할 때 올바른 동작을 검증하는 테스트 코드 작성

* [FIX]: 참가자수가 3으로 고정돼있는 버그

* [REFACTOR]: GroupInfoViewController가 데이터에 관한 프로퍼티를 갖지 않도록 수정

* [REFACTOR]: 생성자를 통해 뷰모델을 주입받을 수 있도록 수정

* [REFACTOR]: 프로퍼티 제거에 따른 코드 수정

* [FIX]: 바인딩 코드를 호출하기 전에 이벤트를 전달하고 있는 버그

* [REFACTOR]: 유스케이스를 주입받을 수 있는 생성자 추가 및 접근제어자 변경

* [REFACTOR]: 싱크홀 코드 수정

* [FIX]: 새 유저가 그룹에 참가하여도 그룹 참여자수가 변하지 않는 버그

* [FIX]: Feature 외 레이어 변경사항 제거

* [REFACTOR]: 뷰모델이 UI관련 로직만 갖도록 수정

* [CHORE]: 파일 제거 및 이동에 의한 프로젝트 변경사항

* [FIX]: 테스크 코드 삭제

* [REFACTOR]: 사용하지 않는 의존성 제거

* [REFACTOR]: 프레젠테이션 모델이 상태를 변경하지 않도록 수정

* [CHORE]: Domain 변경사항 제거

* [REFACTOR]: 사용하지 않는 의존성 제거

* [Feature]: 여러 참여자를 보여줄 수 있는 스크롤뷰 및 그룹 나가기 버튼 추가

* [REFACTOR]: Nib파일로부터 생성하지 못하도록 수정

* [REFACTOR]:성능 개선을 위한 접근제한자 수정

* [STYLE]: 뷰의 색상을 Figma와 같도록 수정

* [REFACTOR]: 필요하지 않은 프로토콜의 코드 제거

* [FIX]: 뷰컨트롤러가 나타날 때 마다 뷰 추가, 레이아웃 작업을 실행하는 버그

* [SYTLE]: 컨벤션 일치

* [REFACTOR]: DiffableDataSource 사용 시 String 대신 Section 타입으로 섹션을 표현하도록 변경

* [CHORE]: 테스트와 모델에 MARK 및 설명 주석 추가

* [STYLE]: 배열을 나열하는 코드를 코드 컨벤션에 맞게 수정

* [REFACTOR]: DurationView를 별도의 뷰로 빼지 않고 뷰 컨트롤러에서 생성하도록 변경

* [CHORE]: 변경 사항으로 인한 파일 구조 변경 (pbxproj)

* [Feature/#11] 참여자의 상태 및 참가자수를 리턴하는 기능 추가 (#12)

* [FEAT]: ConnectedUser Entity 추가

* [FEAT]: Browsing 기능을 기준으로 socket에 참가한 유저를 리턴하는 기능 구현

* [CHORE]: 오타 수정

* [Feature/#4] 레이더 형태로 주변 유저 목록을 표시하는 UI 설계 (#15)

* [CHORE]: closed branch 내용 재구현

* [FEAT]: Interface와 Entity import 및 BrowsingUser를 BrowsedUser로 수정

* [CHORE]: swiftlint 경고 수정

* [FEAT]: ViewModel이 UIKit를 모르도록 수정

* [FEAT]: ViewModel의 transform 메서드 코드 단순화

* [FEAT]: ViewModel의 found와 lost 메서드의 파라미터를 명시적으로 수정 및 코드 단순화

* [FEAT]: Input-Output 관련 제네릭 제거

* [CHORE]: Markdown 추가

* [STYLE]: State에 주석 추가

* [FEAT]: SocketProvider에 초대 및 수락/거절 로직 구현

* [FEAT]: BrowsingRepository에 초대 및 수락/ 거절 로직 구현

* [FEAT]: BrowingUseCase에 초대 및 수락/ 거절 로직 구현

* [FEAT]: BrowingUseCase 초대했을 때, 다른 유저의 초대 모두 거절하도록 구현

* [FEAT]: 초대 받는 유저가 초대 받는 동안, 다른 초대 중첩되지 않도록 하는 기능 추가

* [FEAT]: 초대받는 사람, 도중에 초대 중첩되는 경우 적절한 이벤트 전달

* [TEST]: 테스트 코드 추가

* [CHORE]: 빌드 세팅 변경

* [STYLE]: 불필요한 코드 삭제

* [REFACT]: 초대 중복시 timeout발생시키는 것이 아닌, 바로 거절하도록 변경

* [REFACT]: 불필요한 코드 삭제 및, invitationTimeout시간을 외부에서 지정할 수 있도록 수정

* [REFACT]: InvitedUser의 불필요한 이벤트 삭제

* [CHORE]: Interfaces에 P2PSocket 의존성 추가

* [REFACT]: BrowsigUserUseCase의 이니셜라이저 파라미터 변경사항 적용

* [CHORE]: FeatureInterface 모듈 삭제

* [DOCS]: Bundle Display name 시정

* [CHORE]: PR 관련 이벤트에 슬랙 알림을 보내주는 action 추가 (#32)

* [CHORE]: PR 관련 이벤트에 슬랙 알림을 보내주는 action 추가

- 나를 리뷰어로 지정한 PR이 있을 때
- 내 PR에 리뷰어가 코드 리뷰를 완료했을 때
- 나를 리뷰어로 지정한 PR에 새로운 커밋이 추가되었을 때

* [CHORE]: yml 파일의 오타 수정

* [FEAT]: SocketProvider에 파일 업로드 및 다운로드 기능 추가

* [FEAT]: 공유된 파일을 나타내기 위한 타입 선언

* [FEAT]: 다운로드를 완료한 피어들의 수를 세기 위한 타입 선언

* [FEAT]: 다운로드 받은 리소스의 이름을 검증하고, 파싱하는 ResourceValidator 타입 선언

* [FEAT]: 공유된 비디오를 나타내기 위한 타입 SharedVideo 선언

* [FEAT]: 공유된 비디오의 저장소를 나타내는 프로토콜 SharingVideoRepositoryInterface 선언

* [FEAT]: 공유 비디오 저장소 구현체 SharingVideoRepository 구현

* [CHORE]: 파일 추가로 인한 프로젝트 변경사항

* [FIX]: 업/다운로드한 파일을 공유 파일 목록에 등록하지 않는 버그

* [FIX]: 스스로의 데이터를 공유할 때, UUID가 포함된 이름으로 SharedResource를 생성하는 버그

* [Feature/#17] 초대 로직 구현 (#30)

* [STYLE]: State에 주석 추가

* [FEAT]: SocketProvider에 초대 및 수락/거절 로직 구현

* [FEAT]: BrowsingRepository에 초대 및 수락/ 거절 로직 구현

* [FEAT]: BrowingUseCase에 초대 및 수락/ 거절 로직 구현

* [FEAT]: BrowingUseCase 초대했을 때, 다른 유저의 초대 모두 거절하도록 구현

* [FEAT]: 초대 받는 유저가 초대 받는 동안, 다른 초대 중첩되지 않도록 하는 기능 추가

* [FEAT]: 초대받는 사람, 도중에 초대 중첩되는 경우 적절한 이벤트 전달

* [TEST]: 테스트 코드 추가

* [CHORE]: 빌드 세팅 변경

* [STYLE]: 불필요한 코드 삭제

* [REFACT]: 초대 중복시 timeout발생시키는 것이 아닌, 바로 거절하도록 변경

* [REFACT]: 불필요한 코드 삭제 및, invitationTimeout시간을 외부에서 지정할 수 있도록 수정

* [REFACT]: InvitedUser의 불필요한 이벤트 삭제

* [CHORE]: Interfaces에 P2PSocket 의존성 추가

* [REFACT]: BrowsigUserUseCase의 이니셜라이저 파라미터 변경사항 적용

* [CHORE]: FeatureInterface 모듈 삭제

* [DOCS]: Bundle Display name 시정

* [CHORE]: 파일 구조 변경

* [CHORE]: Domain에 P2PSocket의존성 삭제

* [REFACT]: Repository 인터페이스에서 Socket 관련 의존성 삭제

* [REFACTOR]: 축약할 수 있는 타입 구분자 제거

* [REFACTOR]: 코드 컨벤션과 일치하지 않는 코드 수정

* [REFACTOR] ResourceValidator인스턴스를 생성할 수 없도록 타입 변경

* [REFACTOR]: shareResource함수의 핸들러 생성 분리등을 통한 경량화

* Revert "Merge branch 'feature/#13' into develop"

This reverts commit 01c1b43, reversing
changes made to e120292.

* [Feature/#14] 비디오 선택 및 업로드, 상세보기 화면 구현 (#33)

* [REFACTOR]: ViewModel 구현을 Input enum + Output enum 구조로 수정

* [CHORE]: 뷰 구현 코드를 모아놓은 폴더 이름을 Components에서 View로 수정

* [FEAT]: Picker를 통해 선택한 비디오를 저장하기 위한 VideoManager 구현

* [FEAT]: 비디오 Picker를 통해 선택한 비디오 url을 Input으로 방출하는 로직 구현

* [FEAT]: 동영상 url로 UI를 구성하기 위해 VideoListItem에 url 추가 및 로직 작업

* [REFACTOR]: 비디오 리스트 셀 썸네일 이미지가 정상적으로 보이도록 수정

* [FEAT]: AVAsset의 메타데이터를 받아오는 계산 프로퍼티를 AVAsset Extension으로 추가

* [FEAT]: 동영상 썸네일 이미지를 생성하는 AVAsset Extension 메서드 추가

* [REFACTOR]: EventPublisher가 Void가 아닌 UIControl을 보내도록 수정

* [FEAT]: 동영상을 기반으로 item을 생성하는 실제 ViewModel 구현

- title: 파일 시스템 상에서의 파일 이름
- authorTitle: 메타데이터 기반 사용자 이름
- thumbnailImage: 동영상 썸네일
- videoURL: 동영상 url
- duration: 동영상 길이
- date: 생성 날짜

* [FEAT]: 동영상을 확인할 수 있는 상세보기 화면 구현 (재생 / 정지 / 슬라이더)

* [CHORE]: 변경 사항으로 인한 파일 구조 변경 (pbxproj)

* [FEAT]: 저장된 비디오 파일을 모두 제거하기 위한 deleteAllFiles 메서드 추가

* [CHORE]: import 순서 알맞게 변경

* [REFACTOR]: Asset Thumbnail에서 잘못 추가되어있던 async 제거

* [STYLE]: VideoManager에서 코드 컨벤션에 맞게 개행 수정

* [REFACTOR]: 코드 리뷰 반영하여 중복되는 코드 제거 및 메서드 분리

* [CHORE]: develop에서 발생하는 충돌 해결

* [CHORE]: develop rebase로 인한 git 충돌 해결

* [CHORE]: SceneDelegate에서 테스트용 코드 제거

* Reapply "Merge branch 'feature/#13' into develop" (#38)

* [Fix/#39] 깃헙핑 - 리뷰어에게 여러 번 알림이 오는 버그 수정 (#40)

* Update slackPing.yml

* Update slackPing.yml

* [REFACTORING/#36] Socket에서 유저 상태 수정 (#41)

* [REFACT]: SocketPeer에서 state connecting대신에 pending 추가

* [FEAT]: SocketProvidable 기능별로 프로토콜 분리

* [REFACT]: SocketProvider 유저 상태 수정

* [STYLE]: ConnectedUser에서 UpdatedConnectedPeer로 네이밍 수정

* [REFACT]: ConnectedUser에서 상태 수정

* [REFACT]: 유저 State별로 이벤트 적절하게 올 수 있도록 UseCase수정

* [STYLE]: 불필요한 개행 제거

* [REFACT]: ConnectedUserUseCase 메모리 이점을 위해 ID만 들고 있도록 수정

* [FIX]: 불필요한 파라미터 삭제

* [Fix/#45] 다이나믹 로딩 안되는 문제 해결 (#46)

* [CHORE]: Bundle Identifier 및 Team 수정

* [FIX]: Feature에 compile Source 비워져있던 버그 수정

* [CHORE]: 불필요한 의존성 삭제

* [CHORE]: App Target에 의존성 추가

* [Feature/#19] DI Container를 구현하여 객체를 등록하고 주입한다 (#42)

* [FEAT]: Dynamic Library로 Core Layer 생성 및 빌드 오류 해결

* [FEAT]: Extensions와 Utilities로 Feature의 파일 이동 및 Public 수정

* [FEAT]: DIContainer를 App Layer에 추가

* [FEAT]: DIContainer에서 의존성을 주입하는 registerDependency 메서드 구현

* [FEAT]: SceneDelegate에서 DIContainer를 사용하여 초기 VC 호출

* [CHORE]: App Layer에서 필요없는 framework 제거

* [FEAT]: ConnectionViewController의 addUserCircleView에서 코드 순서 수정

* [FEAT]: Extensions와 Utilities를 다시 Core Dynamic Library로 합치도록 수정

* [CHORE]: project 파일 내용 수정

* [CHORE]: Core에서 Feature 의존성 제거

* [CHORE]: Core의 Defines Module 세팅 수정

* [FEAT]: DIContainer를 Core로 이동 및 SceneDelegate에서 의존성 주입

* [FIX]: Bundle Identifier 수정

* [FIX]: DI의 initializer를 private로 수정

* [Feature/#35] invite 관련 세부 UI 연결 (#43)

* [FEAT]: ConnectionViewModel에서 invitation 관련 코드 추가

* [FEAT]: 아무런 action이 없는 Alert 메서드 추가

* [FEAT]: ViewModel의 output에 따른 ViewController에서의 처리 로직 추가

* [FIX]: userCircleView의 center point 값이 CGPoint로 변환하는 과정에서 발생하는 소수점 문제를 반올림하여 해결

* [FIX]: Bundle Identifier 수정

* [CHORE]: project 파일 수정

* [FEAT]: accept와 reject 수정

* [CHORE]: warning 수정

* [CHORE]: App에서 core.framework embed 하도록 수정

* [CHORE]: 파일 위치 변경

* [CHORE]: Core Target 버전 수정

* [CHORE]: Compile Source 누락된거 추가

* [FIX]: 요청 응답 안되었던 버그 수정

* [FIX]: 앱 재진입시 똑같은 Peer 재발견 하는 버그 수정

* [STYLE]: 고정되는 Enum 케이스 @Frozen 어노테이션 추가

* [CHORE]: 사용하지 않는 default 제거

---------

Co-authored-by: Jung SeokYoung <thrdud0423@gmail.com>

* [Feature/#47] 그룹 참여자들의 상태를 보여주는 뷰와 UseCase 연결 (#49)

* [REFACTOR]: 컨벤션 일치

* [REFACTOR]: 컨벤션 일치

* [CHORE]: 뷰모델 컨벤션 일치에 따른 파일 추가사항

* [CHORE]: P2P모듈의 빌드 설정 중 팀을 codeSquad로 설정

* [REFACTOR]: 뷰모델의 In/Output을 분리

* [FEATURE]: GroupInfoViewModel과 유즈케이스를 연결

* [REFACTOR]: 뷰모델 연결에 따른 엔티티 타입 변경 적용

* [REFACTOR]: 뷰모델 연결에 따른 엔티티 타입 변경 적용

* [FEAT]: DIContainer에 connectionView관련 인스턴스 등록

* [FIX]: Pending상태 이벤트 제대로 안가는 것 오류 수정

* [FIX]: UseCase에 메서드 바인딩 안되어있던 오류 수정

* [REFACTOR]: 불필요한 print문 제거

* [REFACTOR]: 타이틀 삭제

* [FIX]: Pending상태의 유저가 Connected상태로 바뀌면 뷰가 추가되는 버그

* [CHORE]: iOS18에서 권한 요청을 명시하지 않으면 MultipeerConectivity를 사용하지 않는 변경점 대응

* [REFACTOR]: 구현내용이 없는 버튼 비활성화

* [REFACTOR]: 필요하지 않은 상태변화 반영 제거

* [FIX]: 봉주르에 등록한 서비스 네임과 실제 서비스네임이 달라 연결되지 않는 버그

---------

Co-authored-by: Jung SeokYoung <thrdud0423@gmail.com>

* [Feature/#48] MainViewController를 구현하여 UI의 흐름을 연결한다 (#50)

* [FEAT]: 가장 기본적인 MainViewController 구현

* [FEAT]: topViewController를 Overlay 스타일로 보이도록 수정

* [FIX]: 다음 화면에서 안보이는 관계로 다시 기본 스타일로 수정

* [FIX]: userCircleView가 위치하는 범위 수정

* [FIX]: userCircleView가 위치하는 범위 재수정

* [FEAT]: 연결이 완료되면 ConnectionView에서 서로를 표시하지 않도록 수정

* [FEAT]: Emoji를 ConnectionView와 GroupInfoView에서 공유하도록 EmojiManager 구현

* [FIX]: userCircleView가 위치하는 범위 재수정

* [FIX]: 초대 후 Waiting 상태에서 상대방의 연결 종료 시 alert dismiss 추가

* [FIX]: UserCircleView 위치 범위 재조정

* [FIX]: (Double, Double)을 CGPoint로 수정

* [FIX]: VideoListViewController에 VM 주입 수정

* [STYLE]: 코드 스타일 수정

* [FIX]: UserCircleView의 위치가 벗어나는 문제를 해결하기 위해 viewDidLayoutSubviews 수정

* [FIX]: 초대 거절 후, 다시 초대 이벤트 보낼 수 있도록 수정

* [FIX]: 초대를 받았을 때 유저 위치를 제거하던 문제 수정

* [FIX]: SceneDelegate에서 클로저를 모르게 수정

* [REFACTOR]: 불필요한 내장 사이즈 사용 코드 제거

* [STYLE]: 사용자 프로필 이모지 크기와 위치를 디자인과 일치하도록 수정

* [FIX]: VideoListVC에 VM을 DI를 통해 주입하도록 수정

* [FEAT]: id를 기준으로 userCircleView를 삭제하도록 수정

* [FEAT]: Alert를 Type으로 하여 생성하도록 수정

* [REFACTOR]: 불필요한 테스트 타입 제거

* [FIX]: Emoji 메서드를 하나로 병합 수정

* [FIX] Alert 흐름 수정

* [FIX]: Alert 흐름 수정

* [STYLE]: 린트 경고 수정

---------

Co-authored-by: Jung SeokYoung <thrdud0423@gmail.com>
Co-authored-by: 051198Hz <peeper_o_o@naver.com>

* [Chore/#51] Dynamic Framework Embeded 옵션 수정 및 의존성 수정 (#52)

---------

Co-authored-by: Forest Lee <86788943+around-forest@users.noreply.github.com>
Co-authored-by: LURKS02 <thecrooks2@gmail.com>
Co-authored-by: Yune gim <82448654+051198Hz@users.noreply.github.com>
Co-authored-by: 051198Hz <peeper_o_o@naver.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

동영상 상세 보기, 선택하여 업로드하는 기능 추가

5 participants