1. iOS - MitImgChecker 重复图片与无用图片检测

    作者:Mitchell 轮子链接:MitImgChecker 需求 之前项目中有想减少包体积的需求,核心诉求还是减少无用资源文件,再核心的则是减少冗余图片,围绕着这个主要的需求点,用 python 和 shell 匆匆写了一个脚本,代码就不贴了,大概流程是每次发版前 build 检查一下,功能虽然实现了,但是还是有许多问题遗留了下来,每次 build 前运行与工程绑定比较紧密,与工程耦合较重,并且如果想自定义的功能不太好实现,比如: 自定义搜索的图片类型,每次都要改脚本! 自定义被搜索的文件类型,改脚本! 添加搜索的图片黑名单,改脚本! 添加被搜索文件的黑名单,改脚本! 无法针对动画序列图片进行扫描分析,比如以下情况,a01 与 a02 明明使用了,但是没有被正确筛选出来。 //图片名称 a_01.png, a_02.png, a_03.…

    on iOS

  2. iOS - Check repeat and unused image

    Author:Mitchell Demand In our project, we need to reduce our size of package. The main point is to reduce redundant pictures and I write a script with python and shell according to the core appeal in a hurry. Although the function has been implemented, there are still many problems…

    on iOS

  3. Git - github push large files

    Steps //1、download git-lfs brew install git-lfs //2、install git lfs install //3、add track file git lfs track "large file path" //4、add track gitattributes git add .gitattributes //5、commit gitattributes git commit -m "add gitattributes" //6、push gitattributes git push //7、add large file git add largeFilePath //8、…

    on Git

  4. iOS - Hot Reload

    Author:Mitchell Hot reload for iOS - InjectionIII InjectionIII 是一个可以在模拟器上帮助实现 OC 与 Swift 热重载的 mac 端应用,可以很大程度上提高 iOS App 的研发效率,仓库源码在这里: github repo 原理 InjectionIII 整体框架上是一个 C/S 的架构,当 InjectionIII 启动之后会创建一个 server ,之后会像要调试的 app 进程中注入一个打包好客户端代码的 bundle 来启动一个 client,用来监听 server 发送的消息,当客户端收到了服务器发送的改变的消息之后,会将改动文件打包并进行重载,InjectionIII 提供了两种方法来实现 Hot Reload: 一种是通过文件观察者实现对工程中文件的变化监听来实现的自动更新,自动更新通过是否勾选状态栏中的…

    on iOS

  5. Ghost - 免费支持 HTTPS

    获取证书 因为穷,直接上阿里云免费的证书 一套支付流程之后,会来证书控制台 申请->填写信息->验证码激活->验证 一套流程之后,获取到了这步,这个时候证书可以下载并往服务器上配了。 点击下载,弹出以下界面,就代表证书已经生成完毕了,接下来可以进行下一步服务器的配置了,下面会以 nginx 配置为例讲述代理服务器的配置。 nginx 服务器配置 先看看 nginx 如何配置 https,找到 nginx.conf //1.登录服务器 ssh root@yourserverip //2.查找 nginx.conf 文件位置 find -name nginx.conf cd (where nginx.conf is) //3.上传生成的证书文件 .pem…

    on ghost

  6. Flutter - 如何在中国使用 flutter?

    开发过程中可能遇到 dart 无法从 Flutter 官方源地址下载的问题,这里是官方的解决链接 具体方式如下: 首先就是在用户环境变量文件下添加两个变量,如果我用的 zsh,那么就需要修改 ~/.zshrc 文件: //将以下两行加入 zshrc 文件的末尾 $ export PUB_HOSTED_URL=https://pub.flutter-io.cn $ export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 如果下载过 flutter 的可以跳过这步骤,就是克隆 flutter 代码 git clone -b dev https://github.com/flutter/flutter.git 添加…


  7. Ghost - reset your pwd when your forget it

    Find your table in your database I use MySQL to manage db so the process may be as followed: //First of all access your ghost service //Log in your mysql mysql -uroot -p //find your db may be called xxxxxx? show databases; //check xxxxxx database use xxxxxx; //find tables show…

    on ghost

  8. iOS - 使用 ReplayKit Live 实现第三方直播

    一、基本流程 被直播端接入 #import <ReplayKit/ReplayKit.h> 框架。添加用于发起广播请求的入口。 接入的第三方 app 需要接入Broadcast UI 和 Broadcast Upload 两个拓展。这样当直播端发起广播请求的时候,会在列表中找到支持的 App。 二、发起端具体实现 首先看一下调用 App 端需要实现的代码: //在需要被录制的 App 中添加个入口,例如按钮,点击的时候调用如下方法 #pragma mark action 录制点击 -(IBAction)replayLiveClick:(id)sender { //发起请求 [RPBroadcastActivityViewController loadBroadcastActivityViewControllerWithHandler:^(RPBroadcastActivityViewController * _Nullable broadcastActivityViewController, NSError * _Nullable error)…

    on iOS

  9. iOS - 右滑返回手势边缘阴影引起的思考

    一、问题描述 最近在工作中遇到了个优化拖拽返回阴影效果的问题,需求是第一个界面是一个隐藏了导航栏的视图,第二个界面是没有隐藏导航栏的视图,由于使用的是原生的导航栏,没有使用自定义的导航,并且导航栏的 translucent 默认设置为 false,通过打印当前的视图,对视图的情况进行分析: /** 打印了一下控制器的view发现坐标是一样的, 于是打印了一下在视图上的列表视图, 发现列表的坐标在 trasnlucent 变化前后不一。 */ //1 translucent = false <UITableView: 0x7ff8e5874e00; frame = (0 0; 375 603); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x6080004437e0>; layer = <CALayer: 0x608000430fc0>; contentOffset: {0, 0}; contentSize: {375, 1055}> //2 translucent…

    on iOS

  10. iOS - Use of KeyChain

    Simple use of KeyChain For example NSMutableDictionary * dict = [NSMutableDictionary dictionaryWithCapacity:0]; NSData * psd = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; //设置类型 [dict setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecAttrLabel]; //标签 [dict setObject:@"login" forKey:(__bridge id)kSecAttrLabel]; //描述 [dict setObject:@"description" forKey:(__bridge id)kSecAttrDescription]; //账户 [dict setObject:@"dthiel" forKey:(__bridge id)kSecAttrAccount]…

    on iOS