diff --git a/myApp/HaruDanim/CLAUDE.md b/myApp/HaruDanim/CLAUDE.md index 33db63a..54725b4 100644 --- a/myApp/HaruDanim/CLAUDE.md +++ b/myApp/HaruDanim/CLAUDE.md @@ -16,7 +16,7 @@ | 번들 ID | `com.yechan.HaruDanim` / App Group `group.com.yechan.HaruDanim` / CloudKit `iCloud.com.yechan.HaruDanim` | | 수익 모델 | 부분 유료화. 무료 한도(행동 10·목표 2·목표당 다짐 3) + 프리미엄 결제 시 해제 | | 결제 상품 | `com.yechan.HaruDanim.premium.monthly`(월 5,000원) / `.yearly`(년 50,000원) / `.lifetime`(80,000원) — 임시 가격, App Store Connect 등록은 아직 안 됨 | -| 남은 배포 작업 | App Store Connect 상품 3종 등록(구독 그룹 + 비소모성, 유료 앱 계약), **CloudKit 프로덕션 스키마 배포**(대시보드 Deploy Schema to Production — DiaryTemplate 등 새 레코드 타입/필드는 개발 환경에만 자동 생성되므로 출시 전 필수), 실기기 검증(펜슬 필기감·캘린더 권한), App Store 배포. **코드 측 잔여 2건**: ① 결제 화면(PremiumView)에 개인정보처리방침·이용약관 링크(심사 3.1.2 필수 — URL 준비되면 추가), ② `IOS/Info.plist`(파일 있음)에 `ITSAppUsesNonExemptEncryption=NO` 추가 | +| 남은 배포 작업 | App Store Connect 상품 3종 등록(구독 그룹 + 비소모성, 유료 앱 계약), **CloudKit 프로덕션 스키마 배포**(대시보드 Deploy Schema to Production — DiaryTemplate 등 새 레코드 타입/필드는 개발 환경에만 자동 생성되므로 출시 전 필수), 실기기 검증(펜슬 필기감·캘린더 권한), App Store 배포. **코드 측 잔여 1건**: `IOS/Info.plist`에 `ITSAppUsesNonExemptEncryption=NO` 추가(사용자 승인 대기). 결제 화면 약관 링크는 완료 — 개인정보처리방침 `Docs/PRIVACY.md`(ko/en/ja)를 `github.com/notalentprogrammer/HaruDanim` 저장소 main 브랜치에 **PRIVACY.md**로 업로드해야 링크가 살아남(이용약관은 Apple 표준 EULA URL). ASC 등록 시 앱 설명에도 두 링크 기재 + '앱 개인정보 보호'는 "데이터 수집 안 함" 선택 | --- diff --git a/myApp/HaruDanim/Docs/PRIVACY.md b/myApp/HaruDanim/Docs/PRIVACY.md new file mode 100644 index 0000000..a5cd85b --- /dev/null +++ b/myApp/HaruDanim/Docs/PRIVACY.md @@ -0,0 +1,162 @@ +# 하루 다님 개인정보처리방침 / HaruDanim Privacy Policy + +- 시행일 / Effective date / 施行日: 2026-07-14 +- 문의 / Contact / お問い合わせ: **songyc.eng@gmail.com** + +한국어 · [English](#english) · [日本語](#日本語) + +--- + +## 한국어 + +**하루 다님**(이하 "앱")은 사용자의 개인정보를 소중하게 생각합니다. 이 문서는 앱이 어떤 정보를 다루는지, 그 정보가 어디에 저장되는지 설명합니다. + +### 1. 수집하는 개인정보: 없음 + +앱은 **어떠한 개인정보도 수집하지 않습니다.** 개발자가 운영하는 서버가 없으며, 계정 가입도 없습니다. + +사용자가 앱에 기록하는 모든 데이터 — 행동, 시간·횟수 기록, 목표와 다짐, 일기(필기·사진·할 일·양식), 설정 — 는 다음 위치에만 저장됩니다. + +- **사용자의 기기 안** (앱 전용 저장 공간) +- 프리미엄의 "기기 간 동기화"를 켠 경우, **사용자 본인의 iCloud 비공개 데이터베이스** + +iCloud 동기화는 Apple의 CloudKit 비공개 데이터베이스를 사용하며, 이 데이터는 사용자의 Apple 계정에 귀속됩니다. **개발자는 이 데이터에 접근할 수 없습니다.** iCloud에 저장된 데이터에는 Apple의 [개인정보처리방침](https://www.apple.com/kr/legal/privacy/)이 적용됩니다. + +### 2. 결제 정보 + +프리미엄 구독·구매는 Apple **App Store**를 통해 처리됩니다. 개발자는 사용자의 결제 수단, 카드 번호 등 어떠한 결제 정보에도 접근하지 않습니다. + +### 3. 기기 권한의 사용 + +앱은 아래 권한을 **사용자가 허용한 경우에만, 명시된 용도로만** 사용합니다. 권한으로 접근한 정보는 기기(및 사용자 본인의 iCloud) 밖으로 전송되지 않습니다. + +| 권한 | 용도 | +|---|---| +| 캘린더 | 일기 타임테이블에 그날의 일정을 함께 표시 (표시 용도만, 저장·전송 없음) | +| 사진 | 일기의 기분 사진·배치 사진·배경 양식 가져오기 (기기/본인 iCloud에만 저장) | +| 알림 | 장시간 측정 알림 등 기기 내 로컬 알림 (푸시 서버 없음) | + +### 4. 제3자 제공·광고·추적: 없음 + +앱은 광고 SDK, 분석(애널리틱스) SDK, 추적 도구를 일절 포함하지 않으며, 어떠한 데이터도 제3자에게 제공하지 않습니다. + +### 5. 데이터의 삭제 + +- **기기 데이터**: 앱을 삭제하면 기기에 저장된 모든 데이터가 함께 삭제됩니다. +- **iCloud 데이터**: 기기의 설정 → [사용자 이름] → iCloud → 저장 공간 관리에서 "하루 다님" 데이터를 삭제할 수 있습니다. + +### 6. 아동의 개인정보 + +앱은 개인정보를 수집하지 않으므로 아동의 개인정보 또한 수집하지 않습니다. + +### 7. 방침의 변경 + +이 방침이 변경되는 경우 이 페이지를 통해 고지하며, 중요한 변경은 앱 업데이트 노트에도 안내합니다. + +### 8. 문의 + +개인정보 관련 문의: **songyc.eng@gmail.com** + +--- + +## English + +**HaruDanim** ("the app") respects your privacy. This document explains what information the app handles and where it is stored. + +### 1. Personal data we collect: none + +The app **does not collect any personal data.** There is no developer-operated server and no account sign-up. + +Everything you record in the app — actions, time/count records, goals and quests, diary content (handwriting, photos, to-dos, templates), and settings — is stored only in: + +- **your device** (the app's private storage), and +- **your own iCloud private database**, if you enable the premium "sync between devices" option. + +iCloud sync uses Apple's CloudKit private database, which belongs to your Apple account. **The developer cannot access this data.** Data stored in iCloud is covered by Apple's [Privacy Policy](https://www.apple.com/legal/privacy/). + +### 2. Payments + +Premium subscriptions and purchases are processed by the Apple **App Store**. The developer never has access to your payment method or card details. + +### 3. Device permissions + +The app uses the permissions below **only if you grant them, and only for the stated purpose.** Information accessed through these permissions never leaves your device (or your own iCloud). + +| Permission | Purpose | +|---|---| +| Calendar | Showing that day's events on the diary timetable (display only; nothing is stored or transmitted) | +| Photos | Importing mood photos, diary photos, and background templates (stored only on your device / your iCloud) | +| Notifications | Local, on-device notifications such as the long-session reminder (no push server) | + +### 4. Third parties, ads, tracking: none + +The app contains no advertising SDKs, no analytics SDKs, and no tracking tools, and shares no data with third parties. + +### 5. Deleting your data + +- **On-device data**: deleting the app removes all data stored on the device. +- **iCloud data**: you can delete the app's iCloud data in Settings → [your name] → iCloud → Manage Account Storage. + +### 6. Children's privacy + +Since the app collects no personal data, it collects no personal data from children either. + +### 7. Changes to this policy + +Changes will be announced on this page; significant changes will also be noted in app update notes. + +### 8. Contact + +Privacy inquiries: **songyc.eng@gmail.com** + +--- + +## 日本語 + +**ハルダニム(HaruDanim)**(以下「本アプリ」)は、ユーザーのプライバシーを大切にします。本書は、本アプリが扱う情報と、その保存場所について説明します。 + +### 1. 収集する個人情報:なし + +本アプリは**いかなる個人情報も収集しません。** 開発者が運営するサーバーはなく、アカウント登録もありません。 + +ユーザーが本アプリに記録するすべてのデータ — 行動、時間・回数の記録、目標とクエスト、日記(手書き・写真・ToDo・テンプレート)、設定 — は、次の場所にのみ保存されます。 + +- **ユーザーの端末内**(アプリ専用の保存領域) +- プレミアムの「デバイス間同期」を有効にした場合、**ユーザー本人のiCloudプライベートデータベース** + +iCloud同期にはAppleのCloudKitプライベートデータベースを使用し、そのデータはユーザーのAppleアカウントに帰属します。**開発者はこのデータにアクセスできません。** iCloudに保存されるデータにはAppleの[プライバシーポリシー](https://www.apple.com/jp/legal/privacy/)が適用されます。 + +### 2. 決済情報 + +プレミアムのサブスクリプション・購入はApple **App Store**で処理されます。開発者はユーザーの決済手段やカード情報に一切アクセスしません。 + +### 3. 端末権限の使用 + +本アプリは、以下の権限を**ユーザーが許可した場合に限り、明示した用途のみに**使用します。権限を通じて取得した情報が端末(およびユーザー本人のiCloud)の外へ送信されることはありません。 + +| 権限 | 用途 | +|---|---| +| カレンダー | 日記のタイムテーブルにその日の予定を表示(表示のみ、保存・送信なし) | +| 写真 | 気分写真・日記の写真・背景テンプレートの読み込み(端末/本人のiCloudにのみ保存) | +| 通知 | 長時間計測リマインダーなどの端末内ローカル通知(プッシュサーバーなし) | + +### 4. 第三者提供・広告・トラッキング:なし + +本アプリは広告SDK、分析SDK、トラッキングツールを一切含まず、いかなるデータも第三者に提供しません。 + +### 5. データの削除 + +- **端末内データ**:アプリを削除すると、端末に保存されたすべてのデータが削除されます。 +- **iCloudデータ**:設定 → [ユーザー名] → iCloud → アカウントのストレージを管理 から本アプリのデータを削除できます。 + +### 6. 子どもの個人情報 + +本アプリは個人情報を収集しないため、子どもの個人情報も収集しません。 + +### 7. 本ポリシーの変更 + +変更がある場合は本ページで告知し、重要な変更はアプリのアップデートノートでもお知らせします。 + +### 8. お問い合わせ + +プライバシーに関するお問い合わせ:**songyc.eng@gmail.com** diff --git a/myApp/HaruDanim/IOS/Localizable.xcstrings b/myApp/HaruDanim/IOS/Localizable.xcstrings index f8e713d..3f40b73 100644 --- a/myApp/HaruDanim/IOS/Localizable.xcstrings +++ b/myApp/HaruDanim/IOS/Localizable.xcstrings @@ -1496,6 +1496,22 @@ } } }, + "개인정보처리방침": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy Policy" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "プライバシーポリシー" + } + } + } + }, "건강": { "localizations": { "en": { @@ -6462,6 +6478,22 @@ } } }, + "약관과 정책": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terms & Policies" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "規約とポリシー" + } + } + } + }, "양식": { "localizations": { "en": { @@ -7775,6 +7807,38 @@ } } }, + "이용약관": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Terms of Use" + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "利用規約" + } + } + } + }, + "이용약관은 Apple 표준 사용권 계약(EULA)이 적용돼요.": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The Terms of Use are Apple's standard licensed application end user license agreement (EULA)." + } + }, + "ja": { + "stringUnit": { + "state": "translated", + "value": "利用規約にはAppleの標準使用許諾契約(EULA)が適用されます。" + } + } + } + }, "이하 유지": { "localizations": { "en": { diff --git a/myApp/HaruDanim/IOS/Views/SettingsView.swift b/myApp/HaruDanim/IOS/Views/SettingsView.swift index 0780f9c..6da505d 100644 --- a/myApp/HaruDanim/IOS/Views/SettingsView.swift +++ b/myApp/HaruDanim/IOS/Views/SettingsView.swift @@ -376,6 +376,14 @@ struct RadialOrderView: View { // MARK: - 프리미엄 안내 +/// 심사 지침 3.1.2: 자동 갱신 구독이 있는 앱은 결제 화면에 +/// 개인정보처리방침·이용약관으로 연결되는 동작하는 링크가 필요하다. +/// 이용약관은 Apple 표준 EULA로 갈음 (커스텀 EULA 미제공 시 자동 적용되는 표준 계약). +private enum LegalLinks { + static let privacyPolicy = URL(string: "https://github.com/notalentprogrammer/HaruDanim/blob/main/PRIVACY.md")! + static let termsOfUse = URL(string: "https://www.apple.com/legal/internet-services/itunes/dev/stdeula/")! +} + struct PremiumView: View { private let premium = PremiumManager.shared private let store = PremiumStore.shared @@ -420,6 +428,18 @@ struct PremiumView: View { } else { purchaseSection } + Section { + Link(destination: LegalLinks.privacyPolicy) { + legalRow("hand.raised.fill", "개인정보처리방침") + } + Link(destination: LegalLinks.termsOfUse) { + legalRow("doc.text.fill", "이용약관") + } + } header: { + Text("약관과 정책") + } footer: { + Text("이용약관은 Apple 표준 사용권 계약(EULA)이 적용돼요.") + } #if DEBUG Section { Toggle("프리미엄 상태 (테스트)", isOn: Binding( @@ -600,6 +620,23 @@ struct PremiumView: View { } } + /// 약관·정책 링크 행 (외부 링크 표시 화살표 포함) + private func legalRow(_ symbol: String, _ title: LocalizedStringKey) -> some View { + HStack { + Label { + Text(title) + .foregroundStyle(.primary) + } icon: { + Image(systemName: symbol) + .foregroundStyle(AppTheme.green) + } + Spacer() + Image(systemName: "arrow.up.right") + .font(.caption) + .foregroundStyle(.tertiary) + } + } + // title·detail은 LocalizedStringKey — String이면 리터럴이 카탈로그로 추출되지 않아 // 영어·일본어에서도 한국어로 노출됐다 (기능 목록 전체가 미지역화였던 버그) private func featureRow(_ symbol: String, _ title: LocalizedStringKey, _ detail: LocalizedStringKey) -> some View {