메인 콘텐츠로 바로가기
튜토리얼

Pull Request를 설치 가능한 미리보기로 변환하세요

테스트 플라이트 처리를 기다리지 마세요. Capgo PR 미리보기는 QA, PM, 이해관계자들이 실제 장치에서 1분 이내에 기능을 테스트할 수 있도록 해줍니다.

마틴 도나디유

마틴 도나디유

콘텐츠 마케터

Pull Request를 설치 가능한 미리보기로 변환하세요

모바일 개발 팀은 모두 이런 고통을 겪었습니다: 기능이 검토 준비가 되었지만 이해관계자들의 손에 넣는 것은 테스트 플라이트 또는 구글 플레이 베타 검토 미로를 탐색해야 하는 것입니다. 몇 분이 걸려야 하는 것이 몇 시간의 기다리기, 설치, 베타 빌드 관리로 변환됩니다.

프로덕션 앱이 어떤 Pull Request의 최신 변경 사항을 직접 장치에 pull 할 수 있는 것이 무엇인지 생각해 보세요. 다시 설치하거나 앱 스토어 지연 없이.

그것은 PR 미리보기 GitHub 액션을 통해 개발자가 pull request를 열 때, GitHub 액션은 전용 업데이트 채널을 생성하고 변경 사항을 게시합니다. 앱을 이미 설치한 모든 사용자는 해당 채널로switch, 테스트할 수 있으며 다시 이전 채널로 switch 할 수 있습니다. - 앱을 떠나지 않고도.

The TestFlight 문제

모바일 기능 테스트를 위한 전통적인 워크플로우는 다음과 같습니다.

  1. 개발자 - __CAPGO_KEEP_0__이 검토 대기 중입니다. - Code is ready for review
  2. - 15-30분의 처리 시간이 소요됩니다. 찾아 설치
  3. - 테스터는 올바른 빌드를 찾습니다. 테스트 및 반복
  4. - 모든 변경 사항이 또 다른 대기 시간을 의미합니다. 이것은 병목 현상을 발생시킵니다. QA 팀은 빌드 대기 중에 막혀 있습니다. 제품 관리자는 기능을 신속하게 확인할 수 없습니다. 개발자는 피드백을 기다리며 컨텍스트를 잃습니다. 업계는 이로 인한 생산성 손실 비용이 pull request당 약 $340으로 추정됩니다.

The TestFlight Problem

PR 예고본이 어떻게 작동하는가

Capgo의 채널 시스템을 사용하여 PR 당 업데이트스트림을 생성합니다. 여기서 흐름은 다음과 같습니다.

  1. PR이 열리거나 업데이트되면 - GitHub 액션 트리거
  2. 배포 업로드 - JS/CSS 변경 사항은 PR에 특화된 채널로 이동
  3. 댓글 작성 - 테스터는 PR에 테스트 지시를 받음
  4. 즉시 테스트 - 채널을 전환하여 테스트 후 원래 채널로 돌아옴

새로운 앱 설치가 필요하지 않습니다. 테스트 플라이트 지연도 없습니다. 동일한 프로덕션 앱은 다른 업데이트 채널에서 가져올 수 있습니다.

PR 예고본 설정

PR 예시를 구현하기 전에 프로젝트는 Capgo Live Updates와 함께 구성되어야 합니다. Capgo Live Updates에 대한 빠른 시작 가이드를 따르세요. Capgo Live Updates 빠른 시작 가이드 아직 하지 않았다면 __CAPGO_KEEP_0__ Live Updates 빠른 시작 가이드를 따르세요.

GitHub Actions Workflow

생성 .github/workflows/pr-preview.yml:

name: PR Preview
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2

      - name: Install Dependencies
        run: bun install

      - name: Build
        run: bun run build

      # Create a channel named after your PR (may already exist on synchronize)
      - name: Create PR Channel
        id: create_channel
        continue-on-error: true
        run: bunx @capgo/cli@latest channel add pr-${{ github.event.pull_request.number }} --self-assign
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

      # Upload the build to that channel
      - name: Upload to Capgo
        run: bunx @capgo/cli@latest bundle upload --channel pr-${{ github.event.pull_request.number }}
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

      # Post a comment with testing instructions (only on PR open)
      - name: Comment on PR
        if: github.event.action == 'opened'
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: ${{ github.event.pull_request.number }},
              body: '📱 **Test this PR on device:**\n\nOpen your app and switch to channel: `pr-${{ github.event.pull_request.number }}`\n\nUse the shake menu or call `setChannel()` from your app.'
            })

채널을 생성할 때 사용하는 플래그입니다. 이 플래그를 사용하면 테스트자들은 앱 내에서 채널을switch할 수 있습니다. --self-assign __CAPGO_KEEP_0__ setChannel() API.

Capgo Token

  1. __CAPGO_KEEP_0__에 가서 Capgo 설정
  2. 설정 > API 키로 이동하세요
  3. 새 키를 __CAPGO_KEEP_0__에 생성하세요. all __CAPGO_KEEP_0__ 권한
  4. __CAPGO_KEEP_0__에 추가하세요. CAPGO_TOKEN in your GitHub repository secrets

테스터는 PR 채널로 switch하는 두 가지 방법이 있습니다.

Option 1: Shake Menu (가장 단순한 방법)

__CAPGO_KEEP_0__ config에서 채널 선택기와 함께 shake 메뉴를 활성화하세요.

Enable the shake menu with channel selector in your Capacitor config:

// capacitor.config.ts
const config: CapacitorConfig = {
  // ... your other config
  plugins: {
    CapacitorUpdater: {
      shakeMenu: true,
      allowShakeChannelSelector: true
    }
  }
};

shake 메뉴는 자동으로 모든 흐름을 처리합니다: pr-123자신이 assign한 채널을 모두 fetch합니다.

채널을 선택하면 자동으로 업데이트 파일을 다운로드하고 적용합니다.

  1. 테스트가 끝나면 다시 shake 메뉴를 열면 프로덕션으로 switch합니다. listChannels()
  2. 특정 PR를 찾기 위해 채널을 검색합니다.
  3. 선택 후 업데이트를 다운로드합니다.
  4. “Reload Now” / “Later” 옵션으로 리로드를提示합니다.

Option 2: 사용자 지정 채널 선택기 UI

테스터가 하나를 선택할 수 있도록 앱에 채널 Switcher를 빌드합니다. 이 기능은 두 가지 주요 API를 사용합니다:

  • listChannels() - 자체 assignement이 활성화된 채널을 모두 가져옵니다.
  • setChannel() - 선택한 채널으로 장치를 Switch합니다.
import { CapacitorUpdater } from '@capgo/capacitor-updater';

// Get all available channels (including PR channels)
async function getAvailableChannels() {
  const { channels } = await CapacitorUpdater.listChannels();

  // Filter to show only PR channels
  const prChannels = channels.filter(c => c.name.startsWith('pr-'));

  return prChannels;
}

// Switch to a specific PR channel
async function switchToChannel(channelName: string) {
  await CapacitorUpdater.setChannel({
    channel: channelName,
    triggerAutoUpdate: true  // Immediately check for updates
  });
}

// Return to production
async function switchBackToProduction() {
  await CapacitorUpdater.unsetChannel({});
}

// Get current channel
async function getCurrentChannel() {
  const { channel } = await CapacitorUpdater.getChannel();
  return channel;
}

이러한 빌딩 블록을 사용하여 간단한 UI를 만들 수 있습니다.

// Example: List PR channels and let user select
const channels = await getAvailableChannels();
const current = await getCurrentChannel();

// Display channels in your UI
channels.forEach(channel => {
  console.log(`${channel.name} ${channel.name === current ? '(current)' : ''}`);
});

// When user selects a channel
await switchToChannel('pr-123');

완전한 React 컴포넌트 예제를 보려면 our 채널 서핑 기사.

PR 채널을 정리하는 방법

PR가 병합되거나 닫히면 채널을 정리해야 합니다. 추가 워크플로우를 추가하세요.

name: Cleanup PR Preview
on:
  pull_request:
    types: [closed]

jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - name: Delete PR Channel
        run: bunx @capgo/cli@latest channel delete pr-${{ github.event.pull_request.number }}
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

이 PR이 닫힐 때 채널을 제거하여 채널 목록을 깨끗하게 유지합니다.

버전 호환성

PR 미리보기는 설치된 네이티브 버전과 호환되는 자바스크립트 번들을 사용할 때만 작동합니다. PR이 네이티브 code 변경 사항 (새 Capacitor 플러그인, iOS/Android 수정)을 포함한다면 테스터는 새로운 네이티브 빌드를 필요로 합니다.

Capgo은 버전 호환성을 자동으로 확인합니다. PR의 번들이 설치된 네이티브 버전과 다르다면 업데이트가 적용되지 않습니다. 이로 인해 호환되지 않는 code으로 인한 충돌을 방지합니다.

네이티브 변경이 필요한 PR의 경우 새로운 TestFlight/Play Store 빌드를 배포해야 합니다. PR 미리보기는 자바스크립트, CSS, 자산 변경 등 네이티브 code을 건드리지 않는 변경 사항에 가장 잘 작동합니다.

PR 미리보기의 이점

QA 엔지니어

  • PR이 열릴 때 테스트 기능을 즉시 테스트합니다.
  • 다중 PR 간 switch without reinstalling
  • 실제 장치에서 고정 및 회귀를 확인합니다.
  • TestFlight 처리 대기 시간이 더 이상 없습니다.

제품 관리자

  • 기능을 병합되기 전에 리뷰하세요
  • PR에서 직접 피드백을 주세요
  • 구현이 요구 사항과 일치하는지 확인하세요
  • 리뷰 주기 시간을 줄이세요

개발자

  • 변경 사항에 대한 더 빠른 피드백을 받으세요
  • 스태커 홀더에게 기능을 데모하세요
  • 특정 사용자와 문제를 디버깅하세요
  • 베타 빌드 관리 시간을 줄이세요

비교: 전통 vs PR 프리뷰

테스트 플라이트/베타Capgo PR 미리보기
빌드 시간15-30 분1분 이하
PR Switching5분 이상 재설치10초
설정 복잡도앱 스토어 인증 정보1개의 워크플로 파일
정리수동자동화
code의 네이티브 변경필수선택 (JS만)

최선의 방법

  1. 채널 이름을 명확하게 지정하세요: 쉽게 식별하기 위해 pr-{number} 규칙을 사용하세요
  2. 자동 삭제: PR이 닫힐 때 항상 채널을 삭제하세요
  3. 접근 제한: 디버그/스테이징 빌드에서만 shake 메뉴를 활성화하세요
  4. 프로세스를 문서화하세요: PR 템플릿에 테스트 지침을 추가하세요
  5. 실패를 무마하세요: 채널 생성이 성공적으로 완료되기 전에 댓글을 게시하세요

PR 미리보기 사용하지 않는 경우

PR 미리기는 자바스크립트/CSS 변경에만 사용됩니다. PR에 포함된 경우:

  • 새 Capacitor 플러그인
  • iOS 네이티브 code 변경
  • Android 네이티브 code 변경
  • 네이티브 빌드에 영향을 미치는 의존성 업데이트

이러한 변경 사항은 전통적인 테스트 플라이트/플레이 스토어 배포가 필요합니다.

채널 서핑과 결합

PR 전시회는 채널 스루핑과 함께 가장 잘 작동합니다. 채널 스루핑앱은 다음과 같은 기능을 가질 수 있습니다.

  • production - 모든 사용자에게 안정적인 릴리스
  • beta - 옵트인 사용자에게 이른 접근
  • pr-123 - 특정 PR에 대한 기능 전시

테스터는 설치된 앱과 동일한 앱으로 프로덕션 빌드를 Switch할 수 있습니다. 테스터는 특정 기능을 테스트하고 다시 Switch할 수 있습니다.

자원

결론

PR 미리보기는 팀이 모바일 기능을 검토하고 테스트하는 방식을 완전히 바꿔줍니다. 테스트 플라이트 처리를 기다리거나 여러 베타 빌드를 관리하는 대신, 테스터들은 이미 설치한 앱을 사용하여 몇 초 만에 PR 채널을switch할 수 있습니다.

설치는 최소화되었습니다 - 하나의 GitHub Actions 워크플로 파일 - 그리고 이 혜택은 팀 전체에 누적됩니다. QA가 막힘없이 남아있고, 제품 매니저가 더 빠르게 검토하고, 개발자가 더 빠른 feedback을 받을 수 있습니다.

먼저 워크플로를 하나의 저장소에 추가하고, 리뷰 프로세스가 어떻게 바뀔지 확인하세요.

실시간 업데이트 Capacitor 앱

웹层 버그가 활성화된 경우, Capgo를 통해修정 배포 대기하지 않고 앱 스토어 승인까지 며칠 기다리지 않고 배포하세요. 사용자는 배경에서 업데이트를 받으면서 네이티브 변경은 일반적인 검토 경로에 남아 있습니다.

시작하기

최신 블로그 게시물

Capgo는 전문적인 모바일 앱을 만들기 위해 필요한 최고의洞察력을 제공합니다.