Skip to content

Commit b06b9d6

Browse files
grichaclaude
andauthored
Add App Store submission preparation (#30)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 6fecf67 commit b06b9d6

6 files changed

Lines changed: 234 additions & 1 deletion

File tree

docs/docusaurus.config.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,15 @@ const config: Config = {
120120
},
121121
],
122122
},
123+
{
124+
title: 'Legal',
125+
items: [
126+
{
127+
label: 'Privacy Policy',
128+
to: '/privacy',
129+
},
130+
],
131+
},
123132
],
124133
copyright: `Copyright © ${new Date().getFullYear()} Perry. Built with Docusaurus.`,
125134
},

docs/src/pages/privacy.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Privacy Policy
2+
3+
**Effective Date:** January 2025
4+
5+
## Overview
6+
7+
Perry is an open-source tool for creating isolated Docker-in-Docker development environments. This privacy policy covers the Perry mobile application.
8+
9+
## Data Collection
10+
11+
**Perry does not collect, store, or transmit any personal data to external servers.**
12+
13+
The Perry mobile app:
14+
- Connects only to your self-hosted Perry agent on your local network or via Tailscale
15+
- Does not include any analytics, tracking, or telemetry
16+
- Does not require user accounts or authentication with external services
17+
- Stores configuration locally on your device only
18+
19+
## Local Network Access
20+
21+
Perry requires local network access to communicate with your Perry agent. This connection stays within your network and is used solely to:
22+
- List and manage your development workspaces
23+
- Start and stop workspace containers
24+
- View workspace sessions and logs
25+
26+
## Data Storage
27+
28+
All data is stored locally:
29+
- **On your device:** App preferences and agent connection settings
30+
- **On your Perry agent:** Workspace configurations and state (self-hosted by you)
31+
32+
## Third-Party Services
33+
34+
Perry does not integrate with any third-party analytics, advertising, or data collection services.
35+
36+
## Open Source
37+
38+
Perry is open source. You can review the complete source code at [github.com/gricha/perry](https://github.com/gricha/perry).
39+
40+
## Contact
41+
42+
For questions about this privacy policy, please open an issue on [GitHub](https://github.com/gricha/perry/issues).
43+
44+
## Changes
45+
46+
Any changes to this privacy policy will be reflected in the app's documentation and this page.

mobile/APP_STORE_CHECKLIST.md

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# App Store Submission Checklist
2+
3+
## Pre-Submission Setup
4+
5+
### App Store Connect
6+
1. Log into [App Store Connect](https://appstoreconnect.apple.com)
7+
2. Click "My Apps" → "+" → "New App"
8+
3. Fill in:
9+
- Platform: iOS
10+
- Name: Perry
11+
- Primary Language: English (U.S.)
12+
- Bundle ID: `com.gricha.perry`
13+
- SKU: `perry-ios` (or any unique identifier)
14+
15+
### App Information (App Store Connect)
16+
Fill in the following under "App Information":
17+
- **Privacy Policy URL**: `https://gricha.github.io/perry/privacy`
18+
- **Category**: Developer Tools (Primary), Utilities (Secondary)
19+
- **Content Rights**: Does not contain third-party content
20+
- **Age Rating**: Complete the questionnaire (all "No" for Perry)
21+
22+
## Screenshots Required
23+
24+
### iPhone 6.9" Display (Required)
25+
- **Device**: iPhone 16 Pro Max (or simulator)
26+
- **Resolution**: 1320 x 2868 (portrait) or 2868 x 1320 (landscape)
27+
- **Count**: 1-10 screenshots
28+
29+
### iPhone 6.5" Display (Required)
30+
- **Device**: iPhone 11 Pro Max, 12 Pro Max, 13 Pro Max, 14 Plus/Pro Max, 15 Plus/Pro Max
31+
- **Resolution**: 1242 x 2688 (portrait) or 2688 x 1242 (landscape)
32+
- **Count**: 1-10 screenshots
33+
34+
### iPad Pro 13" (Required if supporting tablet)
35+
- **Device**: iPad Pro 12.9" (any generation)
36+
- **Resolution**: 2064 x 2752 (portrait) or 2752 x 2064 (landscape)
37+
- **Count**: 1-10 screenshots
38+
39+
### Taking Screenshots
40+
```bash
41+
# Run on simulator
42+
npx expo run:ios --device "iPhone 16 Pro Max"
43+
44+
# Take screenshot: Cmd + S (saves to Desktop)
45+
# Or: Device → Trigger Screenshot in Simulator menu
46+
```
47+
48+
### Suggested Screenshots
49+
1. Workspace list view (showing some workspaces)
50+
2. Workspace detail view
51+
3. Session terminal/webview
52+
4. Settings page
53+
5. Empty state with "Add workspace" prompt
54+
55+
## App Icon
56+
57+
**Important**: The App Store icon must NOT have transparency.
58+
59+
Current icon has alpha channel. Before submission:
60+
1. Open `assets/icon.png` in an image editor
61+
2. Add a solid background (white: #FFFFFF or match your splash background)
62+
3. Export as PNG without alpha channel
63+
4. Replace `assets/icon.png`
64+
65+
## Build & Submit
66+
67+
### Option 1: Using EAS (Recommended)
68+
```bash
69+
# Install EAS CLI globally
70+
npm install -g eas-cli
71+
72+
# Log in to Expo account
73+
eas login
74+
75+
# Configure project (one-time)
76+
eas build:configure
77+
78+
# Build for App Store
79+
eas build --platform ios --profile production
80+
81+
# Submit to App Store (after build completes)
82+
eas submit --platform ios --latest
83+
```
84+
85+
Before running `eas submit`, fill in `eas.json`:
86+
- `appleId`: Your Apple ID email
87+
- `ascAppId`: App Store Connect App ID (found in App Information → General → Apple ID)
88+
89+
### Option 2: Using Xcode
90+
```bash
91+
# Build release version
92+
cd mobile
93+
npx expo run:ios --configuration Release
94+
95+
# Or open in Xcode
96+
open ios/Perry.xcworkspace
97+
```
98+
99+
Then in Xcode:
100+
1. Select "Any iOS Device (arm64)" as destination
101+
2. Product → Archive
102+
3. Window → Organizer → Distribute App
103+
4. App Store Connect → Upload
104+
105+
## App Review Notes
106+
107+
Add these notes for the reviewer in App Store Connect:
108+
109+
```
110+
Perry is a companion app for managing self-hosted Docker development environments.
111+
112+
To test this app, you need:
113+
1. A Mac or Linux machine running the Perry agent (https://github.com/gricha/perry)
114+
2. The Perry CLI installed: npm install -g @gricha/perry
115+
3. Start the agent: perry agent run
116+
117+
The app connects to the Perry agent over your local network to:
118+
- View and manage development workspaces
119+
- Start/stop workspace containers
120+
- Access workspace terminal sessions
121+
122+
Without a running Perry agent, the app will show connection errors, which is expected behavior.
123+
```
124+
125+
## Version Management
126+
127+
For each submission:
128+
1. Update `version` in `app.json` for new features (e.g., "1.0.0" → "1.1.0")
129+
2. The `buildNumber` auto-increments via EAS, or manually update for Xcode builds
130+
3. Keep `version` and `CFBundleShortVersionString` in sync
131+
132+
## Post-Submission
133+
134+
- App Review typically takes 24-48 hours
135+
- Watch for messages in App Store Connect
136+
- If rejected, address feedback and resubmit
137+
- Once approved, manually release or set auto-release

mobile/app.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
},
1515
"ios": {
1616
"supportsTablet": true,
17-
"bundleIdentifier": "com.gricha.perry"
17+
"bundleIdentifier": "com.gricha.perry",
18+
"buildNumber": "1",
19+
"infoPlist": {
20+
"NSLocalNetworkUsageDescription": "Perry connects to your local Perry agent to manage development workspaces on your network.",
21+
"ITSAppUsesNonExemptEncryption": false
22+
}
1823
},
1924
"android": {
2025
"package": "com.subroutine.workspace",

mobile/assets/icon.png

-16.6 KB
Loading

mobile/eas.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"cli": {
3+
"version": ">= 15.0.0",
4+
"appVersionSource": "local"
5+
},
6+
"build": {
7+
"development": {
8+
"developmentClient": true,
9+
"distribution": "internal",
10+
"ios": {
11+
"simulator": true
12+
}
13+
},
14+
"preview": {
15+
"distribution": "internal",
16+
"ios": {
17+
"simulator": false
18+
}
19+
},
20+
"production": {
21+
"autoIncrement": "buildNumber",
22+
"ios": {
23+
"resourceClass": "m-medium"
24+
}
25+
}
26+
},
27+
"submit": {
28+
"production": {
29+
"ios": {
30+
"appleId": "$APPLE_ID",
31+
"ascAppId": "6757492290",
32+
"appleTeamId": "GYRQ5A56S5"
33+
}
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)