#swift #macos #kernel #system #dtruss
#swift #macos #ядро #система #dtruss
Вопрос:
Я работаю над приложением для macOS. Приложение уже доступно в Mac App Store.
Некоторые из моих пользователей сообщают, что они не могут открыть приложение. Чтобы выяснить точную причину, я обратился к одному из пользователей и попросил его запустить dtruss, а затем открыть приложение, чтобы я мог проверить журналы низкого уровня с помощью этой команды,
sudo dtruss -n APPNAME
После проверки журналов это то, где он застрял,
69180/0x3c9468: stat64("/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3902/Libraries/libmetal_timestamp.dylib", 0x7FFEE457C4D0, 0x0) = 0 0
69180/0x3c9468: open_nocancel("/System/Library/Frameworks/CoreImage.framework/Resources/ci_stdlib.metallib", 0x0, 0x1B6) = 5 0
69180/0x3c9468: fstat64(0x5, 0x7FFEE457CC28, 0x0) = 0 0
69180/0x3c9468: lseek(0x5, 0x0, 0x1) = 0 0
69180/0x3c9468: lseek(0x5, 0x0, 0x0) = 0 0
dtrace: error on enabled probe ID 2187 (ID 951: syscall::read_nocancel:return): invalid kernel access in action #13 at DIF offset 68
69180/0x3c9468: lseek(0x5, 0xFFFFFFFFFFFFF058, 0x1) = 88 0
69180/0x3c9468: fstat64(0x5, 0x7FFEE457CD10, 0x0) = 0 0
69180/0x3c9468: lseek(0x5, 0x1B000, 0x0) = 110592 0
dtrace: error on enabled probe ID 2187 (ID 951: syscall::read_nocancel:return): invalid kernel access in action #13 at DIF offset 68
69180/0x3c9468: lseek(0x5, 0x0, 0x0) = 0 0
dtrace: error on enabled probe ID 2187 (ID 951: syscall::read_nocancel:return): invalid kernel access in action #13 at DIF offset 68
69180/0x3c9468: lseek(0x5, 0xFFFFFFFFFFFFF058, 0x1) = 88 0
69180/0x3c9468: lseek(0x5, 0x0, 0x0) = 0 0
dtrace: error on enabled probe ID 2187 (ID 951: syscall::read_nocancel:return): invalid kernel access in action #13 at DIF offset 68
69180/0x3c9468: lseek(0x5, 0xFFFFFFFFFFFFF05C, 0x1) = 92 0
dtrace: error on enabled probe ID 2187 (ID 951: syscall::read_nocancel:return): invalid kernel access in action #13 at DIF offset 68
69180/0x3c9468: lseek(0x5, 0xFFFFFFFFFFFFF035, 0x1) = 145 0
69180/0x3c9468: lseek(0x5, 0x0, 0x0) = 0 0
Регистрируется одна и та же повторяющаяся ошибка, и приложение вообще не открывается. Я был бы очень признателен, если кто-нибудь поможет мне избавиться от этой проблемы.
Комментарии:
1. dtrace / dtruss не дает особенно полезных результатов при включенном SIP. Чтобы заставить его работать должным образом, вам необходимо отключить (эту часть) SIP. например
csrutil enable --without dtrace
, в консоли восстановления. Однако я подозреваю, что ваше приложение может столкнуться с другой проблемой, чем сбой системного вызова, поэтому вы захотите, чтобы ваши пользователи сначала проверяли отчеты о сбоях.2. Также обратите внимание, что Apple недавно изменила формат некоторых своих квитанций App Store, поэтому, если вы выполняете проверку квитанций, вы можете начать поиск там: twitter.com/depth42/status/1313750495710904320?s=20
3. @pmdj Я не использую какие-либо квитанции о покупке в приложении или App Store. Все начинается после вызова i_stdlib.metallib. Я не уверен, смогу ли я отключить пользовательский SIP, это то, что я до сих пор.
4. и да @pmdj в журналах сбоев ничего нет, приложение просто не запускается вообще.
5. Просто для ясности: я не верю, что эти ошибки возникают в вашем приложении, это почти наверняка ошибки DTrace SIP, поэтому, когда они запускаются, не имеет значения. Если ваше приложение не выходит из строя, вызываете ли вы или какая-либо из используемых вами библиотек exit() или что-то подобное?