[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94355":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},94355,"tower","pengchujin\u002Ftower","pengchujin","塔台 — 原生 SwiftUI iOS App，在本机管理机场订阅与自有节点，生成 Surge \u002F Clash \u002F Shadowrocket \u002F Loon \u002F Quantumult X 配置",null,"Swift",287,16,134,0,137,53.69,"Other",false,"main",true,[],"2026-08-24 04:01:22","# 塔台\n\n塔台是一款原生 SwiftUI iOS App，用来在设备本地管理机场订阅和自有节点，使用 Self-Configuration 分流规则，并生成 Surge、Clash、Shadowrocket、Loon、Quantumult X 和 Hiddify 配置。\n\n## 开发交接\n\n- [Claude 接手指南](CLAUDE.md)：工程约束、常用命令和验收门槛。\n- [当前开发状态](docs\u002FHANDOFF.md)：TestFlight、远程归档、已知问题和后续任务。\n- [技术架构](docs\u002FARCHITECTURE.md)：模块职责、数据流、配置生成和测试结构。\n\n## 当前能力\n\n- 添加、启用、更新和删除 HTTPS 订阅\n- 添加 SS、SSR、VMess、VLESS、Trojan、Hysteria 2、AnyTLS、SOCKS5 自有节点；Snell 粘贴 Surge 配置行添加\n- 首页节点与订阅都可展开查看地址、协议、地区和测试方式\n- 节点行使用服务器 IP 的离线国家识别结果显示地区 Logo，并列出协议、传输、TLS 与 UDP 能力\n- 首页使用自绘的点阵世界地图，优先按服务器 IP 的离线国家结果聚合节点；IP 暂不可解析时才参考节点名称\n- 展开地图或订阅时自动进行真实 ICMP 延迟测试，也可单独或批量重测\n- 读取常见 Base64 节点订阅和 Clash YAML，包括仅含 HTTP(S)\u002FSOCKS 的 Base64 列表与 Clash 嵌套 WebSocket 选项\n- 内置 Self-Configuration：覆盖 AI、YouTube、全球流媒体、Telegram、Google、Apple、Microsoft、国内外流量与广告过滤\n- 内置 ACL4SSR 默认、精简、全分组三套规则，按配置原有的策略组结构还原\n- 输入链接导入 subconverter 远程配置（`.ini`），下载到本机后离线使用，可刷新或删除\n- 生成 Surge \u002F Clash \u002F Shadowrocket \u002F Loon \u002F QuanX \u002F Hiddify 完整配置\n- 在导出前预览配置，并明确显示目标客户端不兼容而跳过的节点\n- Surge、Clash、Shadowrocket、Loon、Egern、Hiddify 支持点击主按钮后通过 URL Scheme 一键打开并导入\n- 主导入按钮固定在标签栏上方，滚动预览时仍可随时操作\n- Quantumult X 和 Hiddify 通过系统分享接收本地配置文件\n\n## 隐私设计\n\n转换、规则匹配和 IP 国家查询全部在设备上完成。App 不调用第三方订阅转换或 IP 地理位置服务，也不会上传用户节点。域名节点只通过系统 DNS 解析地址，随后查询 App 内置的离线数据库。\n\n规则联网的边界：内置的 Self-Configuration 和三个 ACL4SSR 快照随 App 打包，**完全离线**；只有你主动「导入规则链接」或刷新已导入方案时才会联网下载，下载内容保存在本机，之后生成配置不再联网。\n\n写入磁盘的三类文件都使用 iOS 完整文件保护：Application Support 中的订阅快照、分享用的临时配置文件，以及分享用的临时二维码 PNG。后两类还会在再次生成时清理超过 5 分钟的旧文件，不会在 `tmp` 中长期堆积明文凭据。\n\n打开添加面板时，塔台会按产品设定自动请求一次系统剪贴板权限；只有识别到支持的订阅或节点链接才会自动填入。也可以随时点击“从剪贴板粘贴”手动读取。\n\n延迟测试优先向节点地址发送 ICMP Echo。部分机场或网络会屏蔽 ICMP，此时塔台会退回节点端口握手，并在界面明确标成“端口”，不会把它伪装成 ICMP 延迟。测试结果只保存在本次运行内。\n\nSurge、Clash、Shadowrocket 和 Loon 的配置导入 Scheme 都需要客户端可读取的 URL。塔台会在导入时启动一个仅绑定到 `127.0.0.1` 的临时服务，并在 45 秒后自动关闭，所以配置不会上传到互联网。临时地址不用于后续自动刷新；规则或节点变化后，需要回到塔台再次一键导入。\n\nQuantumult X 官方公开的 [URL Scheme](https:\u002F\u002Fgithub.com\u002Fcrossutility\u002FQuantumult-X\u002Fblob\u002Fmaster\u002Furl-scheme.md) 只能添加或替换远程资源（`server_remote` \u002F `filter_remote` \u002F `rewrite_remote`），策略组不在其中，因此没有完整本地配置导入接口。塔台对 QuanX 保留系统文件分享，避免导入一份引用了不存在策略组的配置。\n\n## 规则来源\n\n规则结构来自 [ClashConnectRules\u002FSelf-Configuration](https:\u002F\u002Fgithub.com\u002FClashConnectRules\u002FSelf-Configuration)，配置版本 `fb658cc85802`。模板引用的规则提供者已固定到明确版本并转换为本地 `.list` 快照，来源、版本、规则数量与 SHA-256 记录在 `Tower\u002FResources\u002FSelfConfiguration\u002Fmanifest.json`，使用这套规则时运行时不联网。\n\n需要更新快照时运行 `python3 Scripts\u002Fupdate_self_configuration_rules.py`。脚本会读取固定版本的 Self-Configuration 模板，下载其声明的规则提供者并原子替换本地资源。\n\n### ACL4SSR\n\n[acl4ssr-sub.github.io](https:\u002F\u002Facl4ssr-sub.github.io) 提供的默认、精简、全分组三份配置同样随 App 打包，固定在 `ACL4SSR\u002FACL4SSR` 的 `06ff293e` 版本，资源位于 `Tower\u002FResources\u002FACL4SSR\u002F`，来源与 SHA-256 记录在 `ACL4SSR_manifest.json`。更新用 `python3 Scripts\u002Fupdate_acl4ssr_rules.py`。\n\n这三份配置各自声明了自己的策略组（精简 5 组、默认 11 组、全分组 29 组），塔台按原样还原，其中的地区组沿用配置里的节点名正则。内置 Self-Configuration 预设仍使用离线 IP 国家库分组，两套机制互不干扰。\n\nACL4SSR 与 Self-Configuration 都含有 `Apple.list`、`Microsoft.list`、`Telegram.list`，而 Xcode 会把资源拍平到 bundle 根目录，所以 ACL4SSR 的全部资源都带 `ACL4SSR_` 前缀。**不要移除这个前缀**，否则两套规则会互相覆盖。\n\n### 导入自己的规则\n\n规则页的「导入规则链接」支持 subconverter 的远程配置（`.ini`）。塔台只接受 HTTPS 地址，会下载配置和它引用的全部规则列表并保存到本机（完整文件保护），之后生成配置不再联网。已导入的方案可以随时刷新或删除。\n\n## IP 国家库\n\n离线国家数据来自 [sapics\u002Fip-location-db](https:\u002F\u002Fgithub.com\u002Fsapics\u002Fip-location-db\u002Ftree\u002Fmain\u002Fgeo-whois-asn-country) 的 `geo-whois-asn-country`，版本 `2.3.2026061719`，依据 CC0 许可随 App 打包。`Scripts\u002Fupdate_ip_country_db.py` 可下载指定版本并重新生成紧凑的 IPv4\u002FIPv6 二进制索引，来源说明位于 `Tower\u002FResources\u002FIPCountry\u002FNOTICE.txt`。\n\n## 运行\n\n1. 使用 Xcode 26 或更新版本打开 `Tower.xcodeproj`。\n2. 选择 iOS 17 或更新版本的模拟器\u002F设备。\n3. 运行 `Tower` Scheme。\n\n测试覆盖订阅解析、Clash YAML 嵌套字段、IP 优先国家地区聚合、网络延迟链路、本地规则资源、一键导入 Scheme，以及七种配置生成器。Loon 的 VMess\u002FVLESS\u002FTrojan\u002FHysteria 2 参数按其[节点文档](https:\u002F\u002Fnsloon.bid\u002Fdocument\u002Fnode)生成；Surge 的 TLS 与 WebSocket 参数按其[代理策略文档](https:\u002F\u002Fmanual.nssurge.com\u002Fpolicy\u002Fproxy.html)生成。\n\n## 已知边界\n\n- Shadowsocks 的 SIP003 插件只支持 simple-obfs（`obfs`\u002F`obfs-local`）。`v2ray-plugin` 等其余插件会被明确拒绝并计入“跳过”，不会伪装成可用的裸 SS 节点导入。\n- Snell 只有 Surge 和 Shadowrocket 全版本支持，Clash\u002FStash 仅到 v3，Hiddify（sing-box）反过来只支持 v4 以上，Loon 和 Quantumult X 不支持——不支持的目标会计入“跳过”。\n- Hiddify 运行的是 sing-box 内核，因此导出的是 sing-box JSON；sing-box 自身在 App Store 没有独立客户端，所以这个格式以实际运行它的 App 命名。\n- 机场厂商自定义的非标准节点字段可能需要增加兼容适配。\n- 如果目标客户端未安装或没有接管对应 Scheme，塔台会自动退回系统分享。\n- Quantumult X 是否直接出现在分享列表中，取决于其声明的文件类型；未出现时可先存到“文件”再从客户端导入。\n- 当前未连接安装了 Surge、Shadowrocket、Loon、Quantumult X 的真机做最终接收测试；生成格式与兼容跳过逻辑已有自动测试。\n\n## 许可证\n\n源码以 [MIT](LICENSE) 发布。\n\n`Tower\u002FResources\u002F` 下随 App 打包的规则列表和 IP 数据库来自第三方，**保留各自原有条款，不适用 MIT**：\n\n| 资源 | 来源 | 许可证 |\n| --- | --- | --- |\n| ACL4SSR 规则 | [ACL4SSR\u002FACL4SSR](https:\u002F\u002Fgithub.com\u002FACL4SSR\u002FACL4SSR) | CC BY-SA 4.0 |\n| Self-Configuration 规则 | [ClashConnectRules\u002FSelf-Configuration](https:\u002F\u002Fgithub.com\u002FClashConnectRules\u002FSelf-Configuration) | 上游未声明 |\n| IP 国家库 | [sapics\u002Fip-location-db](https:\u002F\u002Fgithub.com\u002Fsapics\u002Fip-location-db) | CC0 1.0 |\n\n详见 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md)。若你是上述规则的作者且希望移除，请提 issue，我会立即删除对应资源并改为运行时按需下载。\n\n塔台只在本机把订阅转换成各客户端的配置文件，**不含 VPN 或代理功能，不接管任何流量**。\n","塔台是一款原生 SwiftUI iOS 应用，用于在设备本地安全地管理机场订阅与自建代理节点，并生成主流代理客户端（Surge、Clash、Shadowrocket、Loon、Quantumult X、Hiddify）的完整配置文件。核心功能包括 HTTPS 订阅管理、多协议节点（SS\u002FSSR\u002FVMess\u002FVLESS\u002FTrojan\u002FHysteria2\u002FAnyTLS\u002FSOCKS5）添加与离线 IP 国家识别、真实 ICMP\u002F端口延迟测试、Self-Configuration 与 ACL4SSR 离线规则集成、以及一键 URL Scheme 导入（部分客户端）或系统分享导出。所有解析、转换与地理位置查询均在本机完成，不上传数据、不依赖远程服务。适用于注重隐私、需离线操作、多客户端协同使用的科学上网配置管理场景。",2,"2026-08-07 02:30:05","CREATED_QUERY"]