Safari中使用NewBing
NewBing 的权限已经有了,但是想在 Safari 中使用 NewBing,因为不想日常开三个浏览器,Safari、Chrome、Edge,电脑内存不允许。。。 首先说步骤: Safari 安装 Microsoft Bing for Safari插件,并登录,能使用NewBing的账号 修改 Safari 的 UserAgent 为 Edge 的 UserAgent 修改默认搜索引擎为Bing 第一步很简单,就打开商店搜索安装即可,安装完成后,打开 bing并登录有NewBing权限的账号; 麻烦的是第二步,网上搜索到大部分是,打开Safari -> Develop -> User Agent -> Microsoft Edge,如下图: 但是这种方法只能在当前Tab页生效,打开新的页面后,就失败了,每个新 Tab 都单独设置一次,想想就不可能。所以有没有一种可以永久设置Safari的 UserAgent的方法? 当然有了,设置方法如下,设置之后,每次打开新的页面,UserAgent也会一直保持; 永久设置 Safari 的 UserAgent 1d...
iOS推送播放语音播报更新
iOS推送播放语音播报更新接上篇如何让iOS推送播放语音,之前的结论是iOS如果需要送审商店只能播放本地的mp3文件,这里更新一下: 更新语音的播放,最终调用的方法是UNNotificationSound(named: xxx),而这个方法官方文档注释如下: 12// The sound file to be played for the notification. The sound must be in the Library/Sounds folder of the app's data container or the Library/Sounds folder of an app group data container. If the file is not found in a container, the system will look in the app's bundle. public convenience init(named name: UNNotificationSoundName) 注释里说,语音文件会从这三个地方...
玩转OpenAI和ChatGpt
背景之前在其他平台就看到有大佬分享自己的ChatGPT的使用, 比如: 自力hzlzh, 但一直也没弄. 昨天突然看到 OpenAI 在商店有很多应用, 下载了一个发现里面接口都是失败的, 但是界面和方向感觉很有意思, 打算自己做一个自用的. 注册 OpenAI注册过程参考超详细注册OpenAI接口账号的教程, 很详细, 按照步骤一步步来即可, 要注意的国内的手机号收不到验证码, 所以需要国外的手机号或者通过接码平台(需付费), 验证码的接收我选用的US的手机号, 花费了 7.1元, 一次就成功了. 简单的说: 首先要能打开openAI的注册页面, 然后注册, 到接收验证码界面 如果有国外的手机号, 直接输入, 接收验证码; 如果没有, 再去注册一个接码平台, 选择语言为中文, 然后就都能看懂了, 然后充值 1 美元, 可以用支付宝支付, 然后搜索openai的接码, 选择一个, 耐心等待, 收到分配的号码之后 再去openAI的验证码界面, 输入分配的号码, 发送验证码, 然后等待, 在接码平台就会显示收到的验证码, 输入就可以注册成功. 如何使用OpenAI注册完...
CABasicAnimation进入二级界面再回来不生效
背景发现之前同事写的某个界面有个动效, 起初进入的时候是生效的, 进入二级界面再返回动效就没了, 动画用的是CABasicAnimation, 添加在 layer 上面. 解决看代码没有问题, 毕竟第一次就生效了, 以为是在页面消失时做了什么操作, 查了之后发现, 页面消失时并没有操作. 再回过来看代码, 代码动画部分是在didMoveToWindow中实现的, 大致如下: didMoveToWindow方法在页面消失和出现的时候都会调用, 难道是添加多次导致不生效了, 改成只添加一次之后发现效果一样, 进入二级页面再返回就不生效了. 1234567891011override func didMoveToWindow() { layer.addSublayer(gradientLayer) let basicAnim = CABasicAnimation(keyPath: "animateLocation") basicAnim.fromValue = [xxx] basicAnim.toValue = [xx...
base64加密出现的问题
背景项目中仿QQ闪照功能, 图片的发送逻辑是, 先转base64, 然后加密, 最后加密后的字符串作为文件发送; 在处理接收的时候, 按照先下载文件, 然后读取文件内容, 再解密, 然后按照 base64 字符串的方式生成图片, 却一直失败. 解决方法起初以为是, 加解密的问题, 仔细排查后, 排除了这个假设. 最后把解密后的字符串拷贝到VSCode中仔细观察发现, 其中多了很多\r\n. 搜索后发现, 是base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在 Windows中是\r\n, 在Linux中是\n). 而解析后其中的回车和换行就是错误信息, 所以解决方法是, 把\r\n替换为空字符串, 然后再去生成图片, 就正常了. 参考 base64加密出现的\r\n换行问题
gitignore不忽略指定文件
背景在使用腾讯 IMSDK 时, 通过Pod依赖了对应的库, Pods 文件夹在.gitignore中配置忽略, 但是需要修改IM SDK 的源代码, 又怕重新安装后被覆盖, 所以想要针对 腾讯 IMSDK, 在.gitignore中设置不忽略, 怎么做呢? 实现设置如下: 12345!/Pods//Pods/*!/Pods/TUI*/ 设置之后, 如果发现没有生效, 可以通过下面的命令校验: 123git check-ignore -v Pods/TUIChat/ 如下图, 第一次校验, 提示.gitignore中某行导致被忽略, 然后修改, 再次运行, 没有结果,说明已经成功 原理转载自: [Git].gitignore文件的配置使用 .gitignore忽略规则的匹配语法如下: 12345678910在 .gitignore 文件中,每一行的忽略规则的语法如下:1、空格不匹配任意文件,可作为分隔符,可用反斜杠转义2、以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。3、可以使用标准的glob模式匹配。所谓的glob模式是指she...
拼图APP
背景建设银行龙卡信用卡小程序有个拼图小游戏,如下图所示,感觉挺好玩的 于是就试着做了一个APP版出来,简单有趣,给小孩玩耍再好不过了,开源出来,欢迎大家感兴趣的自己运行到手机上体验。 Github地址: 拼图 最终效果如下:
Safari脚本编辑使用体验
背景背景是这样的,我在用 Safari看hackingwithswift这个网站时,感觉上方的一直固定的红色的和黑色的两条,如下图,太醒目了,于是便想,如何能把它们移除. 实现首先查看这两个是怎么实现的,右键选择Inspect Element,选中对应两块区域,查看,如下: 知道了两个模块的class或id后,下一步是在Console中,尝试获取,看能否实现,如下: 可以发现能够获取到,下一步就来考虑如何通过Safari Extension脚本编辑来实现自动移除. 首先,安装一个 Safari Extension, Userscripts或Stay-Userscript Extension,这两个二选一即可,针对自己写javascript这种情况,推荐使用第一个,因为Userscripts的编辑界面更好用. 安装后,打开,在 Safari Extension界面,启用,如下: 然后如下图,点击Open Extension Page, 然后点击New Javascript,就进入 js脚本编辑页面, 进入 js脚本编辑页面后,可以看到页面如下,其中 ...
iOS界面黑白实现
背景iOS APP界面黑白效果实现调研整理,总的来说网上目前有下面几种方法: 针对H5网页:注入js代码 针对APP原生界面: 针对图片和颜色单独设置 hook UIImageView的setImage方法,添加UIImage的Category,生成灰色图片 hook UIColor的colorWithRed:green:blue:alpha:方法 针对界面整体处理 创建一个灰色view,设置不响应事件,然后添加在window最上层 给App整体添加灰色滤镜 具体如下: 实现针对网页:针对网页的处理: 如果有基类,可以直接在基类初始化WKWebview的地方,添加如下代码: 123456WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];// js脚本NSString *jScript = @"var filter = '-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%); -ms-fi...
部网络货运信息交互系统位置信息插件SDK接入总结
背景APP接入部网络货运信息交互平台,这里记录一下接入想法和过程。 实现iOS SDK提供的方法,共有下面6个 init start send pause restart stop 看起来很简单,但是需要考虑SDK某个方法可能会失败,而且可能会有同一个司机多个托运单、或者同一托运单分段多个司机运输以及托运过程中换车、司机运输中换手机等场景,想要持续记录位置信息,完成完整的一个单据链路就不那么容易了。 而这些场景的处理,需要服务端的协助,但是服务端没有和部网络货运信息平台直接交互的接口,无法直接从货运信息平台读取状态和数据,所以处理就显得麻烦了。 我们的设想是,服务端兜底处理异常,所以,首先要让服务端知道当前处理的单据和步骤,故而需要一个记录接口,每次执行SDK的方法后,成功或失败都同步给服务端。 为了避免出现其他手机或其他用户或后台手动关闭单子的情况,需要服务端提供另一个查询是否有待结束运单的接口,同样,这个接口在每次执行SDK的方法后,都要调用,用于获取是否有待关闭的运单。 而还有一种情况,即用户开始运单后,APP被杀掉了再次打开时,这时候应该执行SDK的什么方法?或者...