自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 iOS性能优化 - 分析&应用

APP 的性能指标主要是包括 CPU、GPU、内存、电池耗电、网络加载几个大的方面,网络加载在下文会提及,电池耗电主要是由于 CPU、GPU、网络等因素决定,所以不作为基础的指标。

2021-09-21 17:13:45 6168

原创 浅谈IOS工程架构

注册组件 A 的接口服务,在组件 B 中获取组件 A 的接口服务,再执行相应的能力。备注:在云端页面路由配置较多的情况下,频繁正则匹配会有一定的性能开销,native 与 web 页可以不采用云端下发的路由匹配机制,通过已注册的路由实现页面的生成与跳转(native 由 url-path 命中规则)。上面讲的这种声明协议再到类的实现,虽然是应用了接口编程的方式,但是业务组件之间还是会有直接调用的关系,所以需要有个中间件实现 protocol 与 service 的一一匹配。

2020-11-19 00:48:30 3589 2

原创 CocoaPods - podspec私有库配置

CocoaPods Specs 源地址:原始仓库-github、镜像仓库-gitee查看 CocoaPods 的 repos 与 CachesPodfile 中添加私有库的 source、pod 配置,在终端输入 pod install 构建在 Podfile 中使用 post_install 自定义 pod 库的 Build Settings。

2019-05-21 11:13:48 10335 2

原创 IOS内存管理

1. 栈区(stack):由编译器自动分配释放,函数的参数值,局部变量等值。2. 堆区(heap):一般由开发人员分配释放,若不释放,则可能会引起内存泄漏。Objective-C提供了两种种内存管理方式:(MRC,手动引用计数器),(ARC,自动引用计数)。ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;

2018-09-05 10:49:32 7623

原创 Runloop应用详解

RunLoop 是 iOS 应用于线程中的一种循环机制。系统本身没有创建 RunLoop 的 API,不过可以通过 currentRunLoop 获取当前 RunLoop。主线程本身就存在一个 RunLoop,而且是运行转态,子线程的 RunLoop 需要手动开启,否知无法监听到输入源与定时源。子线程 RunLoop 随着所在子线程的事件源结束而关闭,随着所在子线程的结束而释放。

2018-09-04 16:45:03 1246

原创 Swift-语法基础

以关键字 var 开头的声明引入变量,该变量在程序执行期间可以具有不同的值。Int 整数类型,又包含Int8、Int16、Int32、Int64。Array 类型是由可赋值给数组声明中指定的元素类型的数据组成的对象。以关键字 let 开头的声明引入只读常量,该常量只能被赋值一次。Bool 类型由 true 和 false 两个逻辑值组成。引入一个新类型,并定义其字段、方法和构造函数。enum 枚举类型用于声明一组命名的常数。带回调的函数声明/调用。常规的函数声明/调用。1)变量/属性的定义。

2024-08-01 00:32:19 545

原创 ArkTS-语法基础

以关键字 let 开头的声明引入变量,该变量在程序执行期间可以具有不同的值。常量声明以关键字 const 开头的声明引入只读常量,该常量只能被赋值一次。二、类型Number类型number 类型覆盖了任何整数和浮点数。Boolen类型boolean 类型由 true 和 false 两个逻辑值组成。String类型string 代表字符序列,可以使用转义字符来表示字符。Array类型array 类型是由可赋值给数组声明中指定的元素类型的数据组成。

2024-07-07 12:49:33 559

原创 OC与Swift的相互调用

1、在 Build Settings 搜索 Packaging ,设置为 YES2、新建 LottieBridge.swift 文件,自动生成桥3、在 LottieBridge.swift 中,定义Swift类继承于OC类,声明或@objc,实现相关方法4、在OC代码中引用,调用Swift相关方法。

2023-07-31 19:31:49 5647

原创 SwiftUI-基础

遵守PreviewProvider协议,定义Previews结构体。Main函数与App结构体的绑定,遵循App协议。兼容UIApplicationDelegate。遵守View协议,定义View结构体。Swift 结构体与类的构造函数。

2023-07-25 18:49:24 1973

原创 基于OC端的Bridge-API组件化应用

在移动应用开发中,组件化可以提高代码的模块化和重用性,降低耦合度。当下大部分APP都至少包含一到两种Hybrid框架,H5基本是必要的,还可能叠加React Natvie、Weex或Flutter。对于Hybird来说,Native的很多能力是其不具备的,需要通过各自的来实现功能扩展,经过长时间的迭代后会产生大量的API。

2023-04-20 19:44:20 624

原创 基于CocoaPods的多Project工程应用

6)选择 Framework Target 对应的 Scheme,Build - Any iOS Device / Any iOS Simulator Device,构建静态 Framework。3)添加 Framework Target 的 pod 配置,并 pod install 实现相应的 CocoaPods 依赖。2)在工程中引入 Framework 对应的 .h 文件声明,实现具体 API 的调用。1)在 Framework 对应的 .h 文件中添加提供给外部使用的类声明。

2023-03-29 18:53:58 695

原创 如何在iOS应用中更好的调试H5页面

在APP中,H5页面可以通过加载vConsole脚本,来查看页面的日志、异常、网络加载、设备信息、储存信息、元素。但是,JS脚本加载于页面Dom挂载之后,这样就会使得这一区间的信息丢失,而且vConsole的Error也会有采集不到的情况。本篇先简单讲述WKWebView的加载流程,再通过Safari网页检查器,实现H5页面的调试与问题定位。

2022-03-23 18:32:38 8556

原创 xcode13环境下iOS15兼容问题汇总

一、调用canOpenURL的差异通过xcode13运行的APP,在iOS15系统上会限制info.plist的scheme白名单个数,前50个scheme有效,如果超出50个,调用canOpenURL会一直返回NO,无论你的手机是否安装该URL Scheme的应用。苹果官网对canOpenURL方法的调整做了说明,希望APP内减少对scheme的依赖,通过Universal Link的方式去实现应用跳转。/// 手机安装了美团APP,如果imeituan添加在列表的第49个,isInstal

2022-01-18 23:15:26 5037

原创 OC/C/JS-基础手册

_attribute__((constructor)) 构造函数声明(在APP进入main之前调用)析构函数声明(在APP进程被杀掉之前调用 )

2022-01-06 15:33:51 518

原创 Mac指令备忘

上传dysm:java -jar buglyqq-upload-symbol.jar -appid 968259478589 -appkey 68925796-3259-9986-5698-bd66dd99dd45d -bundleid com.base.phone -version 1.0.0 -platform IOS -inputSymbol /Users/mikazheng/Downloads/MKBase.app.dSYM。git clone Git地址 拉取Git仓库到本地。

2021-09-01 18:06:16 311

原创 基于SRWebSocket的WebSocket长连接

背景搭建稳定及轻量的长链接能力,应用于业务方的消息提醒、状态更新等即时任务,同时也方便web应用的快速接入。WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的,握手成功后建立双向的socket通道。由于WebSocket的握手类似于Http协议,所以WebSocket的建联也支持常规的http配置,如请求头(包含cookie)、超时时长。...

2021-08-15 19:14:50 1857

原创 TCP粘包、拆包的场景与处理

1、发送端在每个包结尾处添加特殊字符,接收方根据此特殊字符接收相应的包数据。2、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。3、发送端在包首部与包内容之间添加特殊字符,接收方先解析包头,获取包内容大小并接收包内容。/// 有数据-触发- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag;/// 读到相应长度的数

2021-07-02 16:35:31 421

原创 IOS审核常见问题汇总

APP信息与元数据不完整,或者是与APP实际内容不匹配,需要补充或更改APP信息与元数据。 审核元数据被拒,只需更新元数据并在解决方案中心回复审核人员,不需要重新打包提审。 APP没有接苹果IAP,审核期间不允许出现虚拟商品,或者金融属性的商品(信贷、借呗)。 方法命名存在歧义,或者是一些奇怪的命名,有可能被认为是隐藏性功能或者代码混淆(talkingData)。 APP预览图需要与APP内容呈现一致,能够清楚的呈现APP的用途,而且必须区分全面屏与非全面屏。 ..

2021-01-27 12:50:10 1133

原创 xcode12环境下iOS14兼容问题汇总

1、UIProgressView高度问题/* Xcode12-IOS14的兼容 */if (@available(iOS 14.0, *)) { CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 1.0f); transform = CGAffineTransformMakeScale(1.0f, 0.5f); _progressView.transform = transform;}2、获取I

2020-12-09 12:36:15 1652

原创 IOS-Flutter页面的展示与通讯

从main函数配置routeChannel,实现路由切换。创建FlutterViewController。初始化FlutterBridge,实现通知的监听。通过routeChannel配置路由信息。FlutterBridge的具体实现。FlutterPlugin的具体应用。MyAppPage代码示例。初始化Engines。

2020-05-31 01:06:33 1357

原创 IOS WKWebView与Cookie问题梳理

解决方案2对比跳转URL与页面URL的host,如果为跨域且未做处理,拦截该跳转,重新配置request的cookie信息,再loadRequest一下。html资源加载一般是不会去判断登录态的,WKWebView在加载同域名的第一个html文件时,没有带cookie信息,所以直接在加载html的时重定向去判断登录态就会有问题。解决方案1对比跳转URL与页面URL的host,如果为跨域,通过WKUserScript在注入cookie信息(document.cookie)。...

2020-01-16 18:26:30 8430

原创 H5资源本地化策略 - iOS

取决于前端打包能力是否支持,结构图如下(webFast | module | js、css、image、font)​。

2019-12-29 21:31:44 2601

原创 IOS项目接入Flutter及依赖库

具体实现流程1)在IOS工程同级目录上创建flutter_module独立的项目$ flutter create -t module flutter_module2)在IOS项目的Podfile中添加以下代码,给工程target配置flutter相关的podstarget "AppTest" do flutter_application_path = '../flutter...

2019-12-26 22:41:18 1275

原创 APP-Log日志采集

JSAPI日志[模块] jsapi_action-- 方法名-- json:参数[h5-bridge] jsapi_handle--openUrl -- json:{url : http://www.baidu.com}[h5-bridge] jsapi_callback --openUrl -- json:{result : true}[weex-bridge] jsapi_handle-- openSysBrower -- json:{url : http://www.bai...

2019-11-18 17:13:19 1590

原创 iOS-逆向/反编译

根据 Crypt ID 来判断是否已经砸壳,AppStore 下载的 ipa 包 Crypt ID 为1,需要先砸壳才能进行静态分析、动态调试等操作。用 Mac 自带 “归档使用工具” 解压 ipa 文件,生成 Payload,打开文件夹,右键点击 app,显示包内容。3、取出 arm64 架构中的具体 API 定义。查看 Mach-O 的文件结构。2、导出 arm64 架构。1、查看静态库的支持信息。

2019-09-02 18:16:52 797

原创 Dart基础语法

数据类型Dart是强类型语言,与JavaScript有所区别,类型不匹配无法编译。int、double、boolint year = 27;double percent = 0.333;int stringInt = int.parse('27');double stringDouble = double.parse('0.333');var var_year = 27;...

2019-07-17 18:07:59 880

原创 Flutte环境配置(Mac)

Mac运行环境MacOS和Xcode升级到最新版本 安装VS Code,添加Flutter拓展 安装或更新HomeBrew(brew install、brew update) 安装CocoaPods(brew install cocoapods、pod setup) 安装Dart(brew tap dart-lang/dart、brew install dart)备注:An exce...

2019-07-12 00:10:48 354

原创 define用法补充

1)字符串的常量用法。

2019-05-17 17:00:32 298

原创 Xcode编译报错 & 上传ipa异常

Xcode编译报错1)clang: error: linker command failed with exit code 1 (use -v to see invocation)​​​​​​​需要右键点击Reveal in Log才能查看具体的报错原因2) dyld: Library not loaded:dyld[15027]: Library not loaded: @rpath/HappyDNS.framework/HappyDNSTARGETS > Gener...

2019-05-15 17:20:22 990

原创 CSS-基础

CSS属性padding:内边距; margin:外边距;padding | margin: top&bottom&left&right;padding | margin: top&bottom left&right;padding | margin: top right&left bottom;padding | marg...

2019-05-08 19:13:24 434

原创 H5标签

代码示例<!DOCTYPE html> <!-- html中空格键只能显示一个,可以用&nbsp半空格显示多个 --><titlt>&nbsp;&nbsp;标题&nbsp;&nbsp;</title><!-- meta 关键字 "description":页面描述 "generator":编...

2019-04-29 16:48:33 294

原创 Javascript-语法基础

GUI 渲染线程负责渲染浏览器界面,当界面需要重绘或由于某种操作引发回流时,该线程就会执行,但需要注意,GUI 渲染线程与 JavaScript 引擎是互斥的,当 JavaScript 引擎执行时 GUI 线程会被挂起,GUI 更新会被保存在一个队列中等到 JavaScript 引擎空闲时立即被执行。const 声明方式,除了具有 let 的上述特点外,其还具备一个特点,即 const 定义的变量,一旦定义后,就不能修改,即 const 声明的为常量。

2019-04-29 01:35:48 392

原创 Vue-基础

元素相关ifv-if="条件" => v-if="arr.length>0" v-else-if="条件" v-else<div class="a_class" v-if="arr.length>0"><div class="b_class" v-else-if="arr.length=0"><div class="c_...

2019-04-29 01:34:17 427

原创 通用链接-Universal Link

前言通用链接与URL Scheme的用途类似,主要是实现从外部唤醒App,并执行某些操作(如:打开指定页面)。由于使用URL Scheme(wechat://path?quary)从当前App唤醒自己的应用时,需要添加应用的URL Scheme到当前App的白名单中,限制该方法的灵活性,使用Universal link刚好可以解决这样的问题 (https://域名/path)。应用链接必须是https协议,且在webView打开链接时为跨域的方式(与当前域名不同),才会被作为通用链接唤起。

2019-04-24 19:56:22 5982 6

原创 TestFlight应用

一、内部测试与外部测试的区别内部测试只能添加100名成员不需要beta审核(beta审核:通过审核未发布上线),外部测试能添加10000名成员需要beta审核。二、内部测试构建1、在App Store Connect的App详情页中,选择TestFlight的栏目2、测试员和群组 > App Store Connect用户 > 测试员 > ⊕3、点击“用户和职能”添加测试员4、填写测试员信息,设置测试员的权限;邀请后apple ID邮箱会收到对应的邮件,

2019-04-24 17:14:43 8256

原创 HTML DOM 详解

目录DOM的简介...1DOM节点... 2DOM方法... 3DOM属性... 4DOM访问... 5DOM – 修改... 6DOM - 元素... 7DOM - 事件... 8DOM的简介HTML DOM 是:HTML 的标准对象模型 HTML 的标准编程接口 W3C 标准HTML DOM 定义了所有 HTML 元素的对象和属性,以及...

2019-04-22 16:43:41 1197

原创 IOS工程多环境配置

前言项目工程里总是会配置几个不同的环境,或是后台环境的各异,或是不同bundleID,每次都要去修改项目配置,不仅麻烦耗时,也不符合项目规范化管理。接下来说一下两个配置多环境的方法。目录利用Build Configuration来配置多环境 利用Targets来配置多环境 两者的对比一、利用Build Configuration来配置多环境1、首先复制一个现有的Configu...

2018-11-01 18:28:44 586

原创 GCD的简介及应用

iOS提供了三种多线程的调用,分别是NSThread、NSOperationQueue、及GCD,三者使用的轻重度依次是GCD、NSOperationQueue、NSThread,这里就不详细对比。GCD这要是采用C语言语法配合Block实现,可以实现同步、异步操作;运行并行、串行队列;同步锁,单例、延时等。

2018-09-05 13:06:22 1264

原创 IOS音视频编解码-笔记

音视频采集及编解码一、硬编码与软编码的区别软编码:使用CPU进行编码 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。 硬编码:性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基...

2018-08-30 10:13:14 1338

原创 APP安全相关

JWT(JSON Web Token):登录后返回acces_token、及refresh_token,请求携带access_token做验证身份,每次用access_token判断其是否过期,如果以过期失效,用refresh_token请求接口刷新access_token。cer文件包含了数字签名信息和公钥,为二进制文件,pem为Base64文件,P12文件包含了cer文件(数字证书)和私钥,为Base64文件。以AFNetworking为例,实现bundle-cer数字证书校验。

2018-08-30 10:12:52 316

IOS性能优化-扩展图.xmind

IOS性能优化-扩展图

2021-10-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除