fix(chat): Release 빌드에서 타이핑 인디케이터 미갱신 문제 수정
- SwiftUI diff 꼬임 원인 제거: LazyVStack 아이템 id 네임스페이스 분리 - 메시지 셀: "msg_\(index)" - 쿼터 안내: "quota_\(messages.count)" - 타이핑 인디케이터: "typing_\(messages.count)" - 스크롤 타깃 id도 동일 네임스페이스로 일관화 - Combine 체인 메인 스레드 보장: sendMessage/enterRoom에 receive(on: .main) 적용 - 성공/실패/디코드 실패 모든 경로에서 showSendingMessage 정상 복구 왜: 디버그에서는 보였으나 Release(TestFlight)에서 UI 반영이 유실됨. 동일 id 충돌 및 메인 스레드 미보장으로 SwiftUI diff/렌더링이 꼬인 것이 원인.
This commit is contained in:
		@@ -151,6 +151,7 @@ final class ChatRoomViewModel: ObservableObject {
 | 
			
		||||
            roomId: roomId,
 | 
			
		||||
            characterImageId: self.chatRoomBgImageId
 | 
			
		||||
        )
 | 
			
		||||
        .receive(on: DispatchQueue.main)
 | 
			
		||||
        .sink { result in
 | 
			
		||||
            switch result {
 | 
			
		||||
            case .finished:
 | 
			
		||||
@@ -200,6 +201,7 @@ final class ChatRoomViewModel: ObservableObject {
 | 
			
		||||
    
 | 
			
		||||
    func getMemberInfo() {
 | 
			
		||||
        userRepository.getMemberInfo()
 | 
			
		||||
            .receive(on: DispatchQueue.main)
 | 
			
		||||
            .sink { result in
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .finished:
 | 
			
		||||
@@ -233,6 +235,7 @@ final class ChatRoomViewModel: ObservableObject {
 | 
			
		||||
        isLoading = true
 | 
			
		||||
        
 | 
			
		||||
        repository.purchaseMessage(roomId: roomId, messageId: selectedMessage.messageId)
 | 
			
		||||
            .receive(on: DispatchQueue.main)
 | 
			
		||||
            .sink { result in
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .finished:
 | 
			
		||||
@@ -277,6 +280,7 @@ final class ChatRoomViewModel: ObservableObject {
 | 
			
		||||
        isLoading = true
 | 
			
		||||
        
 | 
			
		||||
        repository.purchaseChatQuota(roomId: roomId)
 | 
			
		||||
            .receive(on: DispatchQueue.main)
 | 
			
		||||
            .sink { result in
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .finished:
 | 
			
		||||
@@ -320,6 +324,7 @@ final class ChatRoomViewModel: ObservableObject {
 | 
			
		||||
        isResetting = true
 | 
			
		||||
        
 | 
			
		||||
        repository.resetChatRoom(roomId: roomId)
 | 
			
		||||
            .receive(on: DispatchQueue.main)
 | 
			
		||||
            .sink { result in
 | 
			
		||||
                switch result {
 | 
			
		||||
                case .finished:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user