【问题标题】:How To Import Private Frameworks to Xcode 9.2 (iOS 11) , swift如何将私有框架导入 Xcode 9.2 (iOS 11),快速
【发布时间】:2018-09-01 17:31:51
【问题描述】:

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

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

有什么想法可以实现吗?

【问题讨论】:

  • 你想使用哪个私有框架?你是如何使用它的?请显示代码
  • 如果该框架在 Cocoapods 上,您可以像安装其他框架一样通过 pod 安装它。
  • @Nitish 不,它不在 Cocoapods 上,它是苹果的私有框架
  • @PPL 我想使用 BatteryCenter.framework。我还没有写任何代码,因为我不知道如何先导入框架。

标签: ios swift frameworks private xcode9.2


【解决方案1】:

私有框架与公共框架一样只是一个捆绑包。您可以使用以下命令显式加载它:

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

但是您需要声明包含的类。您可以使用 class-dump 作为 Objective C 标头来创建它们,并将 over a bridging header 导入 Swift。

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

类转储/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/BatteryCenter .framework/电池中心

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

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

/System/Library/PrivateFrameworks/BatteryCenter.framework

用于加载包。

【讨论】:

  • 我们如何使用类转储,我无法理解。
  • @nehaSingh:我已经扩展了我的帖子。
  • 我使用以下代码在它给出的给定路径访问捆绑包。 NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks"]; if (![bundle load]) { NSLog(@"Error"); // 可能会抛出异常 } else { _supporter = [NSClassFromString(@"BCBatteryDevice") valueForKey:@"sharedInstance"]; _handler = [[BCBatteryDeviceHandler alloc] init]; }
  • @nehaSingh:您的路径未指向有效的框架包。请参阅我上面的帖子。SDK 目录中的框架不包含有效的二进制文件。仅包含 .tbd 文件,类转储既不能加载也不能检查。
  • BatterCenter.Framework 在给定路径中不存在:/System/Library/PrivateFrameworks,
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 2011-05-11
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多