
Objective-C
文章平均质量分 75
风·之痕
镜花水月的独白。。。
展开
-
iOS性能优化 - 分析&应用
APP 的性能指标主要是包括 CPU、GPU、内存、电池耗电、网络加载几个大的方面,网络加载在下文会提及,电池耗电主要是由于 CPU、GPU、网络等因素决定,所以不作为基础的指标。原创 2021-09-21 17:13:45 · 7335 阅读 · 0 评论 -
浅谈IOS工程架构
注册组件 A 的接口服务,在组件 B 中获取组件 A 的接口服务,再执行相应的能力。备注:在云端页面路由配置较多的情况下,频繁正则匹配会有一定的性能开销,native 与 web 页可以不采用云端下发的路由匹配机制,通过已注册的路由实现页面的生成与跳转(native 由 url-path 命中规则)。MVVM 的核心是解耦视图逻辑与业务逻辑,View-Model 的单/双向绑定不是 MVVM 的必要条件,View-Model 的单/双向绑定主要是简化了ViewModel 与 View 之间的数据交互。原创 2020-11-19 00:48:30 · 4319 阅读 · 0 评论 -
IOS内存管理
1. 栈区(stack):由编译器自动分配释放,函数的参数值,局部变量等值。2. 堆区(heap):一般由开发人员分配释放,若不释放,则可能会引起内存泄漏。Objective-C提供了两种种内存管理方式:(MRC,手动引用计数器),(ARC,自动引用计数)。ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;原创 2018-09-05 10:49:32 · 8143 阅读 · 0 评论 -
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 · 11177 阅读 · 2 评论 -
OC与Swift的相互调用
1、在 Build Settings 搜索 Packaging ,设置为 YES2、新建 LottieBridge.swift 文件,自动生成桥3、在 LottieBridge.swift 中,定义Swift类继承于OC类,声明或@objc,实现相关方法4、在OC代码中引用,调用Swift相关方法。原创 2023-07-31 19:31:49 · 7380 阅读 · 0 评论 -
基于OC端的Bridge-API组件化应用
在移动应用开发中,组件化可以提高代码的模块化和重用性,降低耦合度。当下大部分APP都至少包含一到两种Hybrid框架,H5基本是必要的,还可能叠加React Natvie、Weex或Flutter。对于Hybird来说,Native的很多能力是其不具备的,需要通过各自的来实现功能扩展,经过长时间的迭代后会产生大量的API。原创 2023-04-20 19:44:20 · 711 阅读 · 0 评论 -
基于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 · 849 阅读 · 0 评论 -
IOS-Flutter页面的展示与通讯
从main函数配置routeChannel,实现路由切换。创建FlutterViewController。初始化FlutterBridge,实现通知的监听。通过routeChannel配置路由信息。FlutterBridge的具体实现。FlutterPlugin的具体应用。MyAppPage代码示例。初始化Engines。原创 2020-05-31 01:06:33 · 1442 阅读 · 0 评论 -
如何在iOS应用中更好的调试H5页面
在APP中,H5页面可以通过加载vConsole脚本,来查看页面的日志、异常、网络加载、设备信息、储存信息、元素。但是,JS脚本加载于页面Dom挂载之后,这样就会使得这一区间的信息丢失,而且vConsole的Error也会有采集不到的情况。本篇先简单讲述WKWebView的加载流程,再通过Safari网页检查器,实现H5页面的调试与问题定位。原创 2022-03-23 18:32:38 · 8861 阅读 · 0 评论 -
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 · 5183 阅读 · 0 评论 -
基于SRWebSocket的WebSocket长连接
背景搭建稳定及轻量的长链接能力,应用于业务方的消息提醒、状态更新等即时任务,同时也方便web应用的快速接入。WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的,握手成功后建立双向的socket通道。由于WebSocket的握手类似于Http协议,所以WebSocket的建联也支持常规的http配置,如请求头(包含cookie)、超时时长。...原创 2021-08-15 19:14:50 · 2036 阅读 · 0 评论 -
TCP粘包、拆包的场景与处理
1、发送端在每个包结尾处添加特殊字符,接收方根据此特殊字符接收相应的包数据。2、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。3、发送端在包首部与包内容之间添加特殊字符,接收方先解析包头,获取包内容大小并接收包内容。/// 有数据-触发- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag;/// 读到相应长度的数原创 2021-07-02 16:35:31 · 494 阅读 · 0 评论 -
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 · 1718 阅读 · 0 评论 -
IOS审核常见问题汇总
APP信息与元数据不完整,或者是与APP实际内容不匹配,需要补充或更改APP信息与元数据。 审核元数据被拒,只需更新元数据并在解决方案中心回复审核人员,不需要重新打包提审。 APP没有接苹果IAP,审核期间不允许出现虚拟商品,或者金融属性的商品(信贷、借呗)。 方法命名存在歧义,或者是一些奇怪的命名,有可能被认为是隐藏性功能或者代码混淆(talkingData)。 APP预览图需要与APP内容呈现一致,能够清楚的呈现APP的用途,而且必须区分全面屏与非全面屏。 ..原创 2021-01-27 12:50:10 · 1308 阅读 · 0 评论 -
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 · 8769 阅读 · 0 评论 -
H5资源本地化策略 - iOS
大致结构图如下(webFast | module | js、css、image、font)。原创 2019-12-29 21:31:44 · 2943 阅读 · 0 评论 -
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 · 8448 阅读 · 0 评论 -
IOS工程多环境配置
前言项目工程里总是会配置几个不同的环境,或是后台环境的各异,或是不同bundleID,每次都要去修改项目配置,不仅麻烦耗时,也不符合项目规范化管理。接下来说一下两个配置多环境的方法。目录利用Build Configuration来配置多环境 利用Targets来配置多环境 两者的对比一、利用Build Configuration来配置多环境1、首先复制一个现有的Configu...原创 2018-11-01 18:28:44 · 661 阅读 · 0 评论 -
GCD的简介及应用
iOS提供了三种多线程的调用,分别是NSThread、NSOperationQueue、及GCD,三者使用的轻重度依次是GCD、NSOperationQueue、NSThread,这里就不详细对比。GCD这要是采用C语言语法配合Block实现,可以实现同步、异步操作;运行并行、串行队列;同步锁,单例、延时等。原创 2018-09-05 13:06:22 · 1405 阅读 · 0 评论 -
Runloop应用详解
RunLoop 是 iOS 应用于线程中的一种循环机制。系统本身没有创建 RunLoop 的 API,不过可以通过 currentRunLoop 获取当前 RunLoop。主线程本身就存在一个 RunLoop,而且是运行转态,子线程的 RunLoop 需要手动开启,否知无法监听到输入源与定时源。子线程 RunLoop 随着所在子线程的事件源结束而关闭,随着所在子线程的结束而释放。原创 2018-09-04 16:45:03 · 1359 阅读 · 0 评论 -
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 · 371 阅读 · 0 评论 -
define用法补充
1)字符串的常量用法。原创 2019-05-17 17:00:32 · 335 阅读 · 0 评论 -
IOS音视频编解码-笔记
音视频采集及编解码一、硬编码与软编码的区别软编码:使用CPU进行编码 硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。 硬编码:性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基...原创 2018-08-30 10:13:14 · 1429 阅读 · 0 评论 -
Xcode开发调试
2、定位unrecognized selector错误,设置symbol断点,添加"-[NSObject(NSObject) doesNotRecogizeSelector:]"5、通过Xcode - Window - Devices and Simulators - View Device Logs,查看设备的Crash日志。4、通过Xcode - Window - Organizer - Crashes,查看用户上报的Crash日志。6、通过控制台 - 选择设备 - 点击开始,查看NSLog日志。原创 2018-08-30 10:11:45 · 357 阅读 · 0 评论 -
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 · 958 阅读 · 0 评论 -
通用链接-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 · 6106 阅读 · 6 评论