Kuikly 开发遇到的坑

Kuikly是基于Kotlin MultiPlatform(KMP)构建的跨端开发框架, 支持Android、iOS、HarmonyOS和H5/小程序等多个平台, 据 PCG 开发团队的报告, Kuikly 可以提升团队 85%的开发效率.
这里记录一些我自己使用 Kuikly 遇到的一些坑, 希望后面能少点踩坑吧.

  1. 热重载显示成功, 但是实际并没有成功
    • iOS 使用热重载开发, 会需要手机挂 http 代理到开发的电脑上, 如果忘记这一步(或者因为别的什么事情把代理关掉了), 手机上仍然会提示热重载成功, 但实际只是从内置 bundle 加载成功, 并不是从开发电脑加载成功, 遇到这种疑问记得确认下这个代理是不是挂上了
  2. iOS 源码引入 Kuikly, 使用 XCode 调试 Kuikly 代码 (除了热重载的另一种开发模式)但是报错 B(l) ARM64 branch out of range (134218124 max is +/-128MB): from
    • Kuikly 工程太大, 导致程序的代码段过大, 导致的链接错误, 可能需要修改 Kuikly 代码
  3. 某些 case, 图片 ImageView 匹配上了错误的 url, 导致图片显示出错
    • Kuikly 为了性能 对图片做了复用, 我们又接管了 Kuikly 图片的下载, 所以在下载完成后需要校验url是不是还能匹配上这个 KRImageView:
    • NSString *curUrl = SAFE_CAST([imageView valueForKey:@"css_src"], NSString) ; 然后再跟当前的url比较下
  4. iOS 产物打包失败, 但是安卓成功, 需要修改 gradle 的编译内存大小设置, 可能是内存不够
  5. 热重载模式下, 单例不能用私有变量(属性)记录值, 比如记录生命周期点击次数,
    • 因为单例会在热重载模式下重新生成一个实例,
    • 考虑到线上热修复实际也是使用的热重载模式, 建议还是不要使用单例的私有变量记录
  6. 本地缓存双端实现不一致, iOS 缓存默认做了一个与用户 id 绑定的逻辑, 安卓没做
  7. 控制台重复输出, 点击一下, Mac 上的”控制台”app 输出了 5 条一样的日志, 误以为是代码执行了 5 次, 但是 Xcode 显示日志又只有一次, 重启”控制台” app 恢复正常
  8. iOS 热重载偶现报错,
    • ./kuiklyw run 执行后, 还要在按一下i, 切换到 iOS 的热重载, 默认是安卓
  9. toInt() / toLong() 崩溃
    • kotlin 中 toInt() / toLong(), kotlin 非数字字符串 不能转成数字会抛异常. 应该使用 toLongOrNull, 转不了会返回 null
  10. Switch 组件(系统默认的开关), 连续设置值后, 在 iOS 表现正常, 但是在安卓丢失了背景色导致整个组件都不可见
    • 最后一次修改 改为延迟修改
-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道