* fix(utils): fix resources map becomes directory
closes#10187
Fixes the behavior of mapped resources generating extra directory, for example:
`"../resources/user.json": "resources/user.json"` generates this resource `resources/user.json/user.json`
where it should generate `resources/user.json`
This PR includes a refactor of the Iterator implementation which splits it into more scoped functions and relis on recursing instead of a loop which makes the code a lot more readable and easier to maintain.
* clippy
* cover more cases
* clippy
* fix glob into directory, not resolving target correctly
* return error when resource origin path doesn't exist
* fix resources example build
* Update .changes/resources-map-becoming-dirs.md
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor(core): serialize response once closes#5641
This change impacts both the custom protocol and the postMessage based IPC implementations. Basically it changes the whole IPC mechanism to work on raw JSON strings so we do not need to serialize a serde_json::Value after serializing to it from a user-provided type.
i benchmarked this with a 150MB file response (returning Vec<u8> instead of tauri::ipc::Response since the latter does not serialize at all) and it went from 29s to 23s (custom protocol) and from 54s to 48s (post message) on macOS.
* fix mobile & lint
* clippy
immediately after merging #10588 I noticed that the variable name might be a bit ambigious and could cause confusion on other pl atforms other than Windows
* refactor(core): return 200 on any IPC call, closes#10286
By default the webview prints a `Failed to load resource: the server responded with a status of 400 (Bad Request) ipc://localhost` error message when a command returns an error, which is confusing to users.
This changes the IPC to return status 200 on any call, with a header to indicate whether the result was ok or not. This removes the console error, which would only log the actual error result if it isn't caught by the user.
* add change file
* apply code review changes
The IPC fallback system kicks in when the custom protocol implementation cannot be used (e.g. CORS issues).
The fallback uses the postMessage mechanism, which by default uses channels to send large responses. If the custom protocol implementation cannot be used, we should not use channels, but eval the response directly.
- make the v1 config migration more resilient by checking null values
- fix "targets: all" incorrectly migrating createUpdaterArtifacts when there's no updater configuration (this is problematic because this targets config is the default)
- migrate Tauri.toml
- add more tests
* fix(cli): Make app_dir() consistent by basing it on the explicit invocation directory rather than the current working directory
* resolve app paths before everything else
* fix xcode script
* fix test
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* chore: update brotli dependency to v6
brotli v6 plays nice with other versions of the same crate
* add change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* refactor: remove targetSdk as it is being removed in DSL 9.0
* note
* fix: typo
* update: changelog
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* feat: Add option to allow all commands by default
* option to use a list of permissions, move logic to tauri-build
* fix plugin
* add utils change file
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* feat(cli): Upgrade gradle to 8.9 and gradle-android to 8.5.1
* Update .changes/android-gradle-8-9.md
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* fix(cli): v1 migration should add the updater plugin if it is enabled
* fix change tag
* move to process_updater
* Update tooling/cli/src/migrate/migrations/v1/config.rs
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
---------
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
It is recommended to use `[android|ios] dev --open` or `[android|ios] build --open` instead as it properly sets up the requirements for developing and building apps with Tauri.
- Changes the IP prompt to also show IPV6 address ending with ::2 (usually device's address)
- Adds --host option on ios dev to force the host
- Also makes it work with our own dev server impl (builtin)
* hash codegen image cache output
* remove left over dbg! statement
* prevent info.plist from workspace rebuilds
* prevent schema generation from workspace rebuilds
* use new `Cached` struct in `CachedIcon`
* fmt
* use full import for cached plist
* use `to_vec()` for raw icons
* hide `Invoke` from documentation
* make `Asset` non-exhaustive
* make `InvokeRequest` non-exhaustive
* mark `tauri_utils::platform::Target` non-exhaustive
* mark the runtime crates as unstable API
* Revert "mark the runtime crates as unstable API" [skip ci]
This reverts commit b8377222e3.
* mark the runtime crates as unstable API
* Revert "mark the runtime crates as unstable API" [skip ci]
This reverts commit 9284897644.
* mark the runtime crates as unstable API
* mark tauri_utils::TitleBarStyle as `#[non_exhaustive]`
* mark `InvokeRequest` as non_exhaustive unless `unstable` feature
* mark config and acl items as unstable
* feat(core): fallback to file system for AssetResolver::get, closes#8411
Ports #10356 to v2
* fix test
---------
Co-authored-by: Chip Reed <chip@chip.sh>
* add failable try_build for plugin builder
* add changefile
* implement `Hash`, `PartialEq` for `BuilderError`
* mark config and acl items as unstable
give some doc tips if they need to be used from Rust
* Revert "mark config and acl items as unstable" [skip ci]
This reverts commit e23728edb6.
* Conf parsing error displays `tauri.conf.json` when using toml or json5
Conf parsing error always displays `tauri.conf.json` as path, even when using `Tauri.toml` or `tauri.conf.json5`
Example Error Message when using Tauri.toml:
Error unable to parse toml Tauri config file at
/Users/bla/repo/bla/bla/src-tauri/tauri.conf.json because
invalid TOML value, did you mean to use a quoted string? at line 41
column 7
* merge changefile pr into main pr
* Update and rename fix-conf-parsing-error-filepath to fix-conf-parsing-error-filepath.md
---------
Co-authored-by: Fabian-Lars <fabianlars@fabianlars.de>
* feat(cli): iOS signing for CI usage
* license headers
* change file
* chore: support more cert types
* xplicit method arg
* keep keychain alive
* fix early keychano drop
* set team id
* use common name as cert name
* fix(core): fix raw invoke body for isolation pattern
The `isolation` pattern requests are made using JSON but the payload could be raw bytes, so we send the original `Content-Type` from frontend and make sure to deserialize the payload using that one instead of `Content-Type` from request headers
* clippy
* disable plist embed in generate_context in tests
* change file
* docs [skip ci]
* move unused_variables [skip ci]
* last commit regression [skip ci]
* fix test
* add example, do not text encode raw request
* check type instead of contenttype
---------
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
* add plugin resolution to gradle settings
This is needed to make Android Studio able to link to the project
* reflect codegen edit in the plugin example
* Add updater field
* Don't sign updaters when updater field is false
* Clippy
* Add updater to bundle migration
* Format
* Add updater config to api example
* No warning if update is not enabled
* Build
* Add change file
* We don't generate updater for dmg package
* Warning only for v1 compatible
* clean up
* More clean up
* little bit more
* Apply suggestions from code review
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
* Revert license header change
* Remove option around pubkey and msi args
* More migration tests
* Refactor private_key getter
* Only generate signature for updater for v1 compat
* Format
* Use map_err instead of anyhow context
* Don't generate updater for api example
* Fix misaligned comment
* Rename `updater` to `createUpdaterArtifacts`
* Revert changes in helloworld example
* Add warning for v1 compatible
* Update .changes/separate-updater-field.md
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
* update error messages [skip ci]
---------
Co-authored-by: Amr Bashir <amr.bashir2015@gmail.com>
Co-authored-by: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* bug: removed alpha channel from default IOS AppIcons
According to Apple's human interface guideline
(https://developer.apple.com/design/human-interface-guidelines/app-icons)
transparent or icons with alpha channel are not allowed, and will be rejected
upon upload to Apple appstore.
* Update .changes/ios-non-transparent-icons.md
fixes#10082
The problem that we were calling `PathBuf::join()` with value of collecting an empty iterator of path components which was equivalent to `PathBuf::from("ios").join("")` which will result in `ios/` with a trailing slash.
This is fixed by chaining iterators of path components and collecting only once into `PathBuf`, which will never append empy path component and will never append trailing slash.
```rs
[
Component::Normal(OsStr::new("ios")),
Component::Normal(&some_folder_name),
]
.into_iter()
.chain(other_components_iterator)
.collect::<PathBuf>()
```
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
* fix: #7614: rebuild every time on macos because of Info.plist changes
* apply proposed patch from lucasfernog
* Update core/tauri-codegen/src/context.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* Update core/tauri-codegen/src/context.rs
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* added changes file
---------
Co-authored-by: Lucas Fernandes Nogueira <lucas@tauri.app>
* Fix delete app data button gone on high DPI
* Add change file
* change back translation template
* Use w string instead of t
* Add in some comment explaining PerMonitorV2
* fix(cli): icon should render explicit svg text node fonts (fix: #10022)
* fix(cli): icon should render explicit svg text node fonts (fix: #10022)
added a .change file for the fix
* feat(cli): include default.toml and capabilities in plugin template
* replace execute usage with ping
* add to capabilities
* use default permission set
* chore(cli): update to new buildConfig format
the existing usage has been deprecated and will be removed on gradle plugin v9, as Android Studio warns
* add config to our lib too
Update gradle to 8.9 and the gradle android plugin to 8.5.1 in the android templates (requires latest Android Studio). This should add support for Java 21 but Java 17 keeps being the recommended version.
The NSIS uninstaller now won't mindlessly try to remove the whole installation folder when the "Remove application data" checkbox was ticked. This prevents data loss when the app was installed in a folder which contained other files.
Added a new configuration option `tauri.conf.json > app > security > capabilities` to reference existing capabilities and inline new ones. If it is empty, all capabilities are still included preserving the current behavior.
Changed the capability format to allow configuring both `remote: { urls: Vec<String> }` and `local: bool (default: true)` instead of choosing one on the `context` field.
Add `--no-bundle` flag for `tauri build` command to skip bundling. Previously `none` was used to skip bundling, it will now be treated as invalid format and a warning will be emitted instead.
CLI commands will now consistently search for the `app_dir` (the directory containing `package.json`) from the current working directory of the command invocation.
Use `windows-sys` crate instead of `winapi` which fixes installing the published cli from crates.io using `cargo install tauri-cli --version "^2.0.0-beta"`.
The `generate_context` proc macro now accepts a `capabilities` attribute where the value is an array of file paths that can be [conditionally compiled](https://doc.rust-lang.org/reference/conditional-compilation.html). These capabilities are added to the application along the capabilities defined in the Tauri configuration file.
Removed `App/AppHandle::tray` and `App/AppHandle::remove_tray`, use `App/AppHandle::tray_by_id` and `App/AppHandle::remove_tray_by_id` instead. If these APIs were used to access tray icon configured in `tauri.conf.json`, you can use `App/AppHandle::tray_by_id` with ID `main` or the configured value.
Changed `JsImage::into_img` to take a reference to a `ResourceTable` instead of a `Manager`.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.