Skip to main content

Overview

Open Mushaf Native supports iOS deployment through Expo. This guide covers the build process, requirements, and configuration for iOS.

Prerequisites

1

macOS Required

iOS builds require macOS for development. Cloud builds via EAS can be done from any platform.
2

Install Xcode

Download and install Xcode from the Mac App Store (required for local builds).
3

Install EAS CLI

npm install -g eas-cli
4

Login to Expo

eas login

iOS Configuration

The iOS configuration is defined in app.json:
{
  "expo": {
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.adelpro.openmushafnative",
      "requireFullScreen": true
    }
  }
}

Key Settings

  • Bundle Identifier: com.adelpro.openmushafnative
  • Tablet Support: Enabled for iPad devices
  • Full Screen: Required for immersive Quran reading experience

Development Builds

For local development and testing on iOS devices or simulators:
yarn ios
# or
expo run:ios
These commands require macOS with Xcode installed and a configured iOS simulator or connected device.

Cloud Builds with EAS

While the current eas.json doesn’t include iOS-specific profiles, you can build for iOS using EAS:
eas build -p ios --profile preview

App Store Submission

To submit your iOS build to the App Store:
1

Build for Production

eas build -p ios --profile production
2

Submit to App Store

eas submit -p ios --latest
3

Configure in App Store Connect

Complete your app listing in App Store Connect with screenshots, descriptions, and metadata.
The app is configured with a custom URL scheme for deep linking:
{
  "expo": {
    "scheme": "myapp"
  }
}
To configure universal links for iOS, you’ll need to:
  1. Set up an associated domains entitlement
  2. Host an apple-app-site-association file at your domain
  3. Add the domains to your app configuration

Build Optimizations

The app uses React Native’s new architecture for improved performance:
{
  "expo": {
    "newArchEnabled": true,
    "experiments": {
      "typedRoutes": true,
      "reactCompiler": true
    }
  }
}

New Architecture Benefits

  • Improved Performance: Faster rendering and reduced memory usage
  • Concurrent Rendering: Better UI responsiveness
  • Typed Routes: Type-safe navigation with Expo Router
  • React Compiler: Automatic optimization of React components
The React Compiler is experimental but provides significant performance improvements.

Splash Screen Configuration

The app includes custom splash screens optimized for iOS devices:
{
  "expo": {
    "plugins": [
      [
        "expo-splash-screen",
        {
          "backgroundColor": "#f8f8f0",
          "image": "./assets/images/icon-large.png",
          "dark": {
            "image": "./assets/images/icon-large.png",
            "backgroundColor": "#eeeee6"
          },
          "imageWidth": 200
        }
      ]
    ]
  }
}

Fonts and Assets

The app uses custom fonts that are automatically bundled for iOS:
  • Amiri: Traditional Arabic font for Quranic text
  • Tajawal: Modern Arabic font for UI elements
Fonts are loaded using expo-font and configured in the plugins section.

Troubleshooting

Simulator Issues

If the simulator doesn’t launch:
# Reset the simulator
xcrun simctl erase all

# Rebuild the app
yarn prebuild
yarn ios

Certificate Issues

Manage your iOS certificates and provisioning profiles:
eas credentials

Build Failures

Clear the EAS build cache:
eas build:clear-cache -p ios

CocoaPods Issues

If you encounter CocoaPods errors:
cd ios
pod install --repo-update
cd ..

Testing on Physical Devices

To test on a physical iOS device:
1

Connect Device

Connect your iOS device to your Mac via USB.
2

Trust Computer

On your device, tap “Trust” when prompted to trust the computer.
3

Run Build

yarn ios
Xcode will automatically select your connected device.
You’ll need an Apple Developer account to run builds on physical devices.

Build docs developers (and LLMs) love