콘텐츠로 이동
Tauri

App Store에서 배포

Apple App Store는 Apple사가 운영하는 앱 마켓플레이스입니다. 이 App Store를 통해 macOS 및 iOS를 대상으로 한 Tauri 앱을 배포할 수 있습니다.

이 장에서는 “앱을 직접 App Store에 배포하는” 방법만 다룹니다. macOS 배포 옵션 및 설정에 대한 자세한 내용은 종합적인 “App Bundle” 장을 참조하십시오.

iOS와 macOS 앱을 배포하려면 Apple Developer 프로그램에 등록해야 합니다.

또한 macOSiOS의 코드 서명을 설정해야 합니다.

tauri ios init을 실행하여 Xcode 프로젝트를 생성한 후, tauri icon 명령을 사용하여 앱 아이콘을 업데이트할 수 있습니다.

npm run tauri icon /path/to/app-icon.png -- --ios-color #fff

인수 --ios-color는 iOS 아이콘의 배경색을 정의합니다.

Apple Developer 프로그램에 등록한 후, Tauri 앱을 App Store에서 배포하기 위한 첫 번째 단계는 앱을 App Store Connect에 등록하는 것입니다.

Tauri CLI는 앱을 macOS 및 iOS용으로 패키징할 수 있습니다. 단, macOS 컴퓨터에서 실행해야 합니다.

Tauri는 [tauri.conf.json > version]에 정의된 값에서 CFBundleVersion (번들 버전)을 가져옵니다. 다른 번들 버전 체계, 예를 들어 “연속 부호” 등이 필요한 경우, [tauri.conf.json > bundle > iOS > bundleVersion] 또는 [tauri.conf.json > bundle > macOS > bundleVersion] 설정에서 고유한 번들 버전을 지정할 수 있습니다:

tauri.conf.json
{
"bundle": {
"iOS": {
"bundleVersion": "100"
}
}
}

Tauri는 iOS 앱에 Xcode를 이용하므로, iOS용 아카이브 및 배포에 Tauri CLI 대신 Xcode를 사용할 수 있다는 점에 유의하십시오. iOS 프로젝트를 Xcode에서 열고 빌드하려면 다음 명령을 실행합니다:

npm run tauri ios build -- --open

앱을 App Store에 업로드하려면 먼저 모든 필요한 설정 옵션이 입력되었는지 확인해야 합니다. 그런 다음 App Bundle을 패키징하고 서명된 .pkg 파일을 만들어 업로드할 수 있습니다.

다음 각 항목에서 이 프로세스를 순서대로 설명합니다.

앱이 App Store 검증 시스템에서 수락되려면 앱에 몇 가지 설정 항목이 포함되어 있어야 합니다.

  • Category(카테고리 항목)

앱을 App Store에 표시하려면 tauri.conf.json > bundle > category(카테고리 항목)를 명시해야 합니다:

tauri.conf.json
{
"bundle": {
"category": "Utility"
}
}
  • Provisioning profile(프로비저닝 프로필)

또한 앱을 Apple에 수락받으려면 “프로비저닝 프로필”도 만들어야 합니다.

Apple Developer 사이트의 “Identifiers(ID)” 페이지에서 새로운 “App ID”를 만들고, “Bundle ID” 값이 tauri.conf.json > identifier에 설정된 ID(식별자)와 일치하는지 확인합니다.

그런 다음 Profiles 페이지로 이동하여 새로운 “프로비저닝 프로필”을 만듭니다. App Store에서 macOS 앱을 배포하는 경우 “Mac App Store Connect” 프로필이어야 합니다. 적절한 “앱 ID”를 선택하고 “코드 서명”에 사용하는 “인증서”와 연결합니다.

“프로비저닝 프로필”을 만든 후 다운로드하여 잘 아는 위치에 저장하고, “App Bundle(앱 번들)에 포함되도록 Tauri를 설정합니다:

tauri.conf.json
{
"bundle": {
"macOS": {
"files": {
"embedded.provisionprofile": "path/to/profile-name.provisionprofile"(프로비저닝 프로필 경로 기재)
}
}
}
}
  • Info.plist(정보 속성 목록)
Note

정보 속성 목록 Information Property List. 자세한 내용은 Info.plist를 참조하십시오.

앱은 “암호화 수출 규제”(가칭)를 준수해야 합니다. 자세한 내용은 Apple사 공식 문서(영어)를 참조하십시오.

src-tauri 폴더에 Info.plist 파일을 만듭니다:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ITSAppUsesNonExemptEncryption</key>
<false/> # or `true` if your app uses encryption
</dict>
</plist>
  • Entitlements(인타이틀먼트/자격)
Note

인타이틀먼트 entitlement: “권리, 자격”을 부여하거나 부여된 “권리, 자격”. 여기서는 정보나 데이터, 자원 등을 이용할 자격, 권리의 부여나 제한을 하는 것. Apple사 용어 해설은 여기.

앱을 App Store에서 배포하려면 액세스 제어 기능인 App Sandbox를 포함해야 합니다. 또한 “코드 서명” 자격 설정에서 “App ID”와 “team ID”도 설정해야 합니다.

src-tauri 폴더에 Entitlements.plist 파일을 만듭니다:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.application-identifier</key>
<string>$TEAM_ID.$IDENTIFIER</string>
<key>com.apple.developer.team-identifier</key>
<string>$TEAM_ID</string>
</dict>
</plist>

$IDENTIFIERtauri.conf.json > identifier의 값으로, $TEAM_ID는 Apple Developer “team ID”의 값으로 바꿔야 한다는 점에 유의하십시오. “team ID”는 프로비저닝 프로필용으로 만든 IdentifierApp ID Prefix 섹션에 있습니다.

그리고 macOS 번들 설정 tauri.conf.json > bundle > macOS > entitlements에서 이 Entitlements.plist 파일을 참조합니다.

tauri.conf.json
{
"bundle": {
"macOS": {
"entitlements": "./Entitlements.plist"
}
}
}

인타이틀먼트(자격)를 적용하려면 코드 서명을 활성화하고 애플리케이션을 빌드해야 합니다.

“App Sandbox” 환경에서 앱을 실행했을 때 앱이 작동하는지 확인하십시오.

Note

App Sandbox macOS에 구현된 보안 기능. 자세한 내용은 Apple사 사이트를 참조하십시오.

macOS 애플리케이션은 .pkg 파일로 App Store에 업로드해야 합니다. 다음 명령을 실행하여 앱을 macOS App Bundle(확장자는 .app)로 패키징합니다:

tauri build --bundles app --target universal-apple-darwin

설정 옵션에 대한 자세한 내용은 App Bundle로 배포 장을 참조하십시오.

App Bundle에서 서명된 .pkg를 생성하려면 다음 명령을 실행합니다:

xcrun productbuild --sign "<certificate signing identity>" --component "target/universal-apple-darwin/release/bundle/macos/$APPNAME.app" /Applications "$APPNAME.pkg"

【주의】 $APPNAME 부분은 자신의 앱 이름으로 바꿔야 합니다.

이제 명령줄 유틸리티(CLI)인 altool을 사용하여 앱 패키지를 App Store에 업로드할 수 있습니다:

xcrun altool --upload-app --type macos --file "$APPNAME.pkg" --apiKey $APPLE_API_KEY_ID --apiIssuer $APPLE_API_ISSUER

【주의】 altool은 앱을 업로드하기 위해 App Store Connect API 키가 필요하다는 점에 유의하십시오. 자세한 내용은 아래 인증 항목을 참조하십시오.

그런 다음 앱은 Apple에 의해 검증되고 승인되면 TestFlight를 사용할 수 있게 됩니다.

Note

altool ※ “이 공증 도구의 “인증” 기능은 2023-11-01을 기해 폐지되고 notarytool로 이전될 것”이라는 Apple Technote 2023-05-30 릴리스가 있었습니다. App store에 앱 업로드는 계속할 수 있는 것 같지만, 필요에 따라 최신 상황을 확인해 주십시오. “TN3147: Apple has deprecated altool for the purposes of notarization”

iOS 앱을 빌드하려면 tauri ios build 명령을 실행합니다.

npm run tauri ios build -- --export-method app-store-connect

생성된 IPA 파일src-tauri/gen/apple/build/arm64/$APPNAME.ipa에 있습니다.

Note

IPA 파일 IPA file: iOS 애플리케이션의 아카이브 파일로, iOS Package Archive(확장자 .ipa)의 약자입니다.

$APPNAME 부분을 자신의 앱 이름으로 바꿔야 한다는 점에 유의하십시오.

이제 altool CLI를 사용하여 iOS 앱을 App Store에 업로드할 수 있습니다:

xcrun altool --upload-app --type ios --file "src-tauri/gen/apple/build/arm64/$APPNAME.ipa" --apiKey $APPLE_API_KEY_ID --apiIssuer $APPLE_API_ISSUER

altool은 앱을 업로드하기 위해 App Store Connect API 키가 필요하다는 점에 유의하십시오. 자세한 내용은 아래 인증 항목을 참조하십시오.

그런 다음 앱은 Apple에 의해 검증되고 승인되면 TestFlight를 사용할 수 있게 됩니다.

iOS 및 macOS 앱은 인증에 App Store Connect API 키를 이용하는 altool을 사용하여 업로드됩니다.

새로운 API 키를 만들려면 [App Store Connect Users and Access page]를 열고, “Integrations(통합) > Individual Keys tab(개별 키 탭)“을 선택하고, “Add(추가)” 버튼을 클릭하여 “이름”과 “the Developer access(개발자 액세스)“를 선택합니다. “APPLE_API_ISSUER”(발급자 ID)는 키 테이블 상단에 표시되고, “APPLE_API_KEY_ID”는 해당 테이블의 “키 ID” 열의 값이 됩니다. “비밀 키 private key” 다운로드도 필요하지만, 이는 한 번만 실행되며 페이지를 새로고침한 후에만 표시됩니다(버튼이 새로 생성된 키에 해당하는 테이블 행에 표시됩니다). 이 비밀 키 파일의 경로는 “AuthKey\_<APPLE_API_KEY_ID>.p8”으로, 다음 디렉토리 중 하나에 저장해야 합니다: <current-working-directory>/private_keys, ~/private_keys, ~/.private_keys 또는 ~/.appstoreconnect/private_keys입니다.

【※ 이 한국어판은, 「May 21, 2025 영문판」에 근거하고 있습니다】


© 2025 Tauri Contributors. CC-BY / MIT