1. ホーム
  2. ios

[解決済み] サードパーティアプリの起動時にLibStatusBarのアイコンが消える件

2022-05-30 01:36:28

質問

CydiaのTweakで、ステータスバーにアイコンを追加するものを作りました。 ホーム画面やSpringBoardの起動時、また、すでにアプリが起動されている場合は問題なく動作します。 ただし、アプリ(FacebookやTwitterなど)を閉じて(完全に)アイコンが表示されている場合、アプリを起動するとアイコンが消えてしまいます。 アイコンの表示は、libStatusBarを使用して、以下のコードで行っています。

if(icon) // if icon needs to be removed
{
    [icon release];
    icon = nil;
}

...

// add the icon to the status bar
icon = [[%c(LSStatusBarItem) alloc] initWithIdentifier:[NSString stringWithFormat:@"muteIconLablabla"] alignment:StatusBarAlignmentRight];
icon.imageName = [NSString stringWithFormat:@"Mute"];

で提案されているメソッドも使ってみました。 libStatusBar READMEファイル

[[UIApplication sharedApplication] addStatusBarImageNamed:@"ON_Mute"]; // and removeStatusBarImageNamed:...

をオーバーライドしてみました。 -(id)init をオーバーライドして、そこでアイコンを更新してみましたが、同じ結果でした。

上に示したコードは static void 関数から呼び出されています。この関数は何度も呼び出されており、例えば -(void)applicationDidFinishLaunching:(id)application の下にある %hook SpringBoard-(void)ringerChanged:(int)changed

すべて内部 Tweak.xm . この問題は iOS7 にも発生します。

どのように解決するのですか?

libstatusbar を使ってからしばらく経ちますが、もし絶対に LSStatusBarItem が解放されていない場合、Springboardや他のアプリによって隠されている可能性があります。 を設定することを検討してみてください。 icon.visible = YES を明示的に設定することを検討してください。 また timeHiddenLSStatusBarServerNO を呼び出すことで、明示的に [item setHidesTime:NO] .

さらに、アイコンに変更を加えない場合は icon.manualUpdate = NO .

参考文献です。