80 lines
2.9 KiB
TypeScript
80 lines
2.9 KiB
TypeScript
import type { ExpoConfig, ConfigContext } from "expo/config";
|
|
|
|
/**
|
|
* Dynamic Expo config — replaces app.json so we can read APP_ENV at runtime
|
|
* and switch bundleIdentifier / display name for dev / staging / production.
|
|
*
|
|
* APP_ENV is set by package.json scripts:
|
|
* - dev → APP_ENV unset (treated as "development")
|
|
* - dev:staging → APP_ENV=staging
|
|
* - dev:prod → APP_ENV=production (rare; usually only for EAS build)
|
|
*/
|
|
export default ({ config }: ConfigContext): ExpoConfig => {
|
|
const env = process.env.APP_ENV ?? "development";
|
|
const isProd = env === "production";
|
|
const isStaging = env === "staging";
|
|
|
|
return {
|
|
...config,
|
|
name: isProd
|
|
? "Multica"
|
|
: isStaging
|
|
? "Multica (Staging)"
|
|
: "Multica (Dev)",
|
|
slug: "multica-mobile",
|
|
version: "0.1.0",
|
|
orientation: "portrait",
|
|
userInterfaceStyle: "automatic",
|
|
scheme: "multica",
|
|
// 1024x1024 source shared with the desktop client
|
|
// (apps/desktop/build/icon.png). Expo prebuild generates every required
|
|
// iOS icon size from this single PNG.
|
|
icon: "./assets/icon.png",
|
|
ios: {
|
|
supportsTablet: false,
|
|
// Per-variant bundle id overrides exist for one reason: an Apple ID
|
|
// can only sign bundle prefixes it owns, so contributors not on the
|
|
// Multica Apple Developer team (and external users self-building a
|
|
// personal copy against production) need to swap to a reverse-domain
|
|
// they control. Each variant has its own `_<VARIANT>` suffix and is
|
|
// only read inside that variant's branch — a generic
|
|
// `EXPO_BUNDLE_IDENTIFIER` would leak across variants (Expo CLI
|
|
// auto-loads `.env.<mode>.local` regardless of APP_ENV) and collapse
|
|
// dev / staging / prod onto a single id.
|
|
bundleIdentifier: isProd
|
|
? (process.env.EXPO_BUNDLE_IDENTIFIER_PROD ?? "ai.multica.mobile")
|
|
: isStaging
|
|
? "ai.multica.mobile.staging"
|
|
: (process.env.EXPO_BUNDLE_IDENTIFIER_DEV ?? "ai.multica.mobile.dev"),
|
|
},
|
|
plugins: [
|
|
"expo-router",
|
|
"expo-secure-store",
|
|
"@react-native-community/datetimepicker",
|
|
"react-native-enriched-markdown",
|
|
[
|
|
"expo-image-picker",
|
|
{
|
|
// iOS NSPhotoLibraryUsageDescription. Without this string in
|
|
// Info.plist, calling launchImageLibraryAsync hard-crashes on
|
|
// iOS 14+. Camera + microphone are disabled — we only ever read
|
|
// from the existing photo library.
|
|
photosPermission:
|
|
"Allow Multica to access your photos to attach images to issues and comments.",
|
|
cameraPermission: false,
|
|
microphonePermission: false,
|
|
},
|
|
],
|
|
[
|
|
"expo-build-properties",
|
|
{
|
|
ios: {
|
|
buildReactNativeFromSource: true,
|
|
},
|
|
},
|
|
],
|
|
],
|
|
extra: { APP_ENV: env },
|
|
};
|
|
};
|