Dev
在 App Store 上架了第一款软件
在去年的年终总结里,我定下的 2024 年目标之一就是在应用商店上架一款软件。作为一名软件工程师,做出来一个自己的软件并上架到应用商店,是一种无形的荣誉。
技术相关
Dev
在去年的年终总结里,我定下的 2024 年目标之一就是在应用商店上架一款软件。作为一名软件工程师,做出来一个自己的软件并上架到应用商店,是一种无形的荣誉。
Dev
介绍一种在 SwiftUI 里实现自定义 TabView 的方法(macOS)
Dev
SwiftUI 的优势之一就是可以自动让 UI 和数据状态保持同步。频繁的视图更新也会带来一定的性能问题,尽管 Apple 已经让 SwiftUI 在更新时尽量只渲染视图树中必须重绘的部分,但我们还是需要知道某种可以监测视图更新以及触发其更新的原因的手段。这样我们才能在业务层面做一些针对性的性能优化。 我们可以通过在 View 的 body 视图构造器中插入一条 print 语句来监测到哪些视图的 body 正在被执行。这条语句还必须是一个赋值语句,不能是仅一个 print。因为 print 返回的是一个 Void ,而不是一个 View ,视图构造器会报错。 struct ContentView: View { var body: some View { let _ = print("ContentView Changed!") VStack { Image(systemName: "globe"
Dev
SwiftUI 是一个利用「状态」驱动视图变化的框架。一个比较复杂的 App 会有非常多的状态需要管理,各个地方的 View 都可能会用到某个状态。状态在视图间的传递和管理是非常麻烦的。
Dev
使用惰性视图让 SwiftUI 的 NavigationLink 惰性加载导航目标视图。
Dev
我们可以利用 URL 的 书签(bookmark)将已获取访问权限的链接书签数据存下来,下次启动后通过缓存的书签数据恢复链接的权限。这样就能持久化获取某个文件或文件夹的权限。
Dev
介绍如何给 macOS 软件实现开机自启动,以及获取自启动注册和开启状态。
GitLab 官方支持集成 Telegram,在项目的 Settings → Integrations 里就能找到。除了 Telegram 外,GitLab 还支持对 Slack、Discord 等软件的集成。 之前我做过通过 GitLab 的 webhook,在飞书群里发送 GitLab 通知的项目。那个项目需要先让 GitLab 把 webhook 数据发到自己服务器上,然后再格式化为飞书机器人支持的消息卡片数据,最后通过飞书机器人的 webhook 把消息发到指定的群里。 不过 GitLab 对 Telegram 的集成不需要咱们先把数据发到自己服务器上,它是可以直接发送对应软件支持的消息数据的。咱们只需要提供一下相关的配置信息即可。 根据我的尝试,目前可以在 GitLab 中配置发送通知的对象为 Telegram 的 Group、Channel 或者单个用户(比如自己)。 Telegram 的
前言 在做「大内存分配监控系统」时,我深入学习了一下堆栈回溯相关的底层原理,以及符号化相关的知识。这篇文章是当时记下的学习笔记。 调用栈回溯的目的是追踪某个函数的调用链。比如函数 A 调用了函数 B,函数 B 又调用了函数 C,调用链就是 A → B → C。调用栈回溯拿到的一般是函数的内存地址信息,无法看到函数名,需要再做一次符号化操作。 本文参考: App LibcArm DeveloperProcessor_registerDive into System CPU 寄存器 CPU 寄存器是 CPU 芯片上数据存储的小型区域,位于内存结构的顶部,具有最快的数据访问速度,用来暂时存放参与运算的数据和运算结果。 ARM64 指令集提供了下列用于调用栈的寄存器: x0~x30 通用寄存器负责的功能如下: * x0~x7: 参数寄存器,用于把参数传递给函数并返回结果。可以用作临时寄存器或调用者保存的寄存器变量,可以在调用其他函数之间的函数内保存中间值。
Dev
介绍我的编写的 GitLab merge request 脚本,包括脚本每次版本迭代的内容、脚本的功能等。
Dev
揭秘 Block 的底层实现
Dev
Block 是在 iOS 开发过程中经常出现的角色。它是由 Apple 在 OS X Snow Leopard / iOS 4 上引入的,属于对标准 C 的拓展。Block 可以视为是「带有局部变量的匿名函数(anonymous functions together with automatic variables)」