У меня возникла проблема с перезапуском моего приложения на 10.5. В моем Info.plist я установил LSMinimumSystemVersionByArchitecture, чтобы приложение работало в 64-разрядной версии для x86_64 и в 32-разрядной версии для i386, ppc и ppc64.
У меня есть предпочтение в приложении, которое позволяет пользователю переключаться между значком Dock и NSStatusItem и предлагает пользователю перезапустить приложение после изменения настройки, используя следующий код:
id fullPath = [[NSBundle mainBundle] executablePath];
NSArray *arg = [NSArray arrayWithObjects:nil];
[NSTask launchedTaskWithLaunchPath:fullPath arguments:arg];
[NSApp terminate:self];
Однако когда это выполняется на 10.5, приложение перезапускается в 64-битном режиме, что для меня нежелательно. Из того, что я понял, читая документы, это потому, что ключи LS * не читаются, когда приложение запускается через командную строку.
Это можно обойти? Я попытался сделать что-то вроде ниже, что работало на 10.6, но на 10.5 мне щебетали, что «путь запуска недоступен». ([NSApp isOnSnowLeopardOrBetter] — это категория, которая проверяет номер версии AppKit).
id path = [[NSBundle mainBundle] executablePath];
NSString *fullPath = nil;
if (![NSApp isOnSnowLeopardOrBetter])
fullPath = [NSString stringWithFormat:@"/usr/bin/arch -i386 -ppc %@", path];
else
fullPath = path;
NSArray *arg = [NSArray arrayWithObjects:nil];
[NSTask launchedTaskWithLaunchPath:fullPath arguments:arg];
[NSApp terminate:self];