-
Notifications
You must be signed in to change notification settings - Fork 38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate from java.io to kotlinx-io #368
Migrate from java.io to kotlinx-io #368
Conversation
@takahirom opened a PR to get something going. Currently using kotlinx.io lib. Seems straightforward though I'm hitting an issue with dropbox's differ library. It's not able to resolve iOS packages for some reasons. I saw the PR you made to address this but it seems it didn't resolve it entirely as even using a snapshot release of the differ, I still faced the same issue. Issue: :roborazzi-compose-ios:iosArm64Main: Could not find com.dropbox.differ:differ-iosarm64:0.0.2.
Required by:
project :roborazzi-compose-ios > com.dropbox.differ:differ:0.0.2 Might you know why? |
@eyedol |
val Path.nameWithoutExtension: String | ||
get() = name.substringBeforeLast(".") | ||
|
||
fun Path.relativeTo(base: Path): Path { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great! When I tried this, I wasn't able to find a way to implement it. Could we add a small unit test for this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good call. I'll add unit test for it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added with 51e989a
0d1d723
to
51e989a
Compare
a3533c8
to
fa48fd7
Compare
@takahirom Opened a PR on the differ project. Hopefully it fixes it |
val compareFile: Path? | ||
val actualFile: Path? | ||
val goldenFile: Path? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@takahirom I was thinking of using String
here to abstract away the Path
class. That way we can decouple the use of the kotlinio package even further. Wdyt?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since the JSON element is just a string, I think it's appropriate to use a string here. I don't have a strong opinion on this matter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your input. I ran away with your comment and went ahead and change it to String
to abstract kotlinx-io
class even away from the core code base.
See: e0d21c2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great!
e0d21c2
to
14dce92
Compare
CaptureResult and CaptureResutls in commonMain
… KotlinxIo Path base
At the moment it's not needed. Will be needed in commonMain when migration RoboCanvas
A way to abstract away from kotlinx-io classes from the core code base
66c026d
to
0fd9f27
Compare
@takahirom should be ready for a merge. Will wait for the differ issue to be fixed then we can move |
@eyedol Thanks! Sorry for the delay—I was focused on stabilizing Roborazzi. I'll merge this change. Thanks for your contribution! It seems you're aware of what we need to do to migrate iOS to the existing implementation. Could you create some issues to address this? |
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [io.github.takahirom.roborazzi](https://togithub.com/takahirom/roborazzi) | `1.13.0` -> `1.18.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-junit-rule](https://togithub.com/takahirom/roborazzi) | `1.13.0` -> `1.18.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-compose-desktop](https://togithub.com/takahirom/roborazzi) | `1.13.0` -> `1.18.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi-compose](https://togithub.com/takahirom/roborazzi) | `1.13.0` -> `1.18.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [io.github.takahirom.roborazzi:roborazzi](https://togithub.com/takahirom/roborazzi) | `1.13.0` -> `1.18.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>takahirom/roborazzi (io.github.takahirom.roborazzi)</summary> ### [`v1.18.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.18.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.17.0...1.18.0) ##### Migrating from `java.io.File` to `kotlinx-io` Roborazzi previously used `java.io.File` for saving and loading files. Although Roborazzi supports iOS, sharing much of the logic is challenging when using `java.io.File`. Therefore, we have migrated to `kotlinx-io`. We are attentive to the Kotlin versions our users employ. We upgraded from version 1.9.21 to 1.9.22 due to a dependency on kotlinx-io. Since Kotlin 1.9.22 was released last year, it should be compatible with most projects. Thank you, [@​eyedol](https://togithub.com/eyedol), for your outstanding contribution! Your efforts are greatly appreciated. | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.3.3 | +--- org.jetbrains.kotlinx:kotlinx-io-bytestring:0.3.3 | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) ##### What's Changed - Migrate from java.io to kotlinx-io by [@​eyedol](https://togithub.com/eyedol) in [https://github.com/takahirom/roborazzi/pull/368](https://togithub.com/takahirom/roborazzi/pull/368) - Use kotlinx-io 0.3.3 to avoid updating Kotlin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/381](https://togithub.com/takahirom/roborazzi/pull/381) ##### New Contributors - [@​eyedol](https://togithub.com/eyedol) made their first contribution in [https://github.com/takahirom/roborazzi/pull/368](https://togithub.com/takahirom/roborazzi/pull/368) **Full Changelog**: takahirom/roborazzi@1.17.0...1.18.0 ### [`v1.17.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.17.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.16.1...1.17.0) ##### Bug Fixes - There seemed to be a pattern where ActivityScenario's close was not being called when tests failed, causing leaks, so I used a use block to ensure it is closed properly. [@​yschimke](https://togithub.com/yschimke), thank you for pointing out this issue. - At companies that use Roborazzi on a large scale, there were issues with the output dir not being restored properly due to Configuration cache and other factors, so I simplified the design to make problems less likely to occur. - There were occasional errors reporting that a directory did not exist, and I've added code to address this issue. [@​lukas-mercari](https://togithub.com/lukas-mercari), thank you for your contribution. ##### What's Changed - Use the `use` block to prevent leaks by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/376](https://togithub.com/takahirom/roborazzi/pull/376) - Declare input directories as files to avoid issues when they don't exist by [@​lukas-mercari](https://togithub.com/lukas-mercari) in [https://github.com/takahirom/roborazzi/pull/374](https://togithub.com/takahirom/roborazzi/pull/374) - Fix output image consistency issue by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/366](https://togithub.com/takahirom/roborazzi/pull/366) - \[CI] Update toolchain to Java 17 for all modules by [@​mannodermaus](https://togithub.com/mannodermaus) in [https://github.com/takahirom/roborazzi/pull/365](https://togithub.com/takahirom/roborazzi/pull/365) . Thank you for managing our build process, [@​mannodermaus](https://togithub.com/mannodermaus)! - \[Sample] fix(deps): update dependency androidx.compose.material:material to v1.6.7 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/342](https://togithub.com/takahirom/roborazzi/pull/342) - fix(deps): update dependency org.robolectric:robolectric to v4.12.2 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/369](https://togithub.com/takahirom/roborazzi/pull/369) - \[CI] Exclude `io.github.takahirom.roborazzi` dependency from Renovate updates by [@​sanao1006](https://togithub.com/sanao1006) in [https://github.com/takahirom/roborazzi/pull/372](https://togithub.com/takahirom/roborazzi/pull/372) ##### New Contributors - [@​mannodermaus](https://togithub.com/mannodermaus) made their first contribution in [https://github.com/takahirom/roborazzi/pull/365](https://togithub.com/takahirom/roborazzi/pull/365) **Full Changelog**: takahirom/roborazzi@1.16.1...1.17.0 ### [`v1.16.1`](https://togithub.com/takahirom/roborazzi/releases/tag/1.16.1) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.16.0...1.16.1) ##### Bugfix We removed the setting for the test task's input directory in 1.16.0, but it caused incorrect results in the compare tests. Therefore, I reverted the changes to the test input directory. This bug is now covered by Roborazzi's integration tests. ##### What's Changed - Fix issue where input images are overwritten and add test by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/364](https://togithub.com/takahirom/roborazzi/pull/364) **Full Changelog**: takahirom/roborazzi@1.16.0...1.16.1 ### [`v1.16.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.16.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.15.0...1.16.0) ##### Improvements - [@​lukas-mercari](https://togithub.com/lukas-mercari) informed me that we can optimize our build-cache strategy by eliminating outdated cache invalidation logic. With this adjustment, Roborazzi's integration test time was reduced from 10 minutes to 6 minutes by utilizing caches. Thanks for the excellent improvement suggestion. This might also help other users' projects. Roborazzi's integration tests cover several use cases, but if you encounter any issues related to caching, please let me know. - We have been supporting iOS since the previous version of Roborazzi and want to share code with the iOS sourceset as much as possible. Therefore, we migrated from Gson to Kotlinx.serialization 1.6.3. Thank you for your contribution, [@​sanao1006](https://togithub.com/sanao1006) - Roborazzi has been supporting accessibility dumps for Android, and we have now added the capability to check the disabled status within these dumps. Thank you for your contribution, [@​lukas-mercari](https://togithub.com/lukas-mercari) ! <img width="723" alt="image" src="https://github.com/takahirom/roborazzi/assets/1386930/1a324aae-7541-410a-a5d1-b04181d875ba"> ##### What's Changed * Remove unneeded cache invalidation by @​takahir[https://github.com/takahirom/roborazzi/pull/362](https://togithub.com/takahirom/roborazzi/pull/362)ll/362 * Include Disabled semantic property in accessibility explanation by @​lukas-merca[https://github.com/takahirom/roborazzi/pull/361](https://togithub.com/takahirom/roborazzi/pull/361)ll/361 * [Docs] Add "Why do my screenshot tests fail inconsistently across different operating systems" section by @​takahir[https://github.com/takahirom/roborazzi/pull/353](https://togithub.com/takahirom/roborazzi/pull/353)ll/353 * Migrate from Gson to KotlinX.Serialization by @​sanao10[https://github.com/takahirom/roborazzi/pull/350](https://togithub.com/takahirom/roborazzi/pull/350)ll/350 * [Sample] fix(deps): update androidx.navigation to v2.7.7 by @​renova[https://github.com/takahirom/roborazzi/pull/337](https://togithub.com/takahirom/roborazzi/pull/337)ll/337 * [Sample] fix(deps): update dependency androidx.compose.material3:material3 to v1.2.1 by @​renova[https://github.com/takahirom/roborazzi/pull/341](https://togithub.com/takahirom/roborazzi/pull/341)ll/341 * [CI] chore(deps): update gradle/gradle-build-action action to v2.12.0 by @​renova[https://github.com/takahirom/roborazzi/pull/356](https://togithub.com/takahirom/roborazzi/pull/356)ll/356 **Full Changelog**: takahirom/roborazzi@1.15.0...1.16.0 ### [`v1.15.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.15.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.14.0...1.15.0) ##### Improvements - Resolved a Race Condition in Roborazzi Gradle Integration Tests: In version 1.14.0, we identified an intermittent issue where images from Roborazzi did not always appear in the output directory during certain test scenarios, particularly when test results were cached. Despite efforts to resolve this in 1.14.0, the issue persisted due to its elusive nature. In this release, we have successfully addressed this problem, ensuring that images are now consistently placed in the output directory under similar conditions. This improvement has been verified through our integration tests. This issue may occur in user projects, so we recommend updating to this version. We continue to refine our testing processes to prevent similar issues in future releases. ##### What's Changed - Update CompileSdk 34 by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/344](https://togithub.com/takahirom/roborazzi/pull/344) - Add debug code for flaky test by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/346](https://togithub.com/takahirom/roborazzi/pull/346) - Fix issue where finalizedTask is skipped unexpectedly by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/347](https://togithub.com/takahirom/roborazzi/pull/347) - Improve performance for race condition workaround by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/348](https://togithub.com/takahirom/roborazzi/pull/348) - Improve performance for race condition workaround2 by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/349](https://togithub.com/takahirom/roborazzi/pull/349) - \[CI]Pin dependencies by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/329](https://togithub.com/takahirom/roborazzi/pull/329) - \[CI]Update actions/checkout action to v3.6.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/334](https://togithub.com/takahirom/roborazzi/pull/334) - \[CI]Update actions/setup-java action to v3.13.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/335](https://togithub.com/takahirom/roborazzi/pull/335) - \[CI]Update dawidd6/action-download-artifact action to v2.28.0 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/338](https://togithub.com/takahirom/roborazzi/pull/338) - \[Sample]Update dependency androidx.appcompat:appcompat to v1.6.1 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/339](https://togithub.com/takahirom/roborazzi/pull/339) - \[Sample]Update dependency androidx.constraintlayout:constraintlayout to v2.1.4 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/330](https://togithub.com/takahirom/roborazzi/pull/330) **Full Changelog**: takahirom/roborazzi@1.14.0...1.15.0 ### [`v1.14.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.14.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.13.0...1.14.0) ##### Bug fixes Cache-related Flakiness in Comparison Results: We've identified and resolved an intermittent issue where cached data could sometimes prevent users from seeing comparison results in Roborazzi. [https://github.com/takahirom/roborazzi/pull/323](https://togithub.com/takahirom/roborazzi/pull/323) ##### What's Changed - \[CI]Configure Renovate by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/317](https://togithub.com/takahirom/roborazzi/pull/317) - \[CI]Pin JetBrains/writerside-github-action action to [`5a6920d`](https://togithub.com/takahirom/roborazzi/commit/5a6920d) by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/318](https://togithub.com/takahirom/roborazzi/pull/318) - \[CI]Update actions/checkout digest to [`0ad4b8f`](https://togithub.com/takahirom/roborazzi/commit/0ad4b8f) by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/319](https://togithub.com/takahirom/roborazzi/pull/319) - Update composeMultiplatform to v1.6.2 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/321](https://togithub.com/takahirom/roborazzi/pull/321) - \[Test]Update dependency com.ashampoo:kim to v0.17.7 by [@​renovate](https://togithub.com/renovate) in [https://github.com/takahirom/roborazzi/pull/322](https://togithub.com/takahirom/roborazzi/pull/322) - Fix issue where cache restoration fails by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/323](https://togithub.com/takahirom/roborazzi/pull/323) - \[Test]fix typo in RoborazziGradleProject.kt by [@​sanao1006](https://togithub.com/sanao1006) in [https://github.com/takahirom/roborazzi/pull/325](https://togithub.com/takahirom/roborazzi/pull/325) - \[CI]Remove renovate rule by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/328](https://togithub.com/takahirom/roborazzi/pull/328) ##### New Contributors - [@​renovate](https://togithub.com/renovate) made their first contribution in [https://github.com/takahirom/roborazzi/pull/317](https://togithub.com/takahirom/roborazzi/pull/317) **Full Changelog**: takahirom/roborazzi@1.13.0...1.14.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/chrisbanes/haze). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMzEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjM2OC4xMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Thanks for the merge. Sure. I made the ticket: #383 |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [io.github.takahirom.roborazzi](https://togithub.com/takahirom/roborazzi) | plugin | minor | `1.17.0` -> `1.18.0` | | [io.github.takahirom.roborazzi:roborazzi-junit-rule](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.17.0` -> `1.18.0` | | [io.github.takahirom.roborazzi:roborazzi-compose](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.17.0` -> `1.18.0` | | [io.github.takahirom.roborazzi:roborazzi](https://togithub.com/takahirom/roborazzi) | dependencies | minor | `1.17.0` -> `1.18.0` | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>takahirom/roborazzi (io.github.takahirom.roborazzi)</summary> ### [`v1.18.0`](https://togithub.com/takahirom/roborazzi/releases/tag/1.18.0) [Compare Source](https://togithub.com/takahirom/roborazzi/compare/1.17.0...1.18.0) ##### Migrating from `java.io.File` to `kotlinx-io` **Note: We are not changing the API for users, so the captureRoboImage methods are still using the java.io.File class.** Roborazzi previously used `java.io.File` for saving and loading files. Although Roborazzi supports iOS, sharing much of the logic is challenging when using `java.io.File`. Therefore, we have migrated to `kotlinx-io`. We are attentive to the Kotlin versions our users employ. We upgraded from version 1.9.21 to 1.9.22 due to a dependency on kotlinx-io. Since Kotlin 1.9.22 was released last year, it should be compatible with most projects. Thank you, [@​eyedol](https://togithub.com/eyedol), for your outstanding contribution! Your efforts are greatly appreciated. | \--- org.jetbrains.kotlinx:kotlinx-io-core:0.3.3 | +--- org.jetbrains.kotlinx:kotlinx-io-bytestring:0.3.3 | | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) | \--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22 (*) ##### What's Changed - Migrate from java.io to kotlinx-io by [@​eyedol](https://togithub.com/eyedol) in [https://github.com/takahirom/roborazzi/pull/368](https://togithub.com/takahirom/roborazzi/pull/368) - Use kotlinx-io 0.3.3 to avoid updating Kotlin by [@​takahirom](https://togithub.com/takahirom) in [https://github.com/takahirom/roborazzi/pull/381](https://togithub.com/takahirom/roborazzi/pull/381) ##### New Contributors - [@​eyedol](https://togithub.com/eyedol) made their first contribution in [https://github.com/takahirom/roborazzi/pull/368](https://togithub.com/takahirom/roborazzi/pull/368) **Full Changelog**: takahirom/roborazzi@1.17.0...1.18.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuNCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
@eyedol |
Fixes #302
Changes:
CaptureResult
andCaptureResults
to use classes fromkotlinx.io
as initial implementation to evaluate if it can work.CaptureResult
andCaptureResults
across the projectCaptureResult
andCaptureResults
classes.RoboCanvas
to use classes fromkotlinx.io
.RoboCanvas
use ofkotlinx.io
.To make
RoboConvas
resuable interface across the different supported targets, the issue with differ needs to be fixed so we can moveRoboCanvas
tocommonMain
for reuse.