地獄の検索と実験の後、私は自分の質問に答える準備ができているので、他の人は時間と労力を節約できます。
私の結論は、今のところ、HelperAppがサンドボックスの下でいくつかの引数を使用してMainAppを起動する方法はないということです。少なくとも私はそれをする方法を見つけていません。
次のようにMainAppを起動します。
[[NSWorkspace sharedWorkspace] launchApplication:newPath];
MainAppで、以下を追加します。
Application_IsLaunchedByHelperApp = YES;
ProcessSerialNumber currPSN;
OSStatus err = GetCurrentProcess(&currPSN);
if (!err)
{
// Get information about our process
NSDictionary * currDict = [(NSDictionary *)ProcessInformationCopyDictionary(&currPSN,
kProcessDictionaryIncludeAllInformationMask) autorelease];
// Get the PSN of the app that launched us. Its not really the parent app, in the unix sense.
long long temp = [[currDict objectForKey:@"ParentPSN"] longLongValue];
long long hi = (temp >> 32) & 0x00000000FFFFFFFFLL;
long long lo = (temp >> 0) & 0x00000000FFFFFFFFLL;
ProcessSerialNumber parentPSN = {(UInt32)hi, (UInt32)lo};
// Get info on the launching process
NSDictionary * parentDict = [(NSDictionary*)ProcessInformationCopyDictionary(&parentPSN,
kProcessDictionaryIncludeAllInformationMask) autorelease];
// analyze
// parent app info is not null ?
if (parentDict && parentDict.count > 0)
{
NSString * launchedByAppBundleId = [parentDict objectForKey:@"CFBundleIdentifier"];
if (![launchedByAppBundleId isEqualToString:HELPER_APP_BUNDLE_ID])
{
Application_IsLaunchedByHelperApp = NO;
}
}
}
それでおしまい。Application_IsLaunchedByHelperApp
正しい値になりました。
解決策は私のものではありません。私はそれをウェブ上で見つけました(cocoabuilder、私は推測します)。みんな頑張ってね!そして、私の質問にご注目いただきありがとうございます。
UPDATE
ログインアプリのショーで起動した場合があるようですlaunchedByAppBundleId = @"com.apple.loginwindow"
。したがって、コードの最後の部分は次のようになります。
//
// analyze
//
// parent app info is not null ?
if (parentDict && parentDict.count > 0)
{
NSString * launchedByAppBundleId = [parentDict objectForKey:@"CFBundleIdentifier"];
if (![launchedByAppBundleId isEqualToString:HELPER_APP_BUNDLE_ID] &&
![launchedByAppBundleId isEqualToString:@"com.apple.loginwindow"])
{
Application_IsLaunchedByHelperApp = NO;
}
}