Giter Club home page Giter Club logo

eas-cli's Introduction

eas-cli

EAS command line tool

oclif Version Downloads/week License

Installation

npm install -g eas-cli
# or
yarn global add eas-cli

Enforcing eas-cli version for your project

If you want to enforce the eas-cli version for your project, use the "cli.version" field in eas.json. Installing eas-cli to your project dependencies is strongly discouraged because it may cause dependency conflicts that are difficult to debug.

An example of eas.json that enforces eas-cli in version 1.0.0 or newer:

{
  "cli": {
    "version": ">=1.0.0"
  },
  "build": {
    // build profiles
  },
  "submit": {
    // submit profiles
  }
}

Learn more: https://docs.expo.dev/build-reference/eas-json/

Usage

eas COMMAND
# runs the command
eas (-v|--version|version)
# prints the version
eas --help COMMAND
# outputs help for specific command

Commands

eas account:login

log in with your Expo account

USAGE
  $ eas account:login

DESCRIPTION
  log in with your Expo account

ALIASES
  $ eas login

See code: packages/eas-cli/src/commands/account/login.ts

eas account:logout

log out

USAGE
  $ eas account:logout

DESCRIPTION
  log out

ALIASES
  $ eas logout

See code: packages/eas-cli/src/commands/account/logout.ts

eas account:view

show the username you are logged in as

USAGE
  $ eas account:view

DESCRIPTION
  show the username you are logged in as

ALIASES
  $ eas whoami

See code: packages/eas-cli/src/commands/account/view.ts

eas analytics [STATUS]

display or change analytics settings

USAGE
  $ eas analytics [STATUS]

DESCRIPTION
  display or change analytics settings

See code: packages/eas-cli/src/commands/analytics.ts

eas autocomplete [SHELL]

display autocomplete installation instructions

USAGE
  $ eas autocomplete [SHELL] [-r]

ARGUMENTS
  SHELL  (zsh|bash|powershell) Shell type

FLAGS
  -r, --refresh-cache  Refresh cache (ignores displaying instructions)

DESCRIPTION
  display autocomplete installation instructions

EXAMPLES
  $ eas autocomplete

  $ eas autocomplete bash

  $ eas autocomplete zsh

  $ eas autocomplete powershell

  $ eas autocomplete --refresh-cache

See code: @oclif/plugin-autocomplete

eas branch:create [NAME]

create a branch

USAGE
  $ eas branch:create [NAME] [--json --non-interactive]

ARGUMENTS
  NAME  Name of the branch to create

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  create a branch

See code: packages/eas-cli/src/commands/branch/create.ts

eas branch:delete [NAME]

delete a branch

USAGE
  $ eas branch:delete [NAME] [--json --non-interactive]

ARGUMENTS
  NAME  Name of the branch to delete

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  delete a branch

See code: packages/eas-cli/src/commands/branch/delete.ts

eas branch:list

list all branches

USAGE
  $ eas branch:list [--offset <value>] [--limit <value>] [--json --non-interactive]

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>    The number of items to fetch each query. Defaults to 50 and is capped at 100.
  --non-interactive  Run the command in non-interactive mode.
  --offset=<value>   Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  list all branches

See code: packages/eas-cli/src/commands/branch/list.ts

eas branch:rename

rename a branch

USAGE
  $ eas branch:rename [--from <value>] [--to <value>] [--json --non-interactive]

FLAGS
  --from=<value>     current name of the branch.
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.
  --to=<value>       new name of the branch.

DESCRIPTION
  rename a branch

See code: packages/eas-cli/src/commands/branch/rename.ts

eas branch:view [NAME]

view a branch

USAGE
  $ eas branch:view [NAME] [--offset <value>] [--limit <value>] [--json --non-interactive]

ARGUMENTS
  NAME  Name of the branch to view

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>    The number of items to fetch each query. Defaults to 25 and is capped at 50.
  --non-interactive  Run the command in non-interactive mode.
  --offset=<value>   Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  view a branch

See code: packages/eas-cli/src/commands/branch/view.ts

eas build

start a build

USAGE
  $ eas build [-p android|ios|all] [-e <value>] [--local] [--output <value>] [--wait] [--clear-cache]
    [--auto-submit | --auto-submit-with-profile <value>] [-m <value>] [--build-logger-level
    trace|debug|info|warn|error|fatal] [--json --non-interactive]

FLAGS
  -e, --profile=PROFILE_NAME                                Name of the build profile from eas.json. Defaults to
                                                            "production" if defined in eas.json.
  -m, --message=<value>                                     A short message describing the build
  -p, --platform=(android|ios|all)
  --auto-submit                                             Submit on build complete using the submit profile with the
                                                            same name as the build profile
  --auto-submit-with-profile=PROFILE_NAME                   Submit on build complete using the submit profile with
                                                            provided name
  --build-logger-level=(trace|debug|info|warn|error|fatal)  The level of logs to output during the build process.
                                                            Defaults to "info".
  --clear-cache                                             Clear cache before the build
  --json                                                    Enable JSON output, non-JSON messages will be printed to
                                                            stderr.
  --local                                                   Run build locally [experimental]
  --non-interactive                                         Run the command in non-interactive mode.
  --output=<value>                                          Output path for local build
  --[no-]wait                                               Wait for build(s) to complete

DESCRIPTION
  start a build

See code: packages/eas-cli/src/commands/build/index.ts

eas build:cancel [BUILD_ID]

cancel a build

USAGE
  $ eas build:cancel [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e <value>]

FLAGS
  -e, --profile=PROFILE_NAME        Filter builds by build profile if build ID is not provided
  -p, --platform=(android|ios|all)  Filter builds by the platform if build ID is not provided
  --non-interactive                 Run the command in non-interactive mode.

DESCRIPTION
  cancel a build

See code: packages/eas-cli/src/commands/build/cancel.ts

eas build:configure

configure the project to support EAS Build

USAGE
  $ eas build:configure [-p android|ios|all]

FLAGS
  -p, --platform=(android|ios|all)  Platform to configure

DESCRIPTION
  configure the project to support EAS Build

See code: packages/eas-cli/src/commands/build/configure.ts

eas build:delete [BUILD_ID]

delete a build

USAGE
  $ eas build:delete [BUILD_ID] [--non-interactive] [-p android|ios|all] [-e <value>]

FLAGS
  -e, --profile=PROFILE_NAME        Filter builds by build profile if build ID is not provided
  -p, --platform=(android|ios|all)  Filter builds by the platform if build ID is not provided
  --non-interactive                 Run the command in non-interactive mode.

DESCRIPTION
  delete a build

See code: packages/eas-cli/src/commands/build/delete.ts

eas build:inspect

inspect the state of the project at specific build stages, useful for troubleshooting

USAGE
  $ eas build:inspect -p android|ios -s archive|pre-build|post-build -o <value> [-e <value>] [--force] [-v]

FLAGS
  -e, --profile=PROFILE_NAME
      Name of the build profile from eas.json. Defaults to "production" if defined in eas.json.

  -o, --output=OUTPUT_DIRECTORY
      (required) Output directory.

  -p, --platform=(android|ios)
      (required)

  -s, --stage=(archive|pre-build|post-build)
      (required) Stage of the build you want to inspect.
      archive - builds the project archive that would be uploaded to EAS when building
      pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.
      post-build - builds the native project and leaves the output directory for inspection

  -v, --verbose

  --force
      Delete OUTPUT_DIRECTORY if it already exists.

DESCRIPTION
  inspect the state of the project at specific build stages, useful for troubleshooting

See code: packages/eas-cli/src/commands/build/inspect.ts

eas build:list

list all builds for your project

USAGE
  $ eas build:list [--platform all|android|ios] [--status
    new|in-queue|in-progress|pending-cancel|errored|finished|canceled] [--distribution store|internal|simulator]
    [--channel <value>] [--appVersion <value>] [--appBuildVersion <value>] [--sdkVersion <value>] [--runtimeVersion
    <value>] [--appIdentifier <value>] [--buildProfile <value>] [--gitCommitHash <value>] [--offset <value>] [--limit
    <value>] [--json --non-interactive] [--simulator]

FLAGS
  --appBuildVersion=<value>
  --appIdentifier=<value>
  --appVersion=<value>
  --buildProfile=<value>
  --channel=<value>
  --distribution=(store|internal|simulator)
  --gitCommitHash=<value>
  --json                                                                        Enable JSON output, non-JSON messages
                                                                                will be printed to stderr.
  --limit=<value>                                                               The number of items to fetch each query.
                                                                                Defaults to 10 and is capped at 50.
  --non-interactive                                                             Run the command in non-interactive mode.
  --offset=<value>                                                              Start queries from specified index. Use
                                                                                for paginating results. Defaults to 0.
  --platform=(all|android|ios)
  --runtimeVersion=<value>
  --sdkVersion=<value>
  --simulator                                                                   Filter only iOS simulator builds. Can
                                                                                only be used with --platform flag set to
                                                                                "ios"
  --status=(new|in-queue|in-progress|pending-cancel|errored|finished|canceled)

DESCRIPTION
  list all builds for your project

See code: packages/eas-cli/src/commands/build/list.ts

eas build:resign

re-sign a build archive

USAGE
  $ eas build:resign [-p android|ios] [-e <value>] [--wait] [--id <value>] [--offset <value>] [--limit <value>]
    [--json --non-interactive]

FLAGS
  -e, --profile=PROFILE_NAME    Name of the build profile from eas.json. Defaults to "production" if defined in
                                eas.json.
  -p, --platform=(android|ios)
  --id=<value>                  ID of the build to re-sign.
  --json                        Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>               The number of items to fetch each query. Defaults to 50 and is capped at 100.
  --non-interactive             Run the command in non-interactive mode.
  --offset=<value>              Start queries from specified index. Use for paginating results. Defaults to 0.
  --[no-]wait                   Wait for build(s) to complete.

DESCRIPTION
  re-sign a build archive

See code: packages/eas-cli/src/commands/build/resign.ts

eas build:run

run simulator/emulator builds from eas-cli

USAGE
  $ eas build:run [--latest | --id <value> | --path <value> | --url <value>] [-p android|ios] [-e <value>]
    [--offset <value>] [--limit <value>]

FLAGS
  -e, --profile=PROFILE_NAME    Name of the build profile used to create the build to run. When specified, only builds
                                created with the specified build profile will be queried.
  -p, --platform=(android|ios)
  --id=<value>                  ID of the simulator/emulator build to run
  --latest                      Run the latest simulator/emulator build for specified platform
  --limit=<value>               The number of items to fetch each query. Defaults to 50 and is capped at 100.
  --offset=<value>              Start queries from specified index. Use for paginating results. Defaults to 0.
  --path=<value>                Path to the simulator/emulator build archive or app
  --url=<value>                 Simulator/Emulator build archive url

DESCRIPTION
  run simulator/emulator builds from eas-cli

See code: packages/eas-cli/src/commands/build/run.ts

eas build:submit

submit app binary to App Store and/or Play Store

USAGE
  $ eas build:submit [-p android|ios|all] [-e <value>] [--latest | --id <value> | --path <value> | --url <value>]
    [--verbose] [--wait] [--verbose-fastlane] [--non-interactive]

FLAGS
  -e, --profile=<value>             Name of the submit profile from eas.json. Defaults to "production" if defined in
                                    eas.json.
  -p, --platform=(android|ios|all)
  --id=<value>                      ID of the build to submit
  --latest                          Submit the latest build for specified platform
  --non-interactive                 Run command in non-interactive mode
  --path=<value>                    Path to the .apk/.aab/.ipa file
  --url=<value>                     App archive url
  --verbose                         Always print logs from EAS Submit
  --verbose-fastlane                Enable verbose logging for the submission process
  --[no-]wait                       Wait for submission to complete

DESCRIPTION
  submit app binary to App Store and/or Play Store

ALIASES
  $ eas build:submit

eas build:version:get

get the latest version from EAS servers

USAGE
  $ eas build:version:get [-p android|ios|all] [-e <value>] [--json --non-interactive]

FLAGS
  -e, --profile=PROFILE_NAME        Name of the build profile from eas.json. Defaults to "production" if defined in
                                    eas.json.
  -p, --platform=(android|ios|all)
  --json                            Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive                 Run the command in non-interactive mode.

DESCRIPTION
  get the latest version from EAS servers

See code: packages/eas-cli/src/commands/build/version/get.ts

eas build:version:set

update version of an app

USAGE
  $ eas build:version:set [-p android|ios] [-e <value>]

FLAGS
  -e, --profile=PROFILE_NAME    Name of the build profile from eas.json. Defaults to "production" if defined in
                                eas.json.
  -p, --platform=(android|ios)

DESCRIPTION
  update version of an app

See code: packages/eas-cli/src/commands/build/version/set.ts

eas build:version:sync

update a version in native code with a value stored on EAS servers

USAGE
  $ eas build:version:sync [-p android|ios|all] [-e <value>]

FLAGS
  -e, --profile=PROFILE_NAME        Name of the build profile from eas.json. Defaults to "production" if defined in
                                    eas.json.
  -p, --platform=(android|ios|all)

DESCRIPTION
  update a version in native code with a value stored on EAS servers

See code: packages/eas-cli/src/commands/build/version/sync.ts

eas build:view [BUILD_ID]

view a build for your project

USAGE
  $ eas build:view [BUILD_ID] [--json]

FLAGS
  --json  Enable JSON output, non-JSON messages will be printed to stderr.

DESCRIPTION
  view a build for your project

See code: packages/eas-cli/src/commands/build/view.ts

eas channel:create [NAME]

create a channel

USAGE
  $ eas channel:create [NAME] [--json --non-interactive]

ARGUMENTS
  NAME  Name of the channel to create

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  create a channel

See code: packages/eas-cli/src/commands/channel/create.ts

eas channel:edit [NAME]

point a channel at a new branch

USAGE
  $ eas channel:edit [NAME] [--branch <value>] [--json --non-interactive]

ARGUMENTS
  NAME  Name of the channel to edit

FLAGS
  --branch=<value>   Name of the branch to point to
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  point a channel at a new branch

See code: packages/eas-cli/src/commands/channel/edit.ts

eas channel:list

list all channels

USAGE
  $ eas channel:list [--offset <value>] [--limit <value>] [--json --non-interactive]

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>    The number of items to fetch each query. Defaults to 10 and is capped at 25.
  --non-interactive  Run the command in non-interactive mode.
  --offset=<value>   Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  list all channels

See code: packages/eas-cli/src/commands/channel/list.ts

eas channel:rollout [CHANNEL]

Roll a new branch out on a channel incrementally.

USAGE
  $ eas channel:rollout [CHANNEL] [--action create|edit|end|view] [--percent <value>] [--outcome
    republish-and-revert|revert] [--branch <value>] [--runtime-version <value>] [--private-key-path <value>] [--json
    --non-interactive]

ARGUMENTS
  CHANNEL  channel on which the rollout should be done

FLAGS
  --action=(create|edit|end|view)          Rollout action to perform
  --branch=<value>                         Branch to roll out. Use with --action=create
  --json                                   Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive                        Run the command in non-interactive mode.
  --outcome=(republish-and-revert|revert)  End outcome of rollout. Use with --action=end
  --percent=<value>                        Percent of users to send to the new branch. Use with --action=edit or
                                           --action=create
  --private-key-path=<value>               File containing the PEM-encoded private key corresponding to the certificate
                                           in expo-updates' configuration. Defaults to a file named "private-key.pem" in
                                           the certificate's directory.
  --runtime-version=<value>                Runtime version to target. Use with --action=create

DESCRIPTION
  Roll a new branch out on a channel incrementally.

See code: packages/eas-cli/src/commands/channel/rollout.ts

eas channel:view [NAME]

view a channel

USAGE
  $ eas channel:view [NAME] [--json --non-interactive] [--offset <value>] [--limit <value>]

ARGUMENTS
  NAME  Name of the channel to view

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>    The number of items to fetch each query. Defaults to 50 and is capped at 100.
  --non-interactive  Run the command in non-interactive mode.
  --offset=<value>   Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  view a channel

See code: packages/eas-cli/src/commands/channel/view.ts

eas config

display project configuration (app.json + eas.json)

USAGE
  $ eas config [-p android|ios] [-e <value>] [--json --non-interactive]

FLAGS
  -e, --profile=PROFILE_NAME    Name of the build profile from eas.json. Defaults to "production" if defined in
                                eas.json.
  -p, --platform=(android|ios)
  --json                        Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive             Run the command in non-interactive mode.

DESCRIPTION
  display project configuration (app.json + eas.json)

See code: packages/eas-cli/src/commands/config.ts

eas credentials

manage credentials

USAGE
  $ eas credentials [-p android|ios]

FLAGS
  -p, --platform=(android|ios)

DESCRIPTION
  manage credentials

See code: packages/eas-cli/src/commands/credentials/index.ts

eas credentials:configure-build

Set up credentials for building your project.

USAGE
  $ eas credentials:configure-build [-p android|ios] [-e <value>]

FLAGS
  -e, --profile=PROFILE_NAME    The name of the build profile in eas.json.
  -p, --platform=(android|ios)

DESCRIPTION
  Set up credentials for building your project.

See code: packages/eas-cli/src/commands/credentials/configure-build.ts

eas device:create

register new Apple Devices to use for internal distribution

USAGE
  $ eas device:create

DESCRIPTION
  register new Apple Devices to use for internal distribution

See code: packages/eas-cli/src/commands/device/create.ts

eas device:delete

remove a registered device from your account

USAGE
  $ eas device:delete [--apple-team-id <value>] [--udid <value>] [--json --non-interactive]

FLAGS
  --apple-team-id=<value>  The Apple team ID on which to find the device
  --json                   Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive        Run the command in non-interactive mode.
  --udid=<value>           The Apple device ID to disable

DESCRIPTION
  remove a registered device from your account

See code: packages/eas-cli/src/commands/device/delete.ts

eas device:list

list all registered devices for your account

USAGE
  $ eas device:list [--apple-team-id <value>] [--offset <value>] [--limit <value>] [--json --non-interactive]

FLAGS
  --apple-team-id=<value>
  --json                   Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>          The number of items to fetch each query. Defaults to 50 and is capped at 100.
  --non-interactive        Run the command in non-interactive mode.
  --offset=<value>         Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  list all registered devices for your account

See code: packages/eas-cli/src/commands/device/list.ts

eas device:rename

rename a registered device

USAGE
  $ eas device:rename [--apple-team-id <value>] [--udid <value>] [--name <value>] [--json --non-interactive]

FLAGS
  --apple-team-id=<value>  The Apple team ID on which to find the device
  --json                   Enable JSON output, non-JSON messages will be printed to stderr.
  --name=<value>           The new name for the device
  --non-interactive        Run the command in non-interactive mode.
  --udid=<value>           The Apple device ID to rename

DESCRIPTION
  rename a registered device

See code: packages/eas-cli/src/commands/device/rename.ts

eas device:view [UDID]

view a device for your project

USAGE
  $ eas device:view [UDID]

DESCRIPTION
  view a device for your project

See code: packages/eas-cli/src/commands/device/view.ts

eas diagnostics

display environment info

USAGE
  $ eas diagnostics

DESCRIPTION
  display environment info

See code: packages/eas-cli/src/commands/diagnostics.ts

eas help [COMMAND]

Display help for eas.

USAGE
  $ eas help [COMMAND] [-n]

ARGUMENTS
  COMMAND  Command to show help for.

FLAGS
  -n, --nested-commands  Include all nested commands in the output.

DESCRIPTION
  Display help for eas.

See code: @expo/plugin-help

eas init

create or link an EAS project

USAGE
  $ eas init [--force --id <value>] [--non-interactive ]

FLAGS
  --force            Whether to overwrite any existing project ID
  --id=<value>       ID of the EAS project to link
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  create or link an EAS project

ALIASES
  $ eas init

eas login

log in with your Expo account

USAGE
  $ eas login

DESCRIPTION
  log in with your Expo account

ALIASES
  $ eas login

eas logout

log out

USAGE
  $ eas logout

DESCRIPTION
  log out

ALIASES
  $ eas logout

eas metadata:lint

validate the local store configuration

USAGE
  $ eas metadata:lint [--json] [--profile <value>]

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr
  --profile=<value>  Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json.

DESCRIPTION
  validate the local store configuration

See code: packages/eas-cli/src/commands/metadata/lint.ts

eas metadata:pull

generate the local store configuration from the app stores

USAGE
  $ eas metadata:pull [-e <value>]

FLAGS
  -e, --profile=<value>  Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json.

DESCRIPTION
  generate the local store configuration from the app stores

See code: packages/eas-cli/src/commands/metadata/pull.ts

eas metadata:push

sync the local store configuration to the app stores

USAGE
  $ eas metadata:push [-e <value>]

FLAGS
  -e, --profile=<value>  Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json.

DESCRIPTION
  sync the local store configuration to the app stores

See code: packages/eas-cli/src/commands/metadata/push.ts

eas open

open the project page in a web browser

USAGE
  $ eas open

DESCRIPTION
  open the project page in a web browser

See code: packages/eas-cli/src/commands/open.ts

eas project:info

information about the current project

USAGE
  $ eas project:info

DESCRIPTION
  information about the current project

See code: packages/eas-cli/src/commands/project/info.ts

eas project:init

create or link an EAS project

USAGE
  $ eas project:init [--force --id <value>] [--non-interactive ]

FLAGS
  --force            Whether to overwrite any existing project ID
  --id=<value>       ID of the EAS project to link
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  create or link an EAS project

ALIASES
  $ eas init

See code: packages/eas-cli/src/commands/project/init.ts

eas secret:create

create an environment secret on the current project or owner account

USAGE
  $ eas secret:create [--scope account|project] [--name <value>] [--value <value>] [--type string|file] [--force]
    [--non-interactive]

FLAGS
  --force                    Delete and recreate existing secrets
  --name=<value>             Name of the secret
  --non-interactive          Run the command in non-interactive mode.
  --scope=(account|project)  [default: project] Scope for the secret
  --type=(string|file)       The type of secret
  --value=<value>            Text value or path to a file to store in the secret

DESCRIPTION
  create an environment secret on the current project or owner account

See code: packages/eas-cli/src/commands/secret/create.ts

eas secret:delete

delete an environment secret by ID

USAGE
  $ eas secret:delete [--id <value>] [--non-interactive]

FLAGS
  --id=<value>       ID of the secret to delete
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  delete an environment secret by ID

See code: packages/eas-cli/src/commands/secret/delete.ts

eas secret:list

list environment secrets available for your current app

USAGE
  $ eas secret:list

DESCRIPTION
  list environment secrets available for your current app

See code: packages/eas-cli/src/commands/secret/list.ts

eas secret:push

read environment secrets from env file and store on the server

USAGE
  $ eas secret:push [--scope account|project] [--env-file <value>] [--force] [--non-interactive]

FLAGS
  --env-file=<value>         Env file with secrets
  --force                    Delete and recreate existing secrets
  --non-interactive          Run the command in non-interactive mode.
  --scope=(account|project)  [default: project] Scope for the secrets

DESCRIPTION
  read environment secrets from env file and store on the server

See code: packages/eas-cli/src/commands/secret/push.ts

eas submit

submit app binary to App Store and/or Play Store

USAGE
  $ eas submit [-p android|ios|all] [-e <value>] [--latest | --id <value> | --path <value> | --url <value>]
    [--verbose] [--wait] [--verbose-fastlane] [--non-interactive]

FLAGS
  -e, --profile=<value>             Name of the submit profile from eas.json. Defaults to "production" if defined in
                                    eas.json.
  -p, --platform=(android|ios|all)
  --id=<value>                      ID of the build to submit
  --latest                          Submit the latest build for specified platform
  --non-interactive                 Run command in non-interactive mode
  --path=<value>                    Path to the .apk/.aab/.ipa file
  --url=<value>                     App archive url
  --verbose                         Always print logs from EAS Submit
  --verbose-fastlane                Enable verbose logging for the submission process
  --[no-]wait                       Wait for submission to complete

DESCRIPTION
  submit app binary to App Store and/or Play Store

ALIASES
  $ eas build:submit

See code: packages/eas-cli/src/commands/submit.ts

eas update

publish an update group

USAGE
  $ eas update [--branch <value>] [--channel <value>] [-m <value>] [--republish | --input-dir <value> |
    --skip-bundler] [--group <value> |  | ] [--clear-cache] [-p android|ios|all] [--auto] [--private-key-path <value>]
    [--json --non-interactive]

FLAGS
  -m, --message=<value>             A short message describing the update
  -p, --platform=(android|ios|all)  [default: all]
  --auto                            Use the current git branch and commit message for the EAS branch and update message
  --branch=<value>                  Branch to publish the update group on
  --channel=<value>                 Channel that the published update should affect
  --clear-cache                     Clear the bundler cache before publishing
  --group=<value>                   Update group to republish (deprecated, see republish command)
  --input-dir=<value>               [default: dist] Location of the bundle
  --json                            Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive                 Run the command in non-interactive mode.
  --private-key-path=<value>        File containing the PEM-encoded private key corresponding to the certificate in
                                    expo-updates' configuration. Defaults to a file named "private-key.pem" in the
                                    certificate's directory.
  --republish                       Republish an update group (deprecated, see republish command)
  --skip-bundler                    Skip running Expo CLI to bundle the app before publishing

DESCRIPTION
  publish an update group

See code: packages/eas-cli/src/commands/update/index.ts

eas update:configure

configure the project to support EAS Update

USAGE
  $ eas update:configure [-p android|ios|all] [--non-interactive]

FLAGS
  -p, --platform=(android|ios|all)  [default: all] Platform to configure
  --non-interactive                 Run the command in non-interactive mode.

DESCRIPTION
  configure the project to support EAS Update

See code: packages/eas-cli/src/commands/update/configure.ts

eas update:delete GROUPID

delete all the updates in an update group

USAGE
  $ eas update:delete GROUPID [--json --non-interactive]

ARGUMENTS
  GROUPID  The ID of an update group to delete.

FLAGS
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  delete all the updates in an update group

See code: packages/eas-cli/src/commands/update/delete.ts

eas update:list

view the recent updates

USAGE
  $ eas update:list [--branch <value> | --all] [--offset <value>] [--limit <value>] [--json --non-interactive]

FLAGS
  --all              List updates on all branches
  --branch=<value>   List updates only on this branch
  --json             Enable JSON output, non-JSON messages will be printed to stderr.
  --limit=<value>    The number of items to fetch each query. Defaults to 25 and is capped at 50.
  --non-interactive  Run the command in non-interactive mode.
  --offset=<value>   Start queries from specified index. Use for paginating results. Defaults to 0.

DESCRIPTION
  view the recent updates

See code: packages/eas-cli/src/commands/update/list.ts

eas update:republish

roll back to an existing update

USAGE
  $ eas update:republish [--channel <value> | --branch <value> | --group <value>] [-m <value>] [-p android|ios|all]
    [--private-key-path <value>] [--json --non-interactive]

FLAGS
  -m, --message=<value>             Short message describing the republished update group
  -p, --platform=(android|ios|all)  [default: all]
  --branch=<value>                  Branch name to select an update group to republish from
  --channel=<value>                 Channel name to select an update group to republish from
  --group=<value>                   Update group ID to republish
  --json                            Enable JSON output, non-JSON messages will be printed to stderr.
  --non-interactive                 Run the command in non-interactive mode.
  --private-key-path=<value>        File containing the PEM-encoded private key corresponding to the certificate in
                                    expo-updates' configuration. Defaults to a file named "private-key.pem" in the
                                    certificate's directory.

DESCRIPTION
  roll back to an existing update

See code: packages/eas-cli/src/commands/update/republish.ts

eas update:roll-back-to-embedded

roll back to the embedded update

USAGE
  $ eas update:roll-back-to-embedded [--branch <value>] [--channel <value>] [--message <value>] [-p android|ios|all] [--auto]
    [--private-key-path <value>] [--json --non-interactive]

FLAGS
  -p, --platform=(android|ios|all)  [default: all]
  --auto                            Use the current git branch and commit message for the EAS branch and update message
  --branch=<value>                  Branch to publish the rollback to embedded update group on
  --channel=<value>                 Channel that the published rollback to embedded update should affect
  --json                            Enable JSON output, non-JSON messages will be printed to stderr.
  --message=<value>                 A short message describing the rollback to embedded update
  --non-interactive                 Run the command in non-interactive mode.
  --private-key-path=<value>        File containing the PEM-encoded private key corresponding to the certificate in
                                    expo-updates' configuration. Defaults to a file named "private-key.pem" in the
                                    certificate's directory.

DESCRIPTION
  roll back to the embedded update

See code: packages/eas-cli/src/commands/update/roll-back-to-embedded.ts

eas update:rollback

roll back to an embedded update or an existing update

USAGE
  $ eas update:rollback [--private-key-path <value>]

FLAGS
  --private-key-path=<value>  File containing the PEM-encoded private key corresponding to the certificate in
                              expo-updates' configuration. Defaults to a file named "private-key.pem" in the
                              certificate's directory.

DESCRIPTION
  roll back to an embedded update or an existing update

See code: packages/eas-cli/src/commands/update/rollback.ts

eas update:view GROUPID

update group details

USAGE
  $ eas update:view GROUPID [--json]

ARGUMENTS
  GROUPID  The ID of an update group.

FLAGS
  --json  Enable JSON output, non-JSON messages will be printed to stderr.

DESCRIPTION
  update group details

See code: packages/eas-cli/src/commands/update/view.ts

eas webhook:create

create a webhook

USAGE
  $ eas webhook:create [--event BUILD|SUBMIT] [--url <value>] [--secret <value>] [--non-interactive]

FLAGS
  --event=(BUILD|SUBMIT)  Event type that triggers the webhook
  --non-interactive       Run the command in non-interactive mode.
  --secret=<value>        Secret used to create a hash signature of the request payload, provided in the
                          'Expo-Signature' header.
  --url=<value>           Webhook URL

DESCRIPTION
  create a webhook

See code: packages/eas-cli/src/commands/webhook/create.ts

eas webhook:delete [ID]

delete a webhook

USAGE
  $ eas webhook:delete [ID] [--non-interactive]

ARGUMENTS
  ID  ID of the webhook to delete

FLAGS
  --non-interactive  Run the command in non-interactive mode.

DESCRIPTION
  delete a webhook

See code: packages/eas-cli/src/commands/webhook/delete.ts

eas webhook:list

list webhooks

USAGE
  $ eas webhook:list [--event BUILD|SUBMIT] [--json]

FLAGS
  --event=(BUILD|SUBMIT)  Event type that triggers the webhook
  --json                  Enable JSON output, non-JSON messages will be printed to stderr.

DESCRIPTION
  list webhooks

See code: packages/eas-cli/src/commands/webhook/list.ts

eas webhook:update

update a webhook

USAGE
  $ eas webhook:update --id <value> [--event BUILD|SUBMIT] [--url <value>] [--secret <value>] [--non-interactive]

FLAGS
  --event=(BUILD|SUBMIT)  Event type that triggers the webhook
  --id=<value>            (required) Webhook ID
  --non-interactive       Run the command in non-interactive mode.
  --secret=<value>        Secret used to create a hash signature of the request payload, provided in the
                          'Expo-Signature' header.
  --url=<value>           Webhook URL

DESCRIPTION
  update a webhook

See code: packages/eas-cli/src/commands/webhook/update.ts

eas webhook:view ID

view a webhook

USAGE
  $ eas webhook:view ID

ARGUMENTS
  ID  ID of the webhook to view

DESCRIPTION
  view a webhook

See code: packages/eas-cli/src/commands/webhook/view.ts

eas whoami

show the username you are logged in as

USAGE
  $ eas whoami

DESCRIPTION
  show the username you are logged in as

ALIASES
  $ eas whoami

eas-cli's People

Contributors

axeldelafosse avatar barthap avatar brentvatne avatar bycedric avatar dependabot[bot] avatar dsokal avatar evanbacon avatar expo-bot avatar fiberjw avatar fson avatar gabrieldonadel avatar ide avatar jeremybarbet avatar jonsamp avatar kadikraman avatar kbrandwijk avatar keith-kurak avatar kgc00 avatar khamilowicz avatar lzkb avatar pusongqi avatar quinlanj avatar radoslawkrzemien avatar randomhajile avatar satya164 avatar simek avatar sjchmiela avatar szdziedzic avatar wkozyra95 avatar wschurman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eas-cli's Issues

Improve GraphQL error during `eas build -p ios`

eas.json

{
  "builds": {
    "android": {
      "release": {
        "workflow": "generic"
      }
    },
    "ios": {
      "release": {
        "distribution": "internal",
        "workflow": "generic"
      }
    }
  }
}

Fails after running eas build -p ios

Failed to setup credentials.
    CombinedError: [GraphQL] Unexpected server error.

Re running throw a different error message in the same place

โœ” Synced capabilities
Failed to setup credentials.
    Error: Run 'eas device:create' to register your devices first

[eas build] --non-interactive and --skip-credentials-check flags ignored

โ•ฐโ”€$ easd build -p ios --non-interactive --skip-credentials-check                                                                                                               130 โ†ต
โœ” Ensuring @notbrent/barew is created on Expo
Using credentials stored on the Expo servers
If you provide your Apple account credentials we will be able to generate all necessary build credentials and fully validate them.
This is optional, but without Apple account access you will need to provide all the values manually and we can only run minimal validation on them.
โœ– Do you want to log in to your Apple account? โ€ฆ yes

This appears to be related to just passing in an empty object as options here: https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/build/ios/credentials.ts#L47

If I thread through nonInteractive then it will work as expected for that case, however we need to also be sure to thread through skipCredentialsCheck, and I decided I'd leave this to someone more familiar with the code.

[eas-cli] Umbrella issue for API error handling

Feel free to edit/update this issue.

There are cryptic error messages when API requests fail, for example:

โœ– Creating @barthap10/barthap-dogfood on Expo
    HTTPError: Response code 500 (Internal Server Error)

Since we reach API in two ways, we should handle both:

We should at least display error message from www by default. Also, maybe full stacktrace should be printed when given e.g. EXPO_DEBUG env variable.

List of other related issues

  • #136 - When building for iOS
  • #163 - When registering projects

Invalid prov. profile for internal distribution

There's an issue with regenerating the provisioning profile when building an app for internal distribution (I haven't verified it's broken for app store builds too). The provisioning profile is generated for a different distribution certificate than the chosen one.

Repo steps:

  • use the turtle-dev apple id and the Alicja Warchaล‚ team
  • log in to eas-cli as expo-turtle (ask me for the password)
  • init a new app and add this to app.json:
      "android": {
        "package": "com.expo.turtle.tutorial.internal.abc"
      },
      "ios": {
        "bundleIdentifier": "com.expo.turtle.tutorial.internal.abc"
      }
    
  • run eas build:configure and complete all steps
  • edit eas-cli/packages/eas-cli/src/build/create.tsto add process.exit(1); on line 20 to not spam turtle with test builds
    Screenshot 2020-12-08 at 19 01 01
  • go to Apple Dev Portal and revoke the iOS dist cert with the expiry on 2021/12/08 (don't revoke the one with the expiry on 2021/11/09 - it will break turtle v1 smoke tests)
    Screenshot 2020-12-08 at 19 04 27
  • create eas.json:
    {
     "builds": {
       "android": {
         "release": {
           "workflow": "generic"
         }
       },
       "ios": {
         "release": {
           "workflow": "generic",
           "distribution": "internal"
         }
       }
     } 
    }
    
  • run eas build -p ios and follow all the steps, EAS CLI will regenerate the profile
  • go to Apple Dev Portal and see that the new profile was generated for the wrong dist cert (for the one with the expiry on 2020/11/09) - even though a new one was created
    Screenshot 2020-12-08 at 19 10 46

[eas-cli] Factor in --non-interactive for prompts

I think we can in many cases have them just default to returning whatever the default selection is.

eg:

eas build --non-interactive

-> no platform provided, default to "All" which is the default selection in the prompt

[ios build] Cannot find proper provisioning profile when using remote credentials

After letting Expo set up credentials, and verifying that those credentials are correct according to expo credentials:manager -p ios, the eas build command will fail on the "fetching provisioning profile" step:

image

If you sync your credentials with eas credentials and run another build, this time relying on your local credentials.json file, the build succeeds

[eas submit][ios] no app icon error message needs improvement

The output when an icon is missing is messy and could be improved.

tape-warm ๐  easd submit
โœ” Choose a platform to submit to โ€บ iOS
โœ” Ensuring @bacon/tape-warm is created on Expo

Ensuring your app exists on App Store Connect. This step can be skipped by providing the --asc-app-id
param. Learn more: https://expo.fyi/asc-app-id

Please enter your Apple Developer Program account credentials. These credentials are needed to manage
certificates, keys and provisioning profiles in your Apple Developer account.
The password is only used to authenticate with Apple and never stored on Expo servers
Learn more here https://docs.expo.io/distribution/security/#apple-developer-account-credentials
โœ” Apple ID: โ€ฆ [email protected]
Using password from your local Keychain. Learn more https://docs.expo.io/distribution/security#keychain
Restoring session /Users/evanbacon/.app-store/auth/[email protected]/cookie
Logged in Local session restored

Ensuring that bundle ID "org.name.tapewarm" is registered on Apple Dev Center...
Checking App Store Connect for "tape-warm" (org.name.tapewarm)...
Creating app "tape-warm" (org.name.tapewarm) on App Store Connect...
App "tape-warm" (org.name.tapewarm) on App Store Connect is ready for your binary.
โœ” What would you like to submit? โ€บ The latest build from Expo servers
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                             iOS Submission Summary                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Archive URL             โ”‚ https://turtle-v2-artifacts.s3.amazonaws.com/ios/7    โ”‚
โ”‚                         โ”‚ 9a38488-7eb9-4ebc-9728-f02a842cc887-6eee499fda774f    โ”‚
โ”‚                         โ”‚ 98847316edbfcc541b.ipa                                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Apple ID                โ”‚ [email protected]                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Apple app-specific      โ”‚ [hidden]                                              โ”‚
โ”‚ password                โ”‚                                                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  App Store Connect App  โ”‚ 1543439387                                            โ”‚
โ”‚ ID                      โ”‚                                                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Project ID              โ”‚ cab65372-b7f1-4448-96af-00061fa92cae                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โœ” Scheduling submission
โœ– Something went wrong when submitting your app to Apple App Store.
Please see logs

[logs] Starting iOS app upload
[logs] Downloading archive
[logs] Uploading iOS app to TestFlight...
[logs] [09:35:48]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
[logs] [09:35:50]: -------------------
[logs] [09:35:50]: --- Step: pilot ---
[logs] [09:35:50]: -------------------
[logs] [09:35:50]: Ready to upload new build to TestFlight (App: 1543439387)...
[logs] [09:35:53]: Fetching password for transporter from environment variable named `FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD`
[logs] [09:35:53]: Going to upload updated app to App Store Connect
[logs] [09:35:53]: This might take a few minutes. Please don't interrupt the script.
[logs] [09:37:12]: [Transporter Error Output]: ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface"
[logs] [09:37:12]: [Transporter Error Output]: ERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7."
[logs] [09:37:12]: [Transporter Error Output]: ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] [09:37:12]: Transporter transfer failed.
[logs] [09:37:12]: ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface"
[logs] ERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7."
[logs] [09:37:12]: 
[logs] ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] [09:37:12]: [iTMSTransporter] [2020-12-04 09:37:12 PST] <main> ERROR: ERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7."
[logs] [09:37:12]: [iTMSTransporter] [2020-12-04 09:37:12 PST] <main> ERROR: ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] 
[logs] [09:37:12]: [iTMSTransporter] [2020-12-04 09:37:12 PST] <main> DBG-X: The error code is: 1102
[logs] 
[logs] [09:37:12]: [iTMSTransporter] [2020-12-04 09:37:12 PST] <main>  INFO: Done performing authentication.
[logs] 
[logs] [09:37:12]: [iTMSTransporter]
[logs] [09:37:12]: [iTMSTransporter] 
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 
[logs] 
[logs] [09:37:12]: [iTMSTransporter] Package Summary:
[logs] 
[logs] [09:37:12]: [iTMSTransporter]  
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 1 package(s) were not uploaded because they had problems:
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 	/var/folders/97/73j93h690g9gdn54bh_zskm40000gn/T/d20201204-82539-1mwei59/1543439387.itmsp - Error Messages:
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 		ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface"
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 		ERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7."
[logs] 
[logs] [09:37:12]: [iTMSTransporter] 		ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] 
[logs] [09:37:12]: [iTMSTransporter] [2020-12-04 09:37:12 PST] <main> DBG-X: Returning 1
[logs] 
[logs] [09:37:12]: iTunes Transporter output above ^
[logs] [09:37:12]: ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_interface"
[logs] ERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7."
[logs] ERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] Return status of iTunes Transporter was 1: ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0. To support older versions of iOS, the icon may be required in the bundle outside of an asset catalog. Make sure the Info.plist file includes appropriate entries referencing the file. See https://developer.apple.com/documentation/bundleresources/information_property_list/user_inter\nERROR ITMS-90713: "Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle 'org.name.tapewarm'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for t\nERROR ITMS-90704: "Missing App Icon. An app icon measuring 1024 by 1024 pixels in PNG format must be included in the Asset Catalog of apps built for iOS, iPadOS, or watchOS. Without this icon, apps cannot be submitted for review. For details, see https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/."
[logs] The call to the iTMSTransporter completed with a non-zero exit status: 1. This indicates a failure.
[logs] [!] Error uploading ipa file, for more information see above
[logs] fastlane pilot failed

Maybe cache @expo/config

I realised that we use @expo/config extensively, almost always this way:

  const { exp } = getConfig(ctx.projectDir, { skipSDKVersionRequirement: true });

In some commands (e.g. eas submit) this is called multiple times during one command execution, meaning the same app.json is unnecessarily read twice, see here:
https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/project/projectUtils.ts#L7-L24

The getProjectIdAsync() gets config, then calls getAccountNameAsync() which does the same again.

I don't think it would have a huge performance impact, but maybe we can cache it globally the way it's done in expo-cli upload command:
https://github.com/expo/expo-cli/blob/8dac437905be780f2f4d7fd48f77680351fecb78/packages/expo-cli/src/commands/upload/submission-service/utils/config.ts#L19-L26
Or just use lodash/once

Of course it cannot be done everywhere:
https://github.com/expo/eas-cli/blob/8dac437905be780f2f4d7fd48f77680351fecb78/packages/eas-cli/src/credentials/context.ts#L87-L88

It would also need to rework this test case:
https://github.com/expo/eas-cli/blob/8dac437905be780f2f4d7fd48f77680351fecb78/packages/eas-cli/src/project/__tests__/projectUtils-test.ts#L43-L95

[eas build] Managed project with workflow set to generic in eas.json outputs incorrect error message

In a managed project (no ios or android folder), running the following produces an error message that doesn't seem right.

client ๐  easd build:create -p ios
โœ” Ensuring @bacon/pillar-valley is created on Expo

We've found multiple schemes in your Xcode project: 
You can specify the scheme you want to build at builds.ios.PROFILE_NAME.scheme in eas.json.

I'd expect the project to not have any schemes, but here it says it found multiple.

Suggest a default commit message for eas build

speedway ๐  eas build -p ios       
โœ” Ensuring @expo-turtle/ejbtest10 is created on Expo

Warning! Your git working tree is dirty.
This operation needs to be run on a clean working tree, please commit all your changes before proceeding.
โœ” Commit changes to git? โ€ฆ yes
? Commit message: โ€บ 

This should suggest something. IMO it would be nice for this to be formatted like a publish commit, so maybe Publish iOS <build number> or something like that. Mostly I don't care and I end up just doing wip

Implement update:delete

https://www.notion.so/expo/CLI-Design-bc3d71bad49c4b8eab7f7b00e6b867bf#6a3022992f954750afa592a3923ad99e

We need to warn the developer that this is likely not the command they want. They likely want release:republish.

Deleting an update group will indeed remove the update group. Any end-users with the update already will continue to see the deleted update since, after the update group is deleted, the newest one on the release is older than the end-user's update, so they will not get a new update.

After deleting an update group, the developer needs to run release:republish or release:publish to force all their end-users to download a new update.

[IOS] Use fastlane match for generating credentials?

Wouldn't it be possible to get credentials from fastlane match to generate ios build, so that we don't have to do it manually.

eas-cli uses fastlane gem to build the ipa file, it should be possible to use match credentials in there somewhere, right?

Detect google service account file in the project dir

This is a follow-up to expo/expo-cli#2069.

A comment from @brentvatne:

just an idea - an alternative might be to look in cwd for something that matches this format, or is a json file and contains "type": "service_account", and suggest that one, then only use this value as a fallback if we can't find anything.

another option (and could be done in addition to the above) would be that after the first submission of the app we save away the most recently used service account location to .expo and populate the default with that. but this may be overkill for a small thing like this, and it doesn't really help as much with the first submission

I think that I prefer the first option - we should try to find the service account file and suggest the path in the prompt.

At the moment this part synchronously reads every asset file from disk to memory, potentially blocking the process for a long time. I think we should consider preparing for a few optimizations (some of these we've already been doing in `expo publish`):

At the moment this part synchronously reads every asset file from disk to memory, potentially blocking the process for a long time. I think we should consider preparing for a few optimizations (some of these we've already been doing in expo publish):

  • Parallelize hash calculation
  • Parallelize uploading
  • Pipe the file read stream to upload request (i.e. uploadWithPresignedPostAsync(fs.createReadStream(filename)), ...)
  • Possibly show a progress bar while reading/hashing/uploading files in the future

Perhaps we should already make RawAsset have a filename field instead of buffer. This way we don't keep every asset of the app (which could easily be hundreds of megabytes) in memory for the duration of the command, but instead they're only read as needed and can be garbage collected as soon as that particular asset is done.

Originally posted by @fson in #147 (comment)

Handle invalid project owner error

ensureProjectExists crashes with cryptic HTTP 500 in the following situation:

  • I am logged in to eas-cli as userABC - this name is registered in user database
  • I am inside project directory where in app.json i have different username:
{
  "owner": "userXYZ""
}
  • User userXYZ doesn't exists on www
  • When ensureProjectExists is called, it tries to create non existing project @userXYZ/my-app and fails with HTTP 500 with no message

We should handle these cases in some way and at least show a proper error message.

Automated code coverage reports for each PR

Adding coverage reports is easy while a codebase is new and there isn't a lot of code to cover. It will also make it easier for code reviewers to ask authors to include tests if they haven't.

Possibly have interactive publish

When you finish publishing an app you may want to open it in the client. Usually I open up Expo client and go to Profile tab for this. But it may be easier to just prompt the user if they want to open it in simulator/emulator directly. Or some other solution like this? Or use terminal-link and have an 'Open on iOS' and 'Open on Android' button that you can cmd+clink to open? We would need to register URI schemes with the OS to do this but we should do that anyways.

Generating (or quering) provisioning profile returns wrong result in some cases

Mostly copied from slack and grouped together

Steps I took to verify that issue is contained to appstore api implementation

  • I verified that listProvisioningProfilesAsync was called with org.reactjs.native.example.testapp.turt
  • I verified that createProvisioningProfilesAsync was called with org.reactjs.native.example.testapp.turt , it's called only when you select explicitly to create new profile and after doing that next call to listProvisioningProfilesAsync returns one more profile, if I'm only reusing profile new profile is not added to the list
  • All profiles returned by this method have status set to 'INVALID'
  • it works correctly if i change to some totally random bundleidentifier
  • it does not work if I use similar bundleIdentifier (e.g org.reactjs.native.example.testapp.tu ), but on the other hand there are profiles on this account that should also be matching in the same way but are not returned by listProvisioningProfilesAsync (e.g. org.reactjs.native.example.testapp.turtaawedawed)

Changes after fix #127

  • listProvisioningProfilesAsync did not return any results during first build (correct behavior)
  • generation of new profile finished with success (correct behavior), but we don't validate stuff returned by apple api, so we don't know if it was correct
  • listProvisioningProfilesAsync did not return any results during second build (incorrect behavior) - should return provisioning profile created during first build

@EvanBacon I saw failed build on your account, it was for adhoc builds, but error was the same as I'm getting, so you are probably hitting the same problem.
If it's the same issue you can verify that by running Ensure all credentials for project are valid twice, if during second run it will warn you about invalid profile that means you are hitting that case.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.