diff --git a/AGENTS.md b/AGENTS.md index 8acdf9c..82e7090 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -81,6 +81,7 @@ When assigned a task, follow this exact workflow: ### 3.5. State & Data Management - **API Calls:** All communication with the Jules API must go through the centralized hooks in `hooks/use-jules-api.ts`. Do not use raw `fetch` in components. - **Secure Storage:** Sensitive data (like API keys) must be stored using `expo-secure-store` via the `use-secure-storage.ts` hook. Do not use `AsyncStorage`. +- **Exporting Data:** The application supports exporting session data (as Markdown or JSON) via the `hooks/use-export-session.ts` hook, which integrates with `expo-file-system` and `expo-sharing`. When working on features related to session export or data sharing, refer to this hook. --- diff --git a/README.ja.md b/README.ja.md index 271313e..099d5bc 100644 --- a/README.ja.md +++ b/README.ja.md @@ -32,6 +32,8 @@ 🔌 API リファレンス🎯 モード選択🤖 エージェントガイド • + 🔐 セキュリティ • + 🚀 本番環境への展開❓ FAQ🤝 貢献

diff --git a/docs/README.md b/docs/README.md index b8b9e0b..df2fe60 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,8 +17,8 @@ Welcome to the documentation for the Jules Mobile Client. This directory contain - [Chat Interface](features/chat-interface.md) ### 🚀 Deployment & Security -- [Production Deployment](deployment/production.md) -- [Security Guidelines](deployment/security.md) +- [Production Deployment](deployment/production.md) ([🇯🇵](deployment/production.ja.md)) +- [Security Guidelines](deployment/security.md) ([🇯🇵](deployment/security.ja.md)) ### 📖 Guides - [Development Setup](guides/development.md) diff --git a/docs/deployment/production.ja.md b/docs/deployment/production.ja.md new file mode 100644 index 0000000..e56c8e6 --- /dev/null +++ b/docs/deployment/production.ja.md @@ -0,0 +1,500 @@ +# 本番環境への展開ガイド + +このガイドでは、Jules Mobile Client を本番環境 (Google Play Store や Apple App Store など) に展開するプロセスの詳細について説明します。 + +## 📋 展開前チェックリスト + +アプリを申請する前に、以下の項目が完了していることを確認してください: + +- [ ] アプリアイコンとスプラッシュスクリーンの設定 +- [ ] パッケージ名 / バンドル ID の設定 +- [ ] バージョン番号の更新 +- [ ] 開発用ログの無効化 +- [ ] プライバシーポリシーの用意 +- [ ] アプリのスクリーンショットの準備 +- [ ] エラー追跡の設定 (推奨) + +## ⚙️ アプリの設定 + +### app.json の更新 + +本番用に `app.json` を更新します: + +```json +{ + "expo": { + "name": "Jules", + "slug": "jules-mobile", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "userInterfaceStyle": "automatic", + "splash": { + "image": "./assets/images/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "extra": { + "enableDebug": false + }, + "android": { + "package": "com.yourcompany.jules", + "versionCode": 1, + "permissions": [] + }, + "ios": { + "bundleIdentifier": "com.yourcompany.jules", + "buildNumber": "1" + } + } +} +``` + +## 📱 プラットフォーム固有のビルド + +### Android の本番ビルド + +```bash +# EAS CLI をインストール +npm install -g eas-cli + +# Expo にログイン +eas login + +# ビルドの設定 +eas build:configure + +# 本番用の APK をビルド +eas build --platform android --profile production + +# Google Play Store 用の AAB をビルド +eas build --platform android --profile production --auto-submit +``` + +**Android の署名:** +- 署名用のキーストアを作成する +- 認証情報を安全に保管する (Expo がこれを処理します) +- キーストアは絶対にバージョン管理にコミットしない + +**ProGuard の設定** (コードの難読化用): + +`android/app/proguard-rules.pro` を作成します: + +```proguard +# React Native のクラスを保持 +-keep class com.facebook.react.** { *; } +-keep class com.facebook.hermes.** { *; } + +# Expo モジュールを保持 +-keep class expo.modules.** { *; } + +# ここにカスタムルールを追加 +``` + +### iOS の本番ビルド + +```bash +# App Store 用の IPA をビルド +eas build --platform ios --profile production + +# App Store に申請 +eas submit --platform ios +``` + +**iOS の署名:** +- App Store Distribution 証明書を作成する +- App Store プロビジョニングプロファイルを作成する +- Apple Developer Console で設定する +- EAS が証明書の管理を処理します + +## 🚀 展開のオプション + +### オプション 1: アプリストアでの配布 + +**Google Play Store (Android):** +1. Google Play Developer アカウントを作成する (1 回限りの料金 25 ドル) +2. アプリのストア掲載情報を作成する +3. APK / AAB をアップロードする +4. コンテンツのレーティングのアンケートに回答する +5. 価格と配布の設定を行う +6. 公開する + +**Apple App Store (iOS):** +1. Apple Developer Program に登録する (年間 99 ドル) +2. App Store Connect でアプリの掲載情報を作成する +3. EAS または Xcode を使用して IPA をアップロードする +4. 審査に提出する +5. 審査のフィードバックに対応する +6. 公開する + +### オプション 2: エンタープライズ配布 + +社内利用の場合: + +**Android:** +- APK をビルドして署名する +- 社内のチャンネルを通じて配布する +- Mobile Device Management (MDM) を使用する +- または Google Play エンタープライズを使用する + +**iOS:** +- Apple Developer Enterprise Program に登録する (年間 299 ドル) +- エンタープライズ配布証明書を作成する +- MDM または直接ダウンロードで配布する +- 注: エンタープライズプログラムには厳格な要件があります + +### オプション 3: 直接配布 + +**Android APK:** +- 「提供元不明のアプリ」からのインストールを許可する +- APK を直接ダウンロードしてインストールする +- テストや小規模な展開に使用する +- 大規模な本番環境での使用は推奨されません + +**iOS (TestFlight):** +- ベータテスターは 10,000 人まで +- 1 ビルドあたりのテスト期間は 90 日間 +- 段階的なロールアウトに適しています + +### オプション 4: Over-the-Air (OTA) アップデート + +Expo Updates を使用: + +```bash +# expo-updates の設定 +npx expo install expo-updates + +# アップデートの公開 +eas update --branch production --message "バグの修正" +``` + +**メリット:** +- アプリストアの審査なしで即座にアップデート +- 段階的なロールアウト +- ロールバックが可能 + +**制限事項:** +- ネイティブコードの変更は不可 +- アプリの権限の変更は不可 +- アプリストアのポリシーに依存する + +## 🔧 本番環境の設定 + +### デバッグモードの無効化 + +`app/_layout.tsx` を更新します: + +```typescript +// 本番環境で console.log を無効にする +if (!__DEV__) { + console.log = () => {}; + console.warn = () => {}; + console.error = () => {}; +} +``` + +### エラー処理 + +グローバルなエラー境界 (Error Boundary) を実装します: + +```typescript +import * as Sentry from '@sentry/react-native'; + +// Sentry の初期化 +Sentry.init({ + dsn: 'YOUR_SENTRY_DSN', + enableInExpoDevelopment: false, + debug: __DEV__, +}); + +// アプリをエラー境界でラップする +function App() { + return ( + + + + ); +} +``` + +### 分析の設定 (オプション) + +```bash +# Firebase Analytics のインストール +npx expo install @react-native-firebase/analytics +``` + +```typescript +// 画面表示のトラッキング +import analytics from '@react-native-firebase/analytics'; + +await analytics().logScreenView({ + screen_name: 'Sessions', + screen_class: 'SessionsScreen', +}); +``` + +### クラッシュレポート + +オプション: +- **Sentry** - 包括的なエラートラッキング +- **Firebase Crashlytics** - 無料、Firebase と統合 +- **Bugsnag** - React Native の優れたサポート +- **Instabug** - ユーザーフィードバック付きのバグレポート + +## 📊 監視とメンテナンス + +### パフォーマンス監視 + +1. **React Native Performance Monitor** + - 開発環境で FPS モニターを有効にする + - React DevTools でプロファイリングする + +2. **Firebase Performance Monitoring** + ```bash + npx expo install @react-native-firebase/perf + ``` + +3. **Sentry Performance** + - トランザクションのパフォーマンスを追跡する + - API の応答時間を監視する + +### ヘルスチェック + +以下を監視: +- アプリのクラッシュ率 +- API のエラー率 +- ユーザーの継続率 +- セッションの長さ +- API のクォータ使用量 + +### ログ記録 + +**記録すべきもの:** +- API のエラー +- 認証の失敗 +- 重要なユーザーアクション +- パフォーマンスの指標 + +**記録してはいけないもの:** +- API キー +- ユーザーの認証情報 +- 個人情報 +- 本番環境での完全なスタックトレース + +### アップデート戦略 + +1. **セマンティックバージョニング** + - MAJOR.MINOR.PATCH (例: 1.2.3) + - `app.json` のバージョンを更新 + +2. **リリースノート** + - CHANGELOG.md を維持する + - 変更内容をユーザーに伝える + +3. **段階的なロールアウト** + - Google Play: 段階的なロールアウト (10%, 50%, 100%) + - App Store: 段階的リリース + - 各段階でクラッシュ率を監視する + +## 🔐 API キー管理 + +### 本番環境向け + +**オプション 1: クライアント側 (現在)** +- ユーザー自身が API キーを入力する +- キーは `expo-secure-store` を使用してローカルに保存される +- 個人の使用に適している + +**オプション 2: バックエンドプロキシ (商用で推奨)** +``` +モバイルアプリ → バックエンドサーバー → Jules API +``` + +メリット: +- 一元化されたキー管理 +- ユーザーごとのレート制限 +- 使用量の追跡 +- アプリのアップデートなしでのキーのローテーション + +バックエンドプロキシの例: +```typescript +// Express.js の例 +app.post('/api/sessions', authenticate, async (req, res) => { + const apiKey = process.env.JULES_API_KEY; + const response = await fetch('https://jules.googleapis.com/v1alpha/sessions', { + method: 'POST', + headers: { + 'X-Goog-Api-Key': apiKey, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req.body), + }); + res.json(await response.json()); +}); +``` + +### レート制限 + +クライアント側のレート制限を実装します: + +```typescript +// シンプルなレートリミッター +class RateLimiter { + private requests: number[] = []; + private maxRequests = 100; + private windowMs = 60000; // 1 分 + + async checkLimit(): Promise { + const now = Date.now(); + this.requests = this.requests.filter(time => now - time < this.windowMs); + + if (this.requests.length >= this.maxRequests) { + return false; + } + + this.requests.push(now); + return true; + } +} +``` + +## 💰 コストの考慮事項 + +### Jules API のコスト +- Google Cloud の料金を確認する +- 予算アラートを設定する +- Cloud Console で使用量を確認する +- コスト割り当てタグを実装する + +### インフラコスト +- アプリストアの手数料 (年間 25 ドル~ 299 ドル) +- バックエンドのホスティング (プロキシを使用する場合) +- アセットの CDN +- クラッシュレポートサービス +- 分析サービス + +### コストの最適化 +- 適切な場所で API の応答をキャッシュする +- ページネーションを実装する +- インクリメンタルな更新を使用する +- アセットのサイズを最適化する +- 完全なリリースの代わりに OTA アップデートを使用する + +## 📚 コンプライアンスと法務 + +### 本番環境で必要なもの + +1. **プライバシーポリシー** + - アプリストアから求められます + - データの収集について説明する必要があります + - アプリ内でアクセス可能である必要があります + +2. **利用規約** + - 許容される使用の定義 + - 責任の制限 + - 準拠法の指定 + +3. **オープンソースライセンス** + - アプリ内に表示する (すでに `/licenses` で実装済み) + - ライセンスの条件を遵守する + - ドキュメントに含める + +### 推奨されるオプション + +- Cookie ポリシー (Web を使用する場合) +- GDPR コンプライアンス (EU のユーザー向け) +- CCPA コンプライアンス (カリフォルニアのユーザー向け) +- アクセシビリティステートメント + +## 🧪 テスト戦略 + +### リリース前のテスト + +1. **ユニットテスト** + ```bash + npm test + ``` + +2. **統合テスト** + - API の統合をテストする + - ナビゲーションのフローをテストする + +3. **E2E テスト** + - Detox または Maestro を使用する + - 重要なユーザージャーニーをテストする + +4. **ベータテスト** + - TestFlight (iOS) + - Google Play 内部テスト (Android) + - ユーザーからのフィードバックを収集する + +### パフォーマンスのテスト + +- 低スペックなデバイスでテストする +- 低速なネットワークでテストする +- 大規模なデータセットでテストする +- メモリの使用状況を監視する + +## 🔄 ロールバック戦略 + +### 問題が発生した場合 + +1. **OTA アップデート** + ```bash + # 前のバージョンにロールバックする + eas update:rollback + ``` + +2. **アプリストア** + - 即座にはロールバックできません + - ホットフィックスのアップデートを申請する + - 緊急の修正の場合は通常 1 ~ 2 日で審査が完了します + +3. **フィーチャーフラグ** + - フィーチャートグルを実装する + - 問題のある機能をリモートで無効にする + +## 📞 サポートとメンテナンス + +### ユーザーサポート + +- サポート用メールアドレスを設定する +- FAQ ドキュメントを作成する +- GitHub Issue を監視する +- アプリ内ヘルプを提供する + +### メンテナンスのスケジュール + +- **毎週:** クラッシュレポートの監視、分析の確認 +- **毎月:** 依存関係の更新、セキュリティアドバイザリの確認 +- **四半期ごと:** パフォーマンスの最適化、ユーザーからのフィードバックの確認 +- **毎年:** メジャーバージョンの更新、技術スタックの見直し + +## 🎯 ローンチのチェックリスト + +リリース前の最終確認: + +- [ ] すべてのビルドを実機でテストした +- [ ] プライバシーポリシーと利用規約が用意されている +- [ ] サポートチャンネルが確立されている +- [ ] 監視とアラートが設定されている +- [ ] バックアップとリカバリがテストされている +- [ ] ドキュメントが完成している +- [ ] マーケティング資料が準備されている (該当する場合) +- [ ] アプリストアの掲載情報が完成している +- [ ] ベータ版のフィードバックに対応した +- [ ] パフォーマンスのベンチマークを満たしている +- [ ] セキュリティ監査が完了している +- [ ] ロールバックの計画が文書化されている + +## 📖 その他のリソース + +- [Expo Production Deployment](https://docs.expo.dev/distribution/introduction/) +- [React Native Performance](https://reactnative.dev/docs/performance) +- [Google Play Launch Checklist](https://developer.android.com/distribute/best-practices/launch/launch-checklist) +- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/) + +--- + +**お困りですか?** [docs/TROUBLESHOOTING.md](TROUBLESHOOTING.md) を確認するか、GitHub で Issue を開いてください。 diff --git a/docs/deployment/security.ja.md b/docs/deployment/security.ja.md new file mode 100644 index 0000000..c9bdb8c --- /dev/null +++ b/docs/deployment/security.ja.md @@ -0,0 +1,277 @@ +# セキュリティのベストプラクティス + +このドキュメントでは、Jules Mobile Client を使用および展開するためのセキュリティのベストプラクティスについて説明します。 + +## 🔐 API キー管理 + +### 個人利用 + +**DO:** +- ✅ アプリのセキュアストレージ (`expo-secure-store`) を使用して API キーを保存する +- ✅ API キーを他の人と共有しない +- ✅ 侵害された疑いがある場合は、API キーをローテーションする +- ✅ 最小限の権限のみを持つ API キーを使用する +- ✅ Google Cloud Console で API の使用状況を監視する + +**DON'T:** +- ❌ API キーをバージョン管理にコミットしない +- ❌ API キーを含むスクリーンショットを共有しない +- ❌ 共有デバイスで個人用 API キーを使用した後は、必ずクリアする +- ❌ API キーをプレーンテキストファイルに保存しない + +### 商用 / チームでの展開 + +本番環境やチームでの展開では、以下を検討してください: + +1. **一元化されたキー管理** + - API キーを管理するバックエンドサービスを使用する + - キーを提供する前にユーザー認証を実装する + - キーを定期的にローテーションする + - API の使用状況を監視し、アラートを設定する + +2. **API キーのスコープ指定** + - 環境 (dev/staging/prod) ごとに異なるキーを使用する + - ユーザー/チームごとのレート制限を実装する + - Google Cloud Console で予算アラートを設定する + +3. **アクセス制御** + - ロールベースのアクセス制御 (RBAC) を実装する + - すべての API キーアクセスを記録する + - セッションタイムアウトを実装する + +## 🛡️ セキュリティ機能 + +### 現在の保護機能 + +1. **セキュアストレージ** + - API キーは `expo-secure-store` で保存されます + - プラットフォーム固有のセキュアストレージを活用: + - iOS: Keychain + - Android: Keystore/EncryptedSharedPreferences + +2. **HTTPS 通信** + - すべての API リクエストは HTTPS を使用します + - 証明書のピン留め (必要に応じて実装可能) + +3. **サードパーティへのデータ共有なし** + - デフォルトでは分析やトラッキングは行いません + - データがサードパーティに送信されることはありません + +4. **入力検証** + - ユーザー入力は API 呼び出しの前に検証されます + - Markdown レンダリングにおける XSS 保護 + +### 推奨される追加セキュリティ + +本番環境への展開では、以下の実装を検討してください: + +1. **認証と認可** + ```typescript + // ユーザー認証レイヤーの追加 + - OAuth 2.0 / OIDC + - 多要素認証 (MFA) + - セッション管理 + ``` + +2. **ネットワークセキュリティ** + ```typescript + // 証明書のピン留めを追加 + - SSL 証明書の検証 + - タイムアウトポリシーの実装 + - エクスポネンシャルバックオフによる再試行ロジックの追加 + ``` + +3. **データ保護** + ```typescript + // 機密データの暗号化 + - ローカルキャッシュの暗号化 + - データ保持ポリシーの実装 + - データエクスポート / 削除機能の追加 + ``` + +4. **監査ログ** + ```typescript + // セキュリティイベントの記録 + - API キーのアクセス / 変更 + - 認証失敗の試行 + - 異常な API 使用パターン + ``` + +## 🔍 セキュリティ監査チェックリスト + +本番環境に展開する前に、以下を確認してください: + +- [ ] API キーがハードコードされていない +- [ ] 機密データにセキュアストレージが使用されている +- [ ] すべての API 呼び出しで HTTPS が使用されている +- [ ] ユーザー入力が検証およびサニタイズされている +- [ ] エラーメッセージから機密情報が漏洩しない +- [ ] 本番環境ではデバッグログが無効になっている +- [ ] 依存関係が最新の状態である +- [ ] 既知の脆弱性がパッチされている +- [ ] レート制限が実装されている +- [ ] API 使用状況が監視されている +- [ ] インシデント対応計画が整備されている +- [ ] プライバシーポリシーが実装されている (必要な場合) +- [ ] 利用規約が表示されている (必要な場合) +- [ ] ユーザーデータの削除メカニズムが存在する (該当する場合) + +## 🚨 脆弱性の報告 + +セキュリティの脆弱性を発見した場合は: + +1. **絶対に**公開の GitHub Issue を開かないでください +2. セキュリティに関する懸念事項は [あなたの連絡先メールアドレス] にメールしてください +3. 以下の内容を含めてください: + - 脆弱性の説明 + - 再現手順 + - 潜在的な影響 + - 提案する修正方法 (あれば) + +セキュリティレポートには 48 時間以内に対応することを目指しています。 + +## 🔄 セキュリティアップデート + +### 依存関係を安全に保つ + +```bash +# 脆弱性の確認 +npm audit + +# 依存関係の更新 +npm update + +# Expo SDK の更新 +npx expo upgrade +``` + +### 定期的なメンテナンス + +- 毎月依存関係を更新する +- セキュリティアドバイザリを確認する +- 既知の脆弱性には迅速にパッチを適用する +- 展開前にセキュリティアップデートをテストする + +## 📋 コンプライアンスの考慮事項 + +商用利用の場合、以下に準拠する必要がある場合があります: + +### GDPR (EU) +- データ主体としての権利 (アクセス、削除、ポータビリティ) の実装 +- プライバシーポリシーの追加 +- データ処理に関するユーザーの同意の取得 +- データ侵害通知の実装 + +### CCPA (カリフォルニア) +- プライバシー通知の提供 +- データ販売のオプトアウトの許可 (データを収集していない場合は適用されません) +- データ削除リクエストの実装 + +### その他の規制 +- HIPAA (医療データ) - 適切なセーフガードなしで医療用途に使用しないでください +- SOC 2 - エンタープライズの顧客向け +- ISO 27001 - 情報セキュリティマネジメント + +**注:** このアプリは開発用途で設計されています。規制の厳しい業界で使用する前に、法律顧問に相談してください。 + +## 🔒 本番環境の展開セキュリティ + +### 環境設定 + +1. **環境変数** + ```bash + # 環境固有の設定を使用する + EXPO_PUBLIC_API_URL=https://jules.googleapis.com/v1alpha + EXPO_PUBLIC_ENABLE_DEBUG=false + ``` + +2. **ビルドセキュリティ** + ```bash + # 本番ビルドプロファイルを使用する + eas build --platform android --profile production + + # コードの難読化を有効にする + # ProGuard を有効にする (Android) + # bitcode を有効にする (iOS) + ``` + +3. **アプリの配布** + - 本番証明書で APK / IPA に署名する + - 可能な限り公式アプリストアを使用する + - アプリの整合性チェックを実装する + - 企業向けには内部配布の使用を検討する + +### ランタイムセキュリティ + +1. **ネットワークセキュリティ** + - API 呼び出しに SSL ピン留めを実装する + - 機密データの送信には VPN を使用する + - リクエストの署名を実装する + +2. **ストレージセキュリティ** + - ログアウト時に機密データをクリアする + - セキュアなセッション管理を実装する + - 生体認証オプションを追加する + +3. **コード保護** + - 本番環境でコードの難読化を有効にする + - デバッグシンボルを削除する + - 開発者ツールを無効にする + +## 🛠️ セキュリティツール + +### 推奨ツール + +1. **静的解析** + ```bash + # セキュリティルール付きの ESLint + npm install --save-dev eslint-plugin-security + + # TypeScript ストリクトモード + # tsconfig.json ですでに有効化されています + ``` + +2. **依存関係のスキャン** + ```bash + # npm audit + npm audit + + # Snyk + npm install -g snyk + snyk test + ``` + +3. **ランタイム保護** + - セキュリティ機能を備えた Expo EAS Build + - アプリのシールドソリューション (高度なセキュリティ要件向け) + - Runtime Application Self-Protection (RASP) + +## 📚 その他のリソース + +- [Expo Security Documentation](https://docs.expo.dev/guides/security/) +- [React Native Security Guide](https://reactnative.dev/docs/security) +- [OWASP Mobile Security](https://owasp.org/www-project-mobile-security/) +- [Google Cloud Security Best Practices](https://cloud.google.com/security/best-practices) + +## ⚠️ 制限事項 + +**このアプリが提供しないもの:** +- ユーザー認証システム +- キー管理用のバックエンド API +- コンプライアンス認証 +- セキュリティインシデント対応 +- ペネトレーションテスト +- セキュリティ監査 + +**エンタープライズ / 商用利用の場合:** +- 追加のセキュリティレイヤーの実装 +- セキュリティ監査の実施 +- モニタリングとアラートの追加 +- バックアップとディザスタリカバリの実装 +- インシデント対応手順の確立 + +--- + +**最終更新日:** 2025-02-13 + +**免責事項:** このドキュメントは一般的なセキュリティガイダンスを提供します。本番環境の展開については、セキュリティの専門家に相談してください。 diff --git a/docs/guides/faq.md b/docs/guides/faq.md index 98b1ac3..0a37b9a 100644 --- a/docs/guides/faq.md +++ b/docs/guides/faq.md @@ -144,6 +144,15 @@ Currently, the app does not support deleting sessions. Sessions are managed thro Session control (pause/stop) is not currently supported in the mobile app. Sessions run until completion or failure. +### Can I export or share sessions? + +Yes! You can export session activities to Markdown or JSON format: +1. Open the session you want to export. +2. Tap the share/export icon in the top right corner. +3. Choose either **Export as Markdown** or **Export as JSON**. +4. Use your device's native share sheet to save or share the file. +*(Note: Sharing may not be supported on the Web platform.)* + --- ## Repositories diff --git a/docs/guides/troubleshooting.md b/docs/guides/troubleshooting.md index fc23c82..820dd7b 100644 --- a/docs/guides/troubleshooting.md +++ b/docs/guides/troubleshooting.md @@ -290,6 +290,19 @@ bun start --clear --- +## Export & Sharing Issues + +### Export failed or Sharing is not available + +**Problem**: Exporting a session fails or the native share sheet does not appear. + +**Solution**: +1. **Check Platform**: Sharing to other apps is supported natively on iOS and Android. If you are using the app on the web, `expo-sharing` might not be fully supported. +2. **Check Permissions**: If an export fails, it could be due to file system permissions. Ensure the app has permission to write files and access storage. +3. **Wait for Large Sessions**: If you are trying to export a very large session, it may take a few moments. Please be patient while the app generates the Markdown or JSON file. + +--- + ## Performance Issues ### Slow List Scrolling