Ramble-FE / app.config.js
app.config.js
Raw
import 'dotenv/config';

const requiredEnvVars = [
  'PROJECT_ID',
  'CLIENT_URL',
  'CLIENT_DOMAIN',
  'API_BASE_URL',
  'GOOGLE_CLIENT_ID_IOS',
  'GOOGLE_CLIENT_ID_ANDROID',
  'GOOGLE_CLIENT_ID_WEB',
  'APPLE_CLIENT_ID_IOS',
  'APPLE_CLIENT_ID_ANDROID',
  'APPLE_CLIENT_ID_WEB'
];

const missingRequired = requiredEnvVars.filter(envVar => !process.env[envVar]);

if (missingRequired.length > 0) {
  console.error(`Warning: Missing required environment variables: ${missingRequired.join(', ')}`);
  process.exit(1);
}

export default {
  expo: {
    name: "Ramble",
    slug: "Ramble",
    version: "1.0.0",
    orientation: "default",
    icon: "./assets/images/icon.png",
    scheme: "com.flyby.ramble",
    userInterfaceStyle: "automatic",
    newArchEnabled: true,
    ios: {
      supportsTablet: true,
      bundleIdentifier: "com.flyby.ramble",
      infoPlist: {
        ITSAppUsesNonExemptEncryption: false,
        NSCameraUsageDescription: "화상 통화를 위해 카메라 접근 권한이 필요합니다.",
        NSMicrophoneUsageDescription: "음성/화상 통화를 위해 마이크 접근 권한이 필요합니다.",
      }
    },
    android: {
      adaptiveIcon: {
        foregroundImage: "./assets/images/adaptive-icon.png",
        backgroundColor: "#ffffff"
      },
      edgeToEdgeEnabled: true,
      package: "com.flyby.ramble",
    },
    web: {
      bundler: "metro",
      output: "static",
      favicon: "./assets/images/favicon.png"
    },
    plugins: [
      [
        "expo-router",
        {
          "origin": process.env.CLIENT_URL
        }
      ],
      [
        "expo-splash-screen",
        {
          image: "./assets/images/splash-icon.png",
          imageWidth: 200,
          resizeMode: "contain",
          backgroundColor: "#ffffff"
        }
      ],
      [
        "react-native-edge-to-edge",
        {
          android: {
            parentTheme: "Default",
            enforceNavigationBarContrast: false
          }
        }
      ],
      "expo-secure-store",
      "@config-plugins/react-native-webrtc",
    ],
    experiments: {
      typedRoutes: true
    },
    extra: {
      router: {},
      eas: {
        projectId: process.env.PROJECT_ID
      },
      apiBaseUrl: process.env.API_BASE_URL,
      clientUrl: process.env.CLIENT_URL,
      clientDomain: process.env.CLIENT_DOMAIN,
      googleClientIdIos: process.env.GOOGLE_CLIENT_ID_IOS,
      googleClientIdAndroid: process.env.GOOGLE_CLIENT_ID_ANDROID,
      googleClientIdWeb: process.env.GOOGLE_CLIENT_ID_WEB,
      appleClientIdIos: process.env.APPLE_CLIENT_ID_IOS,
      appleClientIdAndroid: process.env.APPLE_CLIENT_ID_ANDROID,
      appleClientIdWeb: process.env.APPLE_CLIENT_ID_WEB,
    }
  }
};