ios - 如何快速导入私有(private)框架到 Xcode 9.2 (iOS 11)

标签 ios swift frameworks private xcode9.2

我想测试一些用于研究目的的东西(不是 App Store!),我想在其中使用 Xcode 9.2 (iOS 11) 中的私有(private)框架。为此,我需要将我想要使用的私有(private)框架导入到我的 Xcode 项目中。

但是在 Xcode 9.2 中,文件夹结构中的私有(private)框架文件夹不存在。

有什么想法可以帮助我实现这一目标吗?

最佳答案

私有(private)框架只是像公共(public)框架一样的 bundle 。您可以使用以下方式显式加载它:

if let framework = Bundle(path: "/System/Library/PrivateFrameworks/BatteryCenter.framework") {
    // Works only on real devices
    framework.load()
}

但是您需要包含的类的声明。您可以使用 class-dump 创建它们作为 Objective C header ,并通过桥接 header 将其导入到 Swift 中。

您使用class-dump/.../PrivateFrameworks/XXX.framework/XXX执行class-dump。您需要二进制框架而不是 *.tbd 文件。 BatteryCenter.framework 示例:

class-dump /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/BatteryCenter.framework/BatteryCenter

这将打印框架中包含的所有类的类声明。

请注意,您应该在设备或模拟器上使用

/System/Library/PrivateFrameworks/BatteryCenter.framework

用于加载 bundle 。

关于ios - 如何快速导入私有(private)框架到 Xcode 9.2 (iOS 11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49442883/

相关文章:

ios - AVCaptureSession 图像尺寸(使用 GPUImage)

ios - if-else Swift 之后不需要的 segue

iOS 7/8 内置发布到 Facebook 的方法

Swift 3 和无法识别的选择器发送到创建按钮的实例错误

java - .NET - .NET 的安全框架

linux - 嵌入式设备的简单 Web 应用程序

ios - 调整 View 的高度以包含 TableView 的行数

ios - Swift 3 类型 'Any' 没有下标成员

java - Wicket 口 1.5 与 1.4 相比

ios - 在嵌套的 NSManagedObjectContext 中缓慢删除和保存