Я создаю приложение, которое автоматизирует нотариальное заверение моих приложений.
Я столкнулся со следующей проблемой:
Когда я использую NSTasks для выполнения таких команд, как xcrun altool и xcrun степлер , возвращаемое значение намного длиннее, чем то, что я получаю в Терминале.
Например, когда я запускаю степлер в Терминале, я получаю три строки вывода:
Processing: <app path>
Processing: <app path>
The staple and validate action worked!
NSTask, однако также возвращает тонны строк журнала изЭтап обработки, который выглядит следующим образом:
[2019-06-27 04:18:57 EDT] <main> INFO: Logging level set to eXtreme
[2019-06-27 04:18:57 EDT] <main> INFO: Logging configured successfully.
[2019-06-27 04:18:57 EDT] <main> DEBUG: Attempting refresh of configuration data from https://contentdelivery.itunes.apple.com/transporter/Defaults.properties
[2019-06-27 04:18:57 EDT] <main> DEBUG: Configuration refresh successful.
etc.
Теперь это не будет критической проблемой, так как в большинстве случаев NSTask включает возвращаемые значения, которые я получаю в Терминале - и которые необходимы для моего приложения, чтобы знатьрезультат задачи и действуйте соответствующим образом.
Но в некоторых случаях NSTask возвращает ТОЛЬКО не относящиеся к делу записи журнала, о которых я упоминал выше - и, по-видимому, еще до того, как задача даже закончила выполняться.В частности, это происходит при запуске команды xcrun altool --notarize-app .Поэтому мое приложение не знает, как действовать, поскольку оно не получает подтверждения успешной загрузки.
Я использую NSTask синхронно со стандартной подпрограммой для получения вывода:
thePipe = [NSPipe pipe];
[task setStandardOutput:thePipe];
[task setStandardError:thePipe];
[task launch];
[task waitUntilExit];
NSFileHandle *fh = [thePipe fileHandleForReading];
NSString *result = [[[NSString alloc] initWithData:[fh availableData] encoding:NSASCIIStringEncoding] autorelease];
Я не припоминаю, чтобы когда-либо возникала такая проблема при использовании NSTask с другими командами.
Итак, мне интересно, что я что-то упустил?И если есть способ получить только соответствующее возвращаемое значение - просто так, как я получаю его в Терминале?