VeriX iOS Build & Apple Developer Integration
This document outlines the step-by-step procedure for configuring, building, and deploying the VeriX iOS mobile application using Expo (EAS Build), Apple Developer Account, and TestFlight, following SOC 2 Least Privilege Access security principles.
📌 Executive & Technical Overview
- App Name: VeriX
- Bundle Identifier:
com.nexus33.verix - Build System: Expo Application Services (EAS Build & Submit)
- Target OS: iOS 14.0+
- Distribution Target: TestFlight (Internal & External Beta Testing)
- Security & Compliance: SOC 2 Type II compliant (Developer permissions strictly scoped; Account Holder handles Identifier registration).
🛠️ Section 1: eas.json Profile Configuration
The eas.json file is configured so that test builds target physical iOS devices via TestFlight using Apple Store distribution ("distribution": "store" and "simulator": false), while preserving Android APK generation.
{
"expo": {
"name": "VeriX",
"slug": "nexus33-app-verix",
"version": "1.0.9",
"orientation": "portrait",
"icon": "./assets/images/icon-ios.png",
"userInterfaceStyle": "dark",
"scheme": "verix",
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.nexus33.verix",
"buildNumber": "1",
"infoPlist": {
"ITSAppUsesNonExemptEncryption": false
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/android-icon-foreground.png",
"backgroundImage": "./assets/android-icon-background.png",
"monochromeImage": "./assets/android-icon-monochrome.png"
},
"package": "com.nexus33.verix",
"versionCode": 1,
"predictiveBackGestureEnabled": false
},
"web": {
"favicon": "./assets/images/verix_logo.png",
"bundler": "metro"
},
"plugins": [
"expo-router",
"expo-font",
"expo-secure-store",
"expo-status-bar",
"expo-sharing",
[
"expo-splash-screen",
{
"image": "./assets/images/verix_logo.png",
"resizeMode": "contain",
"backgroundColor": "#0D1B2A"
}
],
"expo-asset",
"@react-native-community/datetimepicker",
"expo-web-browser",
"expo-mail-composer",
[
"expo-local-authentication",
{
"faceIDPermission": "Allow VeriX to use Face ID for quick, secure sign-in."
}
],
[
"expo-image-picker",
{
"photosPermission": "VeriX needs access to your photo library to attach images to support requests and evaluation records.",
"cameraPermission": "VeriX needs access to your camera to take photos to attach to support requests and evaluation records.",
"microphonePermission": false
}
]
],
"experiments": {
"typedRoutes": true
},
"extra": {
"router": {},
"eas": {
"projectId": "b8155c89-b50f-40fd-b73b-18d9a9a59e6e"
},
"iosAppStoreId": ""
},
"owner": "devnexus33s-team"
}
}
🔐 Section 2: Apple Developer Portal Setup (SOC 2 Compliant)
To comply with SOC 2 Least Privilege Access Control, software developers are assigned restricted roles (Developer / Member) without requiring full Admin privileges on the Apple Developer Account.
Step 1: Pre-Registering the App ID (Account Holder / Admin Only)
The Account Holder (or designated Admin) performs a one-time registration of the App Bundle Identifier:
- Log into Apple Developer Portal.
- Navigate to Certificates, Identifiers & Profiles ➔ Identifiers.
- Click the
+(Add) button next to Identifiers. - Select App IDs ➔ Click Continue.
- Select Type: App ➔ Click Continue.
- Enter details:
- Description:
VeriX App - Bundle ID: Select Explicit and enter
com.nexus33.verix
- Description:
- Leave Capabilities as default (none required to be checked).
- Click Continue ➔ Click Register.
[!NOTE] Pre-registering the App ID allows developers with standard Developer roles to trigger EAS Builds without incurring HTTP 403 Forbidden permission errors.
🚀 Section 3: Initial Credentials & EAS Linking (One-Time Execution)
The first time an iOS build is triggered for com.nexus33.verix, EAS CLI requires an interactive login to validate and generate the iOS Distribution Certificate on Expo's secure servers.
Interactive Build Command:
npx eas-cli build -p ios --profile test
Interactive Console Flow:
- Select Team: Choose
Nexus 33 Group LLC (Z66MZ82MC2). - Apple ID Authentication: Enter the Apple ID email.
- Password / 2FA: Enter password and 6-digit Apple Two-Factor Verification Code.
- Credential Setup Prompt: Confirm
Yeswhen prompted "Do you want EAS to manage iOS credentials?".
EAS will detect the existing com.nexus33.verix App ID, generate the iOS Distribution Certificate, and store credentials securely on Expo Cloud.
⚙️ Section 4: Automated Build Execution (build.ps1)
Once initial credentials are created, subsequent iOS test builds can be executed automatically using the repository wrapper script:
.\scripts\build.ps1 -Env test -Platform ios
Automated Script Steps:
- Increments
app.jsonpatch version (1.0.X). - Reads current Git commit hash and timestamp.
- Initiates
eas build -p ios --profile test --non-interactive --json --wait. - Compiles the
.ipapackage on Expo Cloud servers. - Downloads the
.ipaartifact locally to the project root.
📲 Section 5: TestFlight Upload & Beta Testing
Once the .ipa build is completed (status: FINISHED), submit the build to TestFlight:
npx eas-cli submit -p ios --profile test
Post-Submission Steps:
- Log into App Store Connect.
- Go to Apps ➔ VeriX ➔ TestFlight tab.
- Once Apple finishes binary processing (~5-10 minutes), add Internal/External Testers.
- Testers receive an email / push notification to install VeriX directly on their iPhones via the TestFlight app.
🛡️ Troubleshooting & Security Guidelines
| Issue / Error | Root Cause | Resolution |
|---|---|---|
iOS simulator build (.tar.gz) generated instead of .ipa |
"simulator": true in eas.json |
Set "ios": { "simulator": false } under the target profile. |
Apple 403 Access Forbidden |
Developer account lacks Admin rights to create App ID | Follow Section 2 (Have Account Holder register com.nexus33.verix once). |
Distribution Certificate not validated for non-interactive builds |
Running --non-interactive before credentials exist |
Run npx eas-cli build -p ios --profile test interactively once (Section 3). |
Documentation prepared for Nexus 33 Group LLC — VeriX Development Team.
No comments to display
No comments to display