Проблема приложения macOS с защитой целостности системы Apple

#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() или что-то подобное?