文章分类:开发笔记
分享在开发中遇到的问题、总结,主要为iOS、Web等前端方向文章。
距离上线只差一个软件著作权证书
本来计划上月底可以上线一款 Harmony APP,没想到就在开发已基本完成准备提交上线的节点,碰上了软件著作权证书这个硬茬。早已习惯了在 Apple 生态的便捷与自由,没想到转向 Harmony 即遭遇当头棒喝。
比越狱更棘手!iOS vPhone 虚拟机成黑灰产新温床
vPhone 是一个在 Apple Silicon Mac 上运行的、拥有 root 权限的真实 iOS 虚拟机。它不同于 Xcode Simulator 和传统越狱、而是一个真正的具备 iOS 内核的完整系统。
Swift 从 ObservableObject 迁移到 @Observable 的再讨论
前文已经讨论过了 从 ObservableObject 迁移到 @Observable 的实施步骤,在实际迁移中还需要考虑与 Swift 其他特性的冲突与兼容。
Swift 从 ObservableObject 迁移到 @Observable
ObservableObject 协议是 SwiftUI 早期的观察机制,Swift 5.9 引入 @Observable 宏作为 Swift 观察的"现代"解决方案。本文讲解从 ObservableObject 迁移到 @Observable。
从 Apple Distribution Managed 证书提取备案所需公钥和 SHA1
这篇短文讲解了如何从 Apple 开发者后台通过 Xcode 自动管理的 Distribution Managed 证书中提取备案所需公钥和 SHA1 值信息
SwiftUI Menu checkmark 文本对齐
SwiftUI 中实现 Menu 菜单在有 checkmark 等 icon 情形下的文本对齐,如果使用 Button 或其他自定义 View 很难到达想要的效果,可以使用 Picker 和 Toggle。
C++ RTTI 信息对二进制体积和安全性的影响
RTTI 是 C++ 提供的运行时机制用于确定对象的类型。借助 RTTI,程序可以在运行时识别对象信息,这在处理多态对象时十分有用。但另一方面,RTTI 会在包体积和安全性上可能有负面影响。
SwiftUI 系统颜色表查询
在使用 SwiftUI 开发时,使用系统预置的颜色无论是在 UI 效果还是在可维护性上都是比较推荐的。这里原文转载一篇日语文章,展示了系统颜色值的一览表方便设计开发时查询取用。文章最后还提供了一个 Demo App 可用使用。
SwiftUI List selection 的使用提示
List 是常用的 SwiftUI 组件,在 iOS 中,其构造接口中的 selection 参数必须绑定到 Optional 型,否则 Swift Compiler 会报错。
PHP json_encode UTF-8 中文编码问题
在接入微信小程序文本内容安全识别时,遇到了 json_encode 默认的 Unicode 编码问题,这个隐含的处理导致请求 msgSecCheck 接口一直响应检测通过,修复办法为增加 JSON_UNESCAPED_UNICODE 参数。
使用 TrollStore(巨魔) 在非越狱设备上安装任意 IPA
使用 TrollStore(巨魔) 软件可以在非越狱手机上安装任意 IPA 软件。TrollStore 提升了安装 IPA 的权限,应用可以通过声明 entitlements 权限突破沙箱限制,因此仅推荐在开发测试设备上使用。
iOS 18 中 libdyld.dylib/dyld 的一些变化
libdyld.dylib 作为 应用程序 和 dyld 之间的桥接层,几乎每次大版本的系统更新都会有很多变化。在 iOS 18 系统中 __dyld4 section 所在的 segment 发生了变化。
iOS UIDevice name 的变化 和 废弃的 CTCarrier
本文涉及到的 API 变动在 iOS 16 系统上已经生效,在梳理项目代码时发现还有在使用的地方需要修正,这里稍作记录。可以预见,Apple 对用户隐私信息的获取上将会越来越严格,任何 API 只要获取能够定位或区分用户特征的信息都将会受到限制。
iOS越狱检测之判断特征文件和环境变量的注意事项
严格来讲,如果手机系统存在特征文件,仅能证明其曾经越狱过;读取 DYLD_INSERT_LIBRARIES 环境变量,有值可以确定发生了注入,没有值无法确定是否发生了注入。
HTTPS and HTTP/2 with curl
本文记录了编译支持 HTTPS(基于mbedtls)和 HTTP/2(基于nghttp2)curl 开源网络库的一些细节和踩过的坑。
iOS 15 CLLocation 读取 sourceInformation 崩溃
在 iOS 15 之前,iOS 的 CoreLocation 库提供的定位信息并没有标示数据来源,比如可以通过在 iPhone 手机中插入外置 GPS 硬件,或通过蓝牙连接 GPS 外设等方式达到篡改原始 GPS 数据,而 CoreLocation 很难确切感知到 GPS 信息到底来自 iPhone 还是外部设备。
iOS 越狱检测屏蔽插件 Shadow
Shadow 是一款强大的 iOS 越狱检测屏蔽插件,与 kernbypass 主要模拟非越狱状态文件系统不同,Shadow 胜在提供了更精细更自由的 API Hook 能力。
iOS 内核级越狱检测屏蔽方案:KernBypass
KernBypass 是一款内核级的 iOS 越狱检测屏蔽插件,相比传统的越狱屏蔽检测插件功能更加强大,隐蔽性更强。看川了解到已经有不少付费的插件是基于 KernBypass 开发的。
HarmonyOS的包类型和 ohpm 包管理工具
这是关于 HarmonyOS 的第二篇技术笔记,主要介绍 HarmonyOS 的包类型,以及 ohpm 包管理工具的相关知识。笔记的大部分内容在官方文档都有体现,请以官方文档为准。
解决 Xcode 下载 iOS Simulator 频繁失败的问题
从 Xcode 引导安装 iOS Simulator 套件很容易下载失败且无法断点续传,解决办法是直接从 Apple 开发者网站下载文件手动安装。
ArkTS/JS与Native的多线程交互调用
这是关于 HarmonyOS 的第一篇技术笔记,主要介绍使用基于 Node-API 的线程安全接口完成 ArkTS/JS与C/C++之间的多线程交互。
iOS LLVM 混淆插件:Hikari 和 Hanabi
近期我将项目中使用的 Xcode LLVM 混淆方案由 obfuscator-llvm 更换为开源的 Hanabi Hikari 插件,在 Xcode 15 上适配 Clang,编译 Objective-C 项目混淆效果达到预期,但对 Swift 项目支持的还有问题。
cocoapods-packager 插件的错误修复和适配
在前篇文章 pod package的不足和改进 中对 cocoapods-packager 插件如何自定义参数做过介绍,那已经是 2020 年的事了,cocoapods-packager 目前依旧停留在 2016 年的 1.5.0 版本,已渐失于维护。我在适配 Xcode 15 时,遇到一些问题,这里做下记录。
Swift并发编程 - 理解结构化和结构化并发的底层技术
前篇文章 Swift并发编程 - 理解 async 和 await 介绍了 Swift 并发编程的两个关键字 async 和 await。本文原本打算继续写 Task、Actor 等内容,但发现需要补充的基础知识很多。
由 xpc_connection_send_message_with_reply_sync 超时引发的崩溃
iOS 的一些系统接口需要调用 xpc_connection_send_message_with_reply_sync 方法与其它进程通信并返回结果,在低性能设备上打开 App 后如果有频繁的 xpc_reply_sync 调用可能会诱发超时卡死。
Swift并发编程 - 理解 async 和 await
本文是我学习 Swift 并发编程的第一篇笔记,文章从几个不太好理解的点,介绍了async 和 await 语法关键字的使用方法和内在含义。
销毁 Linux 线程的正确方式
在 Linux 系统中,线程是轻量级的执行单元,正确销毁线程可避免内存泄漏等问题。Linux 线程的有 joinable 和 detached 两种属性。
判断浏览器User-Agent是否伪造的常规方法
User-Agent使用一串特定的字符串来标识网络客户端信息,User-Agent常被网站用于平台判断、爬虫检测等。本文介绍一些判断User-Agent是否伪造的常规方法。
浏览器的 Secure Context 安全上下文限制
主流浏览器都启用了Secure Context,它禁止浏览器访问被认为是不安全的内容,防止不合法访问造成的信息泄漏和安全问题。
计算机系统中的时间戳
这是一篇简单的笔记,整理下目前已知的不同计算机系统的时间戳计数标准。
