Skip to content

EAS/TestFlight setup and LinkedIn mobile deep-link#129

Merged
rxmox merged 6 commits into
mainfrom
eas-testflight-setup
May 1, 2026
Merged

EAS/TestFlight setup and LinkedIn mobile deep-link#129
rxmox merged 6 commits into
mainfrom
eas-testflight-setup

Conversation

@rxmox

@rxmox rxmox commented May 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Configure EAS build (eas.json, app icons, iOS bundle identifier, EAS projectId)
  • Disable unused microphone permission on expo-camera (QR-only) and remove Android RECORD_AUDIO
  • Set display name to "Shatter" and rename Pusher client env vars to EXPO_PUBLIC_* so they ship in production builds
  • Add mobile deep-link support to LinkedIn OAuth: backend encodes a platform claim in the signed state JWT and redirects mobile clients to shattermobile://auth/...; mobile uses WebBrowser.openAuthSessionAsync and a shared loginWithLinkedIn helper used by both LoginForm and SignupForm

Test plan

  • Verify EAS build succeeds for iOS (eas build --platform ios)
  • Install via TestFlight and confirm app launches with display name "Shatter"
  • Sign in with LinkedIn from the mobile app: in-app browser opens LinkedIn, closes on completion, app lands on JoinEventPage authenticated
  • Web LinkedIn login regression: existing flow still redirects to ${FRONTEND_URL}/auth/callback?code=...
  • Pusher real-time updates work in the production build (participant joins, event status changes)

rxmox added 6 commits April 30, 2026 17:52
- Add eas.json with development, preview, and production build profiles
- Add iOS bundleIdentifier and ITSAppUsesNonExemptEncryption to app.json
- Add EAS projectId to app.json extra config
- Add referenced app icon/splash assets
Without the EXPO_PUBLIC_ prefix, Expo's bundler strips these vars from
production builds, leaving them undefined and breaking Pusher connections
in EAS/TestFlight builds.
- Change app display name from 'shatter-mobile' to 'Shatter'
- Disable expo-camera microphone/audio permissions; only QR scanning
  is used, so requesting mic access risks App Store rejection
Camera is only used for QR scanning; audio recording is not needed.
Backend: encode 'platform' (mobile|web) into the signed state JWT in
linkedinAuth and linkedinLink. In linkedinCallback, verify state first
and resolve the redirect target from the platform claim — mobile gets
shattermobile://auth, web keeps the existing FRONTEND_URL flow. All
success/error redirects in the callback use the resolved target so the
mobile app receives the auth code (or error) via deep link.

Mobile: switch LinkedIn login from openBrowserAsync to
openAuthSessionAsync so the in-app browser closes on the deep-link
return and the redirect URL is captured in JS. Extract a shared
loginWithLinkedIn helper that handles the full flow (open browser,
parse code, exchange, fetch user) and call it from both LoginForm and
SignupForm with proper loading/error state.
@rxmox
rxmox merged commit 6ffb43f into main May 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant