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

如何让XCFramework支持额外info.plist字段?嵌入IOSSecuritySuite遇难题

问题解答

关于第一个问题

你的思路完全可行:将IOSSecuritySuite源码单独打包为XCFramework,并开启Build Libraries for Distribution选项,这是二进制依赖必须满足的要求,能保证跨版本的ABI兼容性,不会有问题。

关于第二个问题:封装LSApplicationQueriesSchemes到XCFramework的限制与解决方案

首先明确:LSApplicationQueriesSchemes是应用级别的Info.plist配置,框架(包括XCFramework)的配置无法直接作用于宿主应用。iOS系统中,每个应用的权限配置由自身的主Info.plist决定,框架的Info.plist仅用于描述框架本身的元数据,不会影响宿主应用的权限或配置,所以你直接在XCFramework里加自定义Info.plist是无效的。

给你几个可行的解决方向:

1. 通过包管理工具自动注入配置

如果你用CocoaPods分发你的XCFramework,可以在podspec中添加post_install钩子,自动修改宿主项目的Info.plist,把需要的Scheme添加进去:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next unless target.name == '你的XCFramework名称'
    info_plist_path = File.join(installer.pods_project.path.dirname, 'Info.plist')
    if File.exist?(info_plist_path)
      plist = Plist.parse_xml(info_plist_path)
      plist['LSApplicationQueriesSchemes'] ||= []
      schemes = ['undecimus', 'sileo', 'zbra', 'filza', 'activator']
      schemes.each do |scheme|
        plist['LSApplicationQueriesSchemes'] << scheme unless plist['LSApplicationQueriesSchemes'].include?(scheme)
      end
      Plist.save_plist(info_plist_path, plist)
    end
  end
end

如果用Swift Package Manager,可以编写一个Build Plugin,在构建阶段自动修改宿主的Info.plist,实现类似的自动注入。

2. 修改IOSSecuritySuite的实现逻辑(无需宿主配置)

既然这些Scheme是用来检测越狱相关应用,你可以修改IOSSecuritySuite的源码,替换掉canOpenURL的调用逻辑:

  • 改为检查越狱设备特有的文件路径,比如/Applications/Sileo.app、/Applications/Filza.app等,通过FileManager.default.fileExists(atPath:)来判断,这种方式不需要LSApplicationQueriesSchemes配置。
  • 或者检查进程列表,通过sysctl获取运行中的进程,判断是否存在越狱相关进程(比如Sileo、Filza)。
    这样修改后,你的XCFramework可以完全封装功能,不需要宿主做任何额外配置。

3. 文档告知+简化配置

如果上述两种方式都无法实施,最直接的方式是在你的框架文档中明确说明需要添加的配置,并提供可直接复制的plist片段,尽量降低用户的操作成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20