1

我是一名开发 iOS 机器人应用程序的开发人员。我不打算将这个应用程序提交到应用程序商店,我也不希望建议的方法得到苹果的批准......

我正在尝试让蓝牙工作,我认为一个好的起点是尝试修改现有的苹果框架。我是否可以修改框架,以便在将它们构建到我的 iOS 设备时为应用程序修改框架(但不是同一设备上的其他应用程序)?

4

2 回答 2

6

事实上,你可以!

Objective-C 允许你“调配”方法来覆盖它们的默认行为,但如果你愿意,仍然可以调用原始实现。您可以对任意数量的 Objective-C 方法执行此操作,次数不限。

如果您希望覆盖 C 函数中存在的行为,则需要对平台进行更多控制。越狱允许您使用 Jay Freeman 的 CydiaSubstrate 的全部功能来挂钩或混合 Objective-C 方法和 C/C++ 函数。

虽然我不建议使用MethodSwizzle本身,但以下 URL 对 swizzling http://cocoadev.com/wiki/MethodSwizzling进行了很好的讨论。

但是你真的应该使用CydiaSubstrate 的MSHookMes​​sageEx 和 MSHookFunction 来代替。特别是因为您没有向 App Store 提交任何内容。

现在关于蓝牙,我已经在这个领域做了大量的工作(我开发了 Celeste,这是一个系统范围的调整,为 iOS 上的系统应用程序提供香草蓝牙 OBEX 支持)。我建议您考虑使用BTstack 之类的东西,它可以让您访问从 HCI 到 RFCOMM 级别的蓝牙模块,并支持您可能需要的 SDP 和配对等功能。它还有一个额外的好处,那就是不需要方法混搭,有些人似乎认为这是某种邪恶的仪式,应该不惜一切代价避免。

于 2012-10-31T23:59:51.143 回答
2

除了类别(扩展这些框架中提供的基类的功能)之外,我认为您不能“修改”现有的 Apple 框架本身。更好的做法可能是简单地创建您自己的框架(或找到其他人的开源、商业或只是第三方框架),然后将该框架构建到您安装到您想要使用的 iOS 设备上的应用程序中。

于 2012-10-31T23:44:50.363 回答