保持应用程序在后台无限制存活(对于Cydia应用程序)

时间:2011-12-24 21:18:05

标签: iphone ios objective-c jailbreak cydia

我不介意使用私有API或Apple不喜欢的任何类型,但更喜欢快速的解决方案,不像在后台播放沉默或调侃。

显然这不适用于应用商店,所以请不要讲课:)

那么你如何在没有任何限制的情况下在后台运行,例如“backgrounder”?我没有找到答案,除了一些人指向不同的方向,但也许从那以后有人设法挖掘它。

2 个答案:

答案 0 :(得分:8)

更新

此解决方案似乎不再足够(~iOS 7+或7.1+)。我将离开原始答案以供历史参考,如果它有助于根据这个过时的方法生成未来的解决方案:


这取决于 app 的含义。如果您正在谈论非图形背景服务,那么您需要的是启动守护程序。 See here for how to create a launch daemon

如果您有一个普通的UI应用程序,但是当用户按下主页按钮时,您希望它在后台保持清醒无限时间,then you can use some undocumented Background Modes in your app's Info.plist file

<key>UIBackgroundModes</key>
<array>
    <string>continuous</string>
    <string>unboundedTaskCompletion</string>
</array>

然后,当iOS准备好将您的应用程序置于后台时(例如,用户按下主页按钮),您可以在应用程序委托中执行此操作:

@property (nonatomic, assign) UIBackgroundTaskIdentifier bgTask;


- (void)applicationDidEnterBackground:(UIApplication *)application {

    // Delay execution of my block for 15 minutes.
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 15 * 60 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        NSLog(@"I'm still alive!");
    });

    self.bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        // should never get here under normal circumstances
        [application endBackgroundTask: self.bgTask]; 
        self.bgTask = UIBackgroundTaskInvalid;
        NSLog(@"I'm going away now ....");
    }];
}

通常,iOS只为您提供最多10分钟的UI应用程序才能在后台运行。使用未记录的背景模式,您将能够保持超过10分钟的限制。

注意: 需要与MobileSubstrate挂钩。如果您使用的是第二种方法(未记录的背景模式),那么确实需要在/Applications/中安装您的应用,而不是在普通的沙箱区域(/var/mobile/Applications/)。< / p>

答案 1 :(得分:1)

根据您的“app”要做的事情,您可以挂钩MobileSubstrate。这将加载SpringBoard并基本上“在后台”运行。

如果你想编写一个实际的应用程序,那么你也可以编写一个“动态库”,它将由MobileSUbstrate加载SpringBoard。您可以使用NSNotificationCenter在此dylib和您的应用之间来回通话;创建和发布通知。