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类里做键盘的自定义布局


相关文章
|
3月前
|
Swift iOS开发 开发者
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
215 13
苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡
|
3月前
|
安全 API Swift
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
172 15
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
|
3月前
|
存储 数据安全/隐私保护 开发者
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
103 8
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
|
5月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
736 75
|
4月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
287 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
4月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
115 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
131 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
3月前
|
搜索推荐 数据挖掘
直播App程序源码开发前期功能调研:运营角度思考如何有利于推广运营获利
在直播App程序源码开发的前期,功能调研至关重要。除了技术实现的可行性,更需要从运营角度出发,思考哪些功能能够助力推广运营,最终实现获利。山东布谷科技从运营角度,对直播App功能进行调研分析
|
5月前
|
Windows
【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释
在Azure App Service中,CPU占比可在App Service Plan级别查看整个实例的资源使用情况。具体应用中仅能查看CPU时间,需通过公式【CPU Time / (CPU核数 * 60)】估算占比。CPU百分比适用于可横向扩展的计划(Basic、Standard、Premium),而CPU时间适用于Free或Shared计划。然而,CPU Percentage包含所有应用及系统占用的CPU,高CPU指标可能由系统而非应用请求引起。详细分析每个进程的CPU占用需抓取Windows Performance Trace数据。
140 40
|
4月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
70 0