Tag: iOS

  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. 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

  4. 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

  5. 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

  6. 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

  7. iOS - Data protect level

    一、设置 Complete 保护等级 The default protect level for iOS file is NSFileProtectionCompleteUntilFirstUserAuthentication in iOS, it can be set to NSFileProtectionComplete which is the safest level. Because system will delete the hierarchy secret key in memory and set the file to unreadable. 设置 NSData 的保护等级 NSData * data = [NSData new]; NSError…

    on iOS

  8. Xcode Build Settings - Preprocessing

    编译器标识 编译器标识被用来在编译时定义常量,可以针对你的代码编译配置做一些 tricky 的事情。 有三个地方可以设置这些 OTHER_CFLAGS (Other C Flags) GCC_PREPROCESSOR_DEFINITIONS (Preprocessor Macros) INFOPLIST_PREPROCESSOR_DEFINITIONS (Info.plist Preprocessor Definitions) Other C Flags 的设置和其他两个预处理设置的区别是它的值会被直接传递给编译器。这意味着如果你想定义一个叫 "A1" 的常量,你可以设置一个 C Flag -DA1,它将被原样传递给编译器,并且将定义A1常量。然而,这样潜在的风险是一个错误的 C 标识位设置将会潜在增加你的编译时间。 另一方面,通过预处理器设置 -D 传入的任何内容都将被自动传递给编译器。就像上面说的 A1 参数那样设置。这意味着如果一旦写了一个错误的标识,也会得到一个格式错误的返回结果。因此,…

    on iOS

  9. Conclusion of objective-C structure

    The isa pointer of Instance and Class Firstly, let's have a look at the struct objc_class * of Class, objc_class inherits from objc_object which only have a isa. //Class is in effect a struct pointer of (objc_class *) typedef struct objc_class *Class; //The struct objc_class struct…

    on iOS

  10. Clang - Use Xcode to make first Clang plugin

    How to build clang~ Firstly, you need download and install CMake, a article about how to study CMake for new leaner. Secondly, make directory and download the LLVM source code: //make directory cd /opt sudo mkdir llvm sudo chown `whoami` llvm cd llvm export LLVM_HOME=`pwd` //downlaod the source…

    on iOS