본문으로 바로가기
강의

Capacitor 8을 사용하여 iOS & Android로 변환하는 Nuxt 앱

Capacitor 8을 사용하여 기존 Nuxt 4 웹 애플리케이션을 iOS 및 Android 모바일 앱으로 변환하는 방법에 대한 완전한 안내서입니다. 정적 생성을 구성하고 네이티브 플러그인을 추가하고 앱 스토어에 배포하는 방법을 배웁니다.

마틴 도나디우

마틴 도나디우

콘텐츠 마케터

Capacitor 8을 사용하여 iOS & Android로 변환하는 Nuxt 앱

소개

Nuxt 웹 애플리케이션이 이미 있는 경우, 이 가이드에서는 __CAPGO_KEEP_0__ 8을 사용하여 이를 네이티브 iOS 및 Android 모바일 앱으로 변환하는 방법을 배웁니다. Capacitor __CAPGO_KEEP_0__ 8 — 성능이 향상되고 새로운 기능이 추가된 최신 버전입니다.

Capacitor은 웹 앱을 네이티브 컨테이너에 감싸서 카메라, 파일 시스템, 푸시 알림과 같은 장치 API에 접근할 수 있게 해주며 기존의 Vue 코드베이스를 유지합니다. Flutter나 React Native와 달리 anything을 다시 작성할 필요가 없습니다 — Nuxt code은 그대로 실행됩니다.

학습할 내용:

  • 기존의 Nuxt 앱을 정적 생성으로 구성합니다.
  • Capacitor 8에 필수 네이티브 플러그인을 추가합니다.
  • iOS와 Android 시뮬레이터에서 빌드하고 테스트합니다.
  • 빠른 개발을 위해 라이브 리로드를 활성화합니다.
  • iOS 레이아웃 문제를 해결합니다 (뷰포트, 안전 영역, 수평 방향 오버플로우).
  • Capgo 네이티브 네비게이션 및 트랜지션을 사용하여 네이티브한 느낌의 UI를 추가합니다.

새 프로젝트를 시작하고 싶으신가요? __CAPGO_KEEP_0__와 Nuxt를 사용하는 이점을 알아보세요. Nuxt와 __CAPGO_KEEP_0__의 이점:.

Capacitor 재사용성:

  • 새로운 프로젝트를 시작하고 싶으신가요? Code와 Nuxt를 사용하는 이점을 알아보세요.: Vue 컴포넌트와 로직을 웹 앱과 모바일 앱 간에 공유하세요.
  • 성능: Nuxt의 정적 생성은 모바일용 최적화된 번들을 생성합니다.
  • 자연스러운 기능: Capacitor 플러그인을 통해 카메라, 위치 정보, 파일 시스템과 같은 장치 기능에 접근하세요.
  • 간소화된 개발: 익숙한 Vue/Nuxt 패턴을 사용하여 네이티브 개발을 배워야 할 필요가 없습니다.

준비 사항

: 시작하기 전에 다음을 확인하세요.

  • Node.js 18+ : 설치되어 있어야 합니다.
  • 기존 Nuxt 4 애플리케이션
  • Xcode (iOS 개발을 위해 macOS만)
  • Android Studio (Android 개발을 위해)

Nuxt 앱을 모바일로 구성하는 방법

첫 번째 단계는 Nuxt 앱을 정적 생성으로 구성하는 것입니다. Capacitor는 정적 HTML/JS/CSS 파일을 모바일 앱으로 패키징하기 위해 필요합니다.

generate 스크립트가 있는지 확인하세요. package.json 중요:

{
  "scripts": {
    "dev": "nuxt dev",
    "build": "nuxt build",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "mobile": "bun run generate && bunx cap sync",
    "mobile:ios": "bun run mobile && bunx cap open ios",
    "mobile:android": "bun run mobile && bunx cap open android"
  }
}

서버 측 기능을 사용 중이라면 (__CAPGO_KEEP_0__ 라우트, 서버 미들웨어 등), 클라이언트 측 대안 또는 외부 API를 사용하도록 리팩토링해야 합니다. API

정적 생성을 테스트하려면:

bun run generate

정적 파일이 포함된 폴더를 볼 수 있습니다. 이 폴더는 __CAPGO_KEEP_0__이 네이티브 앱에 패키징할 것입니다. .output/public Capacitor 8을 프로젝트에 추가하는 방법

Adding Capacitor 8 to Your Project

__CAPGO_KEEP_0__ 코어 및 __CAPGO_KEEP_1__을 설치하세요:

  1. Install Capacitor core and CLI:
bun add @capacitor/core
bun add -D @capacitor/cli
  1. Install common Capacitor plugins you’ll likely need:
bun add @capacitor/app @capacitor/keyboard @capacitor/splash-screen @capacitor/status-bar @capacitor/preferences

@__CAPGO_KEEP_0__/app

  • @capacitor/app@__CAPGO_KEEP_0__/keyboard
  • @capacitor/keyboard__CAPGO_KEEP_0__
  • @capacitor/splash-screen: 모바일 앱의 네이티브 스플래시 화면 관리
  • @capacitor/status-bar: 기기 상태 바 스타일링
  • @capacitor/preferences: localStorage와 같은 키-값 스토리지 (네이티브)
  1. 프로젝트 세부 정보와 Capacitor 초기화:
bunx cap init my-app com.example.myapp --web-dir .output/public

Replace my-app 앱 이름으로 대체 com.example.myapp 앱 ID (역 도메인 표기법)으로 대체

  1. 프로퍼한 구성으로 capacitor.config.ts 파일을 생성하거나 업데이트하십시오:
import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: '.output/public',
  plugins: {
    SplashScreen: {
      launchShowDuration: 2000,
      launchAutoHide: true,
      androidScaleType: 'CENTER_CROP',
      splashFullScreen: true,
      splashImmersive: true,
    },
    Keyboard: {
      resize: 'body',
      resizeOnFullScreen: true,
    },
    StatusBar: {
      style: 'dark',
    },
  },
};

export default config;
  1. 자연스러운 네이티브 플랫폼 설치:
bun add @capacitor/ios @capacitor/android
  1. 자연스러운 네이티브 플랫폼 폴더를 추가:
bunx cap add ios
bunx cap add android

Capacitor은 ios 그리고 android 프로젝트의 루트 폴더에 네이티브 프로젝트를 포함하는 폴더를 생성합니다.

Android 프로젝트를 빌드하려면 Android Studio가 필요합니다. iOS의 경우 Xcode.

  1. 가 필요합니다. 프로젝트를 빌드하고 동기화:
bun run mobile

이것은 정적 Nuxt 빌드를 생성하고 네이티브 플랫폼과 파일을 동기화하는 커스텀 스크립트를 실행합니다.

자연스러운 네이티브 앱 빌드 및 배포

native 모바일 앱을 빌드하고 배포하려면 다음 단계를 따르세요:

iOS 앱을 개발하려면 Xcode 이 설치되어야 합니다. 또한 Android 앱을 개발하려면 Android Studio 이 설치되어야 합니다. 또한 앱 스토어에 배포하려면 iOS에서는 Apple Developer Program에, Android에서는 Google Play Console에 가입해야 합니다.

  1. native 프로젝트를 열어주세요:

iOS:

bun run mobile:ios

Android:

bun run mobile:android

Or directly with Capacitor CLI:

bunx cap open ios
bunx cap open android
  1. 빌드하고 앱을 실행하세요:

android-studio-run

  • In Android Studio, __CAPGO_KEEP_0__ 프로젝트가 준비되기를 기다리고 “실행” 버튼을 클릭하여 연결된 장치나 에뮬레이터에 앱을 배포하세요.

xcode-run

  • In Xcode에서, 앱을 실제 장치에 배포하기 위해 서명 계정을 설정하세요. 이 과정을 처음으로 진행하는 경우, Xcode는 Apple Developer Program에 가입한 경우에만 앱을 실행할 수 있도록 안내해 줍니다. 설정이 완료되면, “실행” 버튼을 클릭하여 연결된 장치에서 앱을 실행하세요.

축하합니다! Nuxt 웹 앱을 성공적으로 모바일 장치에 배포했습니다.

nuxtjs-mobile-app

하지만, 개발 중에는 더 빠른 방법이 있습니다...

Capacitor Live Reload

개발 중에는 Live Reload를 사용하여 모바일 장치에서 즉시 변경 사항을 확인할 수 있습니다. 이 기능을 활성화하려면 다음 단계를 따르세요:

  1. 로컬 IP 주소를 찾으세요:
  • macOS에서 터미널에서 다음 명령어를 실행하세요:

    ipconfig getifaddr en0
  • Windows에서 다음 명령어를 실행하세요:

    ipconfig

    출력에서 IPv4 주소를 찾으세요.

  1. 업데이트를 하세요 capacitor.config.ts 로 개발 서버를 가리키도록 설정하세요:
import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.app',
  appName: 'my-app',
  webDir: '.output/public',
  server: {
    url: 'http://YOUR_IP_ADDRESS:3000',
    cleartext: true,
  },
  plugins: {
    // ... your plugin config
  },
};

export default config;

Replace YOUR_IP_ADDRESS 로컬 IP 주소 (예를 들어, 192.168.1.100).

  1. 자연스럽게 native 프로젝트에 변경 사항을 적용하세요:
bunx cap copy

The copy 명령어는 웹 폴더와 구성 변경 사항을 native 프로젝트로 복사하고 전체 프로젝트를 업데이트하지 않습니다.

  1. Nuxt 개발 서버를 시작하고 Xcode/Android Studio에서 다시 빌드하세요:
bun run dev

이제 Nuxt 앱에 변경 사항을 만들면 모바일 앱이 자동으로 다시 로드되어 변경 사항을 반영합니다.

주의: 새로운 플러그인을 설치하거나 native 파일에 변경 사항을 만들면 live reloading이 웹 code 변경 사항만 적용되므로 native 프로젝트를 다시 빌드해야 합니다.

Capacitor 플러그인을 사용하세요

Capacitor 플러그인은 Nuxt 앱에서 네이티브 장치 기능에 접근할 수 있도록 합니다. Nuxt 앱에서 네이티브 장치 기능에 접근하는 방법에 대해 알아보겠습니다. Share 플러그인을 사용하는 방법을 알아보겠습니다. Share 플러그인을 설치하는 방법입니다.

  1. Share 플러그인을 사용하는 페이지를 만들거나 업데이트 해보세요. Nuxt 4에서는 페이지는
bun add @capacitor/share
  1. 변경 사항을 네이티브 프로젝트와 동기화하세요. app/pages/:
<template>
  <div class="p-6">
    <h1 class="text-2xl font-bold mb-4">Welcome to Nuxt + Capacitor!</h1>
    <button
      @click="shareContent"
      class="px-6 py-3 bg-blue-600 text-white rounded-lg font-semibold"
    >
      Share now!
    </button>
  </div>
</template>

<script setup lang="ts">
import { Share } from '@capacitor/share';

async function shareContent() {
  await Share.share({
    title: 'Check this out!',
    text: 'Built with Nuxt and Capacitor',
    url: 'https://capacitorjs.com',
    dialogTitle: 'Share with friends',
  });
}
</script>
  1. 만들어도 되고, 다시 빌드하지 않고 동기화만 하면 됩니다.
bun run mobile

앱을 다시 빌드하고 장치에 설치하세요.

bunx cap sync
  1. ‘공유하기!’ 버튼을 클릭하면 네이티브 공유 대화상자가 나타납니다.

다음으로, iOS와 Android에서 네이티브처럼 느껴지는 UI를 만들 수 있습니다. __CAPGO_KEEP_0__ 네이티브 네비게이션과 전환, 그리고 iOS에서 발생하는 일반적인 레이아웃 문제를 해결할 수 있습니다. 예를 들어, 수평 방향으로 넘치는 문제나 안전 영역이 잘려서 보이는 문제를 해결할 수 있습니다.

네이티브처럼 느껴지는 UI와 Capgo 네이티브 네비게이션과 전환

네이티브처럼 느껴지는 UI와 Capgo 네이티브 네비게이션과 전환

네이티브처럼 느껴지는 UI와 __CAPGO_KEEP_0__ 네이티브 네비게이션과 전환 아이오닉 다양한 플랫폼을 위한 앱을 만들기 위해 아이오닉을 사용하지만, 이에 Nuxt를 통합하는 것은 복잡하고 거의 가치가 없을 때 이미 가지고 있는 테일윈드 CSS.

네이티브 모바일 느낌을 Nuxt + Capacitor 앱에 적용하기 위해, 웹 전용 UI 키트인 Konsta UI 대신 Capgo 플러그인을 사용하세요:

  • @capgo/capacitor-native-navigation — 네이티브 네비게이션 바, Liquid Glass 탭 바를 iOS에서 사용하고, Android에서는 흐린 탭 바 스타일을 사용하세요. Nuxt 라우터는 라우트 상태를 유지하고, 플러그인은 네이티브 창을 관리합니다.
  • @capgo/capacitor-transitions — 아이오닉 스타일의 페이지 전환과 iOS에서 Edge Swipe-Back를 WebView layer에서 사용하세요. 아이오닉 UI를 채택하지 않습니다.

두 가지 모두 설치하세요:

bun add @capgo/capacitor-native-navigation @capgo/capacitor-transitions
bunx cap sync

네이티브 네비게이션을 CSS inset 모드와 함께 구성하여 웹 콘텐츠가 네이티브 바를 존중하세요:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  glass: {
    effect: 'liquidGlass',
  },
});

리퀴드 글라스 탭 바를 렌더링하세요 (iOS는 시스템 소유의 렌더링을 사용하고, Android는 흐린 WebView 백그라운드 사용):

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'labeled',
  icons: true,
  colors: { dynamic: true },
  tabs: [
    { id: 'home', title: 'Home', icon: { svg: '...' } },
    { id: 'settings', title: 'Settings', icon: { svg: '...' } },
  ],
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

네이티브 페이지 전환을 앱 셸에 추가하세요:

<script setup>
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import '@capgo/capacitor-transitions';
import { initTransitions, setDirection, setupRouterOutlet } from '@capgo/capacitor-transitions/vue';

initTransitions({ platform: 'auto' });

const router = useRouter();
const outletRef = ref(null);

onMounted(() => {
  if (outletRef.value) {
    setupRouterOutlet(outletRef.value, { platform: 'auto', swipeGesture: 'auto' });
  }
});

const openSettings = () => {
  setDirection('forward');
  router.push('/settings');
};
</script>

<template>
  <cap-router-outlet ref="outletRef">
    <router-view />
  </cap-router-outlet>
</template>

페이지를 감싸고 cap-router-outlet, cap-page, 그리고 cap-content, 그리고 호출 setDirection('forward') 또는 setDirection('back') 이동하기 전에 중복되는 웹 헤더 또는 푸터를 만들지 마십시오. 네이티브 네비게이션에서 이러한 표면을 소유하고 있습니다.

자세한 지침을 참조하십시오: Using @capgo/capacitor-native-navigationUsing @capgo/capacitor-transitions.

Tailwind에서 안전한 영역

디바이스의 안전 영역을 Tailwind CSS에서 사용하기 위해 @capgo/tailwind-capacitor (__CAPGO_KEEP_0__으로 발표됨) tailwind-capacitor on npm. safe-areas Capacitor에서 제공하는 유틸리티 및 기타 Capacitor-친화적인 Tailwind 플러그인:

bun add -D tailwind-capacitor

Nuxt 4와 Tailwind CSS 4를 사용하는 경우, CSS 파일에서 import를 유지하세요. app/assets/css/main.css:

@import 'tailwindcss';
@plugin "@capgo/tailwind-capacitor/platform";
@plugin "@capgo/tailwind-capacitor/safe-areas";

Nuxt 4와 Tailwind CSS 4를 사용하는 경우, CSS 파일에서 import를 유지하세요. nuxt.config.ts.

__CAPGO_KEEP_0__에서 제공하는 유틸리티를 사용하세요. pt-safe, pb-safe, px-safe 대신 __CAPGO_KEEP_0__에서 제공하는 유틸리티를 사용하세요. env(safe-area-inset-*) __CAPGO_KEEP_0__에서 제공하는 유틸리티를 사용하세요. open a PR on GitHub.

iOS에서 콘텐츠가 잘려나거나-shifted되거나 가로 스크롤이 가능하다면, __CAPGO_KEEP_0__에서 제공하는 유틸리티를 추가하세요.

__CAPGO_KEEP_0__에서 PR을 열어주세요. overflow-x: hidden 또는 뷰포트 태그를 조정하는 것만으로는 일반적으로 해결되지 않습니다. 이 체크를 순서대로 진행하세요.

뷰포트 메타 태그가 올바르게 적용되어 있는지 확인하세요.

In nuxt.config.ts, 뷰포트를 통해 app.head:

export default defineNuxtConfig({
  app: {
    head: {
      meta: [
        {
          name: 'viewport',
          content: 'width=device-width, initial-scale=1, viewport-fit=cover',
        },
      ],
    },
  },
});

iOS 안전 영역을 하나의 루트 wrapper에서만 처리하세요.

단일 앱 셸을 생성하고 안전 영역 패딩을 거기에 적용하세요 — 여러 개의 중첩된 컴포넌트에서만 적용하지 마세요:

html,
body,
#__nuxt {
  width: 100%;
  min-height: 100%;
  margin: 0;
  padding: 0;
  overflow-x: hidden;
}

* {
  box-sizing: border-box;
}

.app-shell {
  min-height: 100dvh;
  width: 100%;
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

모든 페이지 콘텐츠를 내부에 .app-shell. 중복된 안전 영역 패딩이 헤더, 모달, 레이아웃 wrapper에 적용되어 있는 경우 UI가 잘려나거나 너무 크게 보일 수 있습니다.

그리고 @capgo/tailwind-capacitor와 같은 유틸리티를 사용하여 동일한 패딩을 표현할 수 있습니다. pt-safe pb-safe px-safe @__CAPGO_KEEP_0__/tailwind-__CAPGO_KEEP_1__

Set Capacitor iOS contentInsetnever 첫 번째

In capacitor.config.ts, 원래의 safe area를 유지하기 위해 Native Navigation 또는 CSS가 safe area를 관리하는 것을 선호합니다. contentInsetMode: 'css'CSS padding과 __CAPGO_KEEP_0__의 자동 콘텐츠 inset을 혼합하는 것은 일반적인 오버플로우 원인입니다.

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: 'out',
  ios: {
    contentInset: 'never',
  },
};

Mixing Capacitor’s automatic content inset with CSS env(safe-area-inset-*) 일반적으로 오버플로우가 발생하는 요소는

, Tailwind

, 고정 픽셀 너비를 가진 요소, 또는 100vw, 큰 w-screen 요소를 사용하는 요소입니다. min-width.

In Safari Web Inspector, run:

[...document.querySelectorAll('*')]
  .filter(el => el.scrollWidth > document.documentElement.clientWidth)
  .map(el => ({
    el,
    tag: el.tagName,
    class: el.className,
    scrollWidth: el.scrollWidth,
    clientWidth: document.documentElement.clientWidth,
  }));

Tailwind를 사용하여 w-screen 대신 w-full 가능한 경우. 많은 가로 스크롤 오류는 100vw / w-screen중복된 안전 영역 패딩, 고정 너비 컨테이너 또는 뷰포트 메타 태그 자체가 아닌

Conclusion

Capgo를 사용하여 Nuxt 웹 애플리케이션을 기존에 존재하는 iOS 및 Android 앱으로 성공적으로 변환했습니다. Capacitor 8을 사용하여 Vue 코드베이스를 모바일 장치에서 실행할 수 있으며 장치 API에 접근할 수 있습니다.

이제 accomplished:

  • Nuxt를 정적 생성으로 구성했습니다.
  • Added Capacitor 8 with essential plugins
  • iOS 및 Android 시뮬레이터에 빌드 및 배포했습니다.
  • 개발 중에 라이브 리로드를 활성화했습니다.
  • iOS 레이아웃 문제를 해결했습니다 (뷰포트, 안전 영역, 오버플로우)
  • Capgo 네이티브 네비게이션 및 전환

다음 단계:

  • 설정 Capgo 앱 스토어 재제출 없이 오버어어시 업데이트
  • 카메라, 위치 정보, 푸시 알림 등 네이티브 플러그인을 추가하세요
  • 제품용 앱 아이콘과 스플래시 화면을 구성하세요
  • 앱 스토어와 구글 플레이 제출을 위해 앱을 준비하세요

새로운 프로젝트를 시작하고 싶으세요? Nuxt 모바일 앱을 처음부터 구축하는 방법 가이드된_walkthrough를 확인하세요.

자원

Capgo을 사용하여 더 나은 앱을 더 빠르게 빌드하는 방법을 알아보세요. __CAPGO_KEEP_0__에 가입하여 무료 계정을 등록하세요. 오늘.

Nuxt 앱을 iOS &amp; Android로 변환하는 Capacitor 8

Capacitor를 사용하고 계신가요? Nuxt 앱을 iOS &amp; Android로 변환하는 Capacitor 8 __CAPGO_KEEP_0__ 플러그인 디렉토리와 연결하여 Capgo 플러그인 디렉토리에서 제품 워크플로우를 Capgo 플러그인 디렉토리에서 __CAPGO_KEEP_1__에 의해 제공되는 플러그인 Capacitor 플러그인 디렉토리에서 Capgo에 의해 제공되는 플러그인 for the implementation detail in Capacitor Plugins by Capgo, 플러그인 추가 또는 업데이트 Ionic Enterprise 플러그인 대체 Ionic Enterprise Plugin Alternatives Capacitor와 Nuxt를 사용하여 Native 모바일 앱을 빌드하는 방법 Capgo Native Builds for the product workflow in Capgo Native Builds.

Capacitor 앱에 대한 실시간 업데이트

웹-layer 버그가 활성화되면 Capgo를 통해 픽스를 배포하는 대신 앱 스토어 승인까지 며칠 기다리지 마십시오. 사용자는 배경에서 업데이트를 받으며 네이티브 변경 사항은 일반적인 검토 경로에 남게 됩니다.

마틴의 인간 지원

시작하기

최신 뉴스

Capgo는 여러분에게 전문적인 모바일 앱을 만들기 위해 필요한 최고의 통찰력을 제공합니다.