You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS13中UIDocumentPickerViewController仅允许选择二进制文件的问题

问题根因
  • 你自定义UTI时用了public.前缀,这是苹果官方保留的系统UTI命名空间,第三方App没有权限声明、覆写这个前缀下的类型,你写在UTExportedTypeDeclarations里的public.firmware配置会被系统直接忽略,完全不生效。
  • 实现二进制文件筛选不需要自定义UTI,iOS13自带对应系统UTI可以直接用。
  • 你选的application/octet-stream MIME类型是正确的,就是通用二进制流的标准标识,不需要调整。
iOS13适配方案

根据你的筛选粒度选对应方案即可:

方案1:允许选择所有通用二进制文件

不需要在info.plist里加任何UTI配置,把你之前加的UTExportedTypeDeclarations整段删掉,直接修改调用代码:

let vc = UIDocumentPickerViewController(documentTypes: ["public.data", "com.apple.binary"], in: .import)
vc.delegate = self
self.present(vc, animated: true)

说明:public.data是所有原始二进制数据的基础UTI,com.apple.binary是苹果内置的通用二进制文件标识,二者组合可以覆盖绝大多数无格式二进制文件,包括.bin后缀的固件文件。

方案2:严格限定仅选择.bin后缀的固件文件

如果要做精准后缀筛选,才需要自定义UTI,注意必须用你自己App的反向域名作为UTI前缀,不能用public.开头:

  1. 修改info.plist的UTI配置,替换UTI标识:
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <!-- 替换成你自己App的反向域名格式,比如com.你的开发者账号.你的App名.binfirmware -->
        <string>com.yourapp.binfirmware</string>
        <key>UTTypeDescription</key>
        <string>Firmware Binary</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>com.apple.binary</string>
        </array>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>bin</string>
            </array>
            <key>public.mime-type</key>
            <string>application/octet-stream</string>
        </dict>
    </dict>
</array>
  1. 对应修改文件选择器的调用参数,传入你自定义的UTI:
let vc = UIDocumentPickerViewController(documentTypes: ["com.yourapp.binfirmware"], in: .import)
vc.delegate = self
self.present(vc, animated: true)
补充说明
  • UTType相关的便捷API是iOS14及以上系统才提供的,iOS13下不要调用,否则会触发崩溃。
  • 如果配置完后仍有少量非目标文件出现在选择列表里,可以在UIDocumentPickerDelegate的选中回调里做二次校验:拿到文件URL后检查后缀名、读取文件头信息判断是不是真的固件二进制,不符合要求就弹出提示让用户重新选择即可。

内容的提问来源于stack exchange,提问作者Yogurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:15:12