[swift] 네트워크를 통해 다른 기기로 파일 전송하기

이번에는 Swift를 사용하여 네트워크를 통해 다른 기기로 파일을 전송하는 방법에 대해 알아보겠습니다.

네트워크 통신을 위한 준비

먼저, MultipeerConnectivity 프레임워크를 이용하여 네트워크 통신을 설정해야 합니다. 해당 프레임워크는 근거리 통신을 지원하며 Wi-Fi나 Bluetooth를 통해 다른 기기와 연결할 수 있습니다.

import MultipeerConnectivity

class FileTransferManager: NSObject, MCSessionDelegate {
    var session: MCSession!
    var browser: MCNearbyServiceBrowser!
    var advertiser: MCNearbyServiceAdvertiser!
    var peerID: MCPeerID!

    // 초기화 및 설정 코드 작성
}

위 코드에서는 MCSession, MCNearbyServiceBrowser, MCNearbyServiceAdvertiser, MCPeerID 등을 사용하여 네트워크 통신을 위한 클래스를 선언하고 있습니다.

파일 전송하기

이제 파일을 전송하기 위한 메서드를 추가해보겠습니다.

extension FileTransferManager {
    func sendFile(toPeer peer: MCPeerID, url: URL, completionHandler: ((Error?) -> Void)?) {
        if session.connectedPeers.contains(peer) {
            do {
                let data = try Data(contentsOf: url)
                try session.send(data, toPeers: [peer], with: .reliable)
                completionHandler?(nil)
            } catch {
                completionHandler?(error)
            }
        }
    }
}

위 코드에서 sendFile(toPeer: url: completionHandler:) 메서드는 특정 피어에게 파일을 전송하는 역할을 합니다. 전송 결과는 completionHandler를 통해 처리됩니다.

전체 코드

import MultipeerConnectivity

class FileTransferManager: NSObject, MCSessionDelegate {
    var session: MCSession!
    var browser: MCNearbyServiceBrowser!
    var advertiser: MCNearbyServiceAdvertiser!
    var peerID: MCPeerID!

    // 초기화 및 설정 코드 작성

    func sendFile(toPeer peer: MCPeerID, url: URL, completionHandler: ((Error?) -> Void)?) {
        if session.connectedPeers.contains(peer) {
            do {
                let data = try Data(contentsOf: url)
                try session.send(data, toPeers: [peer], with: .reliable)
                completionHandler?(nil)
            } catch {
                completionHandler?(error)
            }
        }
    }
}

마치며

이렇게 Swift를 사용하여 네트워크를 통해 다른 기기로 파일을 전송하는 방법을 알아보았습니다. MultipeerConnectivity 프레임워크를 이용하면 편리하게 파일을 공유할 수 있으며, 더 다양한 네트워크 기능을 구현할 수도 있습니다.