iBurn is an offline map and guide for the Burning Man art festival.
Got iOS? You'll love iBurn for iOS.
- Make sure your Android SDK packages are up to date.
$ git clone https://github.com/Burning-Man-Earth/iBurn-Android --recursive$ cd ./iBurn-Android$ ./gradlew assembleDebugor from Android Studio invoke 'Import Project' and select the./iBurn-Androiddirectory.
Optional local values can be supplied in untracked ~/.gradle/gradle.properties:
iburnUnlockCode=staff-code
iburnApiUrl=https://example.invalid/
mapboxApiKey=optional-tokenCI uses the equivalent IBURN_UNLOCK_CODE, IBURN_API_URL, and
MAPBOX_API_KEY environment variables. Values are compiled into the selected
artifact but are never written to generated source or logs.
Note: Camp, Art and Event location data are embargoed by the Burning Man Organization until the gates open each year.
Fortunately, you can still run and test the app with the previous year's data.
-
Review upstream event dates and create
annual/<year>.json. Version codes must increase, first releases use<year>.1, and all timestamps must carry the correctAmerica/Los_Angelesoffset. -
Check out the exact
iBurn-Datacommit. The selecteddata/<year>tree must be clean; automation never fetches or moves it. -
Run:
./gradlew :iBurn:annualUpdate \ -PannualConfig=annual/<year>.json \ -PdataRevision=<full-40-character-commit> ./gradlew :iBurn:verifyAnnualUpdate \ -PannualConfig=annual/<year>.json \ -PdataRevision=<full-40-character-commit>
The update uses clean Sync outputs, generates the SQLite database on the
host, derives map/database cache identities from content, and writes the
manifest and verification report under build/reports/annual-update/.
Embargoed JSON, images, audio, and databases remain ignored and must be handled
only as restricted artifacts.
To prove idempotence, rerun annualUpdate with --rerun-tasks; the SHA-256 of
annual-manifest.json must remain unchanged.
The manual GitHub Actions workflow accepts a year and exact data revision. Run it first in report-only mode. PR creation is an explicit input and stages only the allowed configuration, submodule pointer, map, and geocoder outputs.
- A revision mismatch means the checked-out data does not match the asserted commit; select the intended revision and rerun.
- A source-contract or integrity failure must be fixed upstream rather than bypassed.
- Roll back by selecting the prior annual config and data revision, then run the same commands.
- Production signing and Play Store publication remain separate, explicit maintainer actions.
- Pretty up that item detail view.
- Investigate Mapbox offline and SIGABRT issues. Seems like it's possible Mapbox gets into a state where it stops displaying the map
Make sure you've:
- Verified event dates in the selected iBurn-Data
dates_info.json - Set the version code and name in
annual/<year>.jsonThe final pre-signed store release should be built with:
$ ./gradlew assembleRegularUnsigned
Pass the resulting apk off for signing. Then zipalign before publishing:
$ zipalign -f -v 4 ./signed.apk ./signed-aligned.apk
Thank you for your interest in contributing to iBurn! Please open up an issue on our tracker before starting work on major interface or functionality changes. Otherwise, feel free to run wild!
- Fork the project and do your work in a feature branch.
- Make sure everything compiles and existing functionality is not broken.
- Open a pull request.
- Thank you! :)
Your contributions will need to be licensed to us under the MPL 2.0 and will be distributed under the terms of the MPL 2.0.
- Chris Ballinger - iOS Development, Map Warping
- David Chiles - iOS Development, Map Styling
- David Brodsky - Android Development, Map Data
- Savannah Henderson - Map Styling
- Andrew Johnstone - Map Data (thank you!!)
- Andrew Johnson - iBurn 2009-2013
- Icons8 - Various icons used throughout the app.
© 2016 David Brodsky
Code: MPL 2.0 (similar to the LGPL in terms of copyleft but more compatible with the App Store)
Data: CC BY-SA 4.0