FIFinderSync与FileProvider Extension能否通过XPC共存并正常工作?
关于同时使用FIFinderSync与FileProvider扩展的问题解答
1. 能否同时使用这两个扩展?
这俩扩展是可以同时用的,但系统对Finder覆盖层的显示有优先级规则:
- FileProvider Extension的覆盖层优先级比FIFinderSync Extension高。当两者同时激活时,系统会优先渲染FileProvider的覆盖层,导致FIFinderSync的覆盖层被挡住或者不显示,看起来就像只有一个在工作。
- 可按以下方式调整:
- 拆分功能场景:让FileProvider只处理云存储类文件的覆盖层,FIFinderSync负责本地文件或特定目录的覆盖层,通过扩展的
NSExtensionAttributes配置各自的作用范围(比如FIFinderSync的FIFinderSyncSupportedURLSchemes或FIFinderSyncRootURLs)。 - 检查激活状态:前往系统偏好设置→扩展→Finder,确认两个扩展都已勾选启用。
- 拆分功能场景:让FileProvider只处理云存储类文件的覆盖层,FIFinderSync负责本地文件或特定目录的覆盖层,通过扩展的
2. 两个XPC能否协同工作?
完全可以,但要注意几个配置细节:
- XPC服务标识需唯一:两个扩展对应的XPC服务
CFBundleIdentifier不能重复。如果父应用仅提供一个XPC服务,要确保该服务能同时处理来自两个扩展的连接请求(比如在XPC服务的listener中正确区分不同客户端的消息)。 - 沙箱与权限要匹配:
- 两个扩展的沙箱权限需和父应用、XPC服务一致,比如都开启
com.apple.security.app-sandbox,按需添加com.apple.security.network.client这类权限。 - 父应用、两个扩展、XPC服务的
com.apple.security.application-groups要设置为同一组,保证跨进程通信或容器共享的权限。
- 两个扩展的沙箱权限需和父应用、XPC服务一致,比如都开启
- 管控连接生命周期:在父应用和扩展中,要正确处理XPC连接的创建与销毁,避免出现连接泄漏或重复创建的情况,防止引发冲突。
可能遗漏的配置检查点
- 扩展的
Info.plist配置:- FIFinderSync扩展要确保
NSExtensionPrincipalClass指向正确的实现类,FIFinderSync相关属性配置完整。 - FileProvider扩展的
NSFileProviderExtension属性(比如NSFileProviderSupportsEnumeration、NSFileProviderSupportsPushingChanges)要匹配功能需求,避免因配置错误导致扩展异常占用资源。
- FIFinderSync扩展要确保
- 打包与签名:两个扩展和父应用需使用同一签名证书,打包时避免出现资源或配置被覆盖的情况。
- 清除系统缓存:同时添加两个扩展后,可重启Finder(终端执行
killall Finder)或重启系统,清除系统的扩展缓存,避免缓存导致加载异常。
内容的提问来源于stack exchange,提问作者Anoop Vaidya
相关产品推荐
相关产品推荐

