Swift 的 lazy 关键字一直有一个很容易被忽略的问题,那就是它不是线程安全的。
常规的在扩展中定义存储属性的方法是借助 Objective-C 的 runtime 进行属性关联。但是这个方法仅限于 ObjC 类,那么纯 Swift 类,比如结构体该怎么办呢? 在 epoxy 这个库中发现了解决办法。
Github Action 各个 Setp 之间是互相独立的,所以假如我们在 A Step 中定义了一个环境变量,在接下来的 Step 中是无法使用的。 那么怎么共享呢?在最新的 Github Action 中,可以通过 Environment files 来实现。
记录一个最近发现的小细节:UIImage.size 和 CGImage.size 在一些情况下是不相等的。
有的时候我们想要看看某个 App 的资源文件,或者单纯看看它引用了哪些三方库等。这些内容只要有一个 ipa 文件就可以看,也无需砸壳。 本文就记录一下如何简单的提取手机中 App 的 ipa 文件。
最近在学习使用 Tuist 生成项目,摆脱烦人的 .xcodeproj。但是 Tuist 好用虽然好用,但是因为最近文档正在迁移,加之一些东西只能从示例中发掘,整个学习过程有点费劲。所以开一篇文章记录一下。
最近在研究 Tuist,一个用来管理 Xcode 项目的工具。这个工具好像从 4.0 版本开始,创建新项目默认就是 SwiftUI 模版了,所以需要手动再从 SwiftUI 改回 UIKit。 在改动过程中发现 SceneDelegate 不执行,搜索了一番后找到了解决方案,在此记录一下。
CSS 有多种选择器,可以帮助我们针对不同的 HTML 标签设置样式。
记录前端的学习过程。 本篇文章是最基础的 HTML 部分。
使用 tinymediamanager 配合 TMM(themoviedb)实现 Jellyfin 刮削。 网上现有的教程都比较老了,所以开一篇帖子记录一下自己配置的过程。
假如我们没有公网 IP,或者公网 IP 出现故障暂时无法访问,那么我们可以借助云服务器+WireGuard的形式实现内网穿透。
当我们配置玩 DDNS 和 WireGuard 之后,我们已经可以安全的访问我们 NAS 上的文件以及各种服务了。 但是如果你觉得通过端口访问 Docker 中各个服务太繁琐,或者 Docker 服务太多,要记的端口太多。那么我们可以通过配置 Nginx 的方式,来给各个 Docker 服务绑定一个域名。
因为配置了公网 ip,为了安全,使用 WireGuard 控制访问。 本文参考自:群晖DS220+安装 WireGuard 保姆级教程
本文使用DSM 7.0。请您确保已经获取了公网 ip,并且已经购买了域名。 因为我的域名在腾讯云上,所以为了方便 DDNS 使用腾讯云的服务,步骤参考:群晖(Synology)NAS 启用腾讯云 DDNS 并安装免费证书
过去 Package.swift 没有好好写,toolchain 版本跟着 Xcode 走,没有兼容不同的版本。最近研究用 SPM 代替 CocoaPods,所以认真的研究折腾了一下。 本文总结把 Package.swift 从 5.9 降至 5.1 过程中遇到的一些问题。
相信经常使用 SPM 的小伙伴,应该都遇到过使用 Reset Package Caches 时报错:An unknown error occurred. reference 'refs/remotes/origin/main' not found (-1),或者其他分支。 关于这个问题在 stackoverflow 上有比较多的讨论,例如这个 SPM unknown error reference not found when changing branch。 思来想去决定根据上面的回答,记录一下解决方案。