Flutter: 代码推送/热更新/带外更新

创建于 2018-01-29  ·  171评论  ·  资料来源: flutter/flutter

由于此评论中讨论的原因,这目前不在 Flutter 的路线图上:
https://github.com/flutter/flutter/issues/14330#issuecomment -485565194

此评论还简要概述了您可能正在考虑的各种“热更新”功能,并提供了引用它们的术语,如果您希望就该主题进行明确的交流,这会有所帮助:
https://github.com/flutter/flutter/issues/14330#issuecomment -442274897


经常有人问 Flutter 是否支持“代码推送”或“热更新”或其他类似的名称来将店外更新推送到应用程序。

目前,我们不提供这种开箱即用的解决方案,但主要的阻止程序不是技术性的。 Flutter 支持在 Android 和 iOS 设备上实时 (JIT) 或基于解释器的执行。 目前我们在 --release 构建期间删除了这些库,但是我们可以轻松地包含它们。

此功能的主要障碍解决了 iOS 生态系统当前的怪癖,这些怪癖可能需要应用程序使用 JavaScript 来实现这种无线更新功能。 值得庆幸的是,Dart 支持编译为 JavaScript,因此人们可以想象几种方式将应用程序的一部分编译为 JavaScript 而不是 Dart,从而允许替换或扩充部署的二进制文件中的这些部分。

这个错误跟踪添加一些像这样受支持的解决方案。 我会在这里欺骗所有其他报告。

P5 production crowd engine passed first triage new feature

最有用的评论

我们已经在这里构建了一些基本原型,但目前没有任何真正可以分享的内容。 要真正做到这一点,需要在 Dart 的编译器工具链中做一些工作。 我预计还需要几个月的时间,我们才能在这里分享很多东西。 该团队目前专注于 1.0 的稳定性。

说了这么多,我们听到了。 :) 这显然是许多人重视的功能,我们有兴趣最终提供这样的功能。

所有171条评论

抄送@floitschG

另见
https://groups.google.com/forum/#!msg/flutter -dev/YwzItp1pxJo/7bFGDLvxBAAJ
我会对此感到非常兴奋。

我认为这将是相当重要的,因为这可能是 React Native 唯一真正与众不同的特征之一,不幸的是,有些公司可能会认为这是破坏交易的。

用例

  • 严重错误,尤其是在 iOS 上,尤其是对于 VIP 或紧急、时间敏感的情况、关键业务和/或由于某种原因根本无法使用该应用程序的用户。
  • 比分阶段推出更多的功能动态测试
  • 这将是为 Fuschia 和/或 Chromebook 做准备的不错选择。 在某些情况下,flutter 可能与 web 应用程序“竞争”,而不仅仅是 pwas/Kotlin/Swift/React/Xamarin/other-junkier-hybrid 解决方案

在 Flutter 与 React Native 的史诗般的战斗中,代码推送是一个非常棒的工具(:
作为一名 RN 开发人员,我怎么强调这个功能的重要性都不为过。 许多人会因为没有热推而通过 Flutter。 一旦习惯了快速修复错误并推送新功能,您就无法回头。

编译为 javascript 路径会削弱 dart 的优势,对吗?
我发现一些本机应用程序曾经能够使用 Rollout.io 重新加载代码,但它被 Apple 阻止了: https ://news.ycombinator.com/item?id=13817557
看看这种模式,似乎 flutter 不会像我们在 react native 上看到的那样具有无缝的代码推送功能。
希望从核心维护者那里更多地了解此功能的可能性(:

编译为 javascript 路径会削弱 dart 的优势,对吗?

你说的是什么优势?

非常需要代码推送。 很高兴在 Flutter 上看到无线升级发布的可能性。

我们刚刚有一个带有生产应用程序的实时用例,其中我们收到了很多差评,该功能似乎有点边缘情况(与在并非每个测试帐户都有的用例中拒绝位置许可有关)但实际上不是'吨。

代码推送功能可以立即为用户推送关键修复程序,而不是等待他们升级; 出于某种原因,用户有时升级速度似乎很慢:(

没有热代码推送支持是不行的:-(

看起来解释代码可能不再需要 JavascriptCore: https :

如果 IOS 生态系统是一个障碍,为什么不暂时仅在 Android 上实施? 总比没有好,它是一个起点。

非常感谢团队尽快实施此功能。

我们已经在这里构建了一些基本原型,但目前没有任何真正可以分享的内容。 要真正做到这一点,需要在 Dart 的编译器工具链中做一些工作。 我预计还需要几个月的时间,我们才能在这里分享很多东西。 该团队目前专注于 1.0 的稳定性。

说了这么多,我们听到了。 :) 这显然是许多人重视的功能,我们有兴趣最终提供这样的功能。

Flutter 的“代码推送”支持可能是 React Native 棺材上的最后一颗钉子。

鉴于我对 RN 和 RN 社区的热爱,作为改变游戏规则的人,它不是 Flutter 的对手。
Flutter 只是在任何方面(工具、性能、语言……)都做到了。

在 1.0 命中并且社区增长一点点之后 + 代码推送支持 = 看不出有任何理由使用 Flutter 以外的任何东西开始一个新的移动项目。

“代码推送”有什么进展??

动态替换完整的 .so 有多可行? 整个编译器工具链、代码抖动等不应该被引导到人们可能会或可能不会受益的有争议的边缘情况,因为优先级列表的顶部总是会有票。

我认为应该有“侧载”完整 .so 文件的空间,因此从 dart 到机器代码的构建仍然可以完全相同。 可以为一个小但完全独立的组件分配以下“最小可行功能”:下载 .so 并用它替换最初发布的一个,然后使用主要启动意图重新启动应用程序。

额外职责:下载资产、验证签名等等。 更新 flutter/dart/skia 引擎等等。

在我看来它违反了 iOS 指南,但我真的不喜欢任何解释的东西,或者一般的 iOS。 我宁愿在 Android 中拥有它也不愿根本没有它,只是因为它很酷。

至少下载部分似乎是可行的,因为我们允许在后台进行一些隔离工作,但看看如何将原始 .so 与下载的文件交换会很有趣。 也许额外的 .so 或 java 代码可以完成那部分工作,但它将位于代码文件夹中,不确定应用程序本身是否可以修改它,因此可能需要进行一些调整,以便颤振引擎从内部加载所有应用程序的 .so数据?

开始使用颤振改进我的公司应用程序。 然而,由于我们仍处于测试阶段并不断快速测试新的 UI 和功能,因此我们的主要需求是具有热更新功能。 会活着有这个功能。

任何更新?
(我敢打赌该功能已经完成,当 1.0 出现时会令人惊讶)
😁

投票

阻止我们使用 Flutter 的原因只有一个:代码推送

如果你们不支持代码推送,有没有办法让解析器从一些字典(比如 json、xml...)生成到 Flutter Widget? 这是不可能的还是一个好主意?

这听起来有点有希望。 如果需要,Firebase 远程配置到小部件。
虽然让公司知道他们想要什么也有帮助:)

2018 年 10 月 12 日星期五上午 3:45 Hưng Lương Đỗ Minh通知@ github.com
写道:

如果你们不能支持代码推送,有没有办法让解析器
从某些字典(如 json、xml...)生成到 Flutter Widget? 是
这是不可能的还是一个好主意?


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/flutter/flutter/issues/14330#issuecomment-429251785
或静音线程
https://github.com/notifications/unsubscribe-auth/AC4TYe9qDMi4bt2U5qyyAnJisN3ys_Z5ks5ukFavgaJpZM4RxUZi
.

我认为至少可以通过网络从服务器下载用 Dart 编写的 UI/View。
要获得灵感,请查看 Qt Quick 框架是如何做到的。

QtDD12 - 通过网络服务 QML 应用程序 - Jeremy Laine:

期待它可以包含在即将到来的 1.0 版本中!

我们的许多客户将在具有严格防火墙的自助服务终端设备上使用我们的 Flutter 应用程序,这会阻止 Google 商店的应用程序更新机制。 这些客户不会将 Play 商店列入白名单。 我们最终将拥有 100 多个带有 Flutter 应用程序的硬件设备,并且能够在遵守客户防火墙限制的同时将更新推送到应用程序将是非常棒的!

@eseidelGoogle - 你们在这里提供了一些更新已经有一段时间了。

你们还在做这个吗? 事情进展如何?

进展仍在继续。 目前没有可分享的更新。

对于今天早些时候人们将其归入此错误的内容,我们提出了三个明确的术语:

  • “动态补丁”:通过下载补丁(各种)并将其提供给 Dart VM 来更新现场应用程序的 Dart 代码的能力。 这需要重新加载应用程序才能生效。
  • “动态扩展加载”:能够下载一些在应用首次发布时未编写的 Dart 代码,从而为应用添加了新功能。 这可以即时完成。 它可能需要更大的核心应用程序,因为我们无法提前知道每个未来扩展需要什么。
  • “模块化应用交付”:能够在编译时将单个应用打包成多个单独的存档,并根据需要独立下载。

我们可能应该将这个问题分成三个可以单独跟踪的错误。

这对于iOS真的可行吗? 除了 Apple 可能会像使用 rollout.io那样禁止它

Apple 当前(或将来)允许/不允许的操作与技术实现完全分开。 Flutter 可以在 iOS 以外的很多地方运行。 显然,我们总是希望设计可以在 iOS 上运行的技术(因为我相信许多可能的“代码推送”解决方案都可以),但 iOS 并不是唯一的考虑因素。 希望有帮助吗?

没有看到 Code Push 在 1.0 中发布真的很难过。 像其他人一样,这是我不能在需要无需等待应用程序商店即可打补丁的项目中使用它的主要原因。
我很欣赏到达那里的艰巨任务,祝你好运。

阻止我们使用 Flutter 的原因只有一个:代码推送

想留下我的反馈只是为了表明我对这个话题的兴趣。
我的公司开发了一个仅限 android 的多客户应用程序来管理维护团队。 2018 年,我们发布了大约 100 个更新,其中没有一个通过 Google Play 请求新版本,因为其中大多数是每个客户需要的小调整和自定义,这些都是事先无法预测的。
在 Flutter 中重写这个应用程序将是一个梦想,但除了重写成本之外,浪费金钱等待通过 GPlay 发布修复或自定义将是一场噩梦。

希望尽快实现

还有一点:如果 Flutter 团队官方提供了热修复解决方案,我认为苹果可能会在某个时候拒绝所有 Flutter 构建的应用程序,因为热修复肯定打破了 AppStore 审核指南,开发者可以绕过 AppStore 审核并修改他们的app,对用户来说是不安全的。

目前苹果拒绝所有带有 JsPatch 的应用程序,这是中国最流行的热修复解决方案。 JsPatch 建立在 JsCore 和 OC 运行时之上。

我想构建没有热修复功能的 Flutter 应用程序,而不是将来可能被苹果拒绝的应用程序。

@MaxZeng很高兴了解 JsPatch。 但就目前而言,似乎允许进行热修补。 Apple 商店中有许多 React Native 应用程序,它们都通过 CodePush 使用热补丁。

如果只有 iOS/android 支持,比如这个例子:
MyFlutterApplication请求许可/想要更新您的应用
更新日志:添加小猫和狗(v1.0)
允许| 不允许

在审查了双方的指导方针后。

@MaxZeng很高兴了解 JsPatch。 但就目前而言,似乎允许进行热修补。 Apple 商店中有许多 React Native 应用程序,它们都通过 CodePush 使用热补丁。

是的,ReactNative 目前是代码推送的一个例外,但这并不意味着 Apple 正式支持它。 我们公司的App最近因为RN之类的框架被AppStore拒绝了3次以上,而且我们不得不用OC/H5重写这些功能,对开发者来说简直是噩梦。

React Native 对 Apple 来说仍然是一个SAFE框架,因为它最终渲染在 UIKit 之上,但 Flutter 完全不同:
1、首先,它打破了苹果的开发者生态系统,绕过了UIKit框架,脱离了苹果的控制,例如AppStore中将会有越来越多的MD风格的应用,这可能违反了苹果的人机界面指南。 苹果是一家著名的公司,因为它的设计很棒。
2、其次,如果Flutter官方支持hot-reload,苹果可能会以此为由直接拒绝Flutter Apps。

在我看来,Flutter 应该遵循 AppStore Review Guideline 而不是打破它,这对于跨平台移动框架很重要,你不应该打破 Apple 的生态系统,因为我们可以做到。 如果苹果拒绝了 Flutter,Flutter 的关键优势也就荡然无存了。

CodePush 并不是什么硬性或神秘的技术,Apple 可以很容易地实现它(尤其是基于 OC),Apple 不允许它的唯一原因是它对最终用户不安全,这完全破坏了 AppStore/Google Play。 如果许多应用程序可以随时随地更改其功能,则是一场灾难,并且在允许该应用程序发布后很难追踪和限制这些有害行为。

CodePush 不仅仅是一种技术,它是移动生态系统的重要组成部分。 我认为 Flutter 团队不应该正式提供这种技术,虽然它可能会被一些开发者私下实现,但这没关系,因为它不会被广泛使用。

@MaxZeng很高兴了解 JsPatch。 但就目前而言,似乎允许进行热修补。 Apple 商店中有许多 React Native 应用程序,它们都通过 CodePush 使用热补丁。

是的,ReactNative 目前是代码推送的一个例外,但这并不意味着 Apple 正式支持它。 我们公司的App最近因为RN之类的框架被AppStore拒绝了3次以上,而且我们不得不用OC/H5重写这些功能,对开发者来说简直是噩梦。

React Native 对 Apple 来说仍然是一个 _SAFE_ 框架,因为它最终渲染在 UIKit 之上,但 Flutter 完全不同:
1、首先,它打破了苹果的开发者生态系统,绕过了UIKit框架,脱离了苹果的控制,例如AppStore中将会有越来越多的MD风格的应用,这可能违反了苹果的人机界面指南。 苹果是一家著名的公司,因为它的设计很棒。
2、其次,如果Flutter官方支持hot-reload,苹果可能会以此为由直接拒绝Flutter Apps。

在我看来,Flutter 应该遵循 AppStore Review Guideline 而不是打破它,这对于跨平台移动框架很重要,你不应该打破 Apple 的生态系统,因为我们可以做到。 如果苹果拒绝了 Flutter,Flutter 的关键优势也就荡然无存了。

CodePush 并不是什么硬性或神秘的技术,Apple 可以很容易地实现它(尤其是基于 OC),Apple 不允许它的唯一原因是它对最终用户不安全,这完全破坏了 AppStore/Google Play。 如果许多应用程序可以随时随地更改其功能,则是一场灾难,并且在允许该应用程序发布后很难追踪和限制这些有害行为。

CodePush 不仅仅是一种技术,它是移动生态系统的重要组成部分。 我认为 Flutter 团队不应该正式提供这种技术,虽然它可能会被一些开发者私下实现,但这没关系,因为它不会被广泛使用。

非常有趣的一点,在某些方面听起来很合理,但也有一些错误。

  1. Flutter 也支持苹果的 Cupertino ,MD 并不是唯一的选择。
  2. 您可能知道游戏领域的 Unity,Flutter 的渲染系统在某些方面的工作方式类似。
  3. 事实上和现在,使用 web(JS) 可以实现 CodePush 并绕过 AppStore 的审查来修改他们的应用程序。 那么为什么要拒​​绝 Flutter(dart) 而放弃 JS。

那么为什么要拒​​绝 Flutter(dart) 而放弃 JS。

JS 在沙箱中运行,因此是安全的。 (就像 Safari 中每个加载的网页一样)

Dart 编译为二进制代码,不受此类沙箱的限制。

我是多年的 android 开发人员。 我认为代码推送不是那么重要。
如果没有Code Push,你就不能开发? 如果是这样,那就太愚蠢了。
Flutter 是一个移动框架,所以首先你必须学习更多的移动开发知识。
没有代码推送,你可以使用完整更新。
正如广告所说:人到了就过桥。
作为一个开发者,我认为使用不同的方法来解决同样的问题更重要。


Flutter 不是 React Native,你不能用 React Native(或其他框架)的经验来看待 Flutter。它们是不同的东西。

@MaxZeng也许 flutter 可以为 Android 专门启用热更新。

没有像 RN 这样的热更新,我们就不会迁移到 Flutter! 框架应该让开发者的生活更轻松!!

我等待的花都没有了。

@MaxZeng也许 flutter 可以为 Android 专门启用热更新。

1、实际上它也会破坏Google Play商店的生态系统,它会使Android团队难以控制App行为。
2、CodePush对于大多数App来说不是必须的,这个技术会被一些开发者恶意利用。
3、如果开发者没有正确加密补丁,可能会导致大规模的“中间人攻击”,恶意黑客可能会修改推送代码来劫持Flutter Apps。

我只想说,hotfix 是大多数中国公司的一个重要功能。 超过 70% 的中国 Android 设备不支持 Google Play

@act64检查https://github.com/flutter/flutter/wiki/Roadmap

路线图说在 Android 上进行了修补程序。希望很快就会支持 iOS。

@taibaiyinxing Flutter 无法提供 Apples App-store 不允许的功能。

@taibaiyinxing Flutter 无法提供 Apples App-store 不允许的功能。

@zoechi我们使用企业应用程序,我们不需要上传到应用程序商店。

Android 上的动态补丁,允许将代码更新直接从服务器部署到在 Android 上运行的 Flutter 应用程序。
🎉

https://github.com/flutter/flutter/wiki/Roadmap

今年好像没有在IOS上支持CODE PUSH的计划。

https://github.com/flutter/flutter/wiki/Roadmap

“这里的清单不应被视为详尽无遗,也不应被视为我们将完成所有这些工作的承诺。” :)

代码推送工作仍处于相对较早的测试阶段。 我们将/不会在 2019 年将该工作部署到哪些平台尚未确定。 毕竟才二月。 10个月是一段很长的时间!

目前工程师专注于构建核心技术以支持@Hixie概述的 3 个用例: https :
我预计在接下来的几个月中,我们将开始对这些用例中的至少一个进行一些有限的测试。

因为我们的flutter开发技术还不是很成熟,APP更新频繁,很多都是紧急更新。 而且我们的应用程序不打算上传应用程序商店。 所以这个功能非常重要。 这样可以提高APP的迭代速度。 否则APP的碎片化导致我们的api延迟。

我想我们都同意,这个问题的驱动因素是通过谷歌和苹果(商店)管理的围墙花园向最终用户提供任何移动应用程序,这对应用程序开发人员来说是一个主要的不便(更不用说为优秀/创新应用程序的最终用户提供糟糕的服务),Apple 是最不方便的(Apple 需要数天,而 Google 需要数小时)。

作为一个侧面,一个可能的解决方案可能是,如果商店为“受信任的”开发人员提供即时更新的路径(如快速通道服务)。 然后,Google 和 Apple 可以对应用程序进行实时审核(自动化,...就像 AI 一样??...根据需要进行事后自动回滚)。 但由于一系列技术和其他原因,这似乎不太可能。 两家商店当然都有 Beta 测试人员的快速通道。

所以...在等待此问题中的功能时,减轻向最终用户提供任何移动应用程序所涉及的不便的一种方法是自动化这些步骤。

有关为 Flutter 执行此类自动化的工具的示例,请参阅:
https://github.com/mmcc007/fledge
作为记录,它包括许多一次性设置步骤的文档,这些步骤不容易自动化:
https://mmcc007.github.io/fledge/

@charliezzo使用此工具或类似工具,可以在几分钟内将 Flutter 应用程序(和更新等)交付给 android 和 ios beta 测试人员。

它还具有通过商店自动向最终用户交付的工作流程(Google 需要几小时,Apple 需要几天 😂👍)。

@mmcc007
哦谢谢。 但我说我不想将我的应用推送到 google play 和应用商店。
我需要以其他方式销售我的应用程序。
我不需要谷歌播放和应用程序商店来更新我的应用程序。
我只想在用户安装并启动它时自行更新我的应用程序。
而且,flutter 是一个 60FPS 或更高的框架,它可以制作网络游戏,我们不想在 google play 和 app store 上有一个小补丁。
您知道 google play 和 app store 短时间内的每个补丁都是缓慢而艰难的。
事实上你知道我们不能在中国使用谷歌游戏。 和应用商店很慢。
中国有很多像google play这样的应用商店。我们没有时间向每个应用商店推送更新。

代码推送应该是 Flutter 的主要功能。 把它放在上面。

我们可以通过替换Android上app_flutters中的所有文件来实现

嗨,你可以给我你的电子邮件以供进一步讨论,我们的团队也找到了这个解决方案,但它只能在必须杀死应用程序并重新启动应用程序时才能工作。 tks @LNeway

hi can you give me your email for further discussion,our team also found this solution, but it can work only when the application must be killed and restart app。tks @LNeway
@KinsomyJS
我也是跑了个demo验证可行性. 哈哈哈~

请在此处分享简短的片段或博客文章或评论,或在电子邮件中抄送[email protected] ...

@LNeway @KinsomyJS你们中的任何一个都可以提供更多详细信息吗?
谢谢

@taibaiyinxing Flutter 无法提供 Apples App-store 不允许的功能。

@zoechi您是说您和/或 Flutter 团队的分析得出结论,Flutter 可行的代码推送技术与 React-native 的代码推送技术根本不同,并且是被禁止的——因此,由于 Apple 的原因,可能永远不会出现在 iPhone 上?

如果添加此功能,是否会支持 beta 1.0.0?

@dahabdev

就其价值而言,根据我使用 Ionic 的经验,我认为“代码推送”被高估了,我希望 Flutter 团队不要花太多时间在它上面,因为仍然缺少许多其他基本的基本功能。

早在我开发 UAVForecast 时,我就使用了 Ionic,被“离子部署”功能所吸引,该功能可提供远程更新应用程序的全部内容。 当时(2014 年),Apple 的 App Store 审核时间约为 2 周。 正如他们所说,我想快速迭代、快速移动并打破常规。

起初“离子部署”很棒,但很快,我发现了一些主要问题。 它给我的用户造成了困惑(“应用程序说它已经更新了,那么为什么 Play 商店/App Store 中还有另一个待处理的更新?”); 有时它会破坏应用程序,例如当应用程序元数据(例如权限)被 Cordova 插件默默更改但没有通过热代码推送更新时; 跟踪版本号很棘手,它们会与我推送到商店的内容不同步; 这让我对测试变得懒惰,因为我总是可以“离子部署”自己摆脱错误; 有时我最终会推送更严重的错误,如果我给他们机会查看,这些错误可能会被应用审查团队发现。

在我发布第一个版本大约一年后,App Store 的审核时间有了显着改善。 今天,它缩短到短短几天,当然,在 Google 的 Play 商店中,它可以短至几个小时。 考虑到我遇到的所有问题,我决定从我的应用程序中删除“离子部署”功能,现在有几百万次下载,我没有回头。

虽然我喜欢 Ionic 并且真的很欣赏它的开发者 Drifty 所做的一切(谢谢!),但我认为 Drifty 犯了一个错误,就是在吸引用户的代码推送等光鲜功能上投入了太多时间,而没有足够的时间来获得框架的螺母和螺栓是正确的,以避免最终将它们赶走的问题。 现在在它的第四个版本中,Ionic 已经以向后不兼容的方式重写了很多次,我已经停止尝试跟上 - 最新版本仍然有几个严重的问题阻止我升级,我现在正在重写我的整个应用程序扑。

到目前为止的体验非常好,我玩得很开心,但是 Flutter 仍然存在一些主要的差距和遗漏,尤其是在插件方面。 例如:没有与密码自动填充的文本字段集成,谷歌地图插件是准系统(并且存在相关的框架渲染错误),原生 WebView 不支持用于加载资源的 file:// URLs,标签栏不支持支持透明度或渐变背景,表格单元格不支持 colspan,ThemeData 不可扩展应用特定颜色以与动画一起使用,唯一完全时区感知的 DateTime 库缺少许多重要的时刻和时刻时区功能,有这么多的状态管理方法让新手感到困惑,你必须经常“清理干净”以避免奇怪的异常,热插拔通常不能正常工作,我可以继续......

我会将这些 _all_ 列为比“代码推送”更重要,特别是如果它冒着 Apple 拒绝 Flutter 应用程序的风险,如果它需要对编译器框架进行重大更改,最终可能使提高应用程序性能的优化变得更加困难(我会采取任何一天都比“代码推送”提高 5% 的性能),或者需要时间来完成框架功能。

另一方面,我可以看到一些开发商在某些情况下可能真的需要它,特别是如果他们在商店外经营,所以我能理解这里的热情。

@matthewlloyd很多要点!

如果你们不支持代码推送,有没有办法让解析器从一些字典(比如 json、xml...)生成到 Flutter Widget? 这是不可能的还是一个好主意?

——有人对这个有意见吗?
https://pub.dartlang.org/packages/dynamic_widget
它看起来很有希望,尽管它没有解决“严重错误”的恐惧。

最疯狂的部分是代码推送是房间里的大象,这是一个业务/流程问题和技术问题,一方倾向于忽略另一方......

没有与密码自动填充的文本字段集成,Google Maps 插件是准系统(并且存在相关的框架渲染错误),本机 WebView 不支持用于加载资产的 file:// URL,标签栏不支持透明度或渐变背景,表格单元格不支持 colspan,ThemeData 不能使用特定于应用程序的颜色来扩展以与动画一起使用,唯一完全时区感知的 DateTime 库缺少许多重要的时刻和时刻时区功能,有很多方法对于状态管理来说,新手很困惑,你必须经常“清理干净”以避免奇怪的异常,热插拔通常不能正常工作,我可以继续......

希望所有这些都已经有 Github 问题:D

这之前在我们 2019 年的路线图上。经过更详细的调查后,我们决定暂时不进行这项工作。

有几个因素导致我们做出这个决定:

  • 为了符合我们对 Android 和 iOS 商店政策的理解,任何解决方案都将仅限于 Android 上的 JIT 代码和 iOS 上的解释代码。 我们不相信 iOS 上此类解决方案的性能特征会达到我们对产品的质量要求。 (换句话说,“这太慢了”。)

  • 有一些严重的安全问题。 由于这些补丁本质上允许执行任意代码,因此它们将是极具吸引力的恶意软件载体。 我们可以通过要求使用与原始包相同的密钥对补丁进行签名来缓解这种情况,但这很容易出错,任何错误都会产生严重的后果。 从根本上说,这与允许执行来自第三方来源的代码的平台存在相同的问题。 这个问题可以通过与平台更新机制集成来缓解,但这违背了带外修补机制的目的。

  • 目前没有用于修补应用程序的开箱即用的开源托管解决方案,因此我们要么不得不依赖人们相应地配置他们的 Web 服务器,要么我们必须为专有的第三方服务创建集成,或者我们将不得不创建我们自己的定制解决方案。 托管补丁是我们并不急于进入的空间。 让人们配置他们自己的服务器让他们容易犯错误,如上一点关于安全性的解释。 依赖第三方服务使 Flutter 处于不得不挑选赢家的尴尬境地,并使我们面临这些项目本身做出会影响此功能的政策更改的风险。

我们现在更愿意将我们的工程努力花在其他问题上。 我们希望继续在这个领域进行试验,并且将来可能会再次认真对待这个问题(例如,我们可能需要桌面应用程序的更新解决方案),但今年可能不会。

虽然我理解放弃此功能的原因,但它仍然令人失望。 Play 商店和 App Store 是重要的考虑因素,但并非每个应用程序都以这种方式分发。 对于我们的用例,我们为客户提供设备和预安装的应用程序。 拥有动态向用户推送更新的机制是一个非常重要的功能,因为我们不想通过商店。 这个功能将是无价的。 我确实希望像你提到的那样在未来重新审视它。

感谢您透明地传达团队的理性。

@eseidelGoogle从 Dart 编译的 JavaScript 代码能否使用 Skia 来渲染页面?

这是相当令人失望的。

关于您提到的所有安全和商店合规性问题,它们可能是有效和合法的,但归根结底,有一个“热更新”技术已经在起作用:代码推送。

React Native + 代码推送服务在现实世界中有效并证明了自己。 这是经过实战考验的。 应用商店的间接更新似乎没有问题。 似乎每个人都对它“很好”。 所以我认为 Flutter 的解决方案也可以被允许。

关于性能问题,让开发人员选择在“低性能”模式下工作但启用实时更新可能是个好主意。

好举措! 我宁愿将工程努力花在优化 Flutter 上,而不是添加可能使生态系统过于复杂并损害生态系统的代码推送功能

我目前有我的第一个应用程序,在 Flutter 中开发,在公开 beta 测试中,我已经推出了大约 10 个应用程序包和修复程序。 但是当我将它发布到生产中时,它应该几乎没有错误。

所以我不知道我是否会需要这个功能,但我发现这个 pub 包OTA Update似乎在 89 的分数上做得很好,这只是因为它的受欢迎程度而下降。 那个包裹安全吗? 它似乎是从一个 URL 下载 APK 并在本地解压它并触发 Android 上的 APK 安装意图。

那些绝对需要此功能的人可以试用该软件包。

但是我可以理解为什么 Flutter 团队对此并不太兴奋,因为,让我们拿上面的包以防万一。 它似乎是从 URL 下载的。 而且网站总是比本地应用程序更适合黑客。 到目前为止,存在太多安全问题。 它只会使 Flutter 应用程序像严格禁止的网站一样容易受到攻击。

刚开始时,我有一台 2 GB RAM 的机器,试图按照我一直想要的方式开发 Android 应用程序,但我的机器无法胜任这项任务。 我尝试了 PhoneGap、Cordova、一些 Intel 框架、React-Native,但它们都没有开始运行。 Flutter 是我真正开始使用的唯一一个,它拥有漂亮的 UI 和开发工具,即使没有这个功能,它也比同时代的产品遥遥领先。

任何更新?

在 react-native 通过 Code Push 宠坏我们之后,应用程序发布工作流程将永远不会相同。 真遗憾 Flutter 不支持它。 Flutter 发展得很好,如果他们选择支持此功能,它可能会成为 React Native 的竞争对手。 唉...

@Hixie好的,所以现在基本的工程/技术更改有太多缺点 - 这对我来说很有意义。

但是 - 您如何看待在短期和中期使用一些替代方法来帮助 Flutter 开发人员解决该业务问题,这些方法可以获得一些文档/讨论 - 甚至可能是视频,虽然可能不是“认可”或官方解决方案,但会引起一些关注。

例如

  • Firebase 实时配置
  • 基于服务器的 json->widgets(例如 https://github.com/dengyin2000/dynamic_widget/blob/master/WIDGETS.md 或类似,我不认可确切的插件但这个想法)
  • 或者其他东西,也许是高级用户的云功能......
  • 显然,我并不是建议您为“大”用例进行大量工程工作,而是一种 hello-world-code-push-alternative 替代方案,可以解决大部分需求,而无需“让我们修复/更改每一件事” ' 类型架​​构。

我的前提是“我们”可以满足 70-90% 的 codepush 关注,而无需对 Flutter 进行根本的架构更改; 有人怎么看?

Flutter 的代码即 ui 方法甚至可能使这比 android 开发人员更容易......

我亲眼看到至少有两家公司因为这个原因选择了其他人而不是 flutter,许多其他公司也有类似的说法。

也许谈话可以进行
“用户:您是否正在跳过代码推送支持”
“Flutter 团队:是的 - 现在,出于这些原因,(正如您所做的那样)但此外,您可以在某些用例中尝试 A 或 B”

抱歉评论太长

@neiljaywarner也许 LUA 值得你一看——我去年做了一个概念验证,其中 LUA 脚本可用于创建/调整 Flutter 应用程序的功能。

@neiljaywarner我完全赞成这种方法,但与此错误涵盖的内容相比,这是一个正交问题。

虽然我理解放弃此功能背后的原因,但仍然令人失望。Play商店和App Store是重要的考虑因素,但不是每个应用都以这种方式分发。对于我们的用例,我们为客户提供预装的设备和应用程序。有一个动态推送更新给用户的机制是一个非常重要的功能,因为我们不想通过商店。这个功能非常宝贵。我希望将来如你所提到的那样重新审视。

感谢您透明地传达团队的理性。

我同意

代码推送功能意味着更多的应用程序、更多的客户端、更多的开发人员、更多的测试、更多的错误修复、更少的问题

对于初创公司的 MVP 或不断增长的应用程序而言,更新或错误修复至关重要,而大多数时候性能不是那么重要。 这将对 Flutter 生态系统造成利弊。 采用率、初创公司和个人开发者的减少对于早期社区发展很重要。 优势可能是高质量的应用程序和团队会转向 Flutter 以提高性能?

@maplerichie ,同意,我喜欢在这里

we are very need this function
很需要热更啊

正如其他人之前提到的,大公司和大型开发团队可能不需要热更新。 但是想想一家小型初创公司,几个开发人员正在开发一个移动应用程序,以快速的发布周期将功能交付到生产环境中。 没有时间进行测试和 QA 周期。 创建一个新功能,看看它是否有效并且用户喜欢它,替换或修复它。 如果没有热更新,我们就无法到达我们现在的位置。 它是移动开发领域真正的游戏规则改变者。

@yaronlevi我是一家“小型创业公司”,开发移动应用程序的开发人员甚至少于几个,只有我一个人,我以快速的发布周期交付到生产环境中。 Google Play 商店提供的更新只需几个小时,而 Apple App Store 审查更新的时间几乎总是少于 24 小时,以我的经验,我绝对不需要代码推送。 如果 Flutter 有代码推送,我会积极采取措施确保它在我的应用程序中被禁用。

我目前是一家小公司的移动应用程序(和匹配的后端)的唯一开发人员。 我真的很喜欢 Flutter,但我必须不断地向一个不了解单元测试或自动化测试需求的客户解释为什么实现可以用 10 个词描述的功能需要这么长时间。 我有点担心不得不发布一些半成品并且无法快速推动关键错误修复。 我暂时不做,但代码推送肯定会很好。 但是,我理解技术挑战和安全问题,最终我支持谨慎的方法。

好吧,还是谢谢。
我想我们需要自己弄清楚。

真的很失望:)

Flutter for web SDK即将与移动 SDK 合并。 一种解决方法是使用移动 WebView 加载颤振代码。 😁

@matthewlloyd嗨,伙计,支持热更新是必要的,重点不是审查的时间。 用户必须链接到 AppStore 并再次下载该应用程序。

我真的没有看到没有代码推送有什么紧迫的问题。 几乎所有用户都在他们的应用商店上自动更新。 不过,提供一种无需 App Store 即可分发更新的替代解决方案会很好。

MXFlutter 使用 JavaScript 实现 Flutter 的渲染能力,支持 Flutter 语法,支持代码推送和热更新。
https://github.com/TGIF-iMatrix/MXFlutter

@TGIF-iMatrix 你知道这个解决方案是否符合商店的分销政策吗?

@truongsinh
它是安全的,因为它是一种 js 分发 -> 本机解析器 -> 组合小部件方法。

如果支持代码推送,我们会考虑使用 flutter

@TGIF-iMatrix 这很可能不会得到 Apple 的批准,因为 Javascript Core 更新的豁免已从 App Store 协议中删除,并且许多 CodePush 用户因该功能而被警告/拒绝。

也许我们应该重新表述这个问题,“sever-dictated-rendering”与“code push”。 “sever-dictated-rendering”只是关于不同的 UI/layout/theme,而 code-push 也意味着逻辑、权限、插件等的变化。

也许,但是在那个时候你可以使用插件来做到这一点,所以这有点违背了这个问题的目的。

有没有人尝试过 tinker-lib 与来自腾讯 github repo 的 flutter,如果有人感兴趣,我可以与你合作,我尝试过它能够推送更新,但需要小的修改来加载应该在 flutter 中完成的新代码。 jar 工件文件

希望尽快有解决方案

关于实现代码推送的性能影响,将 Dart 代码编译为 WebAssembly 会有帮助吗? 这可能允许在 JavaScript 沙箱内的 iOS 中实现 JIT 编译。

我们需要快速迭代和敏捷开发。
如果没有热更新,flutter 永远是 react native 的小弟。

热更新对我们来说非常重要,如果flutter支持热更新,我们会用flutter来代替react native。

我计划了一个最好的代码推送方式,但由于时间限制,我只能从上周 11 月或 12 月开始这个项目,我不会修改任何引擎代码或框架代码或任何像 tinker lib 这样的 Java 代码,所以它不会违反任何商店条款,输出应用程序也是 aot 所以没有性能回归,我试图让它变得容易实现,以便任何人都可以插入他们的应用程序,基于我对代码库的研究,flutter 团队故意使代码无法推送我尝试了当前实施的所有可能性,并得出结论,只有可能的方法是您必须进行引擎修改或在不修改引擎的情况下准备解决方案,我选择第二个选项并计划了项目的所有必要要求。 我希望项目会成功。 与此同时,如果 Flutter 团队重新评估这个问题,我们都对内置实现感到满意。

热更新永远是需要的!

这是必备的,关键的功能

我计划了一个最好的代码推送方式,但由于时间限制,我只能从上周 11 月或 12 月开始这个项目,我不会修改任何引擎代码或框架代码或任何像 tinker lib 这样的 Java 代码,所以它不会违反任何商店条款,输出应用程序也是 aot 所以没有性能回归,我试图让它变得容易实现,以便任何人都可以插入他们的应用程序,基于我对代码库的研究,flutter 团队故意使代码无法推送我尝试了当前实施的所有可能性,并得出结论,只有可能的方法是您必须进行引擎修改或在不修改引擎的情况下准备解决方案,我选择第二个选项并计划了项目的所有必要要求。 我希望项目会成功。 与此同时,如果 Flutter 团队重新评估这个问题,我们都对内置实现感到满意。

我计划了一个最好的代码推送方式,但由于时间限制,我只能从上周 11 月或 12 月开始这个项目,我不会修改任何引擎代码或框架代码或任何像 tinker lib 这样的 Java 代码,所以它不会违反任何商店条款,输出应用程序也是 aot 所以没有性能回归,我试图让它变得容易实现,以便任何人都可以插入他们的应用程序,基于我对代码库的研究,flutter 团队故意使代码无法推送我尝试了当前实施的所有可能性,并得出结论,只有可能的方法是您必须进行引擎修改或在不修改引擎的情况下准备解决方案,我选择第二个选项并计划了项目的所有必要要求。 我希望项目会成功。 与此同时,如果 Flutter 团队重新评估这个问题,我们都对内置实现感到满意。

嗨@canewsin
我也尝试通过不修改颤振引擎来做同样的事情。 我发现在AOT模式下,引擎在Android的本地库路径中查找.so文件,在应用程序编译后被JVM限制在其中修改/添加文件。 因此,无法将通过无线方式下载的加载 .so 文件添加到本机 lib 路径中。

等待您的更多见解。 😀

我认为不需要同时更新 dart 代码和本机代码。
只有飞镖代码没问题!

嘿,我现在正需要这个。 Goodle 已经严格了他们的审查政策。 我们的应用程序现在需要 2 周的时间才能更新……我们的精益方法在这方面很糟糕。

@NEELANSHSETHI你能在这里发布计划吗? 我们可以开始实施它

@almeynman请让我们了解您的最新进展:)

@HerrNiklasRaab我还没有开始这样做,因为我对如何实施它没有清晰的认识。 如果有人有任何想法,请分享您的想法

这是我们没有从 react-native 迁移到 flutter 的主要原因。 :(

😔

由于这个特性,ReactNative 远远领先于 Flutter,而且我有很多项目,与推送代码特性相比,环境(RN 或 Flutter)的选择被解码了! 等待消息:/

大家好,已经是 11 月了,正如我所说的,我开始工作了,一切顺利。 这将是一个私人项目,所以我将收取许可证密钥来使用它。 所以它不是免费的,因为我没有任何收入来源,我必须这样做,如果你有兴趣,我将创建一个关于工作的后续存储库,关注更新。 一旦我创建了时间线回购,我会通知你们。

@seidelGoogle
商业案例:
我们在平板电脑上有一个公交车跟踪应用程序,但客户在一个月内更新了 1 次,因为平板电脑使用互联网数据而不是 wifi
使用Code Push,我们将能够在不消耗过多客户数据的情况下进行更新

我们有支持代码推送的cordova 应用程序。 当我们错误地对应用程序进行现代化改造时,我们认为 Flutter 会“无论如何”添加代码推送支持,因此我们使用 Flutter 开发了我们的应用程序。 但是在过去的一年里,没有代码推送的生活对我们来说是非常糟糕的。 因此,我们终于(并且很高兴)处于(重新)以 react-native 重新编写应用程序的过程中,以使我们的代码推回支持。

Code Push,这就是我现在学习 React-Native 的原因。

如果你对我的实现感兴趣
在此处关注进度报告
https://github.com/canewsin/flutter-code-push-timeline
在继续之前,请阅读我上面的所有评论。

代码推送,这就是为什么我仍然会使用 React-Native。

请不要发布非建设性的帖子、+1、“我们需要这个”、“我们正在使用 X”等,因为它没有建设性,也无助于讨论。

点击第一个帖子上的“赞” (👍) 按钮会产生更好的影响,不会通知所有曾在此讨论中发帖的人(据我所知,flutter 团队的一些成员会静音大线程,所以在这里张贴比竖起大拇指的效果要小)。

也想提醒一下这里订阅的大家,github在帖子的右上角有个unsubscribe按钮。

此外,Flutter 团队会根据点赞次数对问题进行优先级排序,因此将计数器设置得高可以带来很大的帮助。 只需点击“订阅”就足够了。

我接手的代码推送项目进展顺利,但我想要一些代码推送要求的例子,所以如果代码推送完成了你如何使用它在这个 repo https://github.com/ canewsin/flutter-code-push-timeline以便开发走上正轨。
到目前为止我发现的限制是:
我们无法访问本机平台,但这可以通过 ffi 功能完成。
出于某些安全考虑,codepush 代码在沙箱中运行,因此不会对设备造成任何伤害。

大家好,已经是 11 月了,正如我所说的,我开始工作了,一切顺利。 这将是一个私人项目,所以我将收取许可证密钥来使用它。 所以它不是免费的,因为我没有任何收入来源,我必须这样做,如果你有兴趣,我将创建一个关于工作的后续存储库,关注更新。 一旦我创建了时间线回购,我会通知你们。

很有意思!
你好,请问有例子吗? 你如何处理 iOS 部分? 因为苹果在这方面非常严格。 谢谢

大家好,已经是 11 月了,正如我所说的,我开始工作了,一切顺利。 这将是一个私人项目,所以我将收取许可证密钥来使用它。 所以它不是免费的,因为我没有任何收入来源,我必须这样做,如果你有兴趣,我将创建一个关于工作的后续存储库,关注更新。 一旦我创建了时间线回购,我会通知你们。

很有意思!
你好,请问有例子吗? 你如何处理 iOS 部分? 因为苹果在这方面非常严格。 谢谢

目前正在使用 android 端,即使 ios 端是愚蠢的,类似于 reactnative js 应用程序的沙盒版本,代码将在沙盒中运行而无需访问平台 api,因此当它准备好用于 ios 端时可能不是问题。

嗨@eseidelGoogle
任何更新? 时间线?

嗨@eseidelGoogle
任何更新? 12 月是一项将于 2019 年发布的功能吗?

@Hixie我读了你在 Reddit 上的文章
https://www.reddit.com/r/FlutterDev/comments/d51o4w/were_the_flutter_team_at_google_ask_us_anything/f0ium5w/?utm_source=share&utm_medium=web2

我想知道如果我在 Google Play 中将 Flutter 应用程序更新为 abb “Android App Bundle” 还是仅用于本机代码,它的更新是否会很小?

这是企业构建的一项重要功能(在商店外分发的应用程序,例如通过 Web 门户)

这是非常需要的功能。 为什么我们不能正式拥有它? 是什么阻止它提供此功能?

这是 2020 年的路线图吗?

2020年仍在等待

在下面发布之前,请阅读此内容。

如果您不想向上滚动以理解,这里是一个简短的回顾:

正如本评论所指出的,三大挑战是:

  • 什么被推
  • 对用户是否安全
  • 从哪里被推

第一个,_what_被推送,是最大的问题所在。 Apple 的审查指南不允许任何类型的代码推送。 是的,所使用的术语_还包括 javascript 代码推送。_ Apple 似乎没有对其采取行动,可能有很多原因,但此处发布的任何原因都纯属猜测。

谷歌自己的Play商店指南也禁止编译代码下载,虽然它说你不能下载_可执行代码_,但它明确指出“dex文件或本机代码”,所以javascript可能是安全的,也是纯dart源。

Flutter 至少在发布模式下是被编译的,即使不是,也不是 javascript ,因此,它无法在 iOS 上解释而不破坏“无 JIT”要求,或者非常慢。

第二个,对用户来说是否_安全_,几乎是商店禁止动态、未经检查的代码下载的逻辑背后的全部基本原理。 允许任何人从任何地方下载任何东西并_只是运行它_会使用户处于危险之中。 即使在沙箱中,JavascriptCore 在代码推送方面的特殊权限被突出显示,它仍然不安全。

代码推允许绕过商店的验证过程中,这意味着对用户的设备,该装置未经检查的代码H运行,这是可能的或者歪曲原始应用,或甚至添加有害功能,如数据虹吸或漏洞利用该验证过程会被抓住

你可以有世界上最好的意图,总会有人和他们一起背刺你。

目前,在 Android 上,如果您不使用 Play 商店进行分发,则只需构建一个下载器即可获取 apk 并提示用户安装它。 在 iOS 上,您实际上无法在没有大量痛苦的情况下进行侧载,而且 JB 设备不关心应用商店的限制。

现在,是否可以在 iOS 或 Android 以外的其他平台上实现它? 当然! 但是 Desktop 还不是 Beta 版(此外,您也可以自己在桌面上制作自己的自动更新程序),而且,Web,好吧,只需刷新页面即可。

现在,如果您想让团队看看,请转到第一篇文章并添加一个👍。

如果您的评论属于以下列表,重新考虑发布。

  • 询问何时/是否在路线图中
  • “它不存在”(以及变体,例如之前对此的评论)
  • “我们使用框架 X 因为没有代码推送”
  • “框架 X 更好,因为代码推送”
  • “我们需要代码推送”
  • “更新?”
  • 代码推送的参数是

    • 企业/侧载应用

    • 紧急修补

    • 添加功能

  • 反对代码推送的论据是

    • Play/App Store 审核时长现在更短

    • 游戏/应用程序商店 forbirds

    • 你不需要它

这个问题已经有足够的评论,所以不要添加对对话没有任何影响的评论。 如果团队有什么要说的,他们会在这里发布,因为这个帖子现在有近 100 名参与者,超过 500 个拇指,不可能忽略它。

老实说,我认为这不应该是你的关注点。 开发人员将自行承担使用该功能的风险。 如果 Apple 突然决定禁止所有使用代码推送的应用程序,那么您的应用程序将不得不使用不同的方法。 但这不会发生在 JavaScript 中。 很多年都没有发生过,为什么 Flutter 会发生呢? 他们甚至无法检查它。 人们要求此功能是因为它很有用。 您可以编写小模块并动态更新它们。 这是一个游戏规则改变者。 您可以即时修复模块中的错误。 此外,Apple 无法真正检查应用程序在做什么,因为它没有资源。 这是不可能的,我希望你能意识到这一点。 另外,重点是什么? 我可以编写晦涩的代码并在应用程序中插入后门,当我提供特定的 JSON 作为 REST 调用的结果时触发。 苹果将​​如何验证它? 它不能。 Apple 或 Android 无法阻止这种情况。 人们需要这个功能,你应该实现它。 我们用它做什么,这是我们的事,而不是你的事。 你自己说,这个功能有超过 500 个赞和超过 100 个参与者。 也许是时候根据社区要求实施它了。

@dedalozzo很棒的新鲜论点!

我不是 flutter 团队的一员,所以请不要以我为目标来请求实现。

不过,这事实,苹果和谷歌可能没有足够的资源来检测(剧中保护团队是所有活动的时候,就可以自动检测危险的行为),但实现它“在背后”现在给苹果公司的实际原因对 Flutter 实施全面禁令,因为它基本上_附带_明确违反其政策的工具。

您还可以将其作为道德问题的一部分(您是否应该以进步的名义实施一些会给应用程序增加额外风险并违反商店政策的事情?)一个巨大的“如果你使用它,你很可能会被禁止进入应用程序/游戏商店”条款,用户可能希望避免,并将资源从其他具有安全和有保证的影响的任务中转移出去?)。

不仅如此,意外违反 Play 商店政策/与违反 Play 商店政策的人有关基本上意味着您的帐户被禁止,因此它会玩火,使用户_更不可能使用该功能_。

此外,如上所述,在 Play 商店外分发可让您推送更新的 APK。

对不起,我以为你是 Flutter 团队的一员。

你在上一条评论中说的是真的。 事实上,苹果和谷歌似乎可以容忍代码推送,即使它是边缘和违反规则的。

但是只要您的应用程序没有造成任何伤害,我认为他们甚至不会费心检查您是否真的在推送代码。 如果有人报告奇怪的行为,他们可能会这样做。 但到那时,他们将针对该应用程序的开发人员采取行动,而不是针对使用推送代码的整个应用程序。

很多工作正在进行中,但启用代码推送https://github.com/chgibb/hydro-sdk

@chgibb 等等……这

有没有办法将这两件事分开? 像往常一样在编写 Dart 时获取代码推送?

@SpajicM只有效_因为_它没有使用 Dart,相反,它可能使用 JS 引擎,例如 Apple 拥有的 JavascriptCore,当它与代码推送一起使用时,它们似乎看起来相反。

从头开始,它使用 Lua 字节码,这在任何形状或形式上都违反了存储策略

@miyoyo为什么这特别违反商店政策?
@SpajicM这纯粹是附加的。 打字稿件可以嵌入到更大的 Dart 应用程序中。 小到单个文本或整个屏幕。

商店政策禁止推送任何类型的编译代码,其中.hc文件似乎是,因为它们是编译的 lua 字节码(可能带有扩展,尚未检查)。

将 _compiled_ 代码推送到应用程序的特定用例明确违反 Play 商店政策,并且您_可以_传递 javascript 的“未提供源代码”元素在 CodePush 中不适用,违反了 Apple 的准则

我并不是说这个概念不好,事实上,这是一项伟大的工作! 只是在这两种情况下,通过互联网下载字节码都明确违反了商店政策。

所有这些带有游戏内更新的手机游戏如何运作? 他们只推送/下载资产吗?

@miyoyo来自 Google Play 的策略; https://play.google.com/about/privacy-security-deception/malicious-behavior/
...This restriction does not apply to code that runs in a virtual machine and has limited access to Android APIs...
Hydro-SDK 的.hc文件是纯 Lua 5.2 字节码,没有扩展或特殊功能。 它们在没有自变异或代码生成功能的解释器中运行。 dart:io不会暴露给他们。 尽管如此,没有什么可以阻止嵌入器暴露dart:ioFile类,或者例如暴露PlatformChannel s。

Apples 第 2.5.2 节在“执行”一词的含义以及更改特性或功能方面有点含糊不清。

https://developer.apple.com/app-store/review/guidelines/#2.5.2

...
2.5.2 Apps should be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code which introduces or changes features or functionality of the app, 
...

@chgibb好吧,我想说这可能会在 Android 上通过,尽管我仍然希望 App Store 被拒绝。 (不是说峰值性能的降低,但这可能是高端手机的一个细节)

@kuhnroyal手机游戏更新对不可执行的事物使用动态资产交付,这些通常是快速跟踪的,因为它们需要较少的验证, APK 扩展文件可以让您进行部分升级,但仍受定期商店更新周期的约束,以及定期 APK 更新.

与客户交谈:标题表明这不再是他们的优先事项。

您可以使用 Localizely 进行文本/翻译的无线更新: https :

为了颤振,构建此功能或指导我们如何构建它。 谢谢你 。

伙计们_请_,这是第三次发布了,但是_除非您确实有要添加的内容,否则请不要发送评论_

有关更多详细信息

消息不再有影响,因为我很确定这里的大多数团队已经禁用了这篇文章的通知,让我们保持噪音_除非你有什么要添加的_。

同时代码推送的任何替代方案?

同时代码推送的任何替代方案?

根据我的经验,别无选择

@samerdernaika @mfenej虽然还没有准备好投入生产,但这个项目开始时将代码推送作为一个明确的目标https://github.com/chgibb/hydro-sdk

@miyoyo

第一个,_what_被推送,是最大的问题所在。 Apple 的审查指南不允许任何类型的代码推送。 是的,使用的术语 _也包括 javascript 代码推送。 苹果似乎没有对其采取行动,可能有很多原因,但这里发布的任何原因都纯属猜测。

那不是真的。 请仔细检查,不要传播错误信息!

Apple 开发者许可协议的第 3.3.2 节规定:

3.3.2 除下一段所述外,应用程序不得下载或安装可执行代码。 可以将解释代码下载到应用程序,但前提是这样的代码:(a) 不会通过提供与提交给应用程序的应用程序的预期和广告目的不一致的特性或功能来改变应用程序的主要目的商店,(b) 不会为其他代码或应用程序创建商店或店面,并且 (c) 不会绕过操作系统的签名、沙箱或其他安全功能。

只要您不更改应用程序的主要用途,它们就非常明确地允许下载诸如 JS 之类的解释代码。 现在 IIRC 已经这样了 5 年多了,我从来没有听说过有人因为以正常和负责任的方式使用代码推送而被猛拉。

查看 AppCenter 关于代码推送和商店指南合规性的部分。 AppCenter codepush(由 Microsoft 支持)被大量应用使用,没有商店合规性问题。 https://github.com/microsoft/react-native-code-push#store -guideline-compliance

我看到的 codepush 的最大障碍是,被迫在 iOS 上使用 compile-to-js 或解释型 Dart 而不是预编译可能不值得进行性能权衡。 由于 Flutter 是针对浏览器的,但我怀疑 compile-to-js 性能已经足够好了,但对于 Flutter 团队来说,可能仍然不是一个可接受的性能折衷。

也许第三方解决方案(如 React Native 的 AppCenter)会出现并填补这一空白。 CodePush 超级好用!

嗯,谷歌的快速搜索揭示了许多苹果拒绝包含代码推送功能的应用程序的例子,参见例如

https://github.com/microsoft/react-native-code-push/issues/1297

鉴于 App Store 审核时间现在几乎总是以小时而不是天来衡量,我不明白为什么有人会冒险。 如果将代码推送集成到 Flutter 引擎中,Apple 可能会决定禁止所有 Flutter 应用程序。

@matthewlloyd你完全正确,审查时间已经减少。 我自己今天早上向 App Store 提交了一个(专有)应用程序,并在今天结束时获得了批准! 但那是_最近_。 作为移动应用程序的发布者,我们仍然依赖于审查团队审查我们提交的奇思妙想/能力。

用户手中的更新不会以应用审查的速度传播。 “开发者发布”、“App Store 处理”、​​传播到用户市场中的服务器等之间的时间也可能需要相当长的时间。 我已经看到这些后期阶段在极端情况下需要超过 24 小时。

就个人而言,我对代码推送的热情是对更新交付供应链的所有权。 更不用说考虑到xcode CLI 工具的糟糕状态,尝试将当前过程自动化为一致的 CD 设置所涉及的相当大的障碍。

我认为,在绝大多数情况下,不到 24 小时对几乎所有人来说就足够了。 如果您需要更快地通过 Apple 的审核流程获得更新,例如紧急错误修复,您可以请求加急审核。 我曾经这样做过一次,并且在我提出请求后 10 分钟就完成了应用程序审查。

拥有交付供应链的所有权是一件后果自负的事情……

Apple 的 App Store 指南,第 2.5.2 节 (https://developer.apple.com/app-store/review/guidelines/#software-requirements):

2.5.2 应用程序应在其捆绑包中自包含,不得在指定的容器区域外读取或写入数据,也不得下载、安装或执行引入或更改应用程序特性或功能的代码,包括其他应用程序。旨在教授、开发或允许学生测试可执行代码的教育应用程序可以在有限的情况下下载代码,前提是此类代码不得用于其他目的。此类应用程序必须使应用程序提供的源代码完全可见且可由用户编辑。”

Apple 的开发者计划要求,第 3.3.2 节:

3.3.2 除下一段规定外,应用程序不得下载或安装可执行代码。

@AndrewMorsillo无论每条指南中有什么内容,也无论提出了多少信息,我们所能得到的最好的结果是“可能允许我们不确定这不是禁止的罪行实际上可能是我们不确定” .

不管是什么情况,Flutter 现在都没有在 iOS 上运行任何解释性的 dart,添加它会拖累性能,而且正如你自己提到的,除了我之前的帖子和非常灰色的区域,在最坏的情况下它只是被禁止。

据我所知,为了绕过 24 小时审查周期和编写测试而牺牲所有这些是不值得的。 (我可以理解什么时候是一周,这通常只在 iOS 方面,这实际上是这里最大的争论点)

这不仅与审核过程有关,还与因关闭自动更新而陷入旧版本应用程序的用户有关。

当然,您可以自己实施最低版本检查,但随后他们又必须通过 Play 商店,不幸的是,人们很懒惰。 通过代码推送,它可以在每次运行时快速更新应用程序(我希望)并让用户更无缝地进入。

@miyoyo我不知道你为什么觉得需要回应这里提出的每

还有另一种方法可以解决这个问题。 我见过很多应用程序这样做。 应用程序如果出来
日期,弹出一条消息,要么关闭它,要么更新应用程序。 这一切。

2020 年 8 月 7 日星期五 07:38,SpajicM [email protected]写道:

这不仅与审核过程有关,还与获得
停留在旧版本的应用程序上,因为他们可能已经关闭了
自动更新。

当然,您可以自己实施最低版本检查,但随后他们
再次必须通过 Play 商店,不幸的是,人们很懒惰。 和
代码推送,它可以在每次运行时快速更新应用程序(我希望)和
让用户更顺畅地进入。

@miyoyo https://github.com/miyoyo我不知道你为什么感觉
需要回应这里提出的每一条评论或想法。
人们想要这个。 你们告诉人们支持这个问题,我们支持
它一直到顶部。 这永远不会解决,除非有人
积极思考并推动它。


您收到此消息是因为您订阅了此线程。
直接回复本邮件,在GitHub上查看
https://github.com/flutter/flutter/issues/14330#issuecomment-670242698
或取消订阅
https://github.com/notifications/unsubscribe-auth/ADS5AJFUU2V6MHQIP7AMZKLR7M5HPANCNFSM4EOFIZRA
.

还有另一种方法可以解决这个问题。 我见过很多应用程序这样做。 应用程序如果过时,弹出一条消息,要么关闭它,要么更新应用程序。 这一切。

可能是最糟糕的用户体验方式......:/

@SpajicM

这不仅与审核过程有关,还与因关闭自动更新而陷入旧版本应用程序的用户有关。

当然,您可以自己实施最低版本检查,但随后他们又必须通过 Play 商店,不幸的是,人们很懒惰。 通过代码推送,它可以在每次运行时快速更新应用程序(我希望)并让用户更无缝地进入。

在用户体验方面,这不是处理更新的 _bad_ 方式吗? 如果有人手动禁用自动更新,为什么 Flutter 应该覆盖它? 是否有任何应用程序应该具有这种功能是有争议的,但肯定不是整个框架。

我认为通过应用商店集中更新过程对用户体验更好,因为他们可以通过商店管理所有更新。 以开发人员时间为代价的 UX 是应用程序开发的要点。 如果您需要立即修复(例如,针对漏洞),您可以获得加急更新,或者在应用更新之前拒绝让用户使用该应用。 当然后者不是很好的选择,前者也很烦人,但那是因为苹果和谷歌都把用户放在第一位,与 Flutter 本身关系不大。

@chgibb

就个人而言,我对代码推送的热情是对更新交付供应链的所有权。

这就是这个线程的问题——如果你打算使用他们的应用程序商店,那么尝试做苹果和谷歌强烈警告的事情并不是一个好主意。 正如@miyoyo所说,它

好吧,Flutter 仍然无法热更新您的代码,但实际上该链接谈到了图像,它提醒我 Firebase 远程配置是一回事。 缺点是您需要抢占可能需要更改的代码位并期望应用程序中的这些更改,但是一旦完成,它应该很快在没有应用程序商店的情况下推出新更改(类似于 React Native Code Push 所做的它的图像)

@ardyfeb像你这样的人给转帖

还有另一种方法来解决这个问题
不使用颤振网络

还有另一种方法可以解决这个问题。 我见过很多应用程序这样做。 应用程序如果过时,弹出一条消息,要么关闭它,要么更新应用程序。 这一切。

2020 年 8 月 7 日星期五 07:38,SpajicM @* > 写道:这不仅与审核过程有关,还与因关闭自动更新而卡在旧版本应用程序上的用户有关。 当然,您可以自己实施最低版本检查,但随后他们又必须通过 Play 商店,不幸的是,人们很懒惰。 通过代码推送,它可以在每次运行时快速更新应用程序(我希望)并让用户更无缝地进入。 @miyoyo https://github.com/miyoyo我不知道你为什么觉得需要回应这里提出的每一条评论或想法。 人们想要这个。 你们告诉人们对这个问题进行投票,我们一直投票到最高。 这永远不会解决,除非有人积极思考并推动它。 — 您收到此消息是因为您订阅了此线程。 直接回复本邮件,在GitHub上查看< #14330(评论) >,或者退订https://github.com/notifications/unsubscribe-auth/ADS5AJFUU2V6MHQIP7AMZKLR7M5HPANCNFSM4EOFIZRA

这听起来很棒……如果您正在构建银行应用程序。

如果有人需要仅用于应用程序翻译的无线更新,这里是一个示例 Flutter 应用程序: https :

苹果的指导方针似乎与以前不同了?

这还是一样

2.5.2 应用程序应自包含在其捆绑包中,不得在指定的容器区域外读取或写入数据,也不得下载、安装或执行引入或更改应用程序特性或功能的代码,包括其他应用程序. 旨在教授、开发或允许学生测试可执行代码的教育应用程序可以在有限的情况下下载代码,前提是此类代码不用于其他目的。 此类应用程序必须使应用程序提供的源代码完全可由用户查看和编辑。

但是,我找不到对解释或可执行代码的任何其他引用。

鉴于原始帖子中有关苹果生态系统的详细信息似乎不再具体说明解释或编译语言,是否有可能不再真实?

此页面是否有帮助?
0 / 5 - 0 等级