我正在尝试使用_CDBatterySaver来打开低功耗模式,只需使用

    [[_CDBatterySaver batterySaver] setMode:1];

我知道目录类型与以前的Xcode不同,因此这些方法不起作用。

我也尝试过仅导入“.h”文件,但这不起作用。

它是CoreDuet框架的一部分(从GitHub下载)

谢谢

最佳答案

您将需要一个.tbd文件进行链接。

Apple停止从iOS 9.3 SDK开始为 private 框架提供这些工具,但您可以自己付出一些努力来生成它们:

  • 获取某个最新iOS版本的IPSW(ipsw.methe iPhone wiki具有不错的列表)。
  • 解压缩IPSW并安装根文件系统(多个GB的.dmg)。
  • /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm*中找到您的体系结构的共享库缓存。
  • 使用one of various tools(我更喜欢jtool),从中提取CoreDuet,例如:

    jtool -e CoreDuet /path/to/dyld_shared_cache
    
  • 可选:对多种体系结构执行步骤4,然后将提取的文件合并到一个胖二进制文件中:

    lipo -output CoreDuet dyld_shared_cache_*.CoreDuet
    
  • 使用machotbd或我自己的工具tbdump注意,从刚刚提取的库/框架中创建一个.tbd文件,例如:

    tbdump CoreDuet > CoreDuet.tbd
    

    笔记1.我写的,所以我显然是附属的。
    2.这是一个测试版,目前对符号有点狂热,甚至可以打印
    那些不应该的-但到目前为止,它对我来说一直很好。
  • 创建一个文件夹结构,如下所示:

    some_path/
        CoreDuet.framework/
            CoreDuet.tbd
    
  • 在XCode中将CoreDuet.framework添加到您的框架中,或使用以下编译器标志:

    -Fsome_path -framework CoreDuet
    
  • 利润。

  • 另外,如果步骤1-6对您来说太麻烦了,而您只需要_CDBatterySaver符号,那么您就可以将其用于CoreDuet.tbd并完成它:

    ---
    archs:           [ armv7, armv7s, arm64 ]
    platform:        ios
    install-name:    /System/Library/PrivateFrameworks/CoreDuet.framework/CoreDuet
    exports:
      - archs:           [ armv7, armv7s, arm64 ]
        objc-classes:    [ __CDBatterySaver ]
    ...
    

    08-15 20:49