Ресурс исполняемого пакета XCode не работает с песочницей. Какие-либо из этих системных вызовов выглядят проблематично для песочницы?
В моем приложении Какао есть двоичный исполняемый ресурс, который подписан мной и запускается из песочницы. Однако, он не работает успешно, и в его 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
позвони, это то, что я вижу,
[tbl2asn 25.3] Bad character in V_argVerify
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
на моем вызове, вне приложения, и вижу, что это все различные функции, которые он вызывает,
SYSCALL()
access()
bsdthread_register()
close()
close_nocancel()
csops()
fcntl()
fstat64()
fstatfs64()
getattrlist()
getdirentries64()
getegid()
geteuid()
getgid()
getpid()
getrlimit()
getrusage()
gettid()
getuid()
ioctl()
issetugid()
lseek()
lstat64()
madvise()
mmap()
mprotect()
open()
open_nocancel()
openat()
proc_info()
read()
read_nocancel()
shm_open()
stat64()
sysctl()
sysctlbyname()
write_nocancel()
Я работаю над этим, но мне бы хотелось, чтобы кто-нибудь признал, что что-то из этого проблематично с изолированными ресурсами, если они могут поделиться со мной тем, что знают.