34509fca3c
The C surface in `library/src/c_api` was a single bucket of `pub extern "C"` functions covering both consumers — `package:shorebird_code_push` (via ffigen) and Shorebird's Flutter engine fork (via direct C++ link). That made it hard to reason about which symbols are stable ABI versus internal, and ffigen was generating bindings for engine-only symbols that no Dart code calls. Split into two self-contained submodules and two cbindgen-generated headers: - `c_api::dart` → `include/updater_dart.h` (stable ABI; ffigen entry point). Defines `UpdateResult`, the `SHOREBIRD_*` status constants, and the five Dart-stable functions: `shorebird_current_boot_patch_number`, `shorebird_next_boot_patch_number`, `shorebird_check_for_downloadable_update`, `shorebird_update_with_result`, `shorebird_free_update_result`. - `c_api::engine` → `include/updater_engine.h` (no stability guarantee). Defines `AppParameters`, `FileCallbacks`, and the engine-only functions: `shorebird_init`, `shorebird_should_auto_update`, `shorebird_validate_next_boot_patch`, `shorebird_next_boot_patch_path`, `shorebird_free_string`, `shorebird_start_update_thread`, and the `shorebird_report_launch_*` trio. Each bucket file is self-contained: cbindgen scans only the file (`with_src` in build.rs) and emits the items it defines plus the C types they reference. There are no exclude/include lists in the cbindgen configs — adding a function to one bucket automatically lands it in the right header, and items in the other bucket cannot leak. `mod.rs` shrinks to a thin layer of private helpers shared by both buckets (`to_rust`, `allocate_c_string`, `free_c_string`, `log_on_error`) plus the test module. `include/updater.h` is removed; consumers include the specific header for their use case. The Flutter engine's `shell/common/shorebird/updater.cc` will be updated in a follow-up engine-repo PR to include `updater_engine.h` directly. Also drops two retired Dart-side symbols: - `shorebird_update` (replaced by `shorebird_update_with_result` in the Dart 2.0 rewrite, Nov 2024). - `shorebird_check_for_update` (replaced by `shorebird_check_for_downloadable_update` in the same rewrite). The shorebird_code_push package's `_legacyFallback` was the only path that still called `shorebird_update`. The package's `flutter: >=3.24.5` constraint guarantees the engine has `shorebird_update_with_result`, so the fallback was unreachable in practice. Removing it lets us drop the ABI symbol. Bumps shorebird_code_push to 2.0.7. Bindings regenerated via ffigen now contain only the five Dart-stable symbols. Follow-up engine PR will: include `updater_engine.h` instead of the removed `updater.h`; clean up `android_exports.lst` (drop the ghost `shorebird_active_path` and `shorebird_active_patch_number` exports, drop `shorebird_check_for_update`).
2.5 KiB
2.5 KiB
2.0.7
- chore: internal cleanup; no public API changes.
2.0.6
- fix:
checkForUpdatenow reportsrestartRequiredwhen the current patch has been rolled back - fix:
updateno longer throwsUpdateExceptionwhen no new patch is available to install - fix:
updateno longer throwsUpdateExceptionwhen another update is already in progress - docs: warn that
checkForUpdateandupdatemake network calls and may block app startup if awaited synchronously
2.0.5
- docs: fix Discord badge in
README.md
2.0.4
- feat: allow for custom UpdateTrack names in addition to stable, staging, and beta
2.0.3
- feat: override
toStringinReadPatchExceptionandUpdateException
2.0.2
- fix: un-break web platform
- chore: minor improvements to example
2.0.1
- Update the minimum Flutter version from 3.24.4 to 3.24.5 (3.24.4 does not include the updater changes required to support the new API).
2.0.0
- BREAKING: more updates to the Updater API. We now support Stable, Beta, and Staging tracks for patches, meaning you have more control over who gets your patches and when. Check out the example for a demo.
2.0.0-dev.2
- fix: tighten library exports
2.0.0-dev.1
- BREAKING: revamp the updater API
- Remove
ShorebirdCodePushin favor ofShorebirdUpdater
- Remove
1.1.6
- Update log messages to explain what "using no-op implementation" means.
1.1.5
- Update example to use isNewPatchReadyToInstall.
1.1.4
- Run
dart formatover generated files to appease pub static analysis.
1.1.3
- Update README to improve example.
- Remove confusing log message printed when Shorebird is not available.
1.1.2
- update README
1.1.1
- break:
package:shorebird_code_push/shorebird_code_push_io.dartandpackage:shorebird_code_push/shorebird_code_push_web.darthave moved intosrc/to discourage accidental direct import of these files. Please importpackage:shorebird_code_push/shorebird_code_push.dartinstead. - Fixes repository link in pubspec.yaml
1.1.0
- feat: introduce
isShorebirdAvailableto determine whether the Shorebird Engine is detected - fix: crashes when running Flutter application on web
- docs: improvements to example app
1.0.0
- Change
downloadUpdatetodownloadUpdateIfAvailable, as the Updater performs this check internally anyway.
0.1.3
- Ignore some lints in generated files to make pub.dev happy
0.1.2
- Improves documentation
- Improves example, adds restart button to readme
0.1.1
- Add readiness warning to README
0.1.0
- Initial release 🎉