FilePickerCopyFix 是一个用于修复 123云盘 iOS 版重签后文件上传异常 的 iOS dylib 项目。
项目主要针对通过轻松签、ESign、TrollStore 类工具重签安装 123云盘后,开启“文件访问权限”时出现的文件选择异常问题。
| 项目 | 内容 |
|---|---|
| 目标 App | 123云盘 |
| 已测试版本 | 2.1.5 |
| Bundle ID | com.mfcloudcalculate.123networkdisk |
| 项目类型 | iOS 动态库 / dylib |
| 注入方式 | 侧载重签时注入 dylib |
| 依赖环境 | 不依赖 CydiaSubstrate / MobileSubstrate |
| 当前稳定版本 | V1.0 |
重签后的 123云盘在开启“文件访问权限”后,可能出现以下问题:
- App 内点击上传文件,可以跳转到 iPhone 文件 App;
- 选择文件后可以返回 123云盘;
- 但返回后无任何反应,文件无法上传;
- 下载文件虽然可以正常显示在“文件 App → 我的 iPhone → 123云盘 → Download”中,但上传入口失效。
本项目用于修复上述 App 内选择文件上传无反应 的问题。
- 修复 123云盘内置上传文件入口无反应的问题;
- 保留“文件访问权限”,下载文件仍可显示在 iPhone 文件 App 中;
- 不修改 App Bundle ID;
- 不依赖越狱环境中的 Substrate;
- 不额外复制上传文件到
Documents/FilePickerCopyFixInbox; - 使用系统临时 Inbox 文件路径,减少本地空间占用;
- 启动时清理旧版残留的
FilePickerCopyFixInbox目录; - 输出运行日志到
FilePickerCopyFixStatus.txt,方便排查问题。
123云盘的文件上传逻辑会调用:
-[NSURL startAccessingSecurityScopedResource]在重签环境下,系统返回的临时文件 URL 可能会使该方法返回 false。
123云盘原始逻辑检测到返回 false 后会直接退出上传流程,因此表现为:
选择文件 → 返回 App → 没有任何反应
本项目通过 Objective-C Runtime Hook:
NSURL startAccessingSecurityScopedResource在目标 App 内对 file:// 类型 URL 强制返回 YES,让 123云盘原有上传流程继续执行。
同时,本项目 Hook 了 123云盘 AppDelegate 中的文件选择入口:
documentPicker:didPickDocumentAtURL:并保持文件 URL 直接透传,不再额外复制到 App Documents 目录,从而避免重复占用本地存储空间。
| 功能 | 状态 |
|---|---|
| App 正常启动 | 已修复 |
| App 内选择文件上传 | 已修复 |
| 下载文件显示到文件 App | 正常 |
| 开启“文件访问权限”后使用 | 支持 |
| 不修改 Bundle ID 使用 | 支持 |
| 分享文件到 123云盘上传 | 暂未修复 |
| 额外复制上传文件到 Documents | 已取消 |
当前版本主要修复的是:
123云盘 App 内 → 上传文件 → 跳转文件 App → 选择文件 → 返回并上传
暂未修复:
iPhone 文件 App → 分享 → 123云盘
该入口没有稳定命中当前 AppDelegate URL 回调,可能需要单独分析分享入口或 Flutter 路由逻辑。
当前版本基于:
123云盘 iOS 2.1.5
com.mfcloudcalculate.123networkdisk
其他版本是否可用未验证。
不同签名工具可能会修改 Info.plist、entitlements 或注入方式。
建议使用时保持以下设置:
开启“文件访问权限”
不修改 Bundle ID
不注入旧版 FilePickerCopyFix
不额外修改无关 plist 权限
本项目可使用 Theos 编译。
make clean
make编译完成后,可在 .theos 目录中找到生成的:
FilePickerCopyFix.dylib
项目内可包含:
.github/workflows/build.yml
上传到 GitHub 后,在仓库的 Actions 页面手动运行构建流程即可。
构建产物通常为:
FilePickerCopyFix.dylib
- 准备原版 123云盘 IPA;
- 使用轻松签、ESign 或其他签名工具导入 IPA;
- 签名时开启“文件访问权限”;
- 不修改 Bundle ID;
- 注入编译得到的
FilePickerCopyFix.dylib; - 签名安装;
- 打开 123云盘,测试 App 内上传文件。
推荐最终配置:
文件访问权限:开启
Bundle ID:保持 com.mfcloudcalculate.123networkdisk
注入文件:FilePickerCopyFix.dylib
其他旧版 dylib:不要同时注入
运行日志会写入:
文件 App → 我的 iPhone → 123云盘 → FilePickerCopyFixStatus.txt
正常修复后,日志中可能出现类似内容:
AccessNoCopy loaded
documentPicker passthrough: /private/.../tmp/com.mfcloudcalculate.123networkdisk-Inbox/example.zip
startAccess original=0 forced=1 path=/private/.../tmp/com.mfcloudcalculate.123networkdisk-Inbox/example.zip
其中:
startAccess original=0 forced=1
表示原本会失败的 security-scoped URL 访问已被修复,上传流程可以继续执行。
.
├── Makefile
├── Tweak.m
├── README.md
└── .github/
└── workflows/
└── build.yml
| 文件 | 说明 |
|---|---|
Tweak.m |
dylib 主源码 |
Makefile |
Theos 编译配置 |
.github/workflows/build.yml |
GitHub Actions 云编译配置 |
README.md |
项目说明文档 |
- 本项目仅用于学习、研究和个人设备调试;
- 不包含 123云盘原始 App 文件;
- 不提供 IPA 分发;
- 不绕过登录、会员、付费、风控或服务端限制;
- 不修改 123云盘服务器通信逻辑;
- 使用者应自行确保使用方式符合当地法律法规及相关软件服务条款。
本项目采用 MIT License 开源。
MIT License
Copyright (c) 2026 4A Hello
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
本项目仅作为技术研究和个人调试用途。
使用本项目产生的任何风险由使用者自行承担,包括但不限于 App 无法启动、数据丢失、账号异常、签名失效、系统兼容性问题等。