В моем приложении Какао есть двоичный исполняемый ресурс, который подписан мной и запускается из песочницы.Однако, он не работает успешно, и в его stderr есть материал, которого нет, когда я запускаю этот вызов за пределами моего приложения.Программа, которую я запускаю, называется tbl2asn
, предоставлена правительством США, и ее исходный код доступен;эта программа скомпилирована вместе со множеством других как часть библиотеки для биологических данных.
Для полноты, это именно тот вызов, который я использую, tbl2asn -V v -a l1 -t inputfile1 -i inputfile2 -o outputfile
В конечном итоге он генерируеттри файла, один из которых указан -o
, и два файла в каталоге, из которого запускается программа, из-за флага -V v
.
Я приказываю Xcode записать файл -o
в NSTemporaryDirectory()
, где другие файлы успешно записываются при включенной песочнице, но он не записывает те, которые я хочу, когда включена песочница.Так как процесс завершается с ошибкой в приложении без -V v
(что наверняка вызывает попытки записи файлов туда, где находятся ресурсы), это заставляет меня думать, что предпринимаются некоторые попытки ввода-вывода в запрещенные места.
За пределами приложения, когда запускается tbl2asn
, в stderr выводится только пара неважных уведомлений, но в приложении, когда я передаю вперед stderr из вызова tbl2asn
, это то, что я вижу,
2019-02-28 05:35:47.793894-0800 tbl2asn[67411:9510814] WARNING: The Gestalt selector gestaltSystemVersion is returning 10.9.0 instead of 10.14.0. This is not a bug in Gestalt -- it is a documented limitation. Use NSProcessInfo's operatingSystemVersion property to get correct system version number.
Call location:
2019-02-28 05:35:47.796781-0800 tbl2asn[67411:9510814] 0 CarbonCore 0x00007fff3a2a5464 ___Gestalt_SystemVersion_block_invoke + 112
2019-02-28 05:35:47.796797-0800 tbl2asn[67411:9510814] 1 libdispatch.dylib 0x000000010073a7f3 _dispatch_client_callout + 8
2019-02-28 05:35:47.796808-0800 tbl2asn[67411:9510814] 2 libdispatch.dylib 0x000000010073c4bb _dispatch_once_callout + 87
2019-02-28 05:35:47.796819-0800 tbl2asn[67411:9510814] 3 CarbonCore 0x00007fff3a246665 _Gestalt_SystemVersion + 946
2019-02-28 05:35:47.796829-0800 tbl2asn[67411:9510814] 4 CarbonCore 0x00007fff3a23fae8 Gestalt + 147
2019-02-28 05:35:47.796840-0800 tbl2asn[67411:9510814] 5 tbl2asn 0x000000010037a806 Nlm_GetOpSysString + 22
2019-02-28 05:35:47.796850-0800 tbl2asn[67411:9510814] 6 tbl2asn 0x0000000100002a63 Nlm_Main + 6163
УДАЛЕНО: dtruss
вывод.
ОБНОВЛЕНИЕ: Я точно определил проблему, но я не понимаю, что происходит.
ОПИСАНИЕ: проверка fs_usage
внутри и снаружи песочницы обнаружилось это различие:
В песочнице открытие не удается, и последующие вызовы записи не происходят с вещью, называемой toasn3.msg
.В выводе fs_usage
из изолированной программы написано THROTTLED;это отсутствует в вызове без песочницы, где вместо этого есть много строк, подобных этой,
22:52:23.615921 write F=4 B=0x1000
0.000023 tbl2asn.2073266
, где вызовы записи выполняются для вещи toasn3.msg
, здесь идентификатор - tbl2asn.2073266
Вот неудачная попытка запуска в «песочнице» fs_usage
,
22:38:36.043193 stat64 [ 2] toasn3.msg 0.000008 tbl2asn.2070594
22:38:36.043203 open [ 2] (R_____) toasn3.msg 0.000007 tbl2asn.2070594
22:38:36.060833 THROTTLED 0.200916 mds_stores.2069534
22:38:36.060834 PAGE_IN_FILE A=0x0104af5000 0.201197 mds_stores.2069534
22:38:36.061164 PgIn[AT3P] D=0x01faa58e B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000279 W mds_stores.2069534
22:38:36.061165 PgIn[AT3P] D=0x01fab2ed B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000224 W mds_stores.2069534
22:38:36.061169 PgIn[AT3P] D=0x01fa9eca B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000208 W mds_stores.2069534
22:38:36.061187 PgIn[AT3P] D=0x0060614d B=0x1000 /dev/disk1s1 /.Spotlight-V100/Store-V2/C6256897-E180-4650-85BD-78E01145E16F/reverseDirectoryStore 0.000211 W mds_stores.2069534
22:38:36.091770 ioctl F=2 [ 25] <CMD=0x4004667a> 0.000003 tbl2asn.2070594
22:38:36.091772 ioctl F=2 [ 25] <CMD=0x40487413> 0.000001 tbl2asn.2070594
22:38:36.091791 write F=2 B=0x25 0.000005 tbl2asn.2070594
22:38:36.091794 ioctl F=0 <CMD=0x4004667a> 0.000003 tbl2asn.2070594
22:38:36.091798 ioctl F=2 [ 25] <CMD=0x4004667a> 0.000001 tbl2asn.2070594
22:38:36.091799 ioctl F=2 [ 25] <CMD=0x40487413> 0.000001 tbl2asn.2070594
22:38:36.091802 write F=2 B=0x25 0.000001 tbl2asn.2070594
22:38:36.091804 ioctl F=0 <CMD=0x4004667a> 0.000001 tbl2asn.2070594
22:38:36.091859 open [ 2] (_WC_T_) private/var/folders/8m/bqlpqcq17x1_mgjkg81s2grw0000gn/T/1D6BF273-0837-427B-BA21-ACDB6A2C514D-4072-00001FC00236C89B>>>>>> 0.000049 tbl2asn.2070594
22:38:36.092838 close F=3 0.000010 tbl2asn.2070594
22:38:36.094428 read F=15 B=0x0 0.282789 SeqKing.2069951
22:38:36.094450 exit 0.000059 tbl2asn.2070594
Вот определение toasn3.msg
.Что это за вещь?
MODULE toasn3
$$ ORGANISM, 1
$^ Empty, 1, SEV_WARNING
$^ NotFound, 2, SEV_WARNING
$^ Diff, 3, SEV_WARNING
$$ SOURCE, 2
$^ MultipleQualifiers, 1, SEV_WARNING
$^ DiffQualifiers, 2, SEV_WARNING
$^ Identical, 3, SEV_WARNING
$^ NotFound, 4, SEV_WARNING
$^ GeneticCode, 5, SEV_WARNING
$^ UnwantedQualifiers, 6, SEV_WARNING
$^ MissingOrganism, 7, SEV_WARNING
$^ NotFoundWHole, 9, SEV_WARNING
$^ Multiple, 10, SEV_WARNING
$^ Diff, 11, SEV_WARNING
$^ QualDiffValues, 12, SEV_WARNING
$^ IllegalQual, 13, SEV_WARNING
$^ QualUnknown, 14, SEV_INFO
$$ TAXONOMY, 4
$^ GeneticCode, 1, SEV_ERROR
$$ FEATURE, 5
$^ CannotMapDnaLocToAALoc, 1, SEV_ERROR
$^ BadLocation, 2, SEV_WARNING
$^ CDSNotFound, 3, SEV_WARNING