Skip to main content

Overview

The Makefile at the project root drives the entire build, sideload, and packaging workflow. All targets write output to the out/ directory, which is created automatically and excluded from version control.

make zip

Packages the channel into out/GlobalTV.zip — no device required.

make install

Sideloads the zip to a Roku in developer mode over the local network.

make pkg

Produces a signed .pkg file ready for Channel Store submission.

make screenshot

Captures a full-HD screenshot of the running channel on the device.

make check

Runs all Roku 2026 certification pre-flight checks locally.

make clean

Deletes the out/ directory and all build artifacts.

make help

Prints a usage summary with all targets and required variables.

make zip

Packages the channel source into a zip archive that the Roku developer portal accepts.
DetailValue
Outputout/GlobalTV.zip
Required variablesNone
Also runsCreates out/ if it does not exist
The zip includes the directories listed in ZIP_SOURCES:
ZIP_SOURCES = manifest source components images
The following patterns are always excluded via ZIP_EXCLUDE:
*.git*  .env  .env.*  out/*  *.pkg  roku-deploy.json
Makefile  docs/*  *.md  *.zip  *.DS_Store  *Thumbs.db
*.xcf  *.psd
The Roku platform requires manifest to be at the root of the zip, not inside a subdirectory. The zip target handles this correctly.
Example
make zip
Output
>>> [zip] Empaquetando GlobalTV v1.0.6...
>>> [zip] OK → out/GlobalTV.zip

make install

Sideloads the channel to a Roku device in developer mode. Internally runs make zip first, then POSTs the zip to http://<ROKU_IP>/plugin_install.
DetailValue
OutputChannel installed on device; out/_install_response.html saved
Required variablesROKU_IP, ROKU_PASS
Also runsmake zip
VariableDescription
ROKU_IPLocal IP address of the Roku device (e.g. 192.168.1.42)
ROKU_PASSDeveloper password set when enabling developer mode
Example
make install ROKU_IP=192.168.1.42 ROKU_PASS=yourpassword
Output
>>> [install] Sideload en http://192.168.1.42...
>>> [install] HTTP 200
>>> [install] Resultado: Install Success
>>> [install] Listo. Revisar el Roku.
Possible result strings extracted from _install_response.html:
ResultMeaning
Install SuccessChannel installed successfully
IdenticalThe same zip was already installed; no change made
Install FailureInstallation failed; check the HTML response for details
FailedGeneric failure; usually a bad password or network issue

make pkg

Generates a signed .pkg file for submission to the Roku Channel Store. Internally sideloads the app first, then requests a signed package from the device via http://<ROKU_IP>/plugin_package.
DetailValue
Outputout/GlobalTV-1.0.6.pkg
Required variablesROKU_IP, ROKU_PASS, SIGN_PASSWORD
Also runsmake zip, make install
VariableDescription
ROKU_IPLocal IP address of the Roku device
ROKU_PASSDeveloper password
SIGN_PASSWORDSigning password generated by genkey (see Packaging)
Example
make pkg ROKU_IP=192.168.1.42 ROKU_PASS=yourpassword SIGN_PASSWORD=abc123
Output
>>> [pkg] Instalando app para firmar...
>>> [pkg] Solicitando paquete firmado...
>>> [pkg] Descargando .pkg desde el Roku...

>>> [pkg] OK → out/GlobalTV-1.0.6.pkg
>>> [pkg] Listo para subir al Roku Channel Store.

make screenshot

Captures a full-HD screenshot of the currently running sideloaded channel. The channel must be active on the device at the time of capture.
DetailValue
Outputout/screenshot-YYYYMMDD-HHMMSS.jpg
Required variablesROKU_IP, ROKU_PASS
Example
make screenshot ROKU_IP=192.168.1.42 ROKU_PASS=yourpassword
Output
>>> [screenshot] Capturando pantalla del Roku...
>>> [screenshot] Guardado → out/screenshot-20260324-153045.jpg

make check

Runs a series of local pre-flight checks against the source tree to verify Roku 2026 certification requirements. Does not require a device. Fails with a non-zero exit code if any check fails.
DetailValue
OutputPass/fail lines printed to stdout
Required variablesNone
Example
make check
Checks performed Manifest fields
FieldPurpose
title=Channel display name
major_version=Semver major
minor_version=Semver minor
build_version=Build number (must increment on each submission)
mm_icon_focus_hd=HD home-screen icon
mm_icon_focus_fhd=FHD home-screen icon
splash_screen_fhd=FHD splash image
splash_screen_hd=HD splash image
splash_screen_sd=SD splash image
ui_resolutions=fhdDeclares FHD support
rsg_version=1.2Minimum SceneGraph version (note: manifest currently sets 1.3)
supports_input_launch=1Enables deep link launch
splash_rsg_optimization=1Required for fast launch certification
splash_color=Background fill during splash
splash_min_time=Minimum splash display time
Image files
FilePurpose
images/logo-hd.pngHD channel icon
images/logo-fhd.pngFHD channel icon
images/splash-fhd.pngFHD splash screen
images/splash-hd.pngHD splash screen
images/splash-sd.pngSD splash screen
images/globaltv-logo.pngIn-app branding asset
Code checks
CheckRule
No eval()Prohibited by Roku certification
No file://All asset references must use pkg:/
No bs_libs_required=v30Removed in Roku OS 11.5+
Deep link checks (in source/main.brs)
CheckRule
roInput presentRequired when supports_input_launch=1
roInputEvent handledRequired for input deep links
launchDeepLink or inputDeepLinkDeep link handling (checklist 8.1)
Beacon check
CheckRule
signalBeacon(AppLaunchComplete) in components/MainScreen/Required for launch time certification
OPTIONS key check
CheckRule
options not intercepted in PlayerScreenPlayer must not capture the OPTIONS key (checklist 9.1)

make clean

Deletes the entire out/ directory and all build artifacts inside it.
DetailValue
Outputout/ removed
Required variablesNone
Example
make clean
Output
>>> [clean] out/ eliminado.

make help

Prints a formatted usage summary to stdout. No side effects. Example
make help
Output
GlobalTV Roku — Makefile
════════════════════════════════════════════════════════

  make zip                               Crea out/GlobalTV.zip

  make install                           Sideload al Roku
       ROKU_IP=192.168.1.XX
       ROKU_PASS=xxxxxxxx

  make pkg                               Genera .pkg firmado para el Store
       ROKU_IP=192.168.1.XX
       ROKU_PASS=xxxxxxxx
       SIGN_PASSWORD=xxxx                (de: telnet <ip> 8080 → genkey)

  make screenshot                        Captura screenshot HD del Roku
       ROKU_IP=192.168.1.XX
       ROKU_PASS=xxxxxxxx

  make check                             Verifica certificación Roku 2026

  make clean                             Elimina out/