Skip to content

✨ Get rid of twine replace with Sentiary#48

Merged
ViktorKaderabek merged 7 commits into
mainfrom
Get-rid-of-twine-replace-with-Seniary
Mar 2, 2026
Merged

✨ Get rid of twine replace with Sentiary#48
ViktorKaderabek merged 7 commits into
mainfrom
Get-rid-of-twine-replace-with-Seniary

Conversation

@ViktorKaderabek

@ViktorKaderabek ViktorKaderabek commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

📝 Description

We decided to replace it with Sentiary.

💡 What’s new?

Removal of Twine:
The Twine dependency has been completely removed from the project.

iOS build optimization:
The pre-build action that manually downloaded localization strings has been removed.

Automation:
Localizations are now updated automatically as part of the standard project build process.

😶 What’s missing?

  • FIXME

📚 References

  • FIXME

Summary by CodeRabbit

  • New Features

    • Integrated Sentiary for centralized localization with automatic fetch and dual-format generation (Android Compose resources and native iOS strings).
  • Documentation

    • Updated README and iOS docs to describe the Sentiary workflow and build-time localization behavior.
  • Chores

    • Removed legacy Twine-based localization steps, scripts, and resource references.
    • Added Sentiary configuration and build properties and registered the Sentiary plugin.

@coderabbitai

coderabbitai Bot commented Mar 2, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@ViktorKaderabek has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 21 minutes and 17 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 8c7a62a and aecdcc8.

📒 Files selected for processing (1)
  • ios/README.md

Walkthrough

This PR removes Twine-based localization (tasks, files, checks) and adds Sentiary: new plugin/convention, libs and properties, Sentiary export configuration for Android and iOS, updates scripts/docs, and adjusts generated resource files accordingly.

Changes

Cohort / File(s) Summary
Workflow removal
build-logic/convention/src/main/kotlin/config/TwineConfig.kt, build-logic/convention/src/main/kotlin/plugin/AndroidApplicationConventionPlugin.kt, twine/strings.txt, ios/scripts/generate-strings.sh, ios/scripts/setup.sh, ios/scripts/rename.sh
Removes Twine configuration, task registration, strings resource file, and Twine checks/calls from plugins and scripts.
Sentiary plugin & convention
build-logic/convention/src/main/kotlin/plugin/SentiaryConvention.kt, build-logic/convention/build.gradle.kts, build.gradle.kts, gradle/libs.versions.toml
Adds SentiaryConvention plugin class, registers Sentiary plugin alias/version, and adds compileOnly dependency for Sentiary Gradle plugin.
Project properties and libs
gradle.properties, gradle/libs.versions.toml
Adds sentiary.projectId and sentiary.projectApiKey; declares Sentiary version, library, bundle, and plugin entries.
Shared module integration
shared/base/build.gradle.kts
Applies/configures Sentiary, sets sentiary { exportPaths { ... } } for Android (Compose/MR) and iOS (.lproj), and makes compose/mr prepare task depend on sentiaryUpdateLocalizations.
Localization outputs
shared/base/src/commonMain/moko-resources/base/strings.xml, shared/base/src/commonMain/moko-resources/cs/strings.xml, shared/base/src/commonMain/moko-resources/sk/strings.xml
Reformats and flattens XML resource files (header/comment normalization, reordering) while preserving string keys/values; some localized values updated.
iOS project changes & docs
ios/MateeStarter.xcodeproj/project.pbxproj, ios/README.md, README.md, ios/.gitignore
Removes strings.txt references from Xcode project; updates docs and ignore comments to reflect Sentiary-based flow.
Scripts & project rename text
scripts/rename-project.sh, ios/scripts/*
Removes Twine-related lines from rename/setup scripts and CI/build wrapper scripts.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant DevCI as Dev/CI
  participant Gradle as Gradle
  participant Sentiary as Sentiary Plugin
  participant MRGen as MR Generator
  participant Android as Android/commonMain
  participant Xcode as Xcode/iOS

  DevCI->>Gradle: trigger build (assemble / bundle)
  Gradle->>Sentiary: run sentiaryUpdateLocalizations
  Sentiary->>Sentiary: fetch translations from Sentiary service
  Sentiary->>Android: export (Format.Android) -> src/commonMain/moko-resources
  Sentiary->>Xcode: export (Format.Apple) -> .lproj files in Xcode tree
  Gradle->>MRGen: sentiaryUpdateLocalizations completes -> generate MR resources
  MRGen->>Gradle: resources ready for packaging
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~23 minutes

Suggested reviewers

  • tomas-bat

Poem

🐰 I hopped through build scripts, left Twine behind,
Sentiary seeds now sprout for every kind.
Android and Xcode sing strings in tune,
CI fetches whispers, and builds hum soon. 🥕

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the main changes and removal of Twine, but critical sections remain unfilled with placeholder 'FIXME' text, making it incomplete. Complete the missing 'FIXME' sections: add what else was modified (Sentiary integration details), and provide relevant issue/PR references for context.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main change: removing Twine and replacing it with Sentiary, which aligns with the comprehensive refactoring across the codebase.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Get-rid-of-twine-replace-with-Seniary

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request completes the transition from Twine to Sentiary for managing all application strings and localizations. The change centralizes localization efforts on the Sentiary platform, which automatically fetches and generates translation files for both Android (Compose Resources) and iOS (Apple Strings) during the build process. This significantly simplifies the localization workflow, removes manual steps previously required for iOS builds, and ensures that the latest translations are always incorporated.

Highlights

  • Localization Platform Migration: The project has successfully migrated its localization management from Twine to Sentiary, streamlining the process for both Android and iOS.
  • iOS Build Optimization: The manual pre-build action for downloading localization strings on iOS has been removed, as Sentiary now automates this as part of the standard build process.
  • Automated Localization Generation: Localization strings are now automatically updated and generated during the project build, ensuring consistency and reducing manual effort.
  • Dependency and Configuration Updates: Twine-related dependencies, configuration files, and scripts have been removed, and Sentiary's Gradle plugin and convention have been integrated.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • README.md
    • Updated the 'Resources' section to reflect Sentiary as the new localization platform, detailing its functionality and output formats.
  • build-logic/convention/build.gradle.kts
    • Added sentiary.gradlePlugin to compileOnly dependencies.
    • Registered SentiaryConvention plugin within the gradlePlugin block.
  • build-logic/convention/src/main/kotlin/config/TwineConfig.kt
    • Removed the TwineConfig.kt file, which contained the logic for configuring and generating strings using Twine.
  • build-logic/convention/src/main/kotlin/plugin/AndroidApplicationConventionPlugin.kt
    • Removed the import and call to configureTwine().
  • build-logic/convention/src/main/kotlin/plugin/SentiaryConvention.kt
    • Added a new Kotlin file defining the SentiaryConvention plugin, which applies the Sentiary Gradle plugin and configures its default language.
  • build.gradle.kts
    • Added an alias for the sentiary plugin with apply false.
  • gradle.properties
    • Added sentiary.projectId and sentiary.projectApiKey properties for Sentiary configuration.
  • gradle/libs.versions.toml
    • Added sentiary version definition.
    • Added sentiary-gradlePlugin library definition.
    • Added sentiary plugin definition.
    • Added mateeStarter-kmp-sentiary convention plugin definition.
  • ios/scripts/generate-strings.sh
    • Removed the command ./gradlew generateTwine.
  • ios/scripts/setup.sh
    • Removed the check for Twine installation.
  • shared/base/build.gradle.kts
    • Imported com.sentiary.config.Format.
    • Applied the mateeStarter.kmp.sentiary plugin.
    • Configured the generateMRcommonMain task to depend on sentiaryUpdateLocalizations.
    • Added a sentiary block to configure export paths for Android (Compose Resources) and iOS (Apple Strings), including folder naming strategies.
  • shared/base/src/commonMain/moko-resources/base/strings.xml
    • Regenerated the English string resources XML file, removing Twine-specific comments and reordering entries based on Sentiary's output.
  • shared/base/src/commonMain/moko-resources/cs/strings.xml
    • Regenerated the Czech string resources XML file, removing Twine-specific comments and reordering entries based on Sentiary's output.
  • shared/base/src/commonMain/moko-resources/sk/strings.xml
    • Regenerated the Slovak string resources XML file, removing Twine-specific comments and reordering entries based on Sentiary's output.
  • twine/strings.txt
    • Removed the twine/strings.txt file, which was the source for Twine localizations.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/an_pr_build.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request successfully replaces Twine with Sentiary for managing localizations. The overall implementation is good, with removal of old configurations and addition of new ones. However, there is a critical security issue: a Sentiary API key has been hardcoded in gradle.properties, which exposes it in version control. This key must be moved to a secure location. Additionally, there are a couple of minor maintainability improvements for the generated XML string files, such as ensuring they are sorted and end with a newline, which would make future reviews easier.

Comment thread gradle.properties
Comment thread shared/base/src/commonMain/moko-resources/base/strings.xml
Comment thread shared/base/src/commonMain/moko-resources/base/strings.xml
Comment thread shared/base/src/commonMain/moko-resources/cs/strings.xml
Comment thread shared/base/src/commonMain/moko-resources/sk/strings.xml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
README.md (1)

471-477: ⚠️ Potential issue | 🟡 Minor

Remove stale Twine references from Moko documentation section.

The README.md lines 471-477 reference twine/errors.txt and the generateErrorsTwine gradle task, but the twine directory and all Twine infrastructure have been completely removed from the repository. Update this section to accurately document the current error message handling mechanism for Moko.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 471 - 477, Remove the stale Twine-specific references
(twine/errors.txt and generateErrorsTwine) from the "Moko" README section and
replace them with a brief description of the current workflow: state where error
strings are now stored (the project’s moko-resources resource files used by
moko-resources plugin), and explain that the moko-resources Gradle plugin
generates the MR class (via the existing generateMRCommonMain task) which is
used in common code to reference error messages; mention the MR symbol and the
generateMRCommonMain task as the artifact consumers.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@gradle.properties`:
- Around line 12-13: The file contains committed Sentiary secrets
(sentiary.projectId and sentiary.projectApiKey); remove these values from the
tracked gradle.properties, rotate the exposed API key immediately with Sentiary,
and replace the entries with non-secret placeholders (e.g.,
sentiary.projectId=REPLACE_ME and sentiary.projectApiKey=REPLACE_ME) or load
them from environment/config management instead; update your repo to stop
tracking secrets (git rm --cached or add gradle.properties to .gitignore) and
purge the sensitive value from history using git-filter-repo or BFG to fully
remove the leaked key.

In `@README.md`:
- Around line 463-465: Add a blank line immediately before the "#### Sentiary"
heading in README.md so the heading is separated from the preceding
paragraph/element (i.e., ensure there is an empty line above the line containing
"#### Sentiary"); this fixes the MD022 markdown linting issue and ensures proper
rendering of the Sentiary section.

In `@shared/base/build.gradle.kts`:
- Around line 47-58: The iOS resource outputDirectory configured inside
create("iOS") uses a duplicated path segment; update the
outputDirectory.set(...) call to point at the real iOS localization folder (e.g.
"ios/PresentationLayer/Resources/Localizable") instead of
"ios/PresentationLayer/Sources/PresentationLayer/Sources/PresentationLayer/Resources/Localizable";
keep the same create("iOS") block and folderNamingStrategy but simplify the path
to the correct existing directory or the intended target directory.

In `@shared/base/src/commonMain/moko-resources/cs/strings.xml`:
- Line 21: Update the Czech locale strings.xml entry for sample_feature_title so
it is translated to Czech instead of English; locate the <string
name="sample_feature_title"> element in the Czech resources (cs strings.xml) and
replace "Sample feature" with the proper Czech translation (e.g., "Ukázková
funkce") ensuring the XML string value is properly escaped if needed.

In `@shared/base/src/commonMain/moko-resources/sk/strings.xml`:
- Line 21: The string resource with name "sample_feature_title" is still
English; update its value in the Slovak localization by replacing "Sample
feature" with the correct Slovak translation (e.g., "Ukážková funkcia") in the
sk strings.xml entry so the UI is fully localized for the "sample_feature_title"
resource.

---

Outside diff comments:
In `@README.md`:
- Around line 471-477: Remove the stale Twine-specific references
(twine/errors.txt and generateErrorsTwine) from the "Moko" README section and
replace them with a brief description of the current workflow: state where error
strings are now stored (the project’s moko-resources resource files used by
moko-resources plugin), and explain that the moko-resources Gradle plugin
generates the MR class (via the existing generateMRCommonMain task) which is
used in common code to reference error messages; mention the MR symbol and the
generateMRCommonMain task as the artifact consumers.

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a78a1df and c2e5336.

📒 Files selected for processing (16)
  • .github/workflows/an_pr_build.yml
  • README.md
  • build-logic/convention/build.gradle.kts
  • build-logic/convention/src/main/kotlin/config/TwineConfig.kt
  • build-logic/convention/src/main/kotlin/plugin/AndroidApplicationConventionPlugin.kt
  • build-logic/convention/src/main/kotlin/plugin/SentiaryConvention.kt
  • build.gradle.kts
  • gradle.properties
  • gradle/libs.versions.toml
  • ios/scripts/generate-strings.sh
  • ios/scripts/setup.sh
  • shared/base/build.gradle.kts
  • shared/base/src/commonMain/moko-resources/base/strings.xml
  • shared/base/src/commonMain/moko-resources/cs/strings.xml
  • shared/base/src/commonMain/moko-resources/sk/strings.xml
  • twine/strings.txt
💤 Files with no reviewable changes (6)
  • ios/scripts/generate-strings.sh
  • build-logic/convention/src/main/kotlin/plugin/AndroidApplicationConventionPlugin.kt
  • ios/scripts/setup.sh
  • build-logic/convention/src/main/kotlin/config/TwineConfig.kt
  • twine/strings.txt
  • .github/workflows/an_pr_build.yml

Comment thread gradle.properties
Comment thread README.md
Comment thread shared/base/build.gradle.kts
Comment thread shared/base/src/commonMain/moko-resources/cs/strings.xml Outdated
Comment thread shared/base/src/commonMain/moko-resources/sk/strings.xml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ios/README.md (1)

63-79: ⚠️ Potential issue | 🟠 Major

Localization docs are inconsistent: Twine references remain after Sentiary migration.

The new Sentiary section conflicts with existing Twine instructions at Line 76-Line 78 (twine/errors.txt, generateErrorsTwine). This leaves broken guidance in the same chapter.

Suggested diff
 ### Moko
 
 - Error messages are shared via [Moko Resources](https://github.com/icerockdev/moko-resources), so
   that we can use the strings in the shared code and avoid duplicities when converting errors to
   string messages
-- Error strings are stored in the `twine/errors.txt` file
-- Script `generate-error-messages.sh` calls needed gradle tasks (`generateErrorsTwine`
-  and `generateMRCommonMain`) to generate `MR` class
+- Error strings are sourced from Sentiary exports used by the build pipeline.
+- Keep Moko generation instructions aligned with the current Sentiary-backed Gradle tasks.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ios/README.md` around lines 63 - 79, The README mixes old Twine instructions
with the new Sentiary workflow causing confusion; remove or update the obsolete
Twine references (twine/errors.txt, generateErrorsTwine, generateMRCommonMain,
MR class) and either delete the generate-error-messages.sh section or replace it
with the current Sentiary steps (how Sentiary exports Apple .strings and Compose
resources and any Gradle plugin tasks), and ensure the README consistently
documents only Sentiary usage and the correct script/Gradle task names.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@ios/README.md`:
- Around line 63-64: Under the "## Localization" section update the Sentiary
heading from "#### Sentiary" to "### Sentiary" and insert a single blank line
immediately after that heading so the paragraph starting "All strings and
localizations..." is separated by an empty line, ensuring Markdown lint rules
are satisfied.

---

Outside diff comments:
In `@ios/README.md`:
- Around line 63-79: The README mixes old Twine instructions with the new
Sentiary workflow causing confusion; remove or update the obsolete Twine
references (twine/errors.txt, generateErrorsTwine, generateMRCommonMain, MR
class) and either delete the generate-error-messages.sh section or replace it
with the current Sentiary steps (how Sentiary exports Apple .strings and Compose
resources and any Gradle plugin tasks), and ensure the README consistently
documents only Sentiary usage and the correct script/Gradle task names.

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2e5336 and b7f82e8.

📒 Files selected for processing (3)
  • ios/MateeStarter.xcodeproj/project.pbxproj
  • ios/README.md
  • ios/scripts/rename.sh
💤 Files with no reviewable changes (2)
  • ios/scripts/rename.sh
  • ios/MateeStarter.xcodeproj/project.pbxproj

Comment thread ios/README.md Outdated
@DavidKadlcek DavidKadlcek self-requested a review March 2, 2026 15:23
DavidKadlcek
DavidKadlcek previously approved these changes Mar 2, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@ios/README.md`:
- Around line 65-70: The README still contains an outdated Moko subsection
referencing twine/errors.txt and the generateErrorsTwine task; update it to
reflect that all strings (including error strings) are now handled by Sentiary
or remove the Moko section entirely. Specifically, remove references to
generateErrorsTwine and twine/errors.txt (or replace them with a short note
explaining error strings are fetched via the Sentiary Gradle task), and mention
that generateMRcommonMain depends on sentiaryUpdateLocalizations so the Sentiary
flow provides Compose resources and Apple .strings; ensure the section mentions
Sentiary and the sentiaryUpdateLocalizations task by name to make the new flow
explicit.

In `@README.md`:
- Around line 465-470: Update the Sentiary section to stop claiming it manages
"All strings and localizations" and instead state it manages application UI
strings only; explicitly call out that error strings are handled separately via
the Twine/Moko pipeline (referencing twine/errors.txt and the Gradle task
generateErrorsTwine) and note that although generateMRCommonMain depends on
sentiaryUpdateLocalizations, Twine tasks remain active for error generation; add
a short sentence pointing readers to the Twine error file and the
generateErrorsTwine task for maintenance and where to find generated error
resources.

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b7f82e8 and 613da79.

📒 Files selected for processing (6)
  • README.md
  • ios/.gitignore
  • ios/README.md
  • scripts/rename-project.sh
  • shared/base/src/commonMain/moko-resources/cs/strings.xml
  • shared/base/src/commonMain/moko-resources/sk/strings.xml

Comment thread ios/README.md
Comment thread README.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
shared/base/build.gradle.kts (1)

47-50: ⚠️ Potential issue | 🟠 Major

Fix duplicated iOS output path segments in Sentiary export config.

At Line 49, the configured output path repeats PresentationLayer/Sources/ and is likely incorrect for the iOS resources destination.

🛠️ Proposed fix
         create("iOS") {
             format.set(Format.Apple)
-            outputDirectory.set(rootProject.layout.projectDirectory.dir("ios/PresentationLayer/Sources/PresentationLayer/Sources/PresentationLayer/Resources/Localizable"))
+            outputDirectory.set(rootProject.layout.projectDirectory.dir("ios/PresentationLayer/Resources/Localizable"))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@shared/base/build.gradle.kts` around lines 47 - 50, The iOS export target
created by create("iOS") has a duplicated segment in the
outputDirectory.set(...) path; update the string passed to
rootProject.layout.projectDirectory.dir(...) to remove the repeated
"PresentationLayer/Sources/" so the path becomes
"ios/PresentationLayer/Sources/PresentationLayer/Resources/Localizable" (leave
the create("iOS") and format.set(Format.Apple) lines unchanged).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@ios/README.md`:
- Around line 74-75: Remove the trailing whitespace at the end of the sentence
"Strings are shared via [Moko
Resources](https://github.com/icerockdev/moko-resources), so" in ios/README.md
(the line referenced in the diff) so the line no longer ends with extra spaces;
ensure the file contains no trailing spaces on that line to satisfy MD009.

---

Duplicate comments:
In `@shared/base/build.gradle.kts`:
- Around line 47-50: The iOS export target created by create("iOS") has a
duplicated segment in the outputDirectory.set(...) path; update the string
passed to rootProject.layout.projectDirectory.dir(...) to remove the repeated
"PresentationLayer/Sources/" so the path becomes
"ios/PresentationLayer/Sources/PresentationLayer/Resources/Localizable" (leave
the create("iOS") and format.set(Format.Apple) lines unchanged).

ℹ️ Review info

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 613da79 and 8c7a62a.

📒 Files selected for processing (3)
  • README.md
  • ios/README.md
  • shared/base/build.gradle.kts

Comment thread ios/README.md Outdated
@DavidKadlcek DavidKadlcek self-requested a review March 2, 2026 15:57
@ViktorKaderabek ViktorKaderabek merged commit c10d307 into main Mar 2, 2026
5 checks passed
@ViktorKaderabek ViktorKaderabek deleted the Get-rid-of-twine-replace-with-Seniary branch March 2, 2026 16:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants