|
| 1 | +# Apple App Store Submission Guide |
| 2 | + |
| 3 | +This document contains all the information needed to submit NostrKey to the Apple App Store (Safari extension for macOS and iOS). |
| 4 | + |
| 5 | +## Prerequisites |
| 6 | + |
| 7 | +- [ ] Apple Developer account ($99/year) |
| 8 | +- [ ] Xcode with valid signing certificate |
| 9 | +- [ ] App Store Connect access |
| 10 | +- [ ] Screenshots for macOS and iOS |
| 11 | +- [ ] App icon (1024x1024px) |
| 12 | +- [ ] Privacy Policy URL |
| 13 | +- [ ] Built Safari extension via Xcode |
| 14 | + |
| 15 | +## App Store Listing |
| 16 | + |
| 17 | +### App Name (30 chars max) |
| 18 | +**NostrKey** |
| 19 | + |
| 20 | +### Subtitle (30 chars max) |
| 21 | +**Nostr Key Manager & Signer** |
| 22 | + |
| 23 | +### Promotional Text (170 chars, can update without new build) |
| 24 | +``` |
| 25 | +Securely manage your Nostr keys and sign events without exposing private keys to websites. Encrypted vault, nsecBunker support, and auto-lock protection. |
| 26 | +``` |
| 27 | + |
| 28 | +### Keywords (100 chars, comma-separated) |
| 29 | +``` |
| 30 | +nostr,nip-07,signing,encryption,nsec,npub,keys,vault,nsecbunker,privacy,crypto |
| 31 | +``` |
| 32 | + |
| 33 | +### Description (4000 chars max) |
| 34 | +``` |
| 35 | +NostrKey is a Safari extension for macOS and iOS that manages your Nostr identities and signs events on your behalf — your private keys never touch the websites you visit. |
| 36 | +
|
| 37 | +Features: |
| 38 | +• NIP-07 signing — works with any Nostr web app |
| 39 | +• NIP-46 nsecBunker — remote signing, your key never leaves the bunker |
| 40 | +• NIP-44 encryption — modern ChaCha20-Poly1305 messaging |
| 41 | +• Encrypted document vault — zero-knowledge storage on Nostr relays |
| 42 | +• API key vault — encrypted secret storage |
| 43 | +• Master password — keys encrypted at rest with auto-lock |
| 44 | +• Multi-profile support — manage multiple Nostr identities |
| 45 | +• Per-site permissions — control which sites can request signatures |
| 46 | +
|
| 47 | +Your keys. Your control. No data collection. No tracking. Fully open source. |
| 48 | +``` |
| 49 | + |
| 50 | +### Category |
| 51 | +**Utilities** |
| 52 | + |
| 53 | +### Secondary Category |
| 54 | +**Social Networking** |
| 55 | + |
| 56 | +## Privacy Details (App Store Connect) |
| 57 | + |
| 58 | +### Data Collection |
| 59 | +**We do NOT collect any user data.** |
| 60 | + |
| 61 | +Apple requires you to declare data practices in App Store Connect. Select: |
| 62 | + |
| 63 | +- **Data Not Collected** — NostrKey does not collect any data from users |
| 64 | + |
| 65 | +### Privacy Policy URL |
| 66 | +**https://nostrkey.com/privacy.html** |
| 67 | + |
| 68 | +### Privacy Nutrition Label |
| 69 | +| Data Type | Collected | Linked to Identity | Tracking | |
| 70 | +|-----------|-----------|-------------------|----------| |
| 71 | +| All types | No | No | No | |
| 72 | + |
| 73 | +## Required Assets |
| 74 | + |
| 75 | +### App Icon |
| 76 | +- 1024x1024px (required for App Store) |
| 77 | +- Existing icons in `src/images/` can be scaled up or recreated |
| 78 | + |
| 79 | +### Screenshots |
| 80 | + |
| 81 | +#### macOS (required) |
| 82 | +- At least 1 screenshot |
| 83 | +- Recommended sizes: 2880x1800, 1280x800 |
| 84 | +- Show: profile management, signing flow, vault, security settings |
| 85 | + |
| 86 | +#### iOS (required if supporting iPhone/iPad) |
| 87 | +- 6.7" display: 1290x2796 |
| 88 | +- 6.5" display: 1284x2778 or 1242x2688 |
| 89 | +- Show: popup interface, key management, permission dialog |
| 90 | + |
| 91 | +### Preview Video (optional) |
| 92 | +- Up to 30 seconds |
| 93 | +- Show the signing flow in action |
| 94 | + |
| 95 | +## App Review Information |
| 96 | + |
| 97 | +### Demo Account |
| 98 | +Not applicable — NostrKey generates its own keys locally. |
| 99 | + |
| 100 | +### Review Notes |
| 101 | +``` |
| 102 | +NostrKey is a Safari Web Extension that implements the NIP-07 standard for Nostr key management. It allows users to: |
| 103 | +
|
| 104 | +1. Generate or import Nostr private keys (nsec/hex format) |
| 105 | +2. Sign events requested by Nostr-compatible websites via the window.nostr API |
| 106 | +3. Encrypt/decrypt messages using NIP-44 |
| 107 | +4. Connect to remote signers via NIP-46 (nsecBunker) |
| 108 | +5. Store encrypted documents in a zero-knowledge vault |
| 109 | +
|
| 110 | +To test: |
| 111 | +1. Install the extension and enable it in Safari → Settings → Extensions |
| 112 | +2. Visit a Nostr web app (e.g., https://snort.social or https://nostrudel.ninja) |
| 113 | +3. The app will detect window.nostr and prompt for key access |
| 114 | +4. NostrKey will show a permission dialog for user approval |
| 115 | +
|
| 116 | +No account or login is needed — the extension generates keys locally. |
| 117 | +``` |
| 118 | + |
| 119 | +### Contact Information |
| 120 | +- **Website:** https://nostrkey.com |
| 121 | +- **Support URL:** https://nostrkey.com/support.html |
| 122 | +- **GitHub:** https://github.com/HumanjavaEnterprises/nostrkey.browser.plugin.src |
| 123 | + |
| 124 | +## Xcode Build & Archive |
| 125 | + |
| 126 | +### Build for Distribution |
| 127 | +```bash |
| 128 | +# 1. Build the Safari extension source |
| 129 | +npm run build:all |
| 130 | + |
| 131 | +# 2. Open in Xcode |
| 132 | +open apple/NostrKey.xcodeproj |
| 133 | + |
| 134 | +# 3. In Xcode: |
| 135 | +# - Select "Any Mac" or "Any iOS Device" as destination |
| 136 | +# - Product → Archive |
| 137 | +# - Window → Organizer → Distribute App → App Store Connect |
| 138 | +``` |
| 139 | + |
| 140 | +### Signing |
| 141 | +- Requires Apple Developer certificate (distribution) |
| 142 | +- Bundle ID should match App Store Connect entry |
| 143 | +- Enable "Safari Web Extension" capability |
| 144 | + |
| 145 | +## Submission Checklist |
| 146 | + |
| 147 | +- [ ] Apple Developer account active |
| 148 | +- [ ] App Store Connect entry created |
| 149 | +- [ ] App name reserved: "NostrKey" |
| 150 | +- [ ] Bundle ID registered |
| 151 | +- [ ] Fill out app description, subtitle, keywords |
| 152 | +- [ ] Upload promotional text |
| 153 | +- [ ] Set categories (Utilities + Social Networking) |
| 154 | +- [ ] Upload screenshots (macOS required, iOS if applicable) |
| 155 | +- [ ] Set privacy declarations (Data Not Collected) |
| 156 | +- [ ] Add privacy policy URL |
| 157 | +- [ ] Add support URL |
| 158 | +- [ ] Add review notes (see above) |
| 159 | +- [ ] Archive and upload build from Xcode |
| 160 | +- [ ] Select build in App Store Connect |
| 161 | +- [ ] Submit for review |
| 162 | + |
| 163 | +## Review Timeline |
| 164 | + |
| 165 | +- Initial review: 1-3 days typically |
| 166 | +- Safari extensions may receive additional review for: |
| 167 | + - Content script injection (`<all_urls>`) |
| 168 | + - Cryptographic functionality |
| 169 | + - Key storage practices |
| 170 | +- Be prepared to explain NIP-07 standard and why `<all_urls>` is required |
| 171 | + |
| 172 | +## Post-Submission |
| 173 | + |
| 174 | +### If Approved |
| 175 | +- Update README.md with App Store link |
| 176 | +- Update nostrkey.com with App Store badge |
| 177 | +- Update support.html with installation link |
| 178 | +- Announce on social media / Nostr |
| 179 | + |
| 180 | +### If Rejected |
| 181 | +- Review feedback in Resolution Center |
| 182 | +- Common issues: |
| 183 | + - Missing functionality explanation → update review notes |
| 184 | + - Privacy concerns → clarify local-only storage |
| 185 | + - `<all_urls>` justification → reference NIP-07 standard and MetaMask/Alby precedent |
| 186 | +- Resubmit via App Store Connect |
| 187 | + |
| 188 | +## Terms and Conditions |
| 189 | + |
| 190 | +**URL:** https://nostrkey.com/terms.html |
| 191 | + |
| 192 | +## Additional Resources |
| 193 | + |
| 194 | +- [App Store Connect](https://appstoreconnect.apple.com) |
| 195 | +- [Safari Web Extension Guide](https://developer.apple.com/documentation/safariservices/safari_web_extensions) |
| 196 | +- [App Store Review Guidelines](https://developer.apple.com/app-store/review/guidelines/) |
| 197 | +- [NIP-07 Specification](https://github.com/nostr-protocol/nips/blob/master/07.md) |
| 198 | + |
| 199 | +--- |
| 200 | + |
| 201 | +*Last updated: February 19, 2026* |
| 202 | +*Published by Humanjava Enterprises Inc* |
0 commit comments