- 博客(132)
- 资源 (28)
- 收藏
- 关注
原创 Error: pngquant failed to build, make sure that libpng is installed
Error: pngquant failed to build, make sure that libpng is installed
2022-11-24 10:40:31
1322
原创 Objective-C——initialize方法调用原理分析
一、调用时机在类第一次接收到消息的时候调用二、调用顺序先调用父类的initialize方法,再调用子类的initialize方法(递归,每个类只会初始化一次)如果子类没有实现initialize方法,则会调用父类的initialize方法(消息调用机制,通过superclass指针向上查找)(所以,父类的initialize方法可能会被调用多次)如果分类实现了initialize方法,会“覆盖”类本身的initialize调用(方法合并的时候,分类的方法更靠前)三、源码窥探// obj
2022-02-24 14:21:17
1678
原创 NSTimer / CADisplayLink循环引用问题分析
背景:在使用定时器的时候,一不小心就会遇到循环引用问题,导致控制器不会被销毁,定时事件也不会被终止。故障代码class ViewController: UIViewController { var displayLink: CADisplayLink? // var timer: Timer? override func viewDidLoad() { super.viewDidLoad() // timer = T.
2021-12-23 11:03:46
784
1
原创 flutter - local_auth
背景指纹识别,引用local_auth库,iOS正常使用,安卓机器上发现报错,内容如下:Error: PlatformException(no_fragment_activity, local_auth plugin requires activity to be a FragmentActivity., null)解决办法1. 添加USE_FINGERPRINT权限<!-- AndroidManifest.xml --><uses-permission android:
2021-09-06 14:38:11
847
5
原创 大写时间日期格式化
背景:朋友项目中需要需要对OCR识别后的日期进行格式化,并做一些容错处理。如:“二〇一五年五月十二日” 转换成 “2015-5-12”直接上代码初始化字典private static final char TEN = '十';Map<Character, Integer> digitMap = new HashMap<>();// 初始化字典private void setupMap() { digitMap.put('一', 1); digitMap.
2020-07-17 17:47:18
1724
原创 iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift
需求有A、B、C、D、E、F 六个任务,D依赖A、B的结果,E依赖B、C的结果,F依赖D、E的结果,A、B、C互不依赖,D、F之间不依赖,可以并发,整体要尽快执行完成。参考实现一、通过 OperationQueue 添加依赖关系实现/// 通过 OperationQueue 控制异步任务调度func testOperation() { // 创建异步任务 let operaA = BlockOperation { self.execTask("A") }
2020-06-12 18:13:50
481
原创 如何获取iPhone手机的UDID
背景:最近刚给开发者账号续费,需要重新添加UDID,于是写个简单的文档给其他业务的同事,方便他们查看设备的UDID.一、Mac电脑1. Mac自带的音乐App将手机连接到电脑,打开音乐App(或者叫iTunes App),选择左侧栏的设备,就可以查看当前手机的UDUD。2. 爱思助手 / iTools这里拿爱思助手举例:下载Mac版爱思助手软件,连接手机,也可以查看UDID。3. Xcode打开Xcode,链接手机,点击菜单栏 Window** -> Devices and .
2020-06-10 11:13:53
6381
原创 iOS离屏渲染
一、界面渲染RunLoop异步消息事件循环以60fps(1/60≈16.7ms)的频率刷新屏幕,view由CPU绘制,GPU渲染,最后显示在屏幕上。如果整个绘制过程在16.7ms内完成,屏幕不会卡顿,否则就会出现丢帧的问题,页面卡顿明显,影响体验。UIView的主layer的content属性指向一块缓存(backing store),调用drawRect()方法绘制,数据通过context传递写入缓存CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区缓存写入完成后,
2020-06-08 10:33:30
535
原创 Cocoapods常用操作命令
查看镜像gem sources -l*** CURRENT SOURCES ***https://gems.ruby-china.com/`删除镜像gem sources --remove https://rubygems.org/添加镜像gem sources -a https://gems.ruby-china.com/初始化podspod init只安装新增的库,已安装的库不更新,但删除的库会删除pod install --verbose --no-repo-update只更
2020-06-01 14:28:54
227
原创 iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift
iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift需求有A、B、C、D、E、F 六个任务,D依赖A、B的结果,E依赖B、C的结果,F依赖D、E的结果,A、B、C互不依赖,D、F之间不依赖,可以并发,整体要尽快执行完成。参考实现一、通过 OperationQueue 添加依赖关系实现/// 通过 OperationQueue 控制异步任务调度func testOperation() { //
2020-05-22 10:31:31
503
原创 Xcode 11.4.1 Building for iOS Simulator, but the linked library '******.a' was built for iOS.
描述:今天升级xcode(v11.3 -> v11.4.1),编译项目,报错:Building for iOS Simulator, but the linked library 'xxx.a' was built for iOS.Building for iOS, but the linked library 'xxx-iPhonesimulator.a' was built for...
2020-04-27 16:22:28
11890
2
原创 CocoaPods pod install 超时的解决办法
错误描述[!] Error installing ReactiveCocoa[!] /usr/bin/git clone https://github.com/ReactiveCocoa/ReactiveCocoa.git /var/folders/np/3ty5h5jd439ft50q9s0ygnfh0000gn/T/d20200421-5534-yfmqbf --template= --s...
2020-04-21 11:16:25
10968
1
原创 算法练习题 - 回文字符串
意图使用单链表实现判断一个字符串是否是回文字符串思路使用快、慢指针找出字符串中间那个数找出前半部分字符串遍历前半部分,和整个字符串挨个比较字符,如果都相等,则是回文字符串,反之不是开发环境swift4.2Xcode11.3示例代码Node类class Node<T>: NSObject, NSCopying { var next: Node?...
2020-01-09 12:24:53
563
1
原创 fastlane for iOS 打包探索
一、软件环境maxOS Mojave 10.14.4Xcode11.2.1swift demo projectfastlane 2.99.1ruby 2.3.7Homebrew 2.2.0gem 2.7.7二、安装 fastlane1. 安装Xcode命令行工具xcode-select --install2. 安装 fastlane使用Homebrew安装 (我使用...
2019-12-13 10:31:27
903
原创 LLDB-你可能遗忘的调试小技巧
现状大多数做了好几年的iOS开发者(比如本人),用的最多的调试指令,大概是po (print object)吧,如下图。对其他命令知之甚少,当然这也无伤大雅,只是效率上略低一些罢了~(lldb) po tip"hello"(lldb) po 1+12(lldb) po tip + " world!""hello world!"为了提高工作效率,我们需要了解LLDB,至少需要多...
2019-12-11 10:44:51
1231
1
原创 iOS开发之系统权限
iOS基础之系统权限背景配合监管要求,针对APP用户获取管理权限做如下整改:APP在首次启动页面对权限进行解释说明(包括解释权限的涵义以及说明使用权限的用途)个人中心-设置,增加权限设置菜单,展示涉及获取的所有权限,以及展示当前开启/关闭状态一切为了监管……软件环境Xcode11.2Swift4.2iOS13.2.2开门见山,上代码工具类:SystemPerm...
2019-11-20 15:48:15
1519
原创 MyBatis - 批量INSERT
XML文件<insert id ="insertBatch" parameterType="java.util.List"> <selectKey resultType ="java.lang.Integer" keyProperty= "id" order= "AFTER"> SELECT LAST_INSERT_ID(...
2019-10-18 11:50:37
428
原创 iOS13简单适配
软件环境Xcode11 + iOS13问题列表Q1:present 不全屏问题描述:viewController present 的时候,默认没有全屏。UIModalPresentationStyle枚举public enum UIModalPresentationStyle : Int { case fullScreen @available(iOS 3....
2019-10-17 14:12:39
665
原创 Python升级(v2.7 -> v3.5)
Python升级(v2.7 -> v3.5)软件环境Mac: v10.12.6 Python: v2.7从官网下载指定版本点我从官网下载指定版本安装双击 python-3.5.0-macosx10.6.pkg,完成安装即可修改 .bash_profile 文件PATH=“/Library/Frameworks/Python.fram
2018-01-22 18:18:58
887
原创 iOS打包framework静态库
iOS打包framework静态库环境环境Mac: 10.12.6Xcode: 9.11. 创建项目1.1 新建工程1.2 添加文件 * 把写好的代码文件拖入到项目里 * 主头文件中导入需要暴露的头文件1.3 设置Headers Targets -> 项目名字 -> Build Phases -> Headers * 添加需要的
2018-01-19 15:15:27
758
原创 iOS 自动打包探索
# iOS 自动打包探索方式一: 使用xcodebuild命令步骤0. 准备工作:基础参数# 项目名称,打包后生成 .ipa 文件的名称projectName="JimuDudu"# 项目目录(一般情况下,shell 脚本就在项目路径下)workspacePath="/Users/apple/Documents/Projects/dudu/jimu-dudu
2018-01-11 14:38:50
640
原创 ipa包重新签名
ipa包重新签名软件环境Mac: v10.12.6 (16G29)ruby: v2.3.4rvm: v1.29.3sigh: v2.71.1Xcode: v9.2应用场景主要解决因重复打包导致测试同学回归测试的包和上传App Store的包不一致的问题。App开发测试流程 分析:一般情况下,流程如下:开发同学完成开发后,打包给测试同学测试测
2018-01-03 12:03:56
4550
原创 遇见,我的2017 —— 年终总结
许久没有提起过笔写点什么工作总结了,记得上一次,还是2014年。 今天打开那年写的年终总结,尽管内容已很模糊,但是从笔法上依稀能看到那青葱岁月划过的痕迹。那时候,我才二十二三岁。 今年,我二十六七岁。如果说时间带走了许多青春属性的美好,但也在开怀大笑时的皱纹间流露出略带成熟特质的东西,这大概是 舍 · 得 的问题吧。渐渐地,也就学会了多一份理解,少一些埋怨;多一句赞美,少一声反对;...
2017-12-31 11:25:29
735
原创 如何管理我的资产 -- 摘抄自《程序员修炼之道——从小工到专家》
管理我的资产定期投资 就像金融投资一样,你必须定期为你的知识资产投资。即使投资量很小,习惯自身也和总量一样重要。多元化 你知道的不同的事情越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性。但不要就此止步。计算技术的面貌变化很快——今天的热门技术明天就可能变得近乎无用(或至少是不再抢手)。你掌握的技术越多,你就越能更好的进行调整,赶上变化。管理风险 从高风险、可能有高
2017-12-29 16:22:32
657
转载 区块链技术基础:术语&用例
# 区块链技术基础:术语&用例 点我访问源文件1. 区块和区块链网络区块链是一种在整个业务网络上共享的分布式账本。业务交易被永久记录在有顺序的、仅可附加的、防篡改的账本区块中。所有经过确认和证明的交易都通过哈希算法从创始区块一直链接到最新的区块,因而得名区块链。区块链是自网络中的区块链启动以来发生的所有交易的历史记录。可将区块链用作该网络的单一事实来源。区块链网络可以是许可网络或无许可网络。
2017-12-21 11:51:31
1211
原创 Python 安装 MySQLdb 模块
Python 安装 MySQLdb 模块软件环境Mac: 10.12.6VSCode: 1.19.0Python: 2.7.10初次安装,报错如下图: 安装指令:sudo pip install mysql-python报错:mysql_config not found原因mysql_config 是在 /usr/local/mysql/bin/ 目录里,这个目录并非在任意位置都可以
2017-12-20 15:28:12
1407
原创 Python-爬取HTML网页数据
Python-爬取HTML网页数据软件环境Mac 10.13.1 (17B1003)Python 2.7.10VSCode 1.18.1摘要本文是练手Demo,主要是使用 Beautiful Soup 来爬取网页数据。Beautiful Soup 介绍 Beautiful Soup提供一些简单的、python式的用来处理导航、搜索、修改分析树等功能。Beautiful Soup 官方
2017-12-15 14:41:03
84824
1
原创 iPhoneX 适配笔记
iPhone X 的到来,惊艳的是果粉,苦逼的是程序猿。今天升级到Xcode9.0,运行项目,所谓的全屏 iPhone X,but 页面好像也没有全屏,于是根据之前的适配经验,总算初步解决了这个问题,记录如下,以备后需。App 页面适配适配前 问题:App 未全屏显示解决办法LaunchImage 中添加一个和 iPhone X 相关的启动图片 * 图
2017-09-15 09:25:06
46714
5
原创 ScrollView自动布局的实现方式
背景开发中,可能会有一些页面显示的元素很多,可能会超出一个屏幕,但也不适合用 TableView 或者 CollectionView,此时我们一般会用 ScrollView,那么就会出现自动布局的问题。实现方式纯代码特点编码繁琐:需要手写控件安全:只要正确地设置约束或者 frame、contentSize,一般不会出现滚动问题示例lazy var scrollView: UIScrollVie
2017-09-14 09:36:38
2540
原创 发布自己的项目到Cocoapods开源库
动机为什么要把代码发布到Cocoapods?对于部分非ARC项目,省去了大量的 -fno-objc-arc 标记规范更新代码版本 团队开发,指定三方库的版本,就会避免因不同时间去下载文件而可能会导致文件不一致的情况如若有新版本,只需一行命令就知晓(pod update)Cocoapods 使用简单 首先进入项目目录,pod init新建并编辑 Podfile下载安装, pod ins
2017-09-09 12:14:04
604
原创 Java获取apk、ipa应用信息的思考与实践
读完这篇文章,你可能会了解到以下几点:1. 蒲公英为什么只上传 ipa 文件,就可以下载 app2. Java 解析 ipa 文件 (iOS 应用包)3. Java 解析 apk 文件 (Android 应用包)4. 自己上传 app 到服务器,模拟蒲公英的效果关于蒲公英的思考蒲公英的作用(在工作中)在我的实际工作中,蒲公英主要用于企业包(In-House证书打的包)的分发,方便 QA
2017-09-03 22:18:20
1813
10
原创 iOS - 自定义 UITabBar
iOS - 自定义 UITabBar动机 关于自定义 TabBar,早就有过很多讨论,开源网站上也有很多造好的轮子,多半是纯代码实现有个性的 TabBar,当然我们可以很方便的使用它。周末闲着没事干,自己也写了一下,模仿今日头条的 TabBar 效果,实现方式是Storyboard + 代码。效果图实现步骤在 Storyborad 上搭建项目基础结构在界面上设置每个 TabBarItem 的相
2017-08-28 09:34:12
697
原创 GIT-子模块
动机 公司有若干个项目,并且各个项目有关联(代码层次),这时我们需要抽取出一个公共模块供其它项目使用,这时我们就需要使用submodule(子模块)使用步骤进入项目目录(.git 目录)使用命令添加子模块git submodule add git@git.xxxxxx.com:app-labs/swift-mkit.git swift-mkit 这时会 clone 子模块,并且生成两个文
2017-08-27 14:07:26
877
4
原创 Swift 比较运算符
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-08-24 11:12:48
1052
原创 Validform.js 学习笔记
Validform.js 学习笔记资源点我访问官网点我访问Github点我下载jQuery说明Validform功能强大,用法简单,官网列举了说明、demo和文档,开发者可以根据demo找到自己需要的这次示例,主要实现了以下一个需求: form表单表单字段校验点击按钮,不提交表单,而是发送ajax请求开门见山,直接上代码准备点我下载Validform库导入必须的js库 js
2017-04-28 16:43:42
1803
原创 LinkTextView-可点击的文本
LinkTextView背景 在开发中,有时需要展示一句带有某些可接受用户响应的关键词的文案,比如在页面上显示某某协议之类的。如果一行能完全显示(各种设备上),那么就可以在界面上写死布局;如果不能显示,则就需要使用UITextView控件了。效果图 图中,《XXXX规则》是可点击的,并且可以完美的适配各个设备。废话少说,直接上代码 ↓核心代码override func viewDidLo
2017-04-10 16:41:09
989
原创 Java: 生成plist文件
public boolean createPlist(String title, String path, String bundleId, String fileUrl, String versionCode) throws Exception { Log.info("开始创建plist文件"); boolean success = true; Fi
2017-03-30 10:39:08
3291
1
原创 HTML5 Web存储之localStorage
HTML5 Web存储之localStorage背景以前,网页一般都是通过cookie在本地存储数据,但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。特点没有时间限制## 浏览器支持常用API保存数据:localStorage.setItem(key,value);读取数据:localStorage.getItem
2017-03-02 10:31:11
1886
原创 TextField禁用粘贴、选择和全选功能
众所周知,TextField默认情况下,双击会出现“Paste”等提示复制粘贴的快捷菜单,方便用户快速编辑文本,但很多情况下,我们并不希望用户能够粘贴文本【虽然这样不友好,但万一产品经理要这么实现呢?】,那么我们可以这样做:方法自定义TextField重写canPerformAction方法class CustomTextField: UITextField { /// 是否只是用于显
2016-11-16 17:32:17
6085
LinkTextView
2017-04-10
查看被删的微信好友
2016-05-23
查看iOS APP里的图片资源
2016-04-26
UINavigationController返回手势失效问题
2016-02-17
JSPatch学习笔记-UI基础
2016-01-18
单例宏(Singleton)
2015-10-18
iOS仿支付宝输入密码控件
2015-10-18
Dash for Mac 2.2.2
2015-04-12
自定义UIAlertView
2014-11-13
Reflector 8.3
2014-09-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人