我正在尝试使用 _CDBatterySaver 打开低功耗模式,只需使用
[[_CDBatterySaver batterySaver] setMode:1];
我知道没有与以前的 Xcode 相同类型的目录,因此这些方法不起作用。
我也尝试过仅导入“.h”文件,但这不起作用。
它是 CoreDuet 框架的一部分(从 GitHub 下载)
谢谢
最佳答案
您将需要一个 .tbd
文件来链接。
从 iOS 9.3 SDK 开始,Apple 停止为私有(private)框架提供这些,但您可以通过一些努力自己生成它们:
- 获取最新 iOS 版本的 IPSW(ipsw.me 或 the iPhone wiki 有不错的列表)。
- 解压 IPSW 并挂载根文件系统(
.dmg
,大小为多个 GB)。 - 在
/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 notes,从刚刚提取的库/框架创建一个
.tbd
文件,例如:tbdump CoreDuet > CoreDuet.tbd
注释 1. 我写了它,所以我显然有隶属关系。
2. 这是一个测试版,目前对符号有点过于热衷,甚至打印
那些不应该的 - 但到目前为止它对我来说一直工作得很好。创建如下文件夹结构:
some_path/ CoreDuet.framework/ CoreDuet.tbd
将 CoreDuet.framework 添加到 XCode 中的框架,或使用这些编译器标志:
-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 ]
...
关于ios - 如何在 Xcode 8.3 中导入私有(private)框架而不出现 "Undefined symbols for architecture arm64",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962260/