2022年已经做了的事情
背景梳理一下2022年已经做了的东西 原因之前规划中,todo 类和天气类 APP 是最简单的,打算自己注册开发者账号后,开发出来上架,作为自己的 APP,但是后来计划有变,开发出来给别人了。 已完成: 不止美剧《水印相机-简单好用》《挑战24点》《极简天气-简单至极》《极简待办》
制作自己表情包
背景浏览 X 的时候,看到一篇制作马年表情包的文章,突然想起来自己之前也有把家里狗狗制作成表情包的念头,当时因为太复杂放弃了。看到文章使用 AI 生成图片,就想再试试 实现参考# 谁不想拥有专属的微信表情包呢,一步步操作,很简单,最终制作成功,步骤如下: 批量生成表情包Gemini Banana Pro 的提示词如下,你可以根据要生成的对象,适当修改,同时附上一张图片/照片: 为我生成图中角色的绘制 Q 版的,LINE 风格的半身像表情包,注意头饰要正确彩色手绘风格,使用 6x4 布局,涵盖各种各样的常用聊天语句,或是一些有关的娱乐 meme其他需求:不要原图复制。所有标注为手写简体中文。生成的图片需为 4K 分辨率 16:9 ⚠️ 需要注意的是,有时候中文会写成不认识的词,可能需要检查修改 ⚠️ 为了保存高清图片,记得点击 Gemini 生成图片右上角的下载按钮哦,右键保存的图片分辨率较低。 生成一个裁切工具生成了 6x4 的表情包,但还需要一张张裁切也太麻烦了。那就用 AI 生成一个图片裁切工具吧,gemini 提示词如下: 写一个web工具可以裁剪图片, 图片是...
Swift后缀表达式(逆波兰式)转换计算
Swift后缀表达式(逆波兰式)转换计算背景最近在开发《挑战24点》的过程中遇到了一个问题,即,如何计算常用数学表达式的结果,即,给定字符串8 - (6 + 4 / 2 - 1) * 2,怎么计算得到结果,并且得到计算的过程。 网上查资料发现,大部分都是类似系统计算器的处理,在遇到第二个运算符时,就把前一步的操作结果计算出来。这样的处理方式并不适用于笔者想要解决的问题。 进一步搜索后发现,前缀表达式、中缀表达式、后缀表达式的概念,给定的字符串8 - (6 + 4 / 2 - 1) * 2属于中缀表达式,而想要计算机得出结果,可以转为前缀表达式或者后缀表达式,然后再对转换后的表达式进行计算。 这里采用中缀表达式转后缀表达式,然后计算后缀表达式得出结果,步骤如下。 Swift 中缀表达式转后缀表达式什么是中缀表达式、后缀表达式?首先理解中缀表达式和后缀表达式分别是什么? 中缀表达式: 是常用的算术表示方法,操作符处于操作数的中间,比如 (a + b),即中缀形式,故而称之为中缀表达式。 后缀表达式: 运算符写在操作数之后,比如 (a, b, +),称之为后缀表达式,又名...
iOS 录音 && 播放实现
录音代码录音转 mp3录音播放播放播放锁屏通知栏显示背景问题获取录音时长的问题参考iOS 获取音频时长的正确姿势 笔记,获取音频时长,有两个问题: 录音的 http 链接经过了一次封装,且需要 token 才能获取,这种情况下获取不到 录音的链接,下载保存到系统的 cache 文件夹下 1234567891011121314- (NSTimeInterval)audioDurationFromURL:(NSString *)url { AVURLAsset *audioAsset = nil; NSDictionary *dic = @{AVURLAssetPreferPreciseDurationAndTimingKey:@(YES)}; if ([url hasPrefix:@"http://"]) { audioAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:url] options:dic]; }...
iOS 音频后台播放 && 锁屏显示及控制
播放锁屏通知栏显示背景播放音频时,希望通知界面能显示,且能控制音频播放。由于之前需求是进入后台时播放暂停,所以每次打开通知界面时,播放就暂停,看不到类似于音乐播放器那样的效果。后来发现,去除进入后台暂停代码后,通知界面就可以显示播放器,但是不能控制、且没有进度。 实现支持后台播放首先需要 APP 支持后台播放,即,一方面去除进入后台播放暂停的代码逻辑;另一方面,设置 Target -> Signing & Capabilities 中,添加 Backgroud Modes,打开 Audio, AirPlay, and Picture in Picture。图片如下: 注意设置AVAudioSession,播放前根据实际需要设置,播放后关闭 AVAudioSessionCategory类型 Category类型 当按”静音”或者锁屏时是否静音 是否可以和其他支持混音的 APP 混合播放 是否支持后台 场景举例描述 AVAudioSessionCategoryAmbient 是 是 否 常用于 APP 的背景音,比如玩游戏时还可以听音乐 AVAud...
iOS SDK 不支持模拟器解决办法
背景iOS 第三方 SDK 不支持模拟器,报错提示: building for ios simulator, but the linked framework ‘’xxx(比如: IDLFaceSDK.framework)” was built for ios 解决办法.。 解决办法首先,在Target -> BuildSettings -> Excluded Source FileNames -> Debug 中添加一行,注意,key选择 Any iOS Simulator SDK,value 中添加报错中提示的 SDK的目录,示例如下: 然后,在项目中,引用对应 SDK 头文件,以及使用 SDK 方法的地方添加如下代码判断 1234567891011121314#if !(TARGET_IPHONE_SIMULATOR)#import <xxx/xxx.h>#endif#if !(TARGET_IPHONE_SIMULATOR)[xxx share].yyy = xxx;#endif
iPhone Safari 下载企业包出现 apk
背景来水一篇文章,日常备用,知道的很简单,不知道怎么也查不到。。。。 有人反馈企业包下载链接,使用 iPhone Safari 打开后出现下载 apk 的提示 起初以为是用户手动设置了 userAgent,后来发现是设置——Safari——请求桌面网站的开关开启了。。。。 如下图,下面的开关要关闭 end哈哈哈
iOS 接入 HTTPDNS
背景最近开发水印相机,遇到了用户网络正常,但是上传超时、上传失败的问题。通过听云后台看到接口错误记录中,用户的 localDNS 为空,于是就有了接入 HTTPDNS 的需求。 实践由于项目中网络请求使用的 AFNetworking 框架,接入第三方 HTTPDNS 后,需要修改 AFNetworking 中的内容,才能让请求走IP。 大致流程是接入 SDK——>注册 SDK——>获取 IP——>存储——>使用。这里可依据个人情况,在启动时进行 SDK注册,获取 IP 有两种方式,一是只在 APP 启动时获取一次,然后存储起来,APP使用过程中不需要更新。二是在 每次某个接口使用时都获取。 下面详细来看看接入的过程 阿里 HTTPDNS 按照快速入门中的步骤进行配置 添加域名,注意阿里的添加域名,可以添加全匹配和二级域名的方式 参考iOS SDK 接入进行接入 使用 CocoaPods 接入 这里到要骂人的地方了,按照阿里自己的官方文档上面写的 CocoaPod 安装的SDK不是最新的 12345source 'https://gith...
上传图片失败问题的排查记录
背景最近开发水印相机,遇到了个难缠的问题。这里记录分享一下。 之前上传图片功能的开发,一般都是修改用户头像之类的,所以印象中上传图片,没有什么难处理的,使用 AFNetworking的 formData 进行上传,直接就可以了。但是这次用户大批量使用水印相机后大量反馈上传慢、上传不成功的问题。 排查用户反馈有问题后,开始排查;在用户反馈上传不成功的同一时间,在开发环境和线上环境尝试拍摄上传均可正常上传。 网络问题初步判断是网络问题,由于用户需要在工地现场使用此功能,所以猜测是用户网络环境的问题。建议用户尝试切换网络重新上传。同时让用户使用 SpeedTest.cn测速,发现部分用户月底流量限速网速被限制了,上传网速很低,导致上传不成功。 安全组策略限制然而还是有部分用户,测速显示上传速度28M/s,但是上传依旧超时失败。继续排查后,有同事在测试环境出现了一直上传失败的情况,排查后发现安全组有策略:同一IP单位时间访问请求的数量超出几千次后,当前 IP 会被限制,任何操作都会限制。但是进一步排查后,发现线上因为这个原因被限制的用户并没有太多。 客户端超时继续排查后,发现有用户反...