开发环境:使用 Ruby 工具链统一开发环境
一、前言在iOS开发过程中,你是否常常遇到这些挑战:
每次启动新项目,都需要手动设置开发环境;有时,在安装第三方工具时需要sudo权限,这导致以后每次安装工具都需要手动输入密码,无法实现自动化。另外,每当启动新的CI服务时,都需要手动登录和配置一遍。更令人头疼的是,随着Xcode版本的更新,已经配置好的CI服务也需要重新设置。
为何会如此麻烦呢?主要是因为在项目初始阶段未能做好统一配置。
所谓统一配置,即将所有配置信息以文本格式存放在Git中。这样,我们随时可以查看修改记录,帮助我们比较不同配置之间的差异,从而不断更新迭代。
有了统一配置,任何工程师都能搭建出一模一样的开发环境,构建功能一致的App。此外,统一配置还使我们能够根据需求扩展CI服务,无需手动操作。更重要的是,统一配置还可以应用到其他类似的iOS项目中,极大地减轻了项目启动阶段的搭建成本。
二、Ruby 工具链我们可以利用Ruby工具链为整个项目建立一致的开发和构建环境。为何选择Ruby而非其他语言呢?因为在iOS开发领域,目前流行的第三方工具CocoaPods和fastlane都是用Ruby开发的。特别值得一提的是,Ru ...
使用SwiftUI开发安卓App
一、前言是的!你没看错真的是用 Swift 开发原生安卓App,已经有开发者研究出使用 SwiftUI 开发安卓App,并且出了尝鲜版,今天就来介绍一下 Skip 的框架,并且通过 Skip 框架使用 SwiftUI 开发安卓APP。
二、安装 Skip2.1 系统要求MacOS: 13+Xcode: 15+Android Studio: 2023
2.2 安装使用 Homebrew 安装 Skip,如果没有 Homebrew ,请先安装,
Homebrew 官网:https://brew.sh/
打开终端,运行Terminal命令安装Skip:
1brew install skiptools/skip/skip
这行命令将下载并安装skip工具本身,以及构建和测试Kotlin/Android端应用程序所需的gradle和JDK 依赖项。
安装完成后,运行下面命令检查是否满足开发先决条件:
1skip checkup
如果checkup失败,执行
1skip checkup --verbose
以获取更多详细信息,并查看FAQ以获取常见解决方案。
如果checkup通过。
如上 ...
Flutter 的性能分析和监控
一、devTools 的使用devTools 是官方出的一套 Dart 和 Flutter 的性能调试工具,其核心是帮开发者定位 UI 或者 GPU 线程问题,从而协助开发者解决 Flutter App 的性能问题。在应用该工具之前,需要启动 App 调试功能。
打开 Flutter 项目,如果使用的是 Android Studio IDE,可以直接在工具栏中点击如下图所示的红色圈部分。
如果不是在 Android Studio 中,需要按照下面的四个步骤启动 devTools 工具。
1.使用下面命令启动 devTools 工具。
1flutter pub global run devtools
2.运行成功后,会提示 devTools 访问的地址。打开访问地址后,可以看到如下图的界面,界面中需要输入一个 Flutter App 的监听地址。
3.接下来需要获取 Flutter 运行的 WS 地址,重新运行项目(请注意不是热启动,需要停止运行,然后点击重新运行),启动成功后,在运行栏可以看到如下所示的信息。
12345Launching lib/main.dart on iPh ...
Flutter生命周期和使用场景
在说 Flutter 生命周期前,先介绍一下 Flutter 的组件,然后是组件的生命周期。
一、组件 Widget一个 Flutter 组件,包含了组件的模板、样式和交互等内容,外部只要按照组件设定的属性、函数及事件处理等进行调用即可,完全不用考虑组件的内部实现逻辑。其中组件又包括无状态组件和有状态组件。
无状态组件
无状态组件,可以理解为将外部传入的数据转化为界面展示的内容,只会渲染一次。
有状态组件
有状态组件,是定义交互逻辑和业务数据,可以理解为具有动态可交互的内容界面,会根据数据的变化进行多次渲染。
二、生命周期在原生 Android 、原生 iOS 、前端 React 或者 Vue 都存在生命周期的概念,在 Flutter 中一样存在生命周期的概念,其基本概念和作用相似。 Flutter 中说的生命周期,也是指有状态组件,对于无状态组件生命周期只有 build 这个过程,也只会渲染一次,而有状态组件则比较复杂,下面我们就来看看有状态组件的生命周期过程。
2.1 生命周期的流转Flutter 中的生命周期,包含以下几个阶段:
createState ,该函数为 St ...
WKWebView 白屏检测
苹果放弃UIWebView后,公司项目已经全面采用高性能和高刷新的 WKWebView,但是加载网页过程中还是经常出现白屏的现象,且现有API协议捕获不到这种异常。造成用户体验极差。
针对业务场景需求,考虑采用字节跳动团队提出的 WebView 优化技术方案。在合适的加载时机对当前 WebView 可视区域截图,并对此快照进行像素点遍历,如果非白屏颜色的像素点超过一定的阈值,认定其为非白屏,反之重新加载请求。实现加载白屏检测。
代码实现:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106import UIKitimport WebKit/// 检查 Web 是否白屏extension WKWebView { ...
Docker常用命令
1、查询所有容器1docker images
2、查询docker正在运行容器1docker ps
3、启动所有容器1docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
4、关闭所有容器1docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
5、重启所有容器1docker restart $(docker ps -a -q)
6、删除所有容器1docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
7、删除所有镜像1docker rmi $(docker images | awk '{print $3}' |tail -n +2)
8、强制删除所有镜像1docker rmi $(docker images | awk ...
使用 Charles 进行抓包操作
一、Charles 工作原理下图是 Charles 官方网站上的一个 Charles 工作原理示意图。
由图可见,任何通过客户端(APP/Web)发送给后端的请求,都将被 Charles 截获并转发给后端。同样,任何的后端返回值,也会经由 Charles 转发给客户端(APP/Web)。
由此可见,Charles 的工作原理类似于中间人代理,即任何客户端和服务端的通信都会经过 Charles,于是 Charles 便可以拦截来自客户端和服务端的任何请求,并进行修改。
二、搭建代理环境首先去官网下载 Charles 并且安装。
下载地址:https://www.charlesproxy.com
2.1 Web 端安装好 Charles 后, 首先去安装根证书。根证书的位置在 Help–> SSL Proxying –> Install Charles Root Certificate。
证书安装后,点击 Charles 的菜单, 选择 Proxy–>macOS Proxy.
此时,在浏览器里访问网页的时候,就可以在 Charles 里看到网络请求 ...
iOS图片大小修改和拼接长图
一、单张图片尺寸修改12345678910111213141516171819/// 修改单张图片大小/// - Parameters:/// - image: 原始图片/// - width: 目标宽度- (UIImage *)fixImageSizeWithImage:(UIImage *)image width:(CGFloat)width { CGSize size = image.size; if (size.width == width) { return image; } // 计算目标图片高度 CGFloat height = width * (size.height/size.width); // 目标大小 CGSize newSize = CGSizeMake(width, height); UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale); [ima ...
MacOS使用Homebrew安装MySQL记录
一、环境
OS: MacOS Sierra 10.12
Homebrew: 1.1.7
二、步骤2.1 安装 HomebrewHomebrew 是 MacOS 上的软件包管理工具
官方地址:https://brew.sh
命令行输入:
1/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2.2 使用brew安装MySql2.2.1 命令行输入:1brew install mysql
123456789101112131415161718==> Downloading https://homebrew.bintray.com/bottles/mysql-5.7.17.sierra.bottle.tar.gz######################################################################## 100.0%==> Pouring mysql-5.7.17.s ...
iOS 中使用 iconfont 替换 Assets 中的图标资源
一、关于 iconfont从名字上拆分icon + font字面上大家都可以理解,其实iconfont 就是让我们可以像使用字体一样来使用图标。
使用 iconfont 的好处有:
可以减少 App 的体积;
图标保真缩放,可以省去 @2x 和 @3x 图的适配;
适应换肤需求,使用方便。
二、使用 iconfont首先去 iconfont 图标库下载需求图标
阿里巴巴矢量图片库
其它选择
easyicon
fontello
icomoon
以阿里巴巴矢量图片库为例使用iconfont
1、选择图片加入购物车加入项目下载
每个图标都会对应一个unicode码和名称。 这些代码是&#xXXXX格式的,但是在 Xcode 中需要转换成\U0000XXXX格式的。
2、将 iconfont.ttf 移到工程中
下载完以后,我们会发现文件夹里包含如图二文件。我们只需要将iconfont.tff拖入工程中即可。
3、确保已经导入 iconfont.tff
为了保证iconfont.tff已导入成功,在Target--Build Phases--Bundle Resource 里检查一 ...