アップデート:
このソリューションはもはや十分ではないようです (~ iOS 7+ または 7.1+)。歴史的な参照のために元の回答を残しています。この古いものに基づいて将来のソリューションを作成するのに役立つ場合に備えて:
appの意味によって異なります。非グラフィカルなバックグラウンドサービスについて話している場合、必要なのは Launch Daemon です。 起動デーモンの作成方法については、こちらを参照してください。
通常の UI アプリケーションがあり、ユーザーがホーム ボタンを押したときにバックグラウンドで無期限に起動したままにする場合は、アプリの Info.plist ファイルで文書化されていないバックグラウンド モードを使用できます。
<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 では、UI アプリケーションがバックグラウンドで動作するのに最大 10 分しか与えられません。文書化されていないバックグラウンド モードを使用すると、10 分の制限を超えて生き続けることができます。
注:これには、MobileSubstrate をフックする必要はありません。2 番目の方法 (文書化されていないバックグラウンド モード) を使用している場合は、通常のサンドボックス領域 ( ) ではなく、 にアプリをインストールする必要があります。/Applications/
/var/mobile/Applications/