agus_maps_flutter 0.1.13
agus_maps_flutter: ^0.1.13 copied to clipboard
High-performance offline vector maps for Flutter using the CoMaps rendering engine.
0.1.13 #
Documentation #
-
Comprehensive API Reference: Added
doc/API.mdwith complete documentation of all existing APIs and a roadmap for future API additions. Includes detailed implementation patterns for FFI and MethodChannel APIs, code review checklists, and CoMaps framework reference. -
Enhanced README: Significantly improved setup instructions with detailed platform-specific configuration for iOS, macOS, and Android minimum versions. Added a new "Quick Test" section with a compact example app to verify plugin setup.
-
API Reference Links: Updated README and CONTRIBUTING.md to include links to the new API reference documentation. Moved Features section to the example app README for better organization.
Linux Build System #
-
Simplified Binary Distribution: Removed the separate
libagus.sodependency from Linux builds. All CoMaps functionality is now statically linked intolibagus_maps_flutter.so, reducing deployment complexity and eliminating potential library loading issues. -
Streamlined CMakeLists.txt: Updated
linux/CMakeLists.txtto check only forlibagus_maps_flutter.soduring prebuilt detection, reflecting the consolidated library architecture.
Migration #
No action required for consumers upgrading from 0.1.12. The Linux build changes are fully backward compatible—existing AGUS_MAPS_HOME setups will continue to work with the new single-library architecture.
0.1.12 #
Bug Fixes #
-
Missing Metal Shaders in Release Binaries: Fixed a critical packaging issue where
shaders_metal.metallibwas omitted from theagus-binaries-ios.zipandagus-binaries-macos.ziprelease artifacts. This caused runtime crashes on iOS and macOS (specificallyCHECK(libPath != nil) shaders_metal.metallib not found in any bundle!). The CI/CD workflow and local build scripts now correctly package theResourcesdirectory containing the compiled shaders. -
Development Pod Resource Copying: Updated the
podspecdevelopment helper script (used when the plugin is a local path dependency) to copyResources(shaders) fromAGUS_MAPS_HOMEin addition to headers. This ensures that local example apps and development workflows correctly include the necessary Metal shaders.
0.1.11 #
Bug Fixes #
- iOS Release build failure (critical): Fixed missing
GCC_PREPROCESSOR_DEFINITIONSconfiguration overrides for Debug/Release builds in the iOS podspec. Without these, CoMaps'base/base.hpptriggers a static assertion:Either Debug or Release should be defined, but not both. This affected pub.dev consumers building for iOS in Release mode. The fix addsDEBUG=1for Debug builds andRELEASE=1 NDEBUG=1for Release/Profile builds, matching the macOS podspec.
Documentation #
- New Build Configuration Guide: Added
doc/BUILD-CONFIGURATION.mdto comprehensively document build configurations (Debug/Release/Profile), preprocessor definitions, and platform-specific build details. - Release Guide Update: Updated
doc/RELEASE.mdto reflect the deprecation of individual binary downloads. It now focuses on the Unified Binary Package and provides detailed instructions for installing pre-built Example Apps on all platforms.
Release & Distribution #
- Deprecated Individual Binary Downloads: The release workflow now only distributes the unified
agus-maps-sdk. Individual platform zip files (e.g.,agus-binaries-ios.zip) are no longer generated to streamline distribution. - Release Artifacts Cleanup: The
devops.ymlworkflow was updated to stop uploading deprecated artifacts.
0.1.10 #
iOS and macOS Build System Improvements #
-
Development Pod header support: Added automatic header copying at
pod installtime for Development Pods (path dependency) on both iOS and macOS. When using the plugin as a development dependency (e.g.,path: ../agus_maps_flutter), headers are now copied fromAGUS_MAPS_HOMEduring pod installation, fixing "file not found" errors for CoMaps headers likeboost/regex.hpp. -
SDK source tracking: Introduced a marker file (
.sdk_source) in theios/Headers/andmacos/Headers/directories to track which SDK the headers were copied from. The build system now detects whenAGUS_MAPS_HOMEchanges and automatically refreshes headers, ensuring consumers always have the correct headers for their configured SDK version. -
Header copying in
prepare_command: Both iOS and macOS podspecprepare_commandblocks now copy headers fromAGUS_MAPS_HOME/headerstoHeaders/comaps/alongside the XCFramework. This ensures pub.dev consumers have all necessary headers for compilation. -
Prioritized header search paths (macOS): Reordered
HEADER_SEARCH_PATHSin the macOS podspec to prioritize downloaded headers (Headers/comaps/) over in-repo thirdparty paths. This ensures consumers using the SDK binaries get consistent header resolution without interference from missing in-repo sources.
Repository Maintenance #
- Updated
.gitignore: Addedmacos/Headers/andios/Headers/to ignore downloaded headers, keeping the repository clean when using SDK binaries.
Technical Details #
-
Development Pod vs. Published Pod behavior:
- Published pods (from pub.dev):
prepare_commandruns duringpod install, copying frameworks and headers - Development pods (path dependency):
prepare_commandis skipped; new Ruby code at the top of the podspec handles header copying
- Published pods (from pub.dev):
-
Header refresh triggers:
Headers/comaps/directory missing.sdk_sourcemarker file missing.sdk_sourcecontains a different path than currentAGUS_MAPS_HOME
Migration #
No breaking changes. Consumers using AGUS_MAPS_HOME will benefit from automatic header management on both iOS and macOS. If you encounter stale headers after changing SDK versions, delete ios/Headers/ or macos/Headers/ and run pod install again.
0.1.9 #
Build System Improvements #
-
Streamlined Android prebuilt binary integration: Refactored
android/build.gradleto provide a cleaner separation between in-repo development mode and external consumer mode. External consumers now exclusively use pre-built binaries viajniLibs.srcDirs, while in-repo contributors continue to build from source via CMake. -
Enhanced AGUS_MAPS_HOME detection: When
AGUS_MAPS_HOMEenvironment variable is set and points to a valid directory, the build system now explicitly forces external consumer mode. This prevents accidental source builds when consumers have the SDK properly configured. -
Disabled CMake for external consumers: The
externalNativeBuildblock inandroid/build.gradleis now conditionally applied only for in-repo builds. External consumers no longer trigger CMake configuration, eliminating unnecessary build overhead and potential configuration errors. -
Simplified prebuilt library lookup: Removed complex multi-tier fallback logic in favor of a straightforward approach:
- Check
AGUS_MAPS_HOMEenvironment variable - Use
jniLibs.srcDirsto point to the prebuilt libraries - Provide clear error messages if binaries are not found
This eliminates the plugin-local
prebuilt/directory fallback for non-CI builds, making the consumer workflow more explicit and predictable. - Check
Bug Fixes #
-
Asset extraction verification: Enhanced the asset extraction check in
AgusMapsFlutterPlugin.javato verify that essential files (e.g.,unicode_blocks.txt) exist before skipping re-extraction. This prevents runtime errors caused by incomplete or corrupted asset extractions.The plugin now checks:
- Marker file (
.comaps_data_extracted) indicating prior extraction - Essential asset file (
fonts/unicode_blocks.txt) to confirm completeness
If either check fails, assets are re-extracted automatically.
- Marker file (
Error Message Improvements #
- Clearer setup instructions: Error messages when
AGUS_MAPS_HOMEis missing or invalid now provide more actionable guidance:- For consumers: Step-by-step instructions to download, extract, configure, and use the SDK
- For contributors: Direct reference to build scripts (
build_all.sh/build_all.ps1) - Distinguished between AGUS_MAPS_HOME path issues vs. missing binaries entirely
Technical Details #
-
Build mode detection logic: The build system now evaluates build mode in this order:
- AGUS_MAPS_HOME override: If set and valid, force external consumer mode
- In-repo check: If
.gitandthirdparty/comapsexist AND AGUS_MAPS_HOME is not set, use in-repo development mode - External consumer: Otherwise, require AGUS_MAPS_HOME with valid prebuilt binaries
-
jniLibs.srcDirs approach: Instead of using CMake arguments to configure prebuilt paths, the Gradle build now directly adds the prebuilt directory to
sourceSets.main.jniLibs.srcDirs. This is the standard Android approach for including pre-compiled native libraries and avoids CMake entirely for consumers.
Migration #
No breaking changes. Consumers using AGUS_MAPS_HOME correctly will see improved build performance (no CMake overhead) and clearer error messages. Ensure your AGUS_MAPS_HOME points to a valid SDK directory with the following structure:
agus-maps-sdk-v0.1.9/
├── android/prebuilt/{arm64-v8a,armeabi-v7a,x86_64}/
├── ios/Frameworks/CoMaps.xcframework/
├── macos/Frameworks/CoMaps.xcframework/
├── windows/prebuilt/x64/
├── linux/prebuilt/x64/
└── assets/
├── comaps_data/
└── ...
Cross-Platform Impact #
- Android only: All changes are scoped to Android Gradle configuration and Java plugin code
- No changes to iOS/macOS/Linux/Windows: Build systems for other platforms remain unchanged
0.1.8 #
Bug Fixes #
-
Android Gradle syntax error: Fixed a missing closing brace in
android/build.gradleinside the external CMake configuration block. The malformedelse { ... }caused Gradle to reportUnexpected input: '{'at theandroid {line during CI. The block is now correctly closed and parses under AGP 8.x. -
NDK handling aligned with v0.1.6: Retained
ndkVersion = android.ndkVersionto match prior successful builds. No changes to NDK behavior versus0.1.6; the consuming app continues to define the NDK version used.
CI Stability #
- GitHub Actions (Android): With the Gradle file corrected, CI can evaluate the project and proceed to build native libraries and example artifacts without early failure. NDK behavior remains unchanged from
0.1.6. No workflow changes are required.
Cross‑platform Impact #
- No changes to iOS/macOS/Linux/Windows: The fix is scoped to Android Gradle configuration only. Other platforms and their build systems (CocoaPods/CMake) remain unchanged and continue to work as in
0.1.7.
Migration #
No action required for consumers upgrading from 0.1.7. NDK behavior is unchanged compared to 0.1.6.
0.1.7 #
Breaking Changes #
-
Mandatory
AGUS_MAPS_HOMEfor consumers: Plugin consumers must now set theAGUS_MAPS_HOMEenvironment variable pointing to the extracted SDK directory. The fallback to extracting binaries into the app root directory has been removed. -
SDK Package Renamed: The release artifact is now named
agus-maps-sdk-vX.Y.Z.zip(previouslyagus-maps-binaries-vX.Y.Z.zip) to better reflect that it contains the complete SDK with binaries, assets, and optional headers.
New Features #
-
CI Environment Detection: All build systems (Gradle, CMake, CocoaPods) now detect CI environments via the
CIenvironment variable. This allows CI workflows to use plugin-localprebuilt/directories without requiringAGUS_MAPS_HOME. -
Standardized Error Messages: All platforms now display consistent, actionable error messages when binaries are not found, clearly distinguishing between consumer and contributor workflows.
Build System Improvements #
-
Android
build.gradle: Fixed a bug with orphaned if-block in prebuilt detection logic. Added CI detection to allow plugin-local prebuilt directories only in CI or when binaries actually exist. -
iOS/macOS podspecs: Enhanced
prepare_commandwith CI detection. CI builds now proceed with a placeholder, allowing the workflow to copy frameworks before the actual build step. -
Linux/Windows CMakeLists: Added
IS_CIdetection alongsideIS_IN_REPOfor cleaner workflow separation.
Documentation #
-
Rewrote
GUIDE.md: Replaced historical architecture document with current implementation details. Now covers the three workflow types (contributor, CI, consumer) and actual platform implementations. -
Updated
README.md: Refined consumer installation instructions with platform-specific commands for settingAGUS_MAPS_HOME. Added Windows CMD example alongside PowerShell. -
Updated
CONTRIBUTING.md: Added explicit warning that contributors should NOT setAGUS_MAPS_HOME- the build scripts handle everything automatically.
Migration Guide #
If upgrading from v0.1.6:
- Download
agus-maps-sdk-v0.1.7.zipfrom GitHub Releases - Extract to a permanent location (e.g.,
~/agus-sdk/agus-maps-sdk-v0.1.7) - Set
AGUS_MAPS_HOMEenvironment variable:# macOS/Linux (add to ~/.bashrc or ~/.zshrc) export AGUS_MAPS_HOME=/path/to/agus-maps-sdk-v0.1.7 # Windows PowerShell (add to profile or set system env var) $env:AGUS_MAPS_HOME = "C:\path\to\agus-maps-sdk-v0.1.7" - Copy assets from SDK to your Flutter app's
assets/folder - Rebuild with
flutter clean && flutter build
0.1.6 #
Bug Fixes #
- Fixed Windows CI archive creation step: Resolved a CI failure where the "Create Windows Binaries Archive" step was using bash-style commands (
rm -f,zip) but running in PowerShell by default. PowerShell interpretedrm -fasRemove-Itemwith an ambiguous-fparameter. Changed to native PowerShell commands (Remove-Item,Compress-Archive) with explicitshell: pwshfor consistency with other Windows steps.
0.1.5 #
Bug Fixes #
- Fixed Windows binaries path in unified package: Resolved an issue where Windows binaries in
agus-maps-binaries-vX.Y.Z.zipwere incorrectly placed atwindows/prebuilt/agus-binaries-windows/x64/instead ofwindows/prebuilt/x64/. This caused Windows consumers to get "file not found" errors when using the unified binary package.
New Features #
-
Auto-download XCFramework for iOS/macOS: Pub.dev consumers no longer need to manually place iOS/macOS frameworks. The CocoaPods
prepare_commandnow automatically downloads the XCFramework from GitHub releases when not found locally. This solves the issue where pub-cache installed plugins couldn't find frameworks extracted to the consumer app's directory (different directory trees).Important: Consumers still need to download and extract the unified binary package to their app root for assets (
assets/comaps_data/,assets/maps/). Only the XCFramework download is automated.
Build System Improvements #
-
Updated podspec versions: iOS and macOS podspecs now correctly specify version
0.1.5(previously0.0.1). -
Improved iOS/macOS podspec documentation: Added detailed comments explaining the three-tier framework resolution: (1) local existence check, (2) relative path search for vendored plugins, (3) auto-download from GitHub releases.
-
Improved Android build.gradle documentation: Added clarifying comments about how
rootDirresolves in Flutter Android builds to help future maintainers understand the prebuilt binary search logic.
CI/CD Improvements #
-
Consistent archive creation for Windows: Added a dedicated "Create Windows Binaries Archive" step in CI workflow (similar to Android and Linux) that creates the zip with content at root level, ensuring the correct
windows/prebuilt/x64/structure in the unified package. -
Removed duplicate release artifact: Removed the redundant non-versioned
agus-maps-binaries.zipfrom releases. Only the versionedagus-maps-binaries-vX.Y.Z.zipis now uploaded, avoiding confusion and reducing release artifact size. -
Individual iOS/macOS binary zips in releases: Added
agus-binaries-ios.zipandagus-binaries-macos.zipto GitHub releases for CocoaPods auto-download functionality.
0.1.4 #
Bug Fixes #
- Fixed Android CI build failure: Resolved an issue where in-repo builds (CI, local development) incorrectly used pre-built binary mode instead of building from source. This caused compilation failures with "file not found" errors for CoMaps headers (
base/task_loop.hpp,platform/platform.hpp, etc.) because the headers directory was not set.
Build System Changes #
- Prioritize source builds for in-repo development: Changed Android Gradle build logic to always build from source when running in-repo (when
.gitandthirdparty/comapsexist), regardless of whetherandroid/prebuilt/contains binaries. This ensures CI builds and local development always use the source code. - Clearer error for external consumers: External consumers (Flutter apps using this plugin as a dependency) now receive a clear
GradleExceptionwith download instructions if pre-built binaries are missing, instead of a generic warning.
0.1.3 #
Breaking Changes #
- Removed auto-download behavior: All build systems (CMake, Gradle, CocoaPods) no longer auto-download binaries during build. Consumers must manually download and extract the unified package before building.
- Removed
download_libs.sh: The auto-download script has been removed to ensure a single, consistent, deterministic workflow for all consumers.
Consumer Workflow Changes #
The workflow is now fully manual and deterministic:
- Add
agus_maps_flutter: ^0.1.3to yourpubspec.yaml - Download
agus-maps-binaries-v0.1.3.zipfrom GitHub Releases - Extract directly to your Flutter app root directory
- Add assets to your
pubspec.yaml:flutter: assets: - assets/comaps_data/ - assets/maps/ - Run
flutter build
⚠️ Upgrading from 0.1.2: When upgrading the plugin version, you must also manually download and extract the new binaries package. The build system will NOT auto-download - it only detects pre-existing binaries.
Unified Package Structure #
After extracting agus-maps-binaries-vX.Y.Z.zip to your app root (my_app/):
my_app/
├── android/prebuilt/{arm64-v8a,armeabi-v7a,x86_64}/ ← Native libraries
├── ios/Frameworks/CoMaps.xcframework/ ← iOS framework
├── macos/Frameworks/CoMaps.xcframework/ ← macOS framework
├── windows/prebuilt/x64/ ← Windows DLLs
├── linux/prebuilt/x64/ ← Linux shared libs
├── assets/comaps_data/ ← Engine data files
├── assets/maps/ ← Map files location
├── headers/ ← (Optional) C++ headers
├── lib/ ← Your app code
└── pubspec.yaml
Build System Improvements #
- Detection-only build systems: All platforms (CMake, Gradle, CocoaPods) now only detect pre-built binaries. Clear error messages with download instructions are shown when binaries are missing.
- No network during build: Build process is fully deterministic with no implicit downloads.
- Consistent archive format: All platform binaries use consistent archive structure without wrapper folders.
- Linux architecture naming: Standardized Linux binaries to use
x64folder naming (consistent with Windows). - Multi-location binary search: CMake (Linux/Windows) and Gradle (Android) now search multiple locations for pre-built binaries:
- Plugin-local directory (for CI builds or vendored plugins)
- Project root directory (for consumers extracting unified package)
- Linux CMakeLists.txt: Complete rewrite with prebuilt detection, IMPORTED targets, and clear FATAL_ERROR messages for missing binaries.
- Windows CMakeLists.txt: Enhanced detection logic matching the Linux implementation.
CI/CD Improvements #
- Explicit archive creation: CI now creates all platform archives with consistent structure (content at root, no wrapper folders).
- Removed archive creation from build scripts: Build scripts now only produce output directories; CI handles archive creation for consistency.
- Linux archive creation: Added explicit archive creation step in CI for Linux binaries with x64 folder naming.
Documentation #
- Updated
README.mdwith simplified 5-step Quick Start guide and upgrade instructions. - Updated
CHANGELOG.mdwith detailed migration notes. - Updated
doc/RELEASE.mdwith manual setup workflow and platform detection details. - Updated
doc/IMPLEMENTATION-IOS.mdwith manual binary setup instructions. - Updated
doc/IMPLEMENTATION-MACOS.mdwith manual binary setup instructions. - Updated
doc/IMPLEMENTATION-CI-CD.mdwith consumer workflow notes. - Updated iOS/macOS podspec comments to reflect manual setup requirement.
0.1.2 #
Release Packaging Improvements #
- Unified binary package: Introduced
agus-maps-binaries-vX.Y.Z.zipcontaining all platform binaries, assets, and headers in a single download. - Versioned artifact filenames: All release artifacts now include the version tag (e.g.,
agus-maps-android-vX.Y.Z.apk). - Streamlined release artifacts: Removed individual platform binary zips from releases - they are now consolidated in the unified package.
- Headers included: C++ headers are now bundled in the unified package for developers who need to build from source.
Documentation #
- Updated
doc/RELEASE.mdwith comprehensive installation guide for the unified binary package.
0.1.1 #
- CI/CD improvements for multi-platform builds.
- Azure Blob Storage caching for CoMaps source.
- Build workflow optimizations.
0.1.0 #
- Initial release of Agus Maps Flutter.
- Zero-copy rendering architecture.
- Offline maps support via CoMaps engine.
- Experimental support for linux, macos, windows, ios and android targets.
- This is an experimental release, do not use on production apps.