iOS端 ASR优化一、ASR(Automatic Speech Recognition)简介ASR是一种将语音信号转换为文本的技术,它可以帮助人们更方便地与计算机进行交互。我们的AI作业小节在录制过程中会同步调用ASR服务商实时将用户录制的语音转成为文字,在录制完成后根据ASR结果计算流畅度、语速评分,在上传作业的时候将ASR结果同时上传到服务端进行AI分析。
可见AI作业的流畅度维度评分、语速维度评分和AI分析报告中的关键词分析、口头禅分析、停顿分析都是建立在获得准确的ASR结果上的。所以构建一个准确可靠的语音识别服务是AI作业小节的基本要求,也是AI作业小节的分析准确度和用户满意度的关键。
二、ASR存在的问题2.1 热词/词库问题ASR服务需要手工校准一些生僻专业词语的发音或同音词识别,这也就意味着需要ASR服务商提供词库/热词功能,同时对不同的用户/企业甚至每一次ASR识别过程都可能需要不同的热词。
解决方案:
针对CN、CO、COM/TW/IO 这三个环境平台,调研支持热词的服务商并测试效果。CN 采用了阿里听悟,CO...
ChatGPT使用技巧手册
目录
核心技巧
代码优化与重构
多语言处理
开发辅助
跨平台适配
扩展应用
核心技巧Prompt生成方法论
多Prompt生成
通过生成多个prompt迭代优化输出质量
示例流程:1# 生成初始Prompt → 评估结果 → 生成改进Prompt → 最终优化
角色扮演
作为超级语言解释器(处理复杂语义)
作为提示词训练器(生成领域专用Prompt)
格式规范
强制JSON/YAML结构化输出
表格化数据呈现
代码优化与重构10大即时代码重构技巧
优化方向
典型操作
适用场景
性能优化
算法复杂度分析
循环结构
兼容性
多语言语法适配
跨平台项目
可维护性
模块化拆分
大型工程
重构步骤示例:
使用最新库版本替换过时代码
将ArrayList改为ConcurrentHashMap(数据结构优化)
添加try-with-resources错误处理
多语言处理多语种翻译工作流关键注意事项:
使用 LANG_CODE作为字典key
保留原始文本占位符(如 {0})
优先处理...
iOS Crash类型总结iOS APP系统crash主要分两类:一类是Objective-C Exception,一类是Unix Signal Exception。下面详细介绍。
崩溃日志路径:~/Library/Logs/CrashReporter/MobileDevice
一、Objective-C Exception例如NSDictionary加入nil、数组访问越界等。主要有如下类型:
1. NSInvalidArgumentException非法参数异常(NSInvalidArgumentException)是Objective-C代码最常出现的错误。平时在写代码时需要多加注意,加强对参数的检查,避免传入非法参数导致异常,其中尤以nil参数为甚。
主要场景包括:
1.1 集合数据的参数传递比如NSMutableArray、NSMutableDictionary的数据操作:
NSDictionary不能删除nil的key
NSDictionary不能添加nil的对象
不能插入nil的对象
其他一些nil参数
1.2 其他A...
iOS文件系统编程指南iOS文件系统编程指南
文件系统处理数据文件、应用程序以及与操作系统本身关联的文件的持久存储。因此,文件系统是所有进程使用的基本资源之一。
APFS 是 macOS、iOS、watchOS 和 tvOS 中的默认文件系统。APFS 取代 HFS+ 作为 iOS 10.3 及更高版本以及 macOS High Sierra 及更高版本的默认文件系统。
关于 iOS 文件系统iOS 文件系统面向独立运行的应用程序。为了保持系统简单,iOS 设备的用户无法直接访问文件系统,应用应遵循此约定。
iOS 标准目录:文件所在的位置
目录
描述
AppName.app
这是应用程序的捆绑包。此目录包含应用程序及其所有资源。您不能写入此目录。为防止篡改,捆绑目录在安装时进行了签名。写入此目录会更改签名并阻止您的应用程序启动。但是,您可以获得对存储在应用程序包中的任何资源的只读访问权限。此目录的内容未由 iTunes 或 iCloud 备份。但是,iTunes 会对从 App Store 购买的任何应用程序执行初始同步。
Documents/
使用此目录...
iOS签名机制概要背景在iOS开发中,配置证书总是一件繁琐的工作,网上的教程有很多,基本都是手把手的教操作,但是如果不了解为什么要配置这些东西,对配置流程就不会有深刻的印象。
配置证书最大的作用就是保证安全性,安全性主要表现在以下的几个方面:
1.保证苹果手机下载的App是从苹果官网认证的途径下载
2.保证App在苹果官方注册过的设备上运行
3.保证App在特定的设备中运行(开发需要)
技术支持苹果采用的是数字签名进行加密,它是基于非对称加密算法和摘要算法实现的,和对称加密算法不同的是,对称加密通过同一份密钥加密和解密数据,而非对称加密有两个密钥,分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密;用私钥加密的数据,要用公钥才能解密。这里的非对称加密就是我们熟知的RSA,想要深入理解的童鞋可以自主了解。
为了更好的理解非对称加密的好处,我举一个场景例子:A要发送邮件给B,这个过程中要确保在传输中邮件内容没有被篡改,也就是只有B可以查看邮件的内容;还要确保这个邮件是A发送过来的,不是其他人发送的。我们用非对称加密的方式来处理:首先存A和B各有一对公私钥,A持有他自己的私钥和B的公...
什么是SwiftUISwiftUI 于 2019 年度 WWDC 全球开发者大会上发布,它是基于 Swift 建立的声明式UI框架。
该框架可以用于 watchOS、tvOS、macOS、iOS 等平台的应用开发,等于说统一了苹果生态圈的开发工具。
SwiftUI provides views, controls, and layout structures for declaring your app’s user interface. The framework provides event handlers for delivering taps, gestures, and other types of input to your app, and tools to manage the flow of data from your app’s models down to the views and controls that users will see and interact with.
SwiftUI Hello World创建新项目并预览画布
和平时创建...
XCUITest iOS自动化UI测试框架XCUITest简介XCUITest是Apple提供的内嵌到xcode中的一套UI自动化测试框架。
UI测试依赖于两项核心技术:XCTest框架和Accessibility。
XCTest提供了UI测试功能的框架,与Xcode集成在一起。创建和使用UI测试扩展了您对使用XCTest和创建单元测试的了解。您创建了一个UI测试目标,并将创建UI测试类和UI测试方法作为项目的一部分。您可以使用XCTest断言来验证预期结果是否为真。你也可以通过Xcode Server和xcodebuild实现持续集成。XCTest与Objective-C和Swift完全兼容。
Accessibility是一项核心技术,它允许残疾用户获得与其他用户相同的iOS和macOS丰富体验。它包含了一组丰富的UI语义数据,用户可以使用它来指导他们使用你的应用。可访问性集成了UIKit和AppKit,并有api允许你调整行为和对外公开的使用。UI测试使用这些数据来执行其功能。
在源代码中创建UI测试类似于创建单元测试。你为你的应用创建一个UI测试目标;然后Xcode为你创...
iOS 一键唤起APP方案参考移动端业务发展过程中,几乎每个公司都会有活动宣传或者运营引流的需求。这些需求的实现不外乎开发一些吸引人的HTML页面,在页面的某些事件的响应中引导用户下载APP或者打开已经下载的APP。
基本流程为:
策划运营投放活动链接(新用户送红包或者PDD砍一刀)
用户点击活动链接进入活动页面
用户被吸引或诱导点击某个按钮触发事件
H5页面调起相关APP
APP响应调起并接力打开对应页面
我们这里主要说一说4、5两步其中的细节处理,也是对最近相关的业务的一个总结。
DeepLink技术在iOS9之前只有通过URL Scheme能够唤起一个APP。
Scheme可以理解为一个APP的名字,因为是URL Scheme所以遵循URL的书写格式,类比于http://www.baidu.com,其中http就是它的Scheme。
每个APP可以设置自己的Scheme,即给自己起个名字,方便”别人“叫我的时候我可以听得懂。
例如我们起了个Scheme叫kr,那么在H5页面内可以通过 openURL()的方式打开 kr://testPage链接调起我们的APP...
如何做一个九宫格GIF播放器需求背景APP V9.4.0版本上线了类似朋友圈的动态,包含文字及最多9张图片。
动态2期内容中九宫格图片内追加了GIF格式的图片,并要求多张GIF图片在九宫格内循环播放,且优先播放信息流内第一个动态中包含的GIF图片。可参考微博信息流内GIF组的播放表现。
技术实现GIF播放GIF图是包含若干帧图片的图片组,由于阿里云存储或者其他存储容器中的文件特征,许多图片路径并不带.gif或.GIF的后缀,所以不能仅通过比对文件名来识别GIF图。而通过二进制数据中来标记其文件类型的固定的位特征来区分较为准确。
目前我们项目中集成了优秀的开源网络图片框架 'Kingfisher',其中包含的 AnimatedImageView类能有效识别GIF文件类型和实现精细的播放控制,且使用方便,仅需要给图片view设置网络图片的URL。
图片对齐方式需求中同时需要支持图片设置顶部对齐裁剪和左部对齐裁剪,1期项目中 KrShortContentImageView类已使用 UIImageViewAlignmentMask来实现此需求。
UIImageViewAl...
iOS编译优化方案探索与实践-组件篇序言目前主流的项目构建方案中几乎都使用cocoapods进行组件库管理,不论是第三方开源库还是自研的私有库,都会生成.podspec文件使用cocoapods工具进行维护。
为了便于进行调试,第三方开源库或私有代码库 我们都以源码的方式进行引入。
每次在本机进行全量编译或者ci机器进行打包的时候都会先编译pod仓库中的源代码,然后链接到主项目中。
这个流程没有问题,但是随着项目的的大量迭代和长时间维护,引入的仓库会越来越多。以我们的项目为例,项目迭代了3年左右,引入的第三方仓库达到了30+个。在我的mac上进行一次全量编译时间达到了500s,性能稍差的设备编译消耗的时间更长。
针对组件库的编译时长的优化方案很简单,把cocoapods仓库中引入的需要编译的源码改成不需要编译的二进制库即可。
当然一刀切的引入方式切换是不可取的,根据自身的实际情况,对一些基本不会进入调试的代码和一些稳定版本的常用的仓库进行二进制化较为合适。
针对以上想法有了一些cocoapods插件可以使用。
Cocoapods-Binarycocoapods 1.6.x版本的时...