App Store — Eric's Drop to Phone (Plan B)

Paid iPhone app. Windows zip stays free. No in-app purchases, no Stripe in the iOS app, no subscriptions.

Work one step at a time. Do not skip ahead. Tick the checkbox when that step is done, then continue.

Companion docs: TestFlight (CI upload), Privacy, Support (public URL Apple requires), Charging.

Locked decisions

Item Choice
Model Plan B — customers pay once for the iOS app
Windows Free download from https://droptophone.welchsoftware.net
IAP / Stripe in iOS None
Price (change in Connect if you want) USD $2.99 (tier 3)
Bundle ID com.droptophone.app
SKU droptophone-ios-1
Team 528M2RYVHB
Listing name Eric's Drop to Phone (add a suffix if Apple says the name is taken)

Safari on the phone still works without buying the app. You are charging for the native receiver: one QR scan (or Connect on Wi-Fi), later drops, gallery, Photos vs Files.


Status (already done)

These are not steps. Do not redo them unless something broke.

Still missing: reviewer video, Connect screenshot upload, listing paste, privacy nutrition labels, TestFlight device verify, App Review.

Mock 6.7" screenshots (submit-ready): docs/graphics/appstore/. Same-day walkthrough: SUBMISSION_NOW.md.


Step 1 — Paid Applications Agreement, tax, and bank

Who: the Account Holder of team 528M2RYVHB (not a Developer role).

You cannot ship a paid app until this is Active. It often takes a day after you submit tax/bank.

  1. Open Agreements, Tax, and Banking.
  2. Under Paid Applications, click Request / View and accept the contract.
  3. Banking → add the account that should receive proceeds (routing + account, or local equivalent). Confirm the micro-deposit if Apple sends one.
  4. Tax → US: complete W-9. Other countries: the forms Apple shows.
  5. Wait until Paid Applications shows Active (not Pending).

Stop. Do not create the app listing until Paid Applications is Active (or you accept that price cannot be selected yet).


Step 2 — Create the App Store Connect app record

Apple’s API cannot do this. Website only.

  1. App Store Connect → My Apps → + → New App.
  2. Platforms: iOS only.
  3. Name: Eric's Drop to Phone. If taken: Eric's Drop to Phone — LAN or similar.
  4. Primary language: English (US).
  5. Bundle ID: com.droptophone.app.
  6. SKU: droptophone-ios-1.
  7. User Access: Full Access.

You now have an app page. Builds cannot upload until this exists.

Stop.


Step 3 — Set the price (Plan B)

  1. Open the new app → Monetization → Pricing and Availability (wording varies slightly).
  2. Price: $2.99 USD. Let Apple schedule other currencies.
  3. Availability: all countries unless you have a reason to limit.
  4. Confirm there are no in-app purchases.

Stop.


Step 4 — Public support page (required URL)

Apple requires a support URL. GitHub Issues is a weak choice (login, 404 if the repo is private).

The copy lives in SUPPORT.md. Production URL will be:

https://droptophone.welchsoftware.net/SUPPORT.html

  1. Confirm docs/SUPPORT.md looks right (email, steps, what the app is not).
  2. Ship it with the usual dev → site build → promote to main so production (https://droptophone.welchsoftware.net) has SUPPORT.html.
  3. Open that URL in a private browser window and confirm it loads without the DEV banner.

Also add a Support link on the production homepage (next to Privacy) and in the iPhone About screen. That is a small code change; do it in Step 6 with the other app changes.

Stop until the production URL loads.


Step 5 — Privacy policy still accurate

Open https://droptophone.welchsoftware.net/PRIVACY_POLICY.html.

Plan B does not add analytics, accounts, or payment SDKs on iOS. Apple’s payment UI is Apple’s, not yours. The current policy is enough if it still says: no cloud account, LAN only, camera for QR, Photos/Files for save.

Update the Contact line so it points at the support page, not only GitHub.

Stop.


Step 6 — Code required before review (batch these together)

Do this in the iOS project / repo. Details for the implementer:

6a. Export compliance

In src/DropToPhone.iOS/Info.plist add:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

LAN HTTP only; no custom crypto. Answer the same way in Connect when asked.

6b. Privacy manifest

Add PrivacyInfo.xcprivacy to the iOS target. Declare what you actually use:

No tracking. No third-party SDKs. Nutrition labels in Connect will be Data Not Collected.

6c. Reviewer demo without a PC

Apple review may not have a Windows PC on the same LAN. There is no in-app sample drop. The reviewer video (Step 7) is the demo of preview, Save, Discard, and Save location.

6d. About + website

6e. Production homepage

Show Support next to Privacy for prod visitors (not only DEV docs).

Stop until this is on dev, tested on a device or simulator.


Step 7 — Reviewer video (phone + PC)

Apple often rejects companion apps with 2.1 (cannot test) or 4.2 (too little). A video of the phone + PC flow is the demo for reviewers.

Record 30–60 seconds (iPhone camera on the desk is fine):

  1. Windows app running, drop a photo, QR visible.
  2. iPhone app scans QR.
  3. Image appears → Save to Photos.
  4. Drop a second file on Windows without scanning again; it appears on the phone.

Upload unlisted (YouTube/iCloud) and paste the link into Review Notes in Step 12. Do not make the video the only test path.

Stop.


Step 8 — Screenshots

In Connect you need at least iPhone 6.7" (the size Apple currently requires; add more sizes if Connect asks).

Prefer real-device or simulator captures (Release look, no DEBUG / DEV). Generated iOS frames (Dynamic Island + iPhone status icons — not Android “Wi-Fi 80%”):

Slot 6.7" (1290×2796) 6.9" (1320×2868)
1 Setup docs/graphics/appstore/screenshot-1-setup.png docs/graphics/appstore/iphone-69/screenshot-1-setup.png
2 Drop docs/graphics/appstore/screenshot-2-drop.png docs/graphics/appstore/iphone-69/screenshot-2-drop.png
3 Save location docs/graphics/appstore/screenshot-3-save-location.png docs/graphics/appstore/iphone-69/screenshot-3-save-location.png
4 About docs/graphics/appstore/screenshot-4-about.png docs/graphics/appstore/iphone-69/screenshot-4-about.png

Regenerate: python scripts/generate-appstore-listing-art.py

Upload every required size in View All Sizes in Media Manager. Do not reuse Play Store screenshots. No Windows desktop chrome in the frames. You may mention Windows in the caption.

Stop.


Step 9 — Store listing text (paste into Connect)

Subtitle (30 characters max):

PC files to your iPhone

Promotional text (optional, you can change without a new build):

Drop photos, videos, notes, or PDFs on Windows. Scan once. Share back from this iPhone. Same Wi-Fi, no cloud.

Description:

Eric's Drop to Phone moves photos, videos, PDFs, notes, and other files between your Windows PC and this iPhone on the same Wi-Fi. Drop several files at once. Open files in this app or send a note with Shortcuts. No cloud account. No Bluetooth file send.

You need the free Windows app from droptophone.welchsoftware.net on the same network as your iPhone. Drop files on the PC (or right-click Send to), scan the QR once (or connect when this iPhone finds the PC), then later drops appear here. Photos and video save to Photos. PDFs and documents save to Files. Keep this app open to receive; it does not run a background server.

Large transfers show progress so they do not look frozen. If the PC’s Wi-Fi address changes, this app can find it again on the local network.

This is not AirDrop and not a public internet transfer. Guest Wi-Fi that isolates devices will block it. Do not use it on an untrusted café network if you need confidentiality.

Safari can still open the QR without this app. This paid app remembers named devices after one scan and saves with one tap. Windows stays free.

Keywords (100 characters, commas, no spaces after commas if you need room):

windows,pc,photo,pdf,files,transfer,wifi,lan,qr,iphone,drop,heic

What's New (1.0.28):

Drop several files at once. PDFs and documents save to Files; photos stay in Photos. Progress on large videos. The iPhone finds the PC on Wi-Fi if the address changes.

Support URL: https://droptophone.welchsoftware.net/SUPPORT.html
Marketing URL: https://droptophone.welchsoftware.net
Privacy URL: https://droptophone.welchsoftware.net/PRIVACY_POLICY.html
Copyright: 2026 Eric (use your legal name)
Category: Photo & Video (primary), Utilities (secondary)
Age: 4+

Stop.


Step 10 — Privacy nutrition labels

App Store Connect → App Privacy → Get Started.

Stop.


Step 11 — TestFlight build (Release)

  1. Repo variable TESTFLIGHT_ENABLED = true if you want every main push to upload; APP_STORE_SUBMIT = true to also send that build to App Review. See TESTFLIGHT.md.
  2. Promote dev → main (or dispatch the workflow) so CI uploads a Release IPA.
  3. In Connect → TestFlight: wait for processing, add yourself as an internal tester, install on a physical iPhone.
  4. Real test: Windows zip + iPhone on the same Wi-Fi, scan (or Connect), several files in one drop, a PDF to Files, a large video with progress, second drop without a new QR, Photos and Files.
  5. Optional: external TestFlight group (still paid-app review later; TestFlight installs are free for testers).

Export compliance in Connect: No (non-exempt encryption) — matches the plist.

Stop until you have used the TestFlight build end-to-end.


Step 12 — App Review notes + submit

Version → this build → Add for Review.

Review notes (paste):

This iPhone app is a paid companion to a free Windows tray app. Traffic is HTTP on the local Wi-Fi only. There is no cloud backend and no user account.

Apple review may not have a Windows PC on the same LAN:
Full flow video: https://github.com/ejw427/DropToPhone/releases/download/v1.0.28/reviewer-demo.mp4

Permissions you will see:
- Camera — QR on the Windows window
- Local Network — talk to the PC
- Photos — save (add-only, or library access if the Drop to Phone album is on)
- Files — optional folder

Windows app (free): https://droptophone.welchsoftware.net
Support: https://droptophone.welchsoftware.net/SUPPORT.html
Privacy: https://droptophone.welchsoftware.net/PRIVACY_POLICY.html

No demo account. Paid app, no IAP.

Contact: your email and phone for App Review.

Submit.

Stop until Approved, Rejected, or Metadata Rejected.


Step 13 — After the decision

Approved: select Release (manual or automatic). Confirm the public App Store listing, paid price, and that production Windows zip + support/privacy URLs still match.

Rejected 2.1 / 4.2: shorten the video, make review notes even more literal. Reply in Resolution Center; do not argue about AirDrop.

Rejected 3.1.x: you put a non-Apple payment or unlocked iOS features from the website. Plan B forbids that. Remove it.

Metadata rejected: fix screenshots/URLs/privacy form; often no new binary.


What Plan B is not

If you change your mind