拼图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的什么方法?或者...
使用WidgetKit打包出的APP低版本崩溃
背景APP添加了WidgetKit功能,APP最低版本是10.0,用户反馈安装后,打开就闪退,这里记录一下原因: 解决排查后发现用户手机系统版本较老,低于iOS 14,由于手头没有低版本的设备,通过Xcode 12.x添加iOS 10.x模拟器添加了iOS12.0的模拟器,Debug模式下没有问题,但是Release不行,控制台报错类似如下: dyld: Library not loaded: /System/Library/Frameworks/WidgetKit.framework/WidgetKit Referenced from: /private/var/containers/Bundle/Application 搜索后,发现解决方案如下: Select your target Build Phases Link binary with libraries Add WidgetKit and set its Status to “Optional” 参考 Error running app with widgetKit on iOS 13
Xcode14编译的APP低版本崩溃
背景测试说iOS 12的手机上安装Xcode14.0.2导出的新包后,打开就崩溃,但是在系统版本高的手机上就没有问题。 调试后发现,崩溃日志是dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib,具体如下: dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /private/var/containers/Bundle/Application/55730273-D9D6-4C42-9335-7A56F92B7F2C/xxx.app/Frameworks/FSPagerView.framework/FSPagerView Reason: image not founds 搜索后发现,开发者社区中有此问题的记录,xcode14:Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib,解决方案是: If yo...
iOS CreateML的使用
CreateML使用背景业务需求,想要通过拍照识别照片中指定物体的数量或者物体的种类。而这种物体的模型网上没有训练好的,需要从头开始。所以调研了苹果的createML的实现方案,具体操作如下: 需求是:通过拍照识别照片中指定物体的数量,实现方案大致有几种: 通过第三方平台,训练数据,生成模型,提供前端使用 自己搭建平台,训练数据,生成模型,提供前端使用 通过苹果的CreateML工具,训练数据,生成模型,供iOS使用或转换成其他模型使用 对比可以发现,通过苹果的CreateML工具,可以省去搭建平台的过程。下面来看看怎么使用CreateML。 使用CreateML的整体流程是: 有大量的样本 标注所有的样本 用这些样本训练生成模型 验证模型的识别率 测试模型效果 导出模型供使用 需求是通过拍照识别照片中指定物体的数量,所以对我来说样本就是照片,下面就来看下怎么生成CreateML训练需求的标注信息。 使用样本照片标注首先要有大量的样本照片,这里由于是调研测试,所以选取20张照片,照片来源是百度图片。。。麻烦的是照片标注,由于苹果CreateML训练需要指定格式的J...
Xcode 14新建项目 Pod init失败
Xcode 14新建项目 Pod init失败背景使用Xcode 14.0(14A309)新建了一个项目,然后运行Pod init,就报错,[Xcodeproj] Unknown object version (56). (RuntimeError)和can't modify frozen String (FrozenError)。 排查一开始看报错以为是cocoapods出问题了,最坏的打算是重装CocoaPods,但是先去搜索一下,看是否是其他原因导致的,或者有没有遇到同样错误的。 搜索can't modify frozen String (FrozenError),搜出来都是m1芯片怎么怎么的,但是我的电脑不是m1芯片的,所以不是这个问题。 搜can't modify frozen String (FrozenError),发现了pod init cause RuntimeError - [Xcodeproj] Unknown object version 和 RuntimeError - [Xcodeproj] Unknown object ...
手把手教你创建widget2
手把手教你创建widget2接上篇iOS Widget,这里介绍下WidgetBundle的用法和怎么做一个支付宝类似的 widget,上篇里把WidgetBundle写成了WidgetGroup,我的错。 WidgetBundle 的用法再来回顾一下什么情况下使用 WidgetBundle,上篇里介绍了supportedFamilies,可以设置Widget 不同的尺寸,比如Small、Meidum、Large等,但是如果想要多个同尺寸的 Widget ,比如:想要两个Small尺寸的 Widget ,类似于下面东方财富 Widget 的效果,就需要用WidgetBundle,设置多个Widget。 WidgetBundle的使用不难,下面来看下,上篇最后的代码(可以去https://github.com/mokong/WidgetAllInOne下载,打开 Tutorial2),只显示了一个 Medium 尺寸的 Widget,这里修改为使用WidgetBundle显示两个Medium尺寸的 Widget。 新建SwiftUIView,...
Flutter组件——Tabbar
[Flutter组件——Tabbar]使用Tabar使用,设置indicator的样式,长短,设置tab选中和未选中的样式,根据数组创建Tabbar。 代码如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import 'package:flutter/material.dart';class TabbarDemo extends StatefulWidget { TabbarDemo({Key? key}) : super(key: key); _TabbarDemoState createState() => _TabbarDemoState();}class _TabbarDemoState extends State<TabbarDemo> ...