App Groups 应用间通信
在实际的开发中,我们也许会有这种需求:
公司的旗下有两个App,当客户已经登录一个App A的情况下,再登录另一个App B时,B不再需要繁琐的登录过程就可以直接使用A已经登录的信息。但是iOS系统下有这么一个安全机制:每个应用都有自己对应的沙盒,每个沙盒之间都是相互独立的,互不能访问(没有越狱的情况下)。
这种情况,我们应该怎么处理呢?
一、认识App Groups
AppGroup allows data sharing between two different apps or even app and widgets by creating one common shared path (like document directory). Data saved over there can be accessed by any app which is associated with that particular AppGroup. It is an offline data sharing between apps.
这是一段关于App groups的一段说明,告诉 ...
iOS数据持久化方式
一、iOS数据持久化方式
XML属性列表(plist)归档
Preference(偏好设置),本质还是通过“plist”来存储数据, 但是使用更简单(无需关注文件、文件夹路径和名称)
NSKeyedArchiver归档(NSCoding),可以把任何对象, 直接保存为文件的方式。
SQLite3,当非常大量的数据存储时使用
Core Data,就是对SQLite的封装
关于bundle路径和sandbox沙河路径:
(1)bundle路径:应用程序 (APP) 在手机里面的安装路径
(2)沙河路径:专门用来存储App自己数据的一个路径,iOS为每个app都分配了一个专门用来存储这个app自身的一些数据的路径
二、应用沙盒(应用程序的文件夹)
打印沙盒路径
1NSLog(@"%@",NSHomeDirectory());
使用Documents目录进行数据持久化的保存,我们平时操作数据主要使用Documents目录
Swiftobjc12345// 1let path = NSSearchPathForDirectoriesInDomains(.documentDire ...
Xcode常见问题
Optimization Opportunities: The layer is using dynamic shadows which are expensive to render. If possible try setting shadowPath, or pre-rendering the shadow into an image and putting it under the layer.
这是因为没有设置shadowPath导致了离屏渲染
解决方法有两种:
通过明确地设置shadowPath来“引导”阴影渲染,例如
1view.layer.shadowPath = UIBezierPath(rect: view.bounds).cgPath
缓存rasterization(珊格化)
12view.layer.shouldRasterize = trueview.layer.rasterizationScale = UIScreen.main.scale
iOS 唤起APP之Universal Link(通用链接)
什么是Universal Link(通用链接)
Universal Link(通用链接)是Apple在iOS9推出的一种能够方便的通过传统HTTPS链接来启动APP的功能,可以使用相同的网址打开网址和APP。当你的应用支持Universal Link(通用链接),当用户点击一个链接是可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。在苹果开发者中可以看到对它的介绍是:
Seamlessly link to content inside your app, or on your website in iOS 9 or later. With universal links, you can always give users the most integrated mobile experience, even when your app isn’t installed on their device.
如何理解Universal Link(通用链接)
Universal Link(通用链接):看 ...
setContentHuggingPriority和setContentCompressionResistancePriority的使用
当两个UILabel并排显示时,如何设置约束,让 leftLB 和 rightLB 正常显示就很重要了。
方案1: 左右两个Label的宽度相同,则约束设置如下:
123456789101112// 添加标题约束,左边的labelleftLb.snp.makeConstraints { make in make.leading.equalTo(16) make.centerY.equalToSuperview() make.trailing.equalTo(rightLb.snp.leading).offset(8) make.width.equalTo(rightLb)}// 添加内容约束,右边的labelrightLb.snp.makeConstraints { make in make.trailing.equalTo(-16) make.centerY.equalToSuperview()}
方案2: 左右两个Label的宽度不相等,此时需要根据设置 setContentHuggingPriority 和 setContentCompress ...
iris-go后台模版
序
本文是基于iris 12 扩展编写的类似eggjs框架结构。这里就简单介绍一下什么是iris,iris主要侧重于Web开发,提供了Web开发的一系列功能组件,基于MVC开发模式。如果你想直接开始,请点击stencil-go。
因为我本人之前写nodejs比较多,所以在学习go的时候就找到iris这个框架,毕竟它的关于里面就有一句A true successor of expressjs and laravel😄。有了框架之后就得约束一下结构不是,不然大家都随心所欲的写就很混乱了,所以我就参照了eggjs的结构进行设计。(当然这只是我个人的想法,毕竟这也才是我的入门项目,多有不足,还请指教( ´▽`)
基础功能
目录结构
这里就简单介绍下目录约定规范
123456789101112131415161718192021222324252627stencil-go├── README.md├── app│ ├── bindata│ ├── controller│ ├── core│ ├── extend(可选)│ ├── middleware(可选)│ ├── ...
Mac必装软件
系统软件
homebrew
mysql
pyenv
nvm
redis 直接brew install redis即可
Mac必装软件
IINA 最好用的音视频播放软件(可播放任何地址
Typora 最好用的Markdown编辑工具 (➕PicGo实现图片自动上传
VsCode 最好用的代码编辑工具
Neat Download Manager 最快速的下载工具
Electerm 开源的跨平台Shell管理工具
FinalShell 最好用跨平台Shell管理工具,就是不开源
Tencent Lemon 类似于CleanMyMac,但是完全免费
xmind 思维导图
wps 好用的文档中心
V2ray mac 推荐v2rayu, win推荐v2rayn (免费订阅free 幽禁节点
可选软件
OBS 强大的推流工具
ishot 截图、长截图、贴图、标注、取色、录屏,样样优秀
PicGo 一个用于快速上传图片并获取图片 URL 链接的工具
Daisy Disk 磁盘大小管理
Pixeur - 屏幕拾色器 取色器
Parallels Desktop 虚拟机管理 big sur
Na ...
Typora+GitHub+PicGo打造丝滑的编辑体验
前文
很多时候我们都需要一个公共的资源地址来存储自己的文章等信息,作为一个coder,那当然是要用我们专属的语言来写日记了(markdown)。这里就给大家讲解一下如何使用typora + PicGo + github 打造专属的编辑&存储方式。
准备
一、从上面的链接中下载并安装typora和PicGo
二、 登录github账号
创建公开资源库
生成新令牌
依次点击 右上角点用户头像 -> Settings -> Developer settings -> Personal access tokens)-> Generate new token
设置令牌描述性名称,过期时间看自己情况选择,Select scopes只勾选:repo、 user
Generate token 生成令牌 ⚠️令牌只显示一次,一定要复制保存好
设置PicGo图床
打开picgo后在顶部菜单栏右击图标,选择打开详情窗口,选择PicGo设置并勾选GitHub图床;就会在图床设置处显示图床
配置GitHub图床
填写github账号名: ...
Swift 5.1 高帧率朋友圈实现
本文基于IGListKit 4.0实现列表的高帧率滑动效果,项目地址见GitHub
话不多说,上图
创建基类控制器
所有IGListKit的视图控制器都应该继承此类,减少复用
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849class BaseListVC: UIViewController { var objects: [ListDiffable] = [ListDiffable]() lazy var collectionView: UICollectionView = { let flow = UICollectionViewFlowLayout() let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: flow) if #available(iOS 11.0, *) { ...
杂记
统计代码量
1234567891011121314find . -name "*.js" -or -name "*.json" -or -name "*.wxml" -or -name "*.wxss" |xargs cat|grep -r -v ^$|wc -lfind . -name "*.swift" -or -name "*.xib" |xargs grep -v "^$"|wc -lfind . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -lfind . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h" -or -name "*.rss" ")" -print | xargs wc -l-name "*.m" 就表示扩展名为.m的文件。统计java文件和xml文件的命令分别是:find . "(" -name "*.java" ")" -print | xargs wc -lfind . ...