转载

你不是不会,只是害怕

最近给微信小助手增加了消息转发相关的功能,这篇文章记录一下整个的开发过程。中间的流水账大家随便看看就好,总点在最后想说的部分里。

正文

在19年8月份的时候,自己 hack 了微信小助手的源码,加了转发及通过第二个微信账号回复消息的功能, 微信消息转发以及给指定好友发送消息 这篇文章中有记录当时的过程,不过这个时候写的代码只是在插件中指定了另一个账号进行操作,这样虽然实现了功能,但是只能在本地注入微信中,如果插件更新,就不合适了,所以这一次我想着集成到项目中,保持跟项目的同步,因为这个目的,所以需要开发得稍微像样一点。

起步

删除 GayHub 上自己原来 fork 的代码,重新开始撸。因为以前在 TK 最初版本里加功能的时候, pod install 遇到了问题,导致自己一度不想开始动手,这次被需求逼急了,怎么说也要搞定,在群里立了 flag,怎么说也得完成。不过项目拉下来以后,居然直接可以导入 Xcode 进行开发,感谢 YM 等人做的努力。

开发过程

要开发得像样一点,首先得有个界面进行管理,那么就得思考怎么开始这个界面得实现,我思考了一下我这个转发消息得功能需要哪些配置,然后决定参考自动回复的界面进行修改。

开发最快捷的方式是复制粘贴加修改,于是我决定通过 自动回复设置 这个下拉菜单开始入手。

开发流程

因为是回顾,所以具体的细节不太记得了,以下是大致步骤:

  1. 找到 自动回复设置 菜单相关的界面代码,增加 自动转发设置 菜单
  2. 根据 自动回复设置 的代码,增加点击 自动转发设置 弹出配置窗口
  3. 根据 自动回复设置 以及 AI回复设置 ,实现 自动转发设置 配置中的内容
  4. 实现 选中需要转发的聊天列表 的功能
  5. 实现 开启自动转发
  6. 实现配置的存储
  7. 实现 需要接收转发的聊天列表
  8. 实现 开启转发所有好友消息

整个开发过程就是不断找到相类似的代码,复制粘贴,修改成自己需要的。

遇到的问题

快捷键绑定

这是 MenuItem 的代码,菜单中可以看到 cmd+k 可以打开 自动回复设置 界面,但是 k 已经绑定了,我想实现 cmd+shift+k 打开 自动转发设置 界面,但不知道怎么对应上大写,后来看到 微信多开 的快捷键是 cmd+shift+N ,而代码中是 keyEquivalent:@"N" ,尝试用 keyEquivalent:@"K" ,结果可以绑定。

NSMenuItem *autoReplyItem = [NSMenuItem menuItemWithTitle:YMLocalizedString(@"assistant.menu.autoReply")
  action:@selector(onAutoReply:)
  target:self
  keyEquivalent:@"k"
  state:[[TKWeChatPluginConfig sharedConfig] autoReplyEnable]];
复制代码

自动转发设置界面

一开始 VAutoForwardingModel 我是复制 YMAutoReplyModel 实现的,但是中间开发这发现界面实现不了,然后不断对比 自动回复AI回复 相关的代码,不断删减代码进行尝试,慢慢的对这一块的代码熟悉了起来,然后删了 model 的内容,重新开始按照自己的需求进行实现。

配置不能保存

这个是在分析了 自动回复AI回复 的代码后,选择跟 AI回复 类似的方式解决了。

如何分割字符串

如何获取用户的备注

判断备注为空时现实用户微信名

如何现实群聊用户的群昵称

想说的话

其实整个开发过程很简单,就是找到类似的代码,然后实现相同功能,语法方面不会的就去网上搜,功能方面不会的就在项目里找。整个过程中,我觉得重点就是肯不断去尝试,经过不断的了解,从最初的只会照着改代码,然后慢慢的对 OBJC 语法,到现在都可以“随心所欲”的增加一些功能。

但是整个过程中还包含了很多的东西。

  1. 大学里学过 C、C++ 和 Java,大概能了解 .h.m 类似于接口文件和具体实现。
  2. 写 Java 时,用 Swing 实现过一些界面,所以对于怎么添加菜单栏,还有界面的实现都有感性的了解。
  3. 知道照葫芦画瓢。

最后,开发完了再来写这些,着实记不得有哪些东西了,以后做这些时还是得记得边做边记录。看不明白的各位多多包涵,就当随笔了。

原文  https://juejin.im/post/5f116c396fb9a07e753ca195
正文到此结束
Loading...