Estructura cuentas de Expo, proyectos de EAS y acceso basado en roles para que los equipos puedan lanzar múltiples aplicaciones bajo una organización - con propiedad clara, aislamiento de credenciales y permisos de menor privilegio.
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
# Inicia sesión y vincula una nueva aplicación a un proyecto de organizacióneas logineas init
// app.json - dirige la aplicación a una organización e identifica el proyecto de EAS{ "expo": { "name": "Retail App", "slug": "retail-app", "owner": "acme-mobile", "extra": { "eas": { "projectId": "bd2f7e21-1ee7-47f2-8357-d7c4b50622fb" } } }}
# Verifica qué cuenta es propietaria del proyecto vinculadoeas project:info
Cuándo usar esto:
Tu equipo tiene más de un desarrollador tocando compilaciones, credenciales o variables de entorno.
Lanzas múltiples aplicaciones (por cliente, marca o plataforma) y necesitas credenciales aisladas con facturación compartida.
Necesitas capacidad de auditoría - quién puede enviar a la tienda, rotar secretos o invitar miembros.
Te estás mudando de una cuenta personal a una organización sin romper aplicaciones en producción.
# CI: usa un token de robot con alcance mínimo - no una contraseña personal# Panel de Expo → Configuración de cuenta → Access Tokens → Crear tokenexport EXPO_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxx"eas build --profile production --platform ios --non-interactive
Lo que demuestra esto:
owner dirige la aplicación a una organización - compilaciones, credenciales y variables de entorno se limitan a acme-mobile.
projectId es la clave duradera que los servicios de EAS usan en cambios de slug o bundle ID.
Los perfiles de compilación se asignan a entornos sin duplicar almacenes de credenciales por desarrollador.
Los tokens de robot para CI preservan el principio de menor privilegio - sin contraseñas personales compartidas.
Compartir credenciales manualmente (no recomendado)
Organization
Equipos, agencias, empresas multi-app
RBAC, credenciales compartidas, registros de auditoría
Cada registro en expo.dev crea una cuenta Personal. Crea una Organización cuando más de una persona necesita acceso a compilaciones, envío o credenciales.
eas init → crea/vincula proyecto bajo cuenta activa
→ escribe extra.eas.projectId en config de aplicación
→ EAS Build / Update / variables de entorno se basan en projectId
slug es legible por humanos y se usa en URLs - puede cambiar.
projectId es un UUID - estable durante la vida útil del proyecto.
owner determina qué almacén de credenciales y facturación de la cuenta se aplica.
Asigna Developer para ingenieros que lanzan a diario. Reserva Owner para líderes y contactos de facturación. Usa Viewer para stakeholders que solo necesitan abrir compilaciones de vista previa en Expo Go.
// Leyendo metadatos de proyecto vinculado en tiempo de ejecución (solo diagnósticos - no para auth)import Constants from "expo-constants";const projectId = Constants.expoConfig?.extra?.eas?.projectId;const owner = Constants.expoConfig?.owner; // disponible en config estáticaexport function DiagnosticsBanner() { if (!__DEV__) return null; return ( <Text> EAS {projectId ?? "unlinked"} · owner: {owner ?? "personal"} </Text> );}
Nunca uses projectId u owner para autorización en la aplicación - son identificadores de tiempo de compilación, no límites de seguridad.
Compartir contraseña de cuenta personal - Sin rastro de auditoría, sin revocación por persona, viola los ToS de Expo. Solución: Crea una Organización e invita miembros con roles apropiados.
Omitir owner en proyectos de org - eas build puede dirigirse a tu cuenta personal en lugar del equipo. Solución: Establece "owner": "org-slug" en app.json antes de eas init o transfiere el proyecto.
Codificar credenciales por máquina desarrollador - Las claves de Apple/Google almacenadas localmente rompen CI e incorporación. Solución: Deja que EAS hospede credenciales bajo el proyecto de org; usa eas credentials para rotación.
Otorgar Owner a cada ingeniero - Un clic equivocado puede eliminar credenciales de producción. Solución: Por defecto Developer; mantén dos Owners para cobertura de factor de autobús.
Reutilizar un proyecto de EAS para aplicaciones no relacionadas - Credenciales, variables de entorno y canales de actualización colisionan. Solución: Un projectId por app binary (bundle ID / package).
Transferir sin Admin en ambos lados - Los movimientos de proyectos requieren Owner o Admin en origen y destino. Solución: Usa una organización en depósito para transferencias de terceros.
Tokens de CI en cuentas personales - El token hereda el alcance del proyecto personal; se va cuando el empleado se va. Solución: Crea un token de robot bajo la organización.
¿Cuándo debería crear una Organización en lugar de usar mi cuenta personal?
Cuando alguien además de ti necesita ejecutar compilaciones, gestionar credenciales, configurar variables de entorno o enviar a tiendas de aplicaciones. Las organizaciones proporcionan RBAC, almacenes de credenciales compartidas y gestión de miembros.
¿Cuáles son los cuatro roles de organización?
Owner - control total incluyendo eliminación
Admin - configuración, facturación, invitaciones (no puede otorgar Owner)
Viewer - solo lectura vía Expo Go, sin modificaciones
¿Qué hace el campo owner en app.json?
Establece qué cuenta de Expo (nombre de usuario personal o slug de organización) es propietaria del proyecto. Las compilaciones, credenciales y URLs del panel se resuelven bajo esa cuenta. Requerido cuando el proyecto pertenece a una organización de la que eres miembro.
¿Qué es extra.eas.projectId?
Un UUID estable escrito por eas init que vincula tu repositorio a un proyecto de EAS. EAS Build, Update, variables de entorno y credenciales se limitan a este ID - no a slug o identificador de bundle.
¿Cómo vinculo un repositorio existente a EAS?
eas logineas init
Sigue las indicaciones para crear un nuevo proyecto o vincular uno existente. El comando escribe projectId en tu config de aplicación.
Error común: ¿Por qué mi compilación se ejecutó en mi cuenta personal en lugar de la org del equipo?
La cuenta eas whoami activa u un campo owner faltante se establece por defecto en alcance personal. Establece "owner": "your-org-slug" en config de aplicación y confirma que eas project:info muestre la organización.
¿Puedo convertir una cuenta personal en una organización?
Sí - Configuración de usuario → "Convertir tu cuenta en una organización." Los proyectos, credenciales, suscripciones de EAS y webhooks se transfieren. Planifica una ventana de mantenimiento y confirma que las integraciones usando tu token de acceso aún funcionen.
¿Cómo funcionan las transferencias de proyectos?
Configuración de proyecto → General → Transferir proyecto. Debes ser Owner o Admin en ambas cuentas de origen y destino. Para transferencias a un tercero sin acceso compartido, usa una organización en depósito.
¿Quién puede invitar nuevos miembros?
Owners y Admins. Los Admins pueden asignar cualquier rol excepto Owner. Los Owners pueden asignar cualquier rol incluyendo Owner.
¿Cuál es la diferencia entre variables de entorno a nivel de proyecto y a nivel de cuenta?
A nivel de proyecto: Limitadas a un proyecto de EAS (una aplicación).
A nivel de cuenta: Disponibles para todos los proyectos en la organización. Configura bajo Configuración de cuenta → Variables de entorno.
¿Cómo debería autenticarse CI a EAS?
Crea un token de acceso (usuario de robot para organizaciones). Establece EXPO_TOKEN en secretos de CI. Usa --non-interactive en eas build y eas submit. No almacenes contraseñas personales en CI.
¿Pueden múltiples aplicaciones compartir un proyecto de EAS?
Técnicamente sí, pero no se recomienda. Credenciales, canales de actualización y variables de entorno colisionan. Usa un proyecto de EAS por aplicación distinta (bundle ID / package único).
¿Qué permisos necesita un Developer para el trabajo diario?
El rol Developer cubre eas build, eas update, eas credentials y lecturas de variables de entorno (por visibilidad). Los Developers no pueden gestionar facturación, invitar miembros o cambiar configuración de org.
¿Cómo estructuro una agencia con muchos clientes?
Crea una Organización separada por cliente (client-a-mobile, client-b-mobile). Cada org mantiene sus propios proyectos, credenciales y facturación. Los desarrolladores reciben invitaciones solo a las orgs que sirven.
¿Dónde audito cambios de seguridad de cuenta?
Descripción general de cuenta → Configuración de usuario → Actividad de seguridad. Muestra cambios de contraseña, correo electrónico y 2FA. Los Owners de Organización deben forzar 2FA para todos los miembros en cuentas de producción.