원문 캡처 · github.com
원문 캡처 · github.com

Tether는 안드로이드용 무료 앱 KDE Connect와 연결해 휴대전화 알림에 답하고, 문자와 파일을 주고받으며, 클립보드를 동기화하는 macOS 앱이다. Apple Silicon과 Intel Mac을 지원하며, macOS 15 Sequoia 이상에서 사용할 수 있다.

Tether는 Swift와 SwiftUI만으로 만들었으며 Qt, Electron, 타사 라이브러리를 사용하지 않는다고 프로젝트는 설명한다. 앱 용량은 프로젝트 소개 기준 2.3MB다.

설치와 연결

가장 간단한 설치 방법은 Homebrew다. 이 방법을 쓰면 아래에 설명한 ‘열 수 없음’ 경고도 나타나지 않는다.

sh
brew install --cask subhashhhhhh/tether/tether

또는 최신 릴리스에서 Mac에 맞는 디스크 이미지를 내려받는다. Apple Silicon(M1 이상)은 Tether-<version>-AppleSilicon.dmg, Intel Mac은 Tether-<version>-Intel.dmg를 선택하면 된다. Mac의 Apple 메뉴에서 ‘이 Mac에 관하여’를 열어 확인할 수 있다. Apple Silicon에는 ‘칩’, Intel에는 ‘프로세서’라고 표시된다.

휴대전화에는 Google Play 또는 F-Droid에서 KDE Connect를 설치한다. Tether를 설치해 실행하면 메뉴 막대에 나타난다. 휴대전화의 KDE Connect에서 기기 목록에 표시된 Mac을 누르고, Mac에서 ‘Pair’를 선택해 연결을 승인한다. Mac에서 연결을 시작하려면 Tether 사이드바의 ‘Nearby’에서 휴대전화를 선택할 수도 있다. 기기가 보이지 않으면 ‘Connect by Address…’에서 휴대전화 IP 주소나 Tailscale 이름을 입력한다.

휴대전화가 처음 마운트될 때 KDE Connect가 파일 접근 권한을 요청할 수 있다. Tether는 하루 한 번 또는 Tether 메뉴의 ‘Check for Updates…’를 선택할 때 새 버전을 확인하고, 업데이트가 있으면 앱 안에서 설치한다.

Mac에서 쓸 수 있는 기능

휴대전화 알림은 Mac의 알림 센터에 표시된다. SMS, WhatsApp, Telegram, Signal 등 알림에서 답장을 지원하는 메시지 앱은 배너에서 바로 답할 수 있다. Mac에서 알림을 지우면 휴대전화에서도 지워진다. 로그인 코드에는 ‘Copy Code’ 버튼이 표시되며, 코드를 자동으로 복사하도록 설정할 수도 있다.

SMS 대화는 연락처 이름과 사진을 포함해 ‘Messages’에 동기화된다. 대화 전체를 읽고 답하거나 새 대화를 시작할 수 있다. 전화가 오면 발신자를 표시하고 벨소리를 끄는 버튼을 제공한다. 통화가 끝날 때까지 Mac에서 재생 중인 오디오는 일시 정지된다.

파일은 Tether 창이나 메뉴 막대 팝오버에 끌어다 놓거나, Finder·Photos 등에서 ‘Share › Tether’를 선택해 휴대전화로 보낼 수 있다. 연결된 휴대전화가 둘 이상이면 공유할 기기를 선택하는 메뉴가 나온다. 휴대전화에서 공유한 파일은 전송 진행 상황을 표시하며 Downloads에 저장된다.

연결된 휴대전화는 이름을 딴 드라이브로 Finder에 나타나며, 꺼내기 버튼도 제공한다. 저장 공간을 살펴보고 사진과 문서를 바로 열거나 파일을 끌어다 놓을 수 있다. 파일은 열 때 휴대전화에서 읽으므로 동영상 재생을 바로 시작할 수 있다. 이 기능은 KDE Connect의 파일 공유를 사용하며 Wi-Fi와 Tailscale에서 별도 설정이나 관리자 암호 없이 작동한다. ADB를 사용한다면 Settings › Files에서 무선 디버깅으로 전환할 수 있다.

한 기기에서 복사한 내용을 다른 기기에 붙여넣을 수 있다. 휴대전화에서 재생 중인 미디어의 앨범 아트를 보고 재생과 음량을 조절할 수도 있다. 반대로 휴대전화의 KDE Connect에서 ‘Multimedia control’을 열면 Mac에서 재생 중인 Music, Spotify, Safari 동영상 등을 확인하고 Mac 음량을 조절할 수 있다. ‘Find Phone’을 누르면 휴대전화가 최대 음량으로 울리고, 휴대전화의 KDE Connect에서 ‘Ring’을 선택하면 Mac이 울린다.

KDE Connect의 ‘Remote Input’과 프레젠테이션 도구를 사용하면 휴대전화를 트랙패드와 발표 리모컨처럼 쓸 수 있다. 포인터 이동, 클릭, 스크롤, 입력과 화면 레이저 포인터를 지원한다. 이 기능에는 손쉬운 사용 권한이 필요하며 Tether의 Overview나 Settings에서 허용할 수 있다. Mac에서 셸 명령을 설정해 휴대전화에서 실행할 수 있고, 원하면 Shortcuts도 함께 사용할 수 있다. 휴대전화가 멀어질 때 Mac을 잠그도록 설정하는 기능도 있다.

메뉴 막대 팝오버에는 휴대전화의 배터리와 연결 상태, 빠른 동작, 재생 중인 미디어와 새 페어링 요청이 표시된다. 기본 창의 사이드바에는 기기가 나열되며, 각 휴대전화에는 Overview, Messages, Notifications, Files, Commands 탭이 있다. macOS 26에서는 Liquid Glass를, macOS 15에서는 반투명 재질을 사용한다. 로드맵에는 향후 작업과 KDE Connect의 제약 때문에 구현할 수 없는 기능이 정리돼 있다.

다른 네트워크에서 연결하기

KDE Connect는 기본적으로 휴대전화와 Mac이 같은 Wi-Fi에 연결돼 있어야 한다. 두 기기에서 Tailscale을 사용하면 Tether가 tailnet에서 휴대전화를 자동으로 찾는다. 따라서 모바일 데이터나 다른 네트워크를 사용할 때도 기능을 계속 이용할 수 있다.

Tether는 사용자가 소유한 Tailscale 계정에 로그인한 Android·iOS 기기에만 접속한다. 다른 사람이 공유한 기기에는 접속하지 않는다. Mac의 tailscale 앱에서 tailnet 정보를 읽으며 Tailscale 서버와 통신하지 않는다고 프로젝트는 설명한다. Settings › General › Tailscale에서 이 기능을 켜거나 끌 수 있다. ‘Connect by Address…’에는 phone.tailnet.ts.net과 같은 Tailscale 이름도 입력할 수 있다.

크기와 유휴 상태 수치

프로젝트가 공개한 수치는 2026년 10월 Apple Silicon Mac에서 측정했다. Tether 수치는 휴대전화와 연결하고 연락처와 메시지를 동기화한 상태로, 1.8 버전을 백그라운드에서 실행했을 때의 결과다. KDE Connect 공식 앱의 다운로드 용량은 KDE 릴리스 빌드를 기준으로 한다. 빈 칸은 측정하지 않았다는 뜻이며, 창을 열면 Tether는 더 많은 메모리를 사용해 긴 대화를 읽는 동안 약 50~80MB를 쓴다고 설명한다.

항목Tether 1.8KDE Connect 26.08 for macOS
다운로드 용량2.6 MB87 MB
설치된 앱4.3 MB측정하지 않음
유휴 상태 메모리23 MB측정하지 않음
유휴 상태 CPU0%측정하지 않음

개인정보 보호와 보안

Tether에는 클라우드, 계정, 분석 기능이나 원격 측정 기능이 없다. 휴대전화와 Mac은 로컬 네트워크나 사용자의 Tailscale 네트워크를 통해 직접 통신한다. 모든 연결과 파일 전송에는 TLS를 사용한다. 페어링할 때 휴대전화의 인증서를 저장하고, 이후 연결과 파일 전송에서 동일한 인증서를 제시해야 한다. 휴대전화를 가장하는 기기는 거부한다고 프로젝트는 설명한다.

릴리스는 같은 인증서로 서명하며, Tether는 자체 서명에 사용한 인증서로 서명된 업데이트만 설치한다. 자세한 내용은 서명 안내를 참조하면 된다. Mac의 인증서와 키는 ~/Library/Application Support/Tether에 저장되며 해당 사용자 계정만 읽을 수 있다. 키체인 대신 메모리에 불러온다.

‘Tether를 열 수 없음’ 경고

Tether는 유료 개발자 계정이 필요하다는 이유로 Apple 공증을 받지 않았다. 따라서 내려받은 앱을 처음 열 때 macOS가 차단할 수 있다. Homebrew로 설치한 경우에는 이 문제가 발생하지 않는다. 디스크 이미지로 설치했다면 먼저 Tether를 열어 경고를 닫고, 시스템 설정의 ‘개인정보 보호 및 보안’에서 ‘보안’ 항목까지 내려가 ‘그래도 열기’를 선택한다. 또는 터미널에서 다음 명령을 실행할 수 있다.

sh
xattr -cr /Applications/Tether.app

소스 빌드

빌드하려면 Xcode 26 이상이 필요하다. 프로젝트는 Swift 6.2의 기본 메인 액터 격리를 사용하며 패키지 의존성은 없다. 저장소를 내려받고 테스트를 실행하거나 앱과 두 종류의 릴리스 디스크 이미지를 빌드하는 명령은 다음과 같다.

sh
git clone https://github.com/subhashhhhhh/Tether.git
cd Tether

# Run the tests
xcodebuild test -project Tether.xcodeproj -scheme Tether -destination "platform=macOS"

# Build the app (ends up in build/Build/Products/Release/Tether.app)
xcodebuild -project Tether.xcodeproj -scheme Tether -configuration Release -derivedDataPath build build

# Build the two release disk images (Apple Silicon and Intel) into dist/
scripts/release.sh

release.sh는 관리자의 ‘Tether Self-Signed’ 인증서로 서명한다. 서명 방식과 scripts/test-updater.sh로 업데이트를 시험하는 방법은 서명 안내에 나와 있다.

구현 방식과 라이선스

화면은 @Observable 뷰 모델과 기본 컨트롤을 사용하는 SwiftUI로 만들었다. macOS 26에서는 Liquid Glass, macOS 15에서는 재질 효과를 적용하며 라이트·다크 모드, 강조 색상, 손쉬운 사용 설정을 따른다. 휴대전화를 드라이브로 보여주는 기능에는 루프백 인터페이스에서 작동하는 소형 NFS 버전 3 서버를 사용한다. 사용자가 mount_nfs로 마운트하며 로컬에서만 쓰는 Bonjour 호스트 이름을 통해 표시한다. 파일 제공은 CryptoKit 기반 네이티브 SSH 클라이언트의 SFTP 또는 ADB를 사용한다.

네트워킹은 poll() 기반 입출력을 사용하는 BSD 소켓과 Security 프레임워크의 TLS로 구현했다. KDE Connect는 평문 핸드셰이크 뒤 열린 연결을 TLS로 전환하며, 프로젝트는 Network.framework가 이를 처리할 수 없다고 설명한다. 기기 식별 정보는 macOS에 포함된 openssl 도구로 한 번 생성한 뒤 Security 프레임워크로 메모리에 불러온다.

macOS 15.4부터는 Apple이 서명한 프로그램만 Mac의 ‘Now Playing’ 정보를 읽을 수 있다고 프로젝트는 설명한다. 이에 따라 Tether는 /usr/bin/perl을 통해 mediaremote-adapter를 실행한다. 이 구성 요소는 BSD-3 라이선스를 따르며 scripts/build-mediaremote-adapter.sh로 소스에서 빌드해 Vendor/에 둔다.

Tether의 라이선스는 KDE Connect 생태계와 같은 GPL-2.0이다. 라이선스 파일에서 확인할 수 있다. Tether에는 Jonas van den Berg의 mediaremote-adapter가 포함돼 있으며, 해당 구성 요소는 BSD 3-Clause 라이선스를 따른다(구성 요소 라이선스). Tether는 독립 프로젝트이며 KDE와 제휴하지 않는다.