TrollStore ldid 下载失败彻底解决:安装 IPA 卡住的完整排查步骤
【免费下载链接】TrollStoreJailed iOS app that can install IPAs permanently with arbitary entitlements and root helpers because it trolls Apple项目地址: https://gitcode.com/GitHub_Trending/tr/TrollStore
TrollStore 安装 IPA 卡在 "Downloading" 或弹出 "Error downloading ldid"?问题多半不在你的 IPA,而是 ldid 自动下载这一步失败。手动补齐两个文件,即可彻底绕开这条下载链路。
你大概率也会遇到这个报错
打开 TrollStore,顶部一直转着 "Installing ldid",几分钟后弹出Error窗口,内容类似Error downloading ldid: The Internet connection appears to be offline.;点 Close 关掉,过一阵又冒出来。也有更安静的一种:界面毫无动静,但 Settings 里始终显示 "Install ldid" 按钮,装未签名 IPA 时直接报The app is not signed with a fake CoreTrust certificate and ldid is not installed。
说白了,就是 ldid 下载失败,而 TrollStore 对这次失败既不重试、也不换源。
它到底在干什么:30 秒原理速览
装未签名 IPA 必须用 ldid 做 ad-hoc 重签名。ldid 因授权问题不能直接打包进 TrollStore,所以每次启动它都会检查自己目录下是否已有 ldid,没有就联网拉取。
// TSSceneDelegate.m (L140-143):两个文件任一缺失,就触发联网下载 if(![NSFileManager ... fileExistsAtPath:ldidPath] || !...fileExistsAtPath:ldidVersionPath]) { [TSInstallationController installLdid]; }整个流程要成功,必须走通 GitHub 上的两个网络请求:先查最新版本号,再下载二进制。任何一环断掉,ldid 就装不上。
顺着线索找到病根
排查路径,按顺序看:
3.1 表象 → TrollStore/TSSceneDelegate.m
handleLdidCheck(L131-146)在场景连接时(L165 被调用)检查 ldid 文件,缺失即触发下载。看到它就知道:弹窗之所以反复出现,是因为文件从未落盘成功。
3.2 下载环节 → TrollStore/TSInstallationController.m
installLdid(L216-258)里下载失败的处理(L230-234):
if(error) { UIAlertController* errorAlert = ... @"Error downloading ldid: ..." ...]; UIAlertAction* closeAction = [UIAlertAction actionWithTitle:@"Close" ... handler:nil]; [errorAlert addAction:closeAction]; // 只有关闭,没有重试 }失败只给你一个 Close,没有 retry。
3.3 更隐蔽的一环 → Shared/TSUtil.m
fetchLatestLdidVersion(L333-336)经github_fetchLatestVersion(L303-326)请求 release API 取版本号。注意:出错时回调直接收到nil,而installLdid里if(!latestVersion) return;(L220)就静默退出了——连弹窗都没有。
3.4 快速二分:在设备浏览器里测试api.github.com和github.com两个地址是否可达,判断是纯网络问题还是文件缺失后的重复触发,再决定走哪条修复路径。
动手改:最小侵入方案
思路:不碰 TrollStore 本身,手动把启动检查要的两个文件补齐,让检查直接通过、不再联网。需要放进 TrollStore.app 根目录的只有两个文件:ldid(二进制,权限 0755)和ldid.version(纯文本,内容只有一个版本号)。
4.1 先备好正确版本的 ldid 文件
在有网电脑上,找到 ldid 作者仓库的 release 页(以实际仓库为准),下载与 TrollStore 当前版本配套的 ldid 二进制(新版 TrollStore 对应 ldid 2.x,具体 tag 以 TrollStore 说明为准,以实际仓库为准)。
为什么强调版本配套:RootHelper/main.m 的runLdid(L296 起)直接 exec 这个文件,版本和 TrollStore 不匹配会在签名阶段出别的问题。
4.2 放进 TrollStore.app 根目录
- 在 RootHelper/main.m 的
installLdid(L262-281)可以看到,正常下载成功后文件就落在 TrollStore.app 根目录。用 TrollStore 自己写入的两个文件,名字严格是ldid和ldid.version。 - 在 iPhone 上打开 Filza 等文件管理器,进入 TrollStore 容器(注意是TrollStoreLite那个目录,不是主 App 的容器),把 ldid 二进制拷入。
- 用文本编辑器新建
ldid.version,内容就是版本号(与下载的文件对应,比如2.0.2),保存进同一目录。
改这两处文件,TrollStore 启动检查(3.1 那个 if)就成立了,下载链路整体跳过。
备选:设备上如果没有文件管理器。在电脑上把 ldid 和 ldid.version 放在同一个目录,起个临时 HTTP 服务:
# 电脑上执行,当前目录放好 ldid 和 ldid.version python3 -m http.server 8000然后在 TrollStore 的 Apps 页点右上角 + → "Install from URL",分别输入
http://电脑IP:8000/ldid和http://电脑IP:8000/ldid.version,两个文件都会落到 TrollStore 的 Documents 目录,再按 4.2 用文件管理器挪进 TrollStore.app 根目录。
4.3 权限确认
拷完后用文件管理器确认 ldid 是 0755、ldid.version 是 0644。权限不对时posix_spawn起不来,症状会变成签名阶段的报错,容易误判。
改完了,跑一遍确认
- 打开 Settings 页,Signing 组显示
ldid: Installed (版本号),而不是 "Install ldid" 按钮——版本号应与 4.1 下载的一致。 - 完全退出再打开 TrollStore,不再弹出 "Error downloading ldid",也不再出现常驻的 "Installing ldid" 进度圈。
- 用 TrollStore 装一个未签名 IPA,过程不出现 173 错误(
ldid is not installed),安装完成后 App 可正常启动。 - 回滚方法:删掉 TrollStore.app 根目录里这两个文件即可,下次启动会自动走原下载流程。
下次别再踩:加固清单
| 加固项 | 做法 | 涉及文件 |
|---|---|---|
| 本地备份 ldid | 在设备根目录存一份 ldid 与 ldid.version,网络故障时直接拷回 | RootHelper/main.m |
| 升级前先测网 | 用浏览器确认 GitHub API 与 release 下载点可达,再升级 TrollStore | Shared/TSUtil.m |
| 装完 IPA 后回看版本 | Settings 里 ldid 版本号应与 TrollStore 当前版本配套 | TrollStore/TSSettingsListController.m |
| 日志分诊 | iOS 16+ 用 Console.app 过滤 "ldid",一眼区分卡在下载还是签名 | RootHelper/main.m |
下次再看到 "Error downloading ldid",不必再翻代码——两个文件补上,这个弹窗就永远不会再出现。
【免费下载链接】TrollStoreJailed iOS app that can install IPAs permanently with arbitary entitlements and root helpers because it trolls Apple项目地址: https://gitcode.com/GitHub_Trending/tr/TrollStore
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考