質問は、バックグラウンド実行とショートカット項目の動的更新の 2 つの部分に分けられると思います。
私見では、iOS のバックグラウンド実行はまだかなり制限されています。たとえば、有限長のタスクを実行したり、特定の種類のアプリのみをバックグラウンドで長時間実行することが許可されています。 到達可能性は、長時間実行されるバックグラウンド タスクのケースにはあまり適していません。
あなたが言及したように、ショートカット項目を動的に更新するのは非常に簡単です (以下のように):
// replace updateShortcutItemMethod and EventYouAreInterestedIn accordingly
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(<updateShortcutItemMethod>) name:<EventYouAreInterestedIn> object:nil];
- (void)updateShortcutItemWithType:(NSString *)type title:(NSString *)title subtitle:(NSString *)subtitle icon:(NSString *)icon
{
NSMutableArray *shortcutItems = [NSMutableArray arrayWithArray:[UIApplication sharedApplication].shortcutItems];
for (UIMutableApplicationShortcutItem *shortcutItem in shortcutItems) {
if ([shortcutItem.type isEqualToString:type]) {
UIMutableApplicationShortcutItem *updatedShortcutItem = [[UIMutableApplicationShortcutItem alloc] initWithType:type localizedTitle:title localizedSubtitle:subtitle icon:[self getIconFrom:icon] userInfo:nil];
NSUInteger index = [shortcutItems indexOfObject:shortcutItem];
[shortcutItems replaceObjectAtIndex:index withObject:updatedShortcutItem];
[UIApplication sharedApplication].shortcutItems = shortcutItems;
}
}
}
技術的な側面は別として、ユーザー エクスペリエンスの観点からすると、アプリケーションがバックグラウンドにあるときに UIApplicationShortcutItem を更新することは、あまり良い考えではありません。
アプリケーションがバックグラウンドにある場合、ユーザーはアプリケーションのコンテキストにいないためです (対話は発生しません)。ユーザーが理由を認識していないときに UIApplicationShortcutItem を頻繁に変更すると、ユーザーが混乱する可能性があります。それを行うためのより良い方法は、ユーザーがアプリケーションと対話している間に何が起こっているかを明示的にユーザーに通知することです。
申し訳ありませんが、これは実際にはあなたが望むものを達成するのに役立たないかもしれません.