2025-06-12 12:27:11
在过去写过一篇 「iOS App Self-Signing and Multi-Opening」,在 2025 年的今天,有必要更新一下, 尤其是针对 微信 的多开。现在完全可以支持无后台推送,这是相比过去最大的改进。
关于签名的部分我在这里不会重复赘述,因为之前的文章已经写的非常清楚了。如果你不知道如何签名可以参考之前的文章。我最推荐的签名 App 仍然会是 Esign,它简洁易用无广告完全免费。
当然前段时间 Esign 已经关闭了他们官方签名的服务器,不过没有关系,你完全可以使用我自己写的在线签名服务。
你可以使用这个服务来签名 Esign v5.0.2,未签名的 IPA 的下载链接为:
https://github.com/qbap/ONEJailbreak-IPAs/raw/refs/heads/main/esign_5.0.2_unsigned.ipa
如果你想要无后台推送,过去只有官替(替换商店版本),不修改 Bundle ID 才能做到。现在不同的是多开也完全可以做到。你只需要把 Bundle ID 改为以下几个:
com.tencent.qy.xin
com.tencent.wx
com.tencent.mm.xin
其中 com.tencent.mm.xin
有些特殊,你必须要使用 Development 证书,而不能够使用 Distribution 证书。我一般只使用 com.tencent.qy.xin
。
请注意,请必须在 Apple Developer 的 Identifiers 中创建一个不是 wildcard 的 Bundle ID,并且开启以下 Capabilities:
App Groups
Communication Notifications
Extended Virtual Addressing
HealthKit
HealthKit Estimate Recalibration
iCloud
In-App Purchase
Increased Debugging Memory Limit
Increased Memory Limit
Push Notifications
App Groups 至少选择一个。有些 Capabilities 是为了启用消息推送带头像的。我这里就不展开细说了。
为了方便你直接使用,我已经打包好了一个 IPA 文件,你可以从这里下载:
你在签名的时候需要注意的是,不要勾选 移除所有插件
,不要勾选 移除 mobileprovision
。另外,你必须将 Bundle ID 修改为 com.tencent.qy.xin
。有的朋友可能会好奇,现在最新的 WeChat Beta 已经是 8.0.61,而正式版也已经来到了 8.0.60,为什么还在坚持使用 8.0.57 呢?不是我不想更新,而是因为大于 8.0.57 的版本模拟 iPad 登录的 UI 会存在问题,如果你只使用 iPhone 模式当然不受影响,但是我日常模拟 iPad 模式,为了完美的体验,我只能使用 8.0.57。
如果权限正常,你看到的应该是这样的:
如果一切顺利,你收到的消息推送应该是这样的:
2025-05-10 21:56:40
2023 年刚来美国的时候,申请了 State ID,这样就不需要护照就可以坐飞机了,包括在美国的几乎 99% 需要出示身份证件的场合都可以使用。比较害怕护照随身携带丢失,所以我一般情况下只会随身携带 State ID。后来因为想拿 Driver’s License,还参加了 Pennsylvania 的笔试拿到了 Permit。但是后来放弃了路考,原因是路考需要自己准备车,按照官方的说法,从租车公司租的车应该还不符合要求。再加上 PA 的规定,DL/State ID 的有效期严格与身份挂钩,最长只能能到 I-20 到期后两个月整。
2024 年得知,原来在 New Jersey 可以直接用中国驾照换取 NJ DL,并且更吸引人的是 NJ DL 并不与身份挂钩,默认给到四年后的生日。经过一般研究,我成功在 2025 年花了一些时间去 NJ 办理了 NJ DL。感兴趣的可以参考 这篇文章。其实有很多小坑,比如同样的材料并不是所有的 MVC 都能成功 waive 路考的。
目前遇到的问题是,在 2025 年 5 月 7 日,Real ID 法案真的在美国生效了。你要知道这个法案从 2005 年就开始提出了,在疫情那会本来要开始执行了,结果又推迟到了 2025 年。本来以为这个法案应该没办法执行,原因是所有的美国居民都需要重新申请身份证件,这对任何人来说都是很大的一笔成本。
Real ID 法案生效之后,也就是我无法使用不是 Real ID 的身份证件坐飞机了。当然截止到我写这篇文章的时候,我不太确定 TSA 是否已经严格开始执行。因为才刚开始三天,我猜可能开始会放水,毕竟大部分人都没有 Real ID。
PA 的 PennDOT 是不需要预约的,直接 walk in 即可办理。别的州可以自行打电话询问。
由于 Real ID 相当严格,需要准备的材料也很多。
实际测试下来,如果你的 I-20 是带 OPT 的版本,会给到你 OPT 到期的那一天。如果你的 I-20 没有 OPT 的话,会给到你 I-20 到期后的 60 天,也就是会覆盖 Grace Period。
申请过程其实非常顺利,也没什么需要问你的,就是填表签字拍照。最后就是等 15 天 Real ID 寄到你家。
值得吐槽的一点是,这个 Real ID 非常贵,Real ID 是 $30,再加上 Renew State ID 的费用是 $42.5,总共是 $72.5。
为什么不把 NJ DL 换成 PA DL (Real ID)?
因为这样会大大缩短我的 DL 的有效期。
顾名思义,DL 的有效期与你的身份无关。众生平等,任何人都会有相同的有效期,例如 NJ 即使你是没有身份的非法移民,DL 的有效期也是到四年后的生日。当然 Real ID 的法案比较严格,如果你希望获得更长的有效期,不建议申请 Real ID。
以上信息来自 usdrive.org
2025-05-05 22:10:28
正如标题写的那样,ShadowTLS 相见恨晚。
偶然在 Mihomo 的 Issue 里面看到作者说 ShadowTLS 还很稳,所以没必要支持 XHTTP。看了一下 ShadowTLS 的作者竟然是我关注了很久的大佬 ihc。
看了一下 GitHub 的文档,发现部署 ShadowTLS 其实非常简单。我尝试在日本 IIJ 的服务器上部署了一下,发现速度很不错。并且 Surge 和 Shadowrocket 都支持 ShadowTLS。之前一直在用 Snell,但是苦于 Snell 必须要依赖 Surge,很难分享给没有 Surge 的朋友使用。ShadowTLS 刚好解决了这个问题。
由于 老刘没有提供 Snell Server 的 Docker Image,我在 geekdada/snell-server-docker 的基础上改进了一下,支持了 Github Actions 的自动构建,并且支持了更多的环境变量。
本文只介绍如何使用 Docker Compose 部署 ShadowTLS + Shadowsocks 和 ShadowTLS + Snell。
https://github.com/missuo/snell-server-docker
# Create directory and navigate to it
mkdir shadowtls-shadowsocks
cd shadowtls-shadowsocks
# Download compose file
wget -O compose.yaml https://raw.githubusercontent.com/missuo/snell-server-docker/refs/heads/master/compose-shadowsocks.yaml
# Generate random password for enhanced security
openssl rand -base64 32
# Edit the compose file with your configuration
nano compose.yaml
# Start the containers
docker compose up -d
# Check logs
docker compose logs
# Create directory and navigate to it
mkdir shadowtls-shadowsocks
cd shadowtls-shadowsocks
# Download compose file
wget -O compose.yaml https://raw.githubusercontent.com/missuo/snell-server-docker/refs/heads/master/compose-shadowsocks.yaml
# Generate random password for enhanced security
openssl rand -base64 32
# Edit the compose file with your configuration
nano compose.yaml
# Start the containers
docker compose up -d
# Check logs
docker compose logs
其中我提供的 compose 文件使用的是 ShadowTLS V3 (Strict Mode)。
2025-05-04 13:43:07
本来一直在用 Supabase,但是苦于 Free Plan 只能创建两个 Database,所以不得不寻找其他方案。
最初的想法是,在我美国的不同地区的 Servers 上部署 PG Instance,并且实现 HA (High Availability) 和 Replication。但是我发现如果要实现 HA,至少需要三个 Servers,而且需要保证三个 Servers 之间的优秀的网络。我又没有那么多 Servers,所以最后放弃了 HA。仅保留了主从 Replication,也就是说只要我在 Master 上创建了 Database,那么从数据库也会自动创建一个相同的 Database,并且自动同步数据。
我找到了一个相对来说比较简单的方案,就是使用 bitnami/postgresql 这个 Docker Image。
services:
postgres-primary:
image: bitnami/postgresql:latest
env_file:
- .env
restart: always
volumes:
- ./data/primary:/bitnami/postgresql
ports:
- "5432:5432"
# .env
POSTGRESQL_REPLICATION_MODE=master
POSTGRESQL_REPLICATION_USER=replicator
POSTGRESQL_REPLICATION_PASSWORD=password_hard_to_guess
POSTGRESQL_USERNAME=postgres
POSTGRESQL_PASSWORD=password_hard_to_guess
POSTGRESQL_DATABASE=mydb
services:
postgres-replica:
image: bitnami/postgresql:latest
env_file:
- .env
restart: always
volumes:
- ./data/replica:/bitnami/postgresql
ports:
- "5433:5432"
POSTGRESQL_REPLICATION_MODE=slave
POSTGRESQL_REPLICATION_USER=replicator
POSTGRESQL_REPLICATION_PASSWORD=password_hard_to_guess
POSTGRESQL_MASTER_HOST=master_instance_public_ip
POSTGRESQL_MASTER_PORT_NUMBER=5432
POSTGRESQL_USERNAME=postgres
POSTGRESQL_PASSWORD=password_hard_to_guess
POSTGRESQL_DATABASE=mydb
其中 Slave Instance 的 Port 其实可以不用映射到公网,因为 Slave 只负责同步数据,不负责对外提供服务。当然,我暴露 5433 是为了连接 Slave Instance 测试是否能实现自动同步。
我的 Master Instance 部署在 Los Angeles, CA,然而 Slave Instance 部署在 Pittsburgh, PA 家里的 PVE 的 Debian VM 上,实际测试下来效果非常好,能否实现几乎无延迟的同步。
2025-04-11 01:38:10
Recently, PVE released version 8.4.0, while I am still using 8.3.0 and plan to upgrade to the latest version.
Open the PVE management backend, select pve
, and click Shell
. This will open the command line for PVE.
By default, if there is no enterprise subscription, updates cannot be checked, so you need to add a no-subscription source.list.
nano /etc/apt/sources.list.d/pve-no-subscription.list
# Enter the following line
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
apt update
apt list --upgradable
apt dist-upgrade
reboot
pveversion -v