# App Store Connect — JMBpay fill guide

**Interactive guide UI:** [https://jmbpay.my/app-store/guide](https://jmbpay.my/app-store/guide)  
**Download pack:** [https://jmbpay.my/app-store](https://jmbpay.my/app-store)  
ZIP: `/assets/marketing/app-store/jmbpay-app-store-assets.zip`

Use this page-by-page while filling **JMBpay** (Team `54XG7XQWXJ`, Individual · Kenneth Hong).

**Compliance (live):** Privacy Policy → [https://jmbpay.my/privacy](https://jmbpay.my/privacy) · About / entity transparency → [https://jmbpay.my/about](https://jmbpay.my/about)

---

## A. Agreements, Tax & Banking (do first)

App Store Connect → **Business** (or **Agreements, Tax, and Banking**)

| Item | Action |
|------|--------|
| Paid Applications Agreement | Accept if shown |
| Tax | Complete Malaysia tax forms |
| Banking | Add bank for payouts (even if app is Free) |

Without this, **Add for Review** may stay blocked.

---

## B. App Information (sidebar)

| Field | Value |
|-------|--------|
| Name | `JMBpay` |
| Subtitle (optional) | `Strata bills for JMB / MC` (≤30 chars) |
| Bundle ID | `com.jmbpay.resident` |
| SKU | `jmbpay-resident-001` |
| Primary Language | English (U.K.) |
| Category | **Finance** (primary) · Utilities (secondary optional) |
| Content Rights | Does not contain third-party content you don’t have rights to |
| Age Rating | Complete questionnaire → expect **4+** |
| App Encryption | HTTPS only — answer **No** to non-exempt encryption (or rely on `ITSAppUsesNonExemptEncryption=false` in the IPA) |

---

## C. Pricing and Availability

| Field | Value |
|-------|--------|
| Price | **Free** |
| Availability | All countries you serve (at least Malaysia) |
| Pre-Orders | Off |

---

## D. App Privacy (“Get Started”)

Declare what the app collects. Suggested answers for JMBpay owner app:

| Data type | Collect? | Linked to identity? | Used for tracking? |
|-----------|----------|---------------------|--------------------|
| Contact Info (name, phone, email) | Yes | Yes | No |
| User ID / unit | Yes | Yes | No |
| Payment Info | Yes (via Billplz; you don’t store card numbers) | Yes | No |
| Photos (ticket evidence) | Yes if feature shipped | Yes | No |
| Device ID / push tokens | Yes if push shipped | Yes | No |
| Diagnostics (crash) | Optional | No | No |

Purpose labels to tick: **App Functionality**, **Customer Support**.  
Do **not** claim tracking for ads.

Privacy Policy URL (required): `https://jmbpay.my/privacy`  
About / who we represent: `https://jmbpay.my/about`

---

## E. iOS Version 1.0 — Product Page

### Screenshots (required slot)

ASC’s default upload box is **iPhone with Dynamic Island (medium display)** — only accepts **1179×2556** or **1206×2622**.  
Uploading `*-1290x2796.png` there returns **“File dimensions are invalid.”**

Upload from https://jmbpay.my/app-store (Demo Residences + property picker — not Block CQ white-label):

1. `plain-01-home-1179x2556.png`
2. `plain-02-bills-1179x2556.png`
3. `plain-03-tickets-1179x2556.png`
4. `plain-04-notices-1179x2556.png`
5. `plain-00-picker-1179x2556.png` (multi-JMB property picker after login)

Optional same slot: `*-1206x2622.png`.  
Optional large slot (Media Manager → View All Sizes → Dynamic Island large): `*-1290x2796.png`.

**Header / Search Results customisation:** skip for v1.

### Text

**Promotional Text** (optional, editable anytime):
```
Pay strata maintenance fees, view receipts, and read building notices — built for Malaysian JMB / MC owners.
```

**Description:**
```
JMBpay helps strata unit owners pay maintenance fees and stay updated with their building.

• Find your JMB / MC from a live residence directory
• View outstanding and paid bills
• Pay online (Billplz)
• Download / share receipts
• Read notices and updates from your JMB or MC
• Open tickets with your management office
• Switch units when you own across buildings

Designed for Malaysian Joint Management Bodies (JMB) and Management Corporations (MC).

Digital management by JMBpay.my · JMBpay
```

**Keywords** (comma-separated, no spaces after commas preferred):
```
strata,JMB,MC,maintenance,condo,billing,Billplz,owner,fees,receipt
```

**Support URL:** `https://jmbpay.my/`  
**Marketing URL:** `https://jmbpay.my/`  
**Privacy Policy URL:** `https://jmbpay.my/privacy`  
**About / transparency:** `https://jmbpay.my/about`  
**Version:** `1.0`  
**Copyright:** `2026 JMBpay`  
**Routing App Coverage:** leave empty  
**App Clip:** skip  

---

## F. App Review Information

| Field | Value |
|-------|--------|
| Sign-in required | ✓ Yes |
| User name | `demo` |
| Password | `demo` |
| First name | `Kenneth` |
| Last name | `Hong` |
| Phone | `+60168008400` |
| Email | Your Apple ID email |

**Notes** (paste):
```
JMBpay is a Malaysian strata (JMB/MC) owner billing app.

Screenshots use fictional Demo Residences (JMBpay branding) plus the multi-property picker — not a single white-label JMB.

Login loads residences from our live API (database). New JMBs appear without an App Store update.

Demo login for App Review:
1. Open the app → "Find your residence"
2. Select CQ Management (or search "CQ")
3. Unit: demo
4. Password: demo

Alternate: Metro Pudu / metromall — same unit/password demo.

Web one-tap demo: https://jmbpay.my/try/go/owner
PWA: https://jmbpay.my/resident/

Admin console is web-only (not in this iOS binary):
https://jmbpay.my/try/go/admin — demo@jmbpay.my / demo

No in-app purchases. Production payments use Billplz; demo uses sandbox.
Support: https://jmbpay.my · WhatsApp +60129608400
```

---

## G. Build (how to get the IPA)

On a Mac with Xcode + Flutter + Apple ID signed into Xcode (Team `54XG7XQWXJ`):

```bash
open apps/ios-resident/CQOwner.xcodeproj
# Product → Archive → Distribute App
```

**IPA:** Xcode Organizer archive from `apps/ios-resident`

Upload that IPA with **Apple Transporter** or **Xcode → Window → Organizer → Distribute App**.  
Wait for processing in App Store Connect → Version 1.0 → **Build** → select the new build.

Bundle ID must match `com.jmbpay.resident`.

**Not the Codeberg zip:** `jmbpay-my.zip` on Codeberg is for **website Auto-update**, not for ASC. The App Store build file is the **IPA** from `apps/ios-resident`.

### Missing Compliance (after upload)

If the build shows **Missing Compliance**:

1. App Store Connect → **My Apps → JMBpay → TestFlight** (or the version’s Build row)
2. Click the build → **Manage** / blue **Missing Compliance** link
3. **Does your app use encryption?** → Yes (HTTPS)
4. **Does your app qualify for any exemptions?** → **Yes**
5. Select the exemption for **HTTPS / standard encryption only** (or “app only uses encryption that is exempt”)
6. Save — status becomes Ready to Submit

Future IPAs include `ITSAppUsesNonExemptEncryption=false` in `Info.plist`, so ASC should skip this prompt.

### Missing purpose string in Info.plist (90683)

Apple rejects the IPA if camera / photo library / location APIs are linked without usage descriptions. Ensure `apps/ios-resident/CQOwner/Info.plist` includes:

- `NSCameraUsageDescription` — MyKad / SPA photos
- `NSPhotoLibraryUsageDescription` — gallery uploads
- `NSLocationWhenInUseUsageDescription` — required by linked SDKs / photo metadata (not used for tracking)

Rebuild the IPA after pulling this change; do not re-upload an older build.

---

## H. Submit checklist

- [ ] Agreements / Tax / Banking done  
- [ ] Privacy Policy URL `https://jmbpay.my/privacy`  
- [ ] About / transparency `https://jmbpay.my/about`  
- [ ] App Privacy questionnaire saved  
- [ ] Age Rating done  
- [ ] 1024×1024 icon uploaded (`AppIcon-1024.png`)  
- [ ] ≥2 screenshots on Dynamic Island medium (1179×2556)  

- [ ] Description + keywords + support URL  
- [ ] Copyright `2026 JMBpay`  
- [ ] Review contact + demo login (CQ Management → demo / demo)  
- [ ] Build selected (IPA from `apps/ios-resident` Archive)  
- [ ] **Add for Review** → **Submit to App Review**  

---

## Assets folder

| File | Use |
|------|-----|
| `AppIcon-1024.png` | App icon |
| `plain-01-home-1179x2556.png` … | Required medium-slot screenshots |
| `plain-00-picker-1179x2556.png` | Multi-property picker (after login) |
| `Header-3840x1646.png` | Optional product-page header |

Generated pack also under `/opt/cursor/artifacts/app-store-assets/`.
