iphone - 如何在越狱的iPhone中创建一个可以被SpringBoard或其他应用程序访问的全局环境变量?

标签 iphone ios objective-c jailbreak

我发现在SpringBoard中创建的变量无法被其他常规应用程序访问。但现在我想制作一个标志变量,可以在全局环境中有效地共享状态。

我认为在某个路径创建的文件可以做到这一点,但这可能不够快。

有人知道如何做到这一点吗?

最佳答案

您可以尝试将文件与该文件中的更改通知组合起来。进程之间的通知可以通过两种方式发送:

  1. Darwin 通知中心CFNotificationCenterGetDarwinNotifyCenter
  2. 分布式通知中心CFNotificationCenterGetDistributedCenter - 私有(private)API

分布式通知中心更好,因为您可以发送带有附加数据的通知。 Darwin 通知中心忽略传递给它的所有用户信息。因此,当您更改某些标志并将其保存在文件中时,您可以使用该标志的新值发送通知。您甚至不需要自己打开文件并获取标志的值。所有其他应用程序只需要监听此通知即可。

这是CFNotificationCenterGetDistributedCenter原型(prototype)

CFNotificationCenterRef CFNotificationCenterGetDistributedCenter();

更新:

此功能在iOS 5.0及以上版本可用。如果您需要支持旧版本,有两种解决方案:

  1. Darwin 通知中心
  2. CFMessagePort - 可以传输任意数据。

如果您确实需要支持旧版本,我建议您使用 CFMessagePort。这是简单而灵活的解决方案,并且有详细记录。如果您遇到问题,您总可以找到可行的示例。

关于iphone - 如何在越狱的iPhone中创建一个可以被SpringBoard或其他应用程序访问的全局环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768901/

相关文章:

iPhone - 将 IBOutlet 设置为 nil 时的 EXC_BAD_ACCESS - 内存管理

iphone - 如何在应用程序中播放带有音乐文件的播放列表?

ios - Xcode约束如何同时展开两个按钮?

ios - MeasurementFormatter 显示英尺和英寸

ios - 提高 setValueForKeyPath 的鲁棒性

iphone - 自定义滚动指示器

ios - iTunes Connect Testflight Beta 测试

android - 第一次为 Android 和 IOS 创建应用程序

objective-c - 使用 NSNumberFormatter 格式化输出 UILabel 中的货币

objective-c - 未调用 UITextView shouldChangeTextInRange 委托(delegate)