别只盯星数:AirCard 文档里藏着哪些好用但没人提的功能 别只盯星数AirCard 文档里藏着哪些好用但没人提的功能【免费下载链接】AirCardApple Wallet Card Skinner for iOS 18 (No Jailbreak Required)项目地址: https://gitcode.com/gh_mirrors/ai/AirCard大多数人对 AirCard 的认识停留在 README 首页那行Apple Wallet Card Skinner把喜欢的图片刷进钱包卡面双击侧键、Face ID、点卡、闪存、重启五步收工。但在星数与五步教程之外这个仓库真正值钱的东西几乎都写在docs/目录和 Swift/Python 后端那些没人在 README 里展开讲的角落一套能区分扫描到与已验证的卡片识别协议、一个把一张壁纸切成锁屏密码键盘十个键位的切片引擎、一个既能导入 Cowabunga/Nugget 主题又能重新打包导出的.passthm编辑器以及一个不需要联网、单 HTML 文件就完成的离线卡面排版工具。这篇文章只讲这些文档里藏着的功能它们各自的源码依据、真实的使用边界以及一个能立刻上手的最小实践。逐项过一遍 README 之外的配置项1. 卡片列表不是手机钱包的截图而是一套确认协议README 只写了点击 Scan Cards 然后点选卡片但真正决定你能否刷对的逻辑在 Sources/WalletDiscovery.swift 里。它把识别信号分成三个等级本次扫描匹配Matched in this scanWalletScanParser用六条正则从统一日志里抠出带路径的.pkpass/.cache/.pkcache引用或者PDCardFileManager: writing card、PDPassLibrary: wrote pass、VerificationCheck.这类明确的事件缓存候选Payment entries to confirm来自 wallet_catalog.py 读取的 Mac 本地RemoteDevices.archive只有机型匹配 存在一次活体扫描确认的卡片 ID 命中时才把同一缓存里的其余支付卡补进来保存的旧记录Saved IDs to confirm只在当前 iPhone 重新暴露这些 ID 之前保持隐藏绝不参与刷入。这套设计直接回应了一个经典坑iOS 的日志里passIDs[InSession]、passIDs[global]等结构有时会把卡片 ID 打出来但 ID 出现 ≠ 卡片此刻在手机上。仓库的 docs/wallet-missing-cards-2026-09-22.md 记录了一个真实案例国泰会员卡的nfcd日志里出现了完整 ID但现有解析器不覆盖passIDs[global]多行结构因此卡始终没有进入列表中国银行银联卡则因为激活标识和卡片文件 ID 是两种不同的标识、且本机缓存缺失映射而无法识别。结论写得很克制这不能证明卡片损坏、银联整体不受支持或 iOS 永远无法提供该 ID只说明当前解析范围与缓存不足以完成映射。这意味着你在界面上看到的卡片分为两类带绿色确认标记的本轮活体验证过可刷和仅作为候选的。README 让你点选卡片后立即检测真正严谨的用法是配合WalletDiagnosticsView里那个Check missing cards抽屉实现在 Sources/WalletDiagnosticsView.swift它把Pending Payment Cards和Pending Passes / Memberships分开列出用…加 ID 后六位区分同名卡——因为同名会员卡不会自动合并。2. 三个没人提的按钮Read Cache、Save IDs、ReconnectREADME 的排障章节之外界面工具栏还有一组容易被当成摆设的控件它们各自对应一个独立的诊断链路Read Cache调用 wallet_catalog.py 重新解析 Mac 本地~/Library/Passes里的RemoteDevices.archive与Cards/*.pkpass/pass.json。注意它不触发 iCloud 刷新只是重读本地元数据缓存损坏时界面会显示诊断信息而不是宣称手机零卡。Save IDsAdd Manually把 16–64 位的卡片 ID 粘贴保存实现见 AirCardApp.swift 的addCardHash。保存后它们保持隐藏直到当前 iPhone 的扫描重新命中文档明确警告不要从别人的截图复制标识。Reconnect重新执行checkDevice并区分四种失败语义——device_helper缺失、无设备、检测失败、未返回可用输出。代码注释里专门写了一句返回空输出意味着后端根本没跑起来而不是线松了这时候跟用户说重插线会把他们引向错误的方向。3. 刷入队列的真正规则勾选 配图 已验证README 说Flash Skins (N Cards)但 docs/guides/MULTI-CARD.zh-CN.md 给出了精确条件已勾选、已分配图片路径、且处于本次扫描已验证集合三者缺一不可。ready to flash只是配置条件满足不是图片有效也不是手机写入成功。分配图片会自动勾选该卡setCardImage里isSelected true所以配图后要再核对一次勾选状态。还有两个没人细看的按钮语义按钮实际作用不会做什么卡面右上角 ×Remove skin清除 Mac 上该卡待应用的图片与路径不向手机写入原图Clear AllApple Wallet 页清空并保存 Mac 端卡片列表不删除 Wallet 卡片、不清理手机缓存、不恢复卡面刷入队列在首张失败卡之后整体停止之前的写入不回滚同一张失败卡内部也可能有部分文件已写入——后端在 aircard_backend.py 的cmd_flash里先做批量写入失败后逐文件重试随后才清理.cache与.pkcache两类渲染缓存缓存清理失败会把整张卡标记为失败而不是部分成功。多卡场景的正确姿势是Deselect All → 只勾选失败的那张 → 重新配图 → 单卡重试不必把所有成功的卡重刷一遍。4. 被 README 一笔带过的.passthm三套UniversalREADME 里有一行 TIP 说 AirCard 自动为所有系统语言和 Bold Text 生成缓存位图但没解释界面里其实是三种不同的 Universal详见 docs/guides/THEME-CREATOR.zh-CN.mdAll Languages (Universal)展开KEYPAD_LOCALES里 17 种语言命名en、ru、uk、ja、ko、zh、ar、he等见 aircard_backend.py只影响语言文件命名不修改 iPhone 系统语言Universal (Regular Bold)同一份图像同时生成--white.png和--white-bold.png两套文件Target → Universal (All 8, 9, 10)同时写入TelephonyUI-8/-9/-10三个缓存目录。界面提示Universal 模式会闪约 600 个文件这个数字只是估算实际随主题与目标变化。选择具体语言比如uk 单一字重刷入速度会明显提升因为写入文件数大幅减少——这是 README 之外最实用的一个性能开关。选择准确的语言和字重通常比全选 Universal 更可靠全选不能解决所有加载与兼容问题。5._big标记、Cyrillic 副标与源包结构的保留边界.passthm其实是一个 zip 包。后端 aircard_backend.py 的parse_passthm_archive做了四层文件名归一化对每个数字键生成无副标变体{lang}-{d}---white.png、标准拉丁副标变体、俄语/乌克兰语的西里尔副标变体CYRILLIC_SUBTEXTS_RU/UK两张表以及源素材自带的自定义副标。刷入时会保留包内的_big/_small标记文件。但 docs/guides/THEME-CREATOR.zh-CN.md 把边界写得很清楚Theme Creator 不是无损编辑器——同一数字的不同语言、字重版本不会作为独立图层保留重新导出会重新打包资源与_big标记原包的_small标记或特殊结构不保证保留对矩形整图切片重新缩放或平移后会重新按圆形裁切。需要保留这些差异时正确做法是保留原包并逐项比较新包而不是用编辑器二次导出。三个被低估的使用场景实测场景一不连接 iPhone先做导出后本机检查Theme Creator 的导出与检查完全不需要手机。最小闭环是在Passcode (.passthm) → Theme Creator里用Poster Slice (Puzzle)拖入一张壁纸用Zoom Framing滑杆0.5–3.0 倍调整构图点击Export .passthm...导出切到Apply .passthm重新导入刚导出的文件逐个核对 0–9 的预览想检查 PNG 本身把导出的包复制一份把副本扩展名改成.zip解压查看原始.passthm留给导入。这里有个关键细节源码在 AirCardApp.swift 的KeypadLayout与PasscodeThemeExporter整图切片基准是915 × 1148iOS TelephonyUI 3x 网格按钮直径 75pt、列宽 101.67pt这跟钱包卡面的 1536 × 969 是两套完全不同的坐标系。数字 0 在Seamless Poster模式下使用底部整行图像isZeroSeamless分支切到Circle Buttons时才按 225px 圆形裁切。检查导出文件时重点看 0 的底部与各键的透明边缘。同一份主题包还可以验证兼容性cmd_inspect_passthm会扫描 zip 条目名里是否出现TelephonyUI-8/-9来猜测目标目录所以先导入再看包的检测目录再用已连接设备的 Auto-detect 复核——包内目录名不是当前手机型号的检测结果。场景二把已刷过的状态变成可查的工程事实界面左下角的状态栏会显示N of M verified cards selected · X changed · Y already on iPhone这个changed计数背后是 AirCardApp.swift 里一套很少被提及的机制每张卡的皮肤文件在分配时就算出SHA-256 签名CardItem.signature(of:)刷入成功后以udid|cardHash为键记录签名到UserDefaults下次cardsNeedingFlash会比较当前图片签名与已刷签名相同则跳过按钮文案也会从Flash Skins (N)变成Re-flash All (N)。这对多卡工作流的意义很大同一张图改了一点点 → 签名变化 → 只重刷这一张完全没动 → 跳过不重复写盘。它把我到底刷没刷过从一个记忆问题变成了一个可校验的工程状态。场景三离线排版卡面构图与 AirCard 像素级对齐仓库里躺着一个几乎没人引用的工具tools/card-artwork/整个工具就是一个index.html内置全部 CSS 与 JSCSP 禁止任何网络连接图片只在本地 Canvas 处理。它的初始裁切几何与AppViewModel.prepareCardImage完全一致按max(1536 / width, 969 / height)等比放大后居中导出始终是 1536 × 969 PNG。实测流程下载index.html用浏览器打开地址栏以file://开头即可拖入图片用水平/垂直取景滑杆与缩放调整构图选择保留透明通道或填充白/黑底导出原名-aircard-1536x969.png再拖进 AirCard 预览。它解决的是 README 里反复出现的图被裁掉了问题——AirCard 原生准备路径会把图片居中裁到 1536 × 969正方形素材上下会被裁掉纸板素材边缘也会切在离线工具里先把构图排好重要文字放中间比反复刷机试错高效得多。如果一定要手动排版按约1.585:11536:969的比例准备即可。与常见制卡工具的能力对照小结把仓库文档与源码摊开看AirCard 相对同类工具的能力边界其实很清晰。下表依据仓库内 docs/guides/COMPATIBILITY.zh-CN.md 的按阶段记录证据原则整理能力维度AirCard 的做法关键依据卡片识别区分本次扫描匹配 / 缓存候选 / 旧记录只有活体验证过的 ID 可刷Sources/WalletDiscovery.swift、wallet_catalog.py皮肤一致性皮肤文件 SHA-256 签名比对未变更的卡自动跳过AirCardApp.swiftisSkinFlashed/cardsNeedingFlash缓存失效真实删除.cache/.pkcache里的FrontFace/PlaceHolder/Preview而不是覆盖写入apply_card_skin.pyremove_files主题兼容导入后按包结构 语言/字重/目标目录四维归一化再刷入aircard_backend.pyparse_passthm_archive主题编辑支持 Poster Slice / Individual Keys / 编辑已有包三种入口但明确非无损docs/guides/THEME-CREATOR.zh-CN.md离线排版单 HTML 离线裁切工具与 App 内原生裁切几何一致tools/card-artwork/index.html验证边界连接 / 扫描 / 刷入 / 手机显示四阶段分开记录自动化测试 ≠ 真机验证docs/guides/COMPATIBILITY.zh-CN.md值得一提的还有仓库自带的测试资产tests/ 里既有test_card_flash.py模拟素材写入、PDF 转换与缓存失败、test_card_scanner.py协议与合成卡片路径、test_backend_passthm.py主题包解析也有 Swift 侧的WalletCardBindingTests.swift、test_wallet_viewmodel.swift以及tools/card-artwork/tests/crop.test.cjs216 组边界组合。这些测试让上面所有文档里藏着的能力都有可回归的代码级证据——但文档自己也强调自动化检查不能替代具体手机的扫描、刷入与刷新验证。结语AirCard 的 README 是一张精修过的门面而docs/与源码才是它真正的用户手册。那些没人提的功能——活体验证协议、SHA-256 皮肤去重、_big标记保留、西里尔副标归一化、离线裁切几何对齐——没有一个是为了凑功能清单而存在的它们全部对应着真实踩过的坑日志里的 ID 不代表卡片在手机上缓存文件覆盖写不触发 Wallet 重绘Universal 全选不等于兼容性更好旧主题包的_small结构经不起二次打包。读懂这些边界比记住那五步流程有用得多。仓库内的素材文件 assets/skins/ 提供了四套可直接拖入预览的卡面纸板卡、极简 Apple、Amex 黑卡、金色卡下载后拖到 AirCard 的卡片上即可体验上述完整链路需要自备构图时优先使用 tools/card-artwork/ 里的离线工具先裁好 1536 × 969再交给 AirCard 应用。【免费下载链接】AirCardApple Wallet Card Skinner for iOS 18 (No Jailbreak Required)项目地址: https://gitcode.com/gh_mirrors/ai/AirCard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考