iOS - 第三方输入法App原理调研、App Group数据共享(上)

简介: 本文Demo同步Github

前言


为啥我一个做社交、直播、图片后编辑方向的iOS开发突然想学输入法开发呢,这一切还得从我看到搜狗输入法的招聘JD说起....


我看到搜狗输入法的招聘里写到一条:了解逆向优先,此时我有个疑问,做输入法App开发和逆向有什么关系? 于是就有了想了解输入法App开发的兴趣,也就有个这篇文章


首先在写这个前言的时候,我是压根不知道输入法怎么开发的。当想到要做一个输入法App时,我有如下疑问


  1. 为什么安装了搜狗输入法App后,系统键盘设置里会出现搜狗输入法,且有完全访问的选项(UISwith),完全访问是做什么的?


  1. 为什么安装了搜狗输入法App后,在我自己的App里调起输入法后,调起的是第三方的搜狗输入法键盘


  1. 搜狗输入法App和搜狗输入法键盘两者之间有什么关联? 如何关联?


  1. 第三方输入法和逆向之间有什么关联?逆向知识能为输入法类App带来什么?


如果你也有以上疑问,请耐心看下去(其实写到此处时能不能解答我也不知道...  下文均有解答)


本文目录:


  1. 调研着手


  1. App实现(简单实现一个能在其它App内使用的输入法App)


  1. 输入法类App原理


  1. 输入法App和逆向(个人瞎猜,可能鲁迅人本身根本没这么想)


1. 调研着手


1.1 砸壳


因为了解输入法App的念头起源于逆向,所以此处我先砸壳,看看什么发现...


在砸完搜狗输入法壳后,看ipa内部的文件,我并没有看到与其它App有什么区别,无非是icon资源,infoPlist,.mpa资源,Frameworkslottie json文件夹开启完全访问的.mp4教程MJRefresh等第三方库/PlugIns/SogouAction.appex以及mach-o


通过ipa,我发现两个关键点:


  1. 搜狗工程师比较喜欢用plist做配置类数据存储(这点我觉得挺挺好的,便于管理,当然用.json也没问题)


  1. plugins路径下,有一个SogouAction.appex文件,.appex一般是iOS拓展Extension生成的文件,比如接入NotificationService同样会生成push.appex文件


此时,我对百度输入法同样进行砸壳操作,发现在PlugIns文件夹下,同样有BaiduInputMethod.appexNotificationContent.appex这两个.appex结尾的文件


此时根据直觉,我觉得输入法类App的关键在添加了一个类似于inputKeyboard的拓展Extension实现


1.2 class-dump


头文件里搜索了SogouAction仍然一无所获


1.3 Reveal


简单看了下搜狗的UI架构,想通过Reveal看看能不能找出对应的class,结果不但没找到,Reveal里压根没显示出来键盘的UI(键盘是系统层UI,所有Reveal不到)。想到我们的目标是了解如何开发一个输入法App。此时我们暂时停止逆向,直接去百度...


1.3 利用搜索引擎


百度搜到的东西很少,大多是检测键盘弹出高度,只搜到关键性的三篇文章:


Keyboards and Input


iOS输入法_开发系统架构


iOS输入法开发(Swift)


其中文章一是苹果官方文档,主要讲构建输入法App用到的API


其中文章二主要将输入法App的App架构与通信,通过此文章我们大概知道为什么搜狗的iOS需要逆向经验


其中文章三是构建一个简单的输入法App


我决定跟着文章三开发一个简单的App,了解其原理


2. App搭建


2.1 创建一个名为InputApp的项目(为了练练手,我们采用OC编码,与链接内不同,后续我应该会创建Swift版本上传Github)


image.png

创建项目


2.2 创建键盘Target


拓展Target命名为CustomKeyboard


image.png

CustomKeyboard


弹出Activate “CustomKeyboard” scheme? 选择activate

此时我们注意到,添加CustomKeyboard后,默认生成了一个类

KeyboardViewController


image.png

image.png


!!! 注意一个很容易忽视的问题:记得修改CustomKeyboard Target支持的最低版本,如果支持的最低版本高于设备版本,xcode编译时不会报错,但运行时这个target不会运行,添加NotificationService时同样有这个容易忽视的问题


此时我们启动App,在设置-通用-键盘-添加键盘里能看到我们的自定义键盘,同时,也有开启完全访问的选项


<center class="half">

<img src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd521dabf02e448f9c5e13561773e081~tplv-k3u1fbpfcp-watermark.image" width="200"/> <> <img src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c0064cb4727d40d8b0fc809060529240~tplv-k3u1fbpfcp-watermark.image" width="200"/> <> <img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c3fc8f9bb244e5aa16fb69c8064c84e~tplv-k3u1fbpfcp-watermark.image"

width = "200">

</center>


添加键盘后,我们将键盘切换到我们自定义的键盘,任意App内调起键盘可以看到如图


<center class="half">

<img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/79496fdbb6cc435b9a24de9928df0e44~tplv-k3u1fbpfcp-watermark.image" width="200"/> <> <img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/38a51d7209194ab1a071807cb8146a25~tplv-k3u1fbpfcp-watermark.image" width="200"/>

</center>


此时弹出我们的自定义键盘,可以看到,键盘有一个添加Extension时默认生成代码的button。我们将会在KeyboardViewController类里做键盘的自定义布局


相关文章
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
105 3
|
2月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
31 0
|
2月前
|
iOS开发 开发者
一键制作 iOS 上架 App Store 描述文件教程
一键制作 iOS 上架 App Store 描述文件教程
|
2月前
uni-app 185iOS端兼容处理
uni-app 185iOS端兼容处理
36 1
|
2月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
142 0
|
2月前
|
开发者 iOS开发
iOS App上架新规解析:如何进行App备案
iOS App上架新规解析:如何进行App备案
210 0
|
2月前
|
iOS开发 开发者
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
【教程】uni-app iOS 打包解决 profile 文件与私钥证书不匹配问题
|
2月前
|
测试技术 Android开发
快速上手App自动化测试利器,Toast原理解析及操作实例
`Toast`是Android中的轻量级通知,短暂显示在屏幕任意位置,1-2秒后自动消失,不获取焦点且不可点击。Appium通过uiautomator2在控件树中处理Toast。在测试中,可设置隐式等待,利用XPath或Accessibility ID定位Toast元素进行检测和验证。示例代码展示了如何初始化driver,点击触发Toast,以及如何定位并读取Toast文本。
28 3
|
3月前
|
搜索推荐
手写字生成器(app+原理)
手写字生成器(app+原理)
30 0
|
3月前
|
安全 前端开发 数据安全/隐私保护
【教程】 iOS混淆加固原理篇
本文介绍了iOS应用程序混淆加固的缘由,编译过程以及常见的加固类型和逆向工具。详细讨论了字符串混淆、类名、方法名混淆、程序结构混淆加密等加固类型,并介绍了常见的逆向工具和代码虚拟化技术。