V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wang93wei
V2EX  ›  macOS

写了个 macOS 原生 Android 文件传输工具 SwiftMTP,求测试反馈 👋

  •  
  •   wang93wei · 2 天前 · 1275 次点击

    最近因为要在 Mac 和 Android 手机之间传文件,发现目前可以用的工具要么是开源且丑的 whoozle/android-file-transfer-linux ,要么是好久没更新的 Google 开发的 Android File Transfer 。

    为什么写这个?

    • Android File Transfer 不支持最新的 ARM 版本,且仍然使用 Intel 转译,体验很差
    • whoozle/android-file-transfer-linux 虽然开源,但界面简陋,而且需要自行编译 ARM 版本,对普通用户很不友好

    于是决定自己撸一个开源工具——SwiftMTP 。折腾不到一个月终于能用了 🎉

    关于我(先坦白)

    我完全不会 Swift 和 GO 的开发,所以目前代码都是 AI 辅助生成的。正因为如此,可能存在 UI 样式异常或其他 bug 。如果你在使用过程中遇到任何问题,请务必及时反馈,我会尽力修复!

    主要功能

    • 自动检测连接的 Android 设备( MTP 模式)
    • 文件浏览,支持文件夹导航
    • 文件下载/上传,支持拖放
    • 支持大文件传输(>4GB )
    • 批量选择和下载
    • 多语言支持(简中、英语、日语、韩语、俄语、法语、德语)
    • 显示设备存储空间

    技术栈

    • 前端:SwiftUI ( MVVM 架构)
    • 后端:Go 1.22 + go-mtpx + libusb-1.0
    • 桥接:CGO ( Swift ↔ C ↔ Go )

    目前已知限制

    • 仅支持 ARM 版本( Apple 芯片)
    • 要求系统版本在 macOS 26 或更高
    • 仅支持单个设备
    • 暂不支持文件夹上传(单文件上传)
    • 传输速度受 MTP 协议限制
    • UI 可能存在样式异常(因为我不会 Swift 😅)

    下载方式

    GitHub: https://github.com/wang93wei/SwiftMTP

    可以从源码构建,或者直接下载安装包。

    注意: 因为没有苹果开发者签名,所以可能需要其他方式方可使用:

    如果看到 "SwiftMTP can't be opened because it is from an unidentified developer",尝试以下方法:

    1. 右键点击应用 → 选择「打开」
    2. 系统设置 → 隐私与安全性 → 允许 SwiftMTP
    3. 或在终端运行:xattr -cr /Applications/SwiftMTP.app

    求反馈

    • 你的设备能否正常检测?
    • 传输速度如何?
    • UI 有没有样式问题?
    • 有没有遇到什么 bug ?
    • 有什么功能建议?

    项目刚起步,代码写得可能不够优雅,欢迎提 issue 或 PR !

    效果图

    22 条回复    2026-01-24 17:46:12 +08:00
    hronro
        1
    hronro  
       2 天前   ❤️ 1
    我在用 OpenMTP ,用的 Electron 技术栈写的,感觉也还行。当然如果有原生 App 并且成熟稳定的话,我肯定是更愿意用原生 App 的。
    X1aoma
        2
    X1aoma  
       2 天前
    蹲后续
    huig
        3
    huig  
       2 天前
    我也用的 openMTP 另外我觉得这个 UI 左边设备栏是否可以改到更小的位置,不会有那么多设备的。
    sherlockGou
        4
    sherlockGou  
       2 天前
    可以考虑一下分栏,比如一边设备的文件,一边是本机的文件,这样还能直接拖拽来拷贝。
    sherlockGou
        5
    sherlockGou  
       2 天前
    @sherlockGou 然后匹配更多的文件图标。
    HiHuan
        6
    HiHuan  
       2 天前
    跟 localsend 有啥区别吗?
    steve687
        7
    steve687  
       2 天前
    虽然但是泼盆冷水,推荐一个 blip
    xy19009188
        8
    xy19009188  
       2 天前
    我一直用 localsend
    MoozLee
        9
    MoozLee  
       2 天前
    同样一直用的 openmtp
    94nb
        10
    94nb  
       2 天前
    @hronro OpenMTP+1 ,主要用来给 switch 传游戏
    kasusa
        11
    kasusa  
       2 天前
    MTP 好像是微软默认支持 ,然后 mac 不支持的那种?
    mac 啊。。。。
    goldenlove
        12
    goldenlove  
       2 天前
    OpenMTP +1 。
    但如果只是传小文件目前用 Blip 无线更方便。
    alienjunx
        13
    alienjunx  
       2 天前
    请问为什么要用到 go
    nuII
        14
    nuII  
       1 天前
    star 支持!虽然评论里推荐了很多局域网传输的工具,但是在大文件的时候直接有线连接传输才是最快的,wifi 可没有 10Gpbs 的速度。传一些 raw 格式视频、游戏包的情况下还是很需要的。

    文件不大的情况下多端传输现在是用 blip 来代替 localsend 了,自动检测局域网,优先打洞,不行再中继,比 localsend 的纯局域网要好一点。
    SayHelloHi
        15
    SayHelloHi  
       1 天前
    Android File Transfer +1

    主要给 Switch 传送游戏
    dantifer
        16
    dantifer  
       11 小时 41 分钟前
    @hronro 是啊,还想问跟 openmtp 有啥区别呢
    cnachen
        17
    cnachen  
       10 小时 58 分钟前 via Android
    我一直用 Lakr233/Axchange
    wang93wei
        18
    wang93wei  
    OP
       7 小时 37 分钟前
    @alienjunx 不会 Swift ,C 之前大学学的都忘了,再加上得研究 MTP 协议,就找一个现成且开源的 go 后端作为文件传输的基础。
    wang93wei
        19
    wang93wei  
    OP
       4 小时 17 分钟前
    @nuII 感谢你的支持。

    确实,对于大文件,有线 MTP 传输的速度优势是无线传输无法比拟的,按场景选择工具的策略很合理。

    我跟人比较喜欢用线连接电脑的感觉,所以才开发了这么个工具。
    wang93wei
        20
    wang93wei  
    OP
       3 小时 27 分钟前
    @sherlockGou #4 好的,感谢您的建议。
    wang93wei
        21
    wang93wei  
    OP
       3 小时 26 分钟前
    @kasusa 对,mac 上确实不太行,得用专门的工具。
    wang93wei
        22
    wang93wei  
    OP
       3 小时 22 分钟前
    @cnachen 头一次看到这个,不同的技术路线。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:08 · PVG 21:08 · LAX 05:08 · JFK 08:08
    ♥ Do have faith in what you're doing.