WCSessionを使ってファイル転送するときの注意点

1 min読了の目安(約1200字TECH技術記事

watchOSアプリとiOSアプリでメッセージやファイルをやり取りする方法としてWCSessionがあります。

WCSession | Apple Developer Documentation

watchOS/iOSアプリの双方で以下のような初期化をすると双方向でやりとりが可能になります。

if WCSession.isSupported() {
    let session = WCSession.defaultSession()
    session.delegate = self
    session.activateSession()
}

ファイルの送受信

送信

func transferFile(_ file: URL, metadata: [String : Any]?) -> WCSessionFileTransfer

transferFile(_:metadata:) | Apple Developer Documentation

受信

optional func session(_ session: WCSession, didReceive file: WCSessionFile)

session(_:didReceive:) | Apple Developer Documentation

注意点

If you want to keep the file referenced by this parameter, you must move it synchronously to a new location during your implementation of this method.If you do not move the file, the system deletes it after this method returns.

didReceiveで受信したファイルは当該メソッドからリターンするタイミングで削除されてしまいます、必要に応じて別の場所に移動するかコピーするなどしましょう。僕はこれに気がつかないで時間を溶かしました。