1

Springboard サービス フレームワークを使用して、次のコードを利用したいと考えています。

SBSLaunchApplicationWithIdentifier(CFSTR("com.apple.preferences"), false);

ただし、ヘッダー ファイルをダウンロードしてプロジェクトで使用すると、ビルドされません。この作業を行う方法を教えてください。

4

1 に答える 1

3

その方法を正確に何に使用する予定ですか?デーモンからアプリケーションを起動するためのものであるという印象を受けましたか?

アプリケーションを非常に簡単に起動する方法は他にもあります。私が見つけた最も信頼できる方法は、ディスプレイ スタックを使用してアプリケーションを適切に起動することです。アプリを起動する他の方法では、アプリを閉じて再起動しようとするとクラッシュする傾向があります。

theos を使用すると、次のようなことができます。

NSMutableArray *displayStacks = nil;

// Display stack names
#define SBWPreActivateDisplayStack        [displayStacks objectAtIndex:0]
#define SBWActiveDisplayStack             [displayStacks objectAtIndex:1]
#define SBWSuspendingDisplayStack         [displayStacks objectAtIndex:2]
#define SBWSuspendedEventOnlyDisplayStack [displayStacks objectAtIndex:3]

// Hook SBDisplayStack to get access to the stacks

%hook SBDisplayStack

-(id)init
{
    %log;
    if ((self = %orig)) 
    {
        NSLog(@"FBAuth: addDisplayStack");
        [displayStacks addObject:self];
    }
    return self;
}

-(void)dealloc
{
    [displayStacks removeObject:self];
    %orig;
}

%end

そして、アプリを起動するには、次のようにします。

id PreferencesApp = [[objc_getClass("SBApplicationController") sharedInstance] applicationWithDisplayIdentifier:@"com.apple.preferences"];

[SBWActiveDisplayStack pushDisplay:PreferencesApp];

ただし、本当にその方法を使用したい場合は、ビルドを停止しているエラーを特定し、ビルドに使用しているヘッダー ファイルを確認する必要があります。また、SBS フレームワークにリンクする必要があります。

于 2012-09-03T12:17:18.163 に答える