NativeScript / NativeScript/nativescript-cli

Livesync hangs when modifying App_Resources in before-prepare hook

未关闭
#3,251 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

run to-be-checked
主要语言
JavaScript
星标
1.1k
派生
204
平均合并
1 天 9 小时
30 天内合并 PR
8

描述

Tell us about the problem

When using nativescript-localize with "tns run ios", it tries to sync Localizable.strings without rebuilding the app.

Which platform(s) does your issue occur on?

iOS, haven't tried on Android

Please provide the following version numbers that your issue occurs with:
  • CLI: 3.3.1
  • Cross-platform modules: 3.3.0
  • Runtime(s): 3.3.0
  • Plugin(s): nativescript-localize (2.0.5)
  • iOS 11 on iPhone X emulator
Please tell us how to recreate the issue in as much detail as possible.
git clone --depth 1 --branch v2.0.5 https://github.com/lfabreges/nativescript-localize.git
cd nativescript-localize
npm install
npm run compile
cd demo
npm install
tns run ios

Then make a change in the app/i18n/en.default.js file, change "Hello World !" to "Hello" for example.

Executing before-prepare hook from /Users/lfabreges/Documents/Developpement/nativescript-localize/demo/hooks/before-prepare/nativescript-localize.js
Preparing project...
Project successfully prepared (iOS)
Successfully transferred en.default.js.
Refreshing application...
Successfully synced application org.nativescript.demo.javascript on device ED5FEB43-DDA2-43FD-B693-4E07FD78CB1C.
Skipping prepare.
Successfully transferred Localizable.strings.
Refreshing application...
Successfully synced application org.nativescript.demo.javascript on device ED5FEB43-DDA2-43FD-B693-4E07FD78CB1C.
More

I think the problem occurs because :

  • The plugin modifies Localizable.strings in the App_Resources
  • Prepare is done and savePrepareInfo save the .nsprepareinfo file with a modified time greater that Localizable.strings modified time
  • The watcher detects that a change has been made to the Localizable.strings and add it to the queue
  • Prepared is skipped because no change is detected, appResourcesChanged is not set to true because containsNewerFiles returns false because Localizable.strings has been modified before .nsprepareinfo file is written to disk
  • Localizable.strings is synced but without a rebuild and the app hangs, I need to stop tns run, remove the platforms directory and fully rebuild and resinstall the app to make it work again

I tried to hook into the process but did not find a way to fix it, I triggered a build by modifying appResourcesChanged directly into the plugin, it works but Localizable.strings is stilled synced afterwards, so it hangs again.

I'm the author of the plugin, so I can change it if needed. I definitly need some help on it.

Regards.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

使用列出的 nativescript-localize 演示命令重现问题,然后检查 hooks/before-prepare/nativescript-localize.js、App_Resources 以及 .nsprepareinfo 的处理。跟踪 watcher、prepare-skip 决策和 Localizable.strings 同步之间如何相互作用。完成的标准是:修改 app/i18n/en.default.js 不再导致 iOS 应用卡住,并且所需的重新构建或资源更新能够成功完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
ios, javascript
领域
build-system, cli, mobile-dev
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
38/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。