연결 · 설정 · 문제 해결

문제를 파악하고 빌드를 계속하세요

클라우드 Mac 사용 안내입니다. 처음 연결한다면 아래 카드 4개부터 확인하세요. 기존 인스턴스에 문제가 생겼다면 증상을 검색하거나 문제 해결 섹션으로 바로 이동하세요.

첫 인스턴스 수령 후

먼저 연결과 접근 권한을 확인하세요

MacFTP는 macOS를 기본으로 실행하는 Apple Silicon 전용 물리 서버를 제공합니다. 가상 머신이 아닙니다. 아래 단계에서는 콘솔의 인스턴스 상세 정보에 표시된 실제 IP, 사용자 이름, 연결 정보를 사용하세요. 주문 번호를 로그인 사용자 이름으로 입력하지 마세요.

SSH 로그인

로컬 터미널을 열고 연결 명령의 사용자 이름, IP, 포트를 인스턴스 상세 정보에 나온 값으로 바꾸세요. 처음 연결할 때는 호스트 지문을 확인한 뒤 신뢰 여부를 결정하세요.

ssh -p PORT USER@NODE_IP

오류 유형을 확인하세요: 시간 초과라면 네트워크를 먼저 확인하세요. Connection refused라면 포트와 인스턴스 상태를 확인하세요. Permission denied라면 사용자와 인증 방식을 확인하고 비밀번호를 연달아 추측해 입력하지 마세요.

VNC / 화면 공유

콘솔의 인스턴스 상세 정보에서 그래픽 연결 방법을 확인하세요. 클라이언트에 주소, 포트, 인증 정보를 안내된 대로 입력하세요. SSH 비밀번호와 그래픽 세션 인증 정보가 같다고 단정하지 마세요.

검은 화면이 나타나면 연결을 끊었다가 다시 연결하고, 이전 세션에 중복 접속하지 않았는지 확인하세요. SSH가 정상이라면 빌드 로그를 저장하고 시스템이 계속 작동하는지 확인한 뒤, 바로 시스템 전체를 재시작하지 마세요.

브라우저 그래픽 연결은 로그인 후 인스턴스 상세 정보에서만 이용할 수 있습니다. 공개 도움말 페이지에는 연결 인증 정보가 표시되지 않습니다.

비밀번호 및 키

처음 로그인한 뒤 passwd 를 사용해 현재 사용자 비밀번호를 변경하세요. 로컬에서 SSH 키를 생성하고 공개 키만 원격 서버의 ~/.ssh/authorized_keys에 추가하세요. 개인 키는 로컬에 보관하세요.

~/.ssh 디렉터리 권한을 700으로, authorized_keys 파일 권한을 600으로 설정하세요. 현재 연결은 유지하고 터미널을 하나 더 열어 키 로그인이 되는지 확인하세요.

확인이 끝날 때까지 기존 세션을 닫거나 현재 인증 방식을 비활성화하지 마세요. 개인 키, 비밀번호, 복구 정보는 지원 티켓에 적지 마세요.

Xcode 및 명령줄 도구

먼저 xcode-select -p 와 xcodebuild -version을 실행해 현재 환경을 확인하세요. 그래픽 작업이 필요하면 원격 세션에서 Applications 폴더의 Xcode를 확인하세요.

명령줄 도구만 필요하다면 xcode-select --install을 실행할 수 있습니다. iOS 아카이브에는 전체 Xcode가 필요합니다. Xcode를 추가로 설치한 뒤 처음 실행하고 필요한 구성 요소를 준비한 다음 CI에 연결하세요.

여러 버전을 함께 설치한 경우 실제 경로를 기준으로 전환하세요. 앱 이름만 바꾸고 Runner가 이전 개발자 디렉터리를 계속 사용하게 두지 마세요.

로컬에서 클라우드로

세 단계로 이전하고 단계별로 확인하세요

동일한 커밋으로 단일 빌드를 먼저 성공시킨 뒤 자동 작업을 연결하세요. 아래 시간은 일정 계획을 위한 참고치이며 완료 시간을 보장하지 않습니다. 저장소 크기, 네트워크, 의존성 다운로드, 서명 준비에 따라 실제 소요 시간이 달라집니다.

01 / 데이터

소스 동기화, 빌드 캐시는 제외

15~45분 정도 잡으세요. 대용량 리소스 저장소는 별도입니다.

고정된 커밋을 버전 관리 저장소에서 체크아웃하는 방법을 권장합니다. 미커밋 파일을 옮겨야 한다면 SFTP 또는 rsync를 사용하세요. DerivedData, 프로젝트의 build 디렉터리, 로컬 로그는 제외해 이전 경로와 만료된 캐시가 새 서버로 넘어가지 않게 하세요.

먼저 dry-run으로 파일 목록을 확인한 다음 실제 동기화를 실행하세요. 예시의 USER와 NODE_IP에는 인스턴스에 제공된 값을 사용하세요. 사용자 지정 SSH 포트를 사용한다면 별도로 설정해야 합니다.

rsync -av --dry-run \
  --exclude='DerivedData/' \
  --exclude='build/' \
  ./ USER@NODE_IP:~/project/
git rev-parse HEAD
git status --short

완료 기준: 양쪽의 커밋이 같고, 리소스 파일이 모두 있으며, 민감한 설정이 코드 저장소에 포함되지 않았습니다.

02 / 툴체인

의존성 및 서명 환경 재구성

30~90분 정도 잡으세요. 처음 다운로드하는 경우 더 오래 걸릴 수 있습니다.

로컬 Xcode, SDK, Homebrew 및 스크립트 의존성의 버전을 기록하세요. 먼저 brew --version 으로 Homebrew가 설치되어 있는지 확인하세요. 프로젝트에 Brewfile이 있는 경우에만 파일을 기준으로 의존성을 복원하세요.

서명에 필요한 p12 파일과 프로비저닝 프로파일은 암호화된 연결로 전송하세요. 인증서를 전용 키체인에 가져오고 프로파일은 빌드 사용자 디렉터리에 넣으세요. 비밀번호를 저장소나 빌드 로그에 기록하지 마세요.

brew --version
xcodebuild -version
xcodebuild -showsdks
security find-identity -v -p codesigning

완료 기준: SDK가 프로젝트 요구 사항을 충족하고, 서명 ID가 유효하며, 수동 archive가 오류 없이 완료됩니다.

03 / CI 연동

Runner 등록 후 자동 실행 활성화

20~60분 정도 잡으세요. 프로젝트 테스트 시간은 포함되지 않습니다.

코드 플랫폼에서 생성한 등록 명령으로 GitHub Actions 자체 호스팅 Runner 또는 GitLab Runner를 설치하세요. 등록 토큰은 설정 단계에서만 사용하고 워크플로에 서버 비밀번호를 저장하지 마세요.

다음 항목을 확인하세요: self-hosted , macOS 및 ARM64 태그. 고정된 커밋으로 먼저 수동 실행하고 작업 디렉터리, 산출물 경로, 서명 권한을 확인한 뒤 브랜치 자동 빌드를 활성화하세요.

uname -m
sw_vers -productVersion
xcode-select -p
git rev-parse HEAD

완료 기준: Runner가 온라인 상태이고, 대상 커밋이 정확하며, 아카이브 산출물을 가져올 수 있고, 로그에 인증 정보가 없습니다.

한 물리 노드에서 여러 작업을 실행하면 CPU, 통합 메모리, SSD를 작업끼리 함께 사용합니다. 먼저 동시 실행 수를 제한하고 점차 늘리세요. 로컬 작업 간 리소스 경쟁을 노드 장애로 오인하지 않도록 주의하세요.

단계별로 실행하세요

자주 쓰는 명령: 전제 조건을 확인한 뒤 복사하세요

디렉터리와 파일 이름은 명령 예시입니다. 실행 전에 실제 서버에 있는 경로로 바꾸세요. sudo가 필요한 작업에는 관리자 권한이 필요합니다. 비밀번호가 포함된 명령을 공개 로그에 붙여 넣지 마세요.

Xcode 개발자 디렉터리 선택

이 예시는 /Applications/Xcode.app 이 이미 있는 경우에 적용됩니다. 여러 버전이 있다면 먼저 앱 경로를 확인하고, 전환 후 버전과 SDK를 점검하세요. 현재 작업에만 다른 버전을 사용할 경우 작업 내에서 DEVELOPER_DIR을 설정할 수 있습니다.

전환 및 확인
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcode-select -p
xcodebuild -version
xcodebuild -showsdks

p12를 빌드 키체인으로 가져오기

먼저 build.keychain-db 라는 전용 키체인을 준비하고 작업을 실행하는 사용자 세션에서 잠금을 해제하세요. 가져오는 동안 시스템 안내에 따라 p12 비밀번호를 입력하세요. 인증서가 표시되더라도 CI에 필요한 개인 키 접근 권한이 보장되는 것은 아닙니다.

가져오기 및 ID 확인
security import ./signing.p12 \
  -k "$HOME/Library/Keychains/build.keychain-db" \
  -T /usr/bin/codesign
security find-identity -v -p codesigning \
  "$HOME/Library/Keychains/build.keychain-db"

launchd로 Runner 관리

아래 방법은 등록을 마쳤고 svc.sh 가 포함된 GitHub Actions Runner 디렉터리에 적용됩니다. 서비스 스크립트로 설치와 실행을 관리하고, 내부적으로는 launchd가 작동합니다. GitLab Runner는 자체 서비스 명령을 사용하세요. 이 스크립트와 혼용하지 마세요.

Runner 디렉터리에서 실행
./svc.sh install
./svc.sh start
./svc.sh status
launchctl list | grep -i runner

launchd에서 작업을 찾을 수 있다는 것은 서비스가 등록되었다는 뜻일 뿐입니다. 코드 플랫폼으로 돌아가 Runner가 온라인인지 확인하고 실제로 빌드를 실행해 보세요. GUI 또는 키체인 상호작용이 필요한 작업이라면 사용자 세션 상태도 확인해야 합니다.

주문 및 이용 기간

만료 시각과 결제 상태를 따로 확인하세요

서비스는 일간·주간·월간·분기 단위로 선불 결제하며 선택한 이용 기간에 대해 한 번에 청구됩니다. 계정 상태, 결제 상태, 인스턴스 상태는 서로 다른 정보입니다. 문제를 문의할 때는 주문 번호와 인스턴스 번호를 함께 기록하세요.

갱신은 어떻게 하고, 데이터가 계속 보관되는지 어떻게 확인하나요?

콘솔에 로그인한 뒤 구독 또는 인스턴스에 해당하는 주문에서 만료 시각과 갱신 메뉴를 확인하세요. 기존 구독을 갱신한 후 이용 기간이 연장되었는지 확인하세요. 새 인스턴스 주문을 기존 노드 갱신으로 간주하지 마세요. 결제 후 기간이 갱신되지 않았다면 거래 증빙을 보관하고 지원 티켓을 제출하세요. 중요한 데이터는 별도로 백업해야 합니다.

만료 알림을 받나요? 어떤 시간을 기준으로 해야 하나요?

콘솔에 표시된 주문 만료 시각을 기준으로 삼고 화면에 안내된 시간대를 확인하세요. 계정 이메일을 사용할 수 있는 상태로 유지하고 알림 메일함과 스팸 메일함을 확인하세요. 이메일을 받았는지 여부만으로 이용 기간을 판단하지 마세요. 팀 캘린더에 직접 알림을 설정하고 만료 전에 갱신하거나 코드, 인증서, 빌드 산출물을 이전하는 것이 좋습니다.

결제 수단, 통화, 거래 내역은 어떻게 확인하나요?

USDT-TRC20과 Visa / Mastercard / Amex(Stripe)만 지원하며 모든 결제는 미국 달러(USD)로 처리됩니다. 실제 사용 가능한 결제 게이트웨이는 백엔드 응답을 기준으로 합니다. 온체인 결제 전에는 네트워크와 금액, 결제 페이지 정보를 확인하세요. 카드 결제는 주문에 표시된 결과를 기준으로 합니다. 문제가 있으면 주문 번호 또는 거래 해시를 제공하세요. 전체 카드 번호, 인증 코드, 지갑 개인 키는 보내지 마세요.

결제 문제, 환불, 영수증은 어디에서 처리하나요?

먼저 콘솔에서 청구서, 결제 내역, 발급 가능한 영수증을 확인하세요. 환불 조건과 처리 범위 등 관련 규정은 서비스 약관을 확인하세요. 로컬 연결 설정을 삭제하거나 기기 사용을 중단하는 것으로 환불 신청을 대신하지 마세요. 중복 청구가 의심되면 관련 주문과 거래 참조 정보를 첨부해 콘솔에서 지원 티켓을 제출하세요.

먼저 상황을 기록하세요

문제 해결: 영향 범위가 작은 항목부터 확인하세요

문제가 클라이언트 하나, 세션 하나, 아니면 노드 전체에 발생했는지 먼저 판단하세요. 원래 오류 메시지와 발생 시각을 기록하고 한 항목씩 확인하세요. 추적이 어려워지지 않도록 네트워크 설정 변경, 비밀번호 재설정, 재시작을 연달아 하지 마세요.

네트워크 및 연결 대상

인스턴스 상세 정보에서 IP, 포트, 사용자 이름을 다시 확인하세요. 다른 로컬 네트워크로 연결해 보고 로컬 프록시, 방화벽, 회사 네트워크의 외부 연결 정책을 점검하세요. ICMP 응답이 없다는 사실만으로 SSH를 사용할 수 없다고 판단할 수는 없습니다. 실제 포트 연결 결과도 함께 확인하세요.

ssh -vv -o ConnectTimeout=10 -p PORT USER@NODE_IP

기록할 내용: 시간 초과, 연결 거부 또는 인증 실패. 디버그 로그를 공유하기 전에는 로컬 사용자 이름, 민감한 경로, 인증 정보를 삭제하세요.

디스크 및 빌드 캐시

먼저 df -h / 로 사용 가능한 공간을 확인하고, du -sh ~/Library/Developer/Xcode/DerivedData 로 캐시 사용량을 확인하세요. 관련 빌드를 중지한 뒤 프로젝트별로 정리해 기록 중인 아카이브가 삭제되지 않도록 하세요.

인도할 산출물, 서명 파일, 필요한 로그는 보관하세요. 정리한 뒤 동일한 커밋으로 다시 시도해 의존성 손상이나 경로 오류가 원인인지 확인하세요.

시스템 및 툴체인 알림

그래픽 세션에서 처리하지 않은 시스템 대화상자나 Xcode 첫 실행 안내가 있는지 확인하세요. sw_vers , xcodebuild -version 및 xcodebuild -showsdks를 실행해 CI 환경이 예상한 환경과 일치하는지 확인하세요.

작업을 먼저 중단하고 백업한 뒤 시스템이나 툴체인을 업데이트할지 결정하세요. archive 실행 중에는 Xcode 경로를 바꾸지 마세요.

세션 복구 및 재시작

원격 클라이언트에서 로그아웃한 뒤 다시 연결하세요. SSH를 사용할 수 있다면 uptime 과 실행 중인 작업을 확인하세요. 시스템 전체를 복구해야 한다고 판단된 경우에만 콘솔에 로그인해 인스턴스 상세 정보에서 재시작을 실행하세요.

재시작하면 빌드와 원격 연결이 중단됩니다. 가져올 수 있는 로그와 산출물을 먼저 저장하세요. 접속할 수 없거나 사용 가능한 작업이 없다면 지원 티켓을 제출하고 재시작을 반복해서 요청하지 마세요.

문제가 계속되나요?

지원 티켓에 필요한 정보를 함께 보내세요

주문 및 인스턴스 정보와 연결할 수 있도록 콘솔에 로그인해 기술 지원 티켓을 제출하세요. 로그인할 수 없거나 구매 전 문의가 필요하면 support@macftp.com으로 연락하세요. 그 외 문의 방법은 연락처 페이지를 확인하세요.

  • 인스턴스 확인: 주문 번호, 인스턴스 번호, 노드, 기종을 알려주세요. 노드는 싱가포르, 도쿄, 서울, 홍콩 중 하나입니다. 기종은 인스턴스 상세 정보에 표시된 전체 이름을 입력하세요.
  • 상황 재현: 발생 시각과 시간대, 전체 오류 메시지, 재현 단계, SSH와 그래픽 연결의 사용 가능 여부를 각각 알려주세요.
  • 문의 시간 절약: 이미 확인한 항목, 최근 변경 사항, 민감 정보를 가린 로그 일부를 알려주세요. 비밀번호, 개인 키, p12 암호, 전체 결제 정보를 보내지 마세요.