Ошибка «плохой переводчик: операция не разрешена» на Эль-Капитане

Моя команда пишет приложение для Mac OS, которое должно вызывать сценарий оболочки во внешнем каталоге.

Приложение отлично работает на Yosemite (10.10.3). Однако, если я запустил его на El Capitan (10.11.2), приложение получит такие ошибки из сценария:

/bin/bash: <path-to-script>: /bin/sh: bad interpreter: Operation not permitted

Я могу вызвать эту ошибку с помощью простого скрипта, подобного этому:

#!/bin/sh
echo "Hello World!"

Я не получаю сообщения об ошибке, если запускаю скрипты вручную из Терминала.

Приложение открывает каталог сценария с помощью средства выбора файлов. Я подтвердил, что приложение может читать другие файлы из этого каталога.

Изменение /bin/sh на /bin/bash или копию /bin/sh на другом пути дает ту же ошибку с новым путем интерпретатора.

Сотрудник проверил эту проблему на машине El Capitan с отключенной защитой целостности системы, но получил ту же ошибку.

Я устанавливаю тестовое приложение из файла .pkg. Правами являются:

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>

Добавление права com.apple.security.files.user-selected.executable не имело значения

Если я попытаюсь запустить .app, созданный на промежуточном этапе сборки пакета, я смогу запустить сценарий без ошибок.

В приведенном ниже вопросе описывается аналогичная ошибка. Однако я проверил и приложение, и сценарий и обнаружил, что ни у одного из них не установлен атрибут com.apple.quarantine.

Mac OS: / usr / bin / env: плохой интерпретатор : Операция запрещена

https://apple.stackexchange.com/questions/49589/bash-applications-mvim-bin-sh-bad-interpreter-operation-not-permitted

--- ОБНОВИТЬ ----

Мы добавили еще два в список прав доступа PKG:

<key>com.apple.security.scripting-targets</key>
<true/>
<key>com.apple.security.temporary-exception.apple-events</key>
<true/>

Мы попытались запустить простой файл .sh с помощью файла AppleScript (.scpt) (хранящегося в каталоге приложения), мы также подтвердили, что файл .sh и файл .scpt также не имеют расширенного атрибута, но у нас все еще есть эта ошибка .

Ниже показаны команды ls -@Oel как для AppleScript, так и для файла сценария оболочки соответственно.

$ ls -@Oel TestMXMLCall.scpt 
-rwxrwxrwx  1 root  wheel  - 2302 Jun 15 03:12 TestMXMLCall.scpt
$ ls -@Oel /usr/local/bin/mxmlc
-rwxr-xr-x  1 santanukarar  staff  - 2190 Jun 15 01:17 /usr/local/bin/mxmlc

person Santanu Karar    schedule 10.06.2016    source источник
comment
Может быть, дело в стиле окончания строки, может быть, в сценарии используется dos-stype CR-LF или только LF в стиле unix вместо only-CR? просто идея   -  person Stefan Hegny    schedule 10.06.2016
comment
Что произойдет, если вы явно запустите /bin/sh /path/to/script, запускается ли он с этим?   -  person anishsane    schedule 10.06.2016
comment
Что вы получаете с ls -l /bin/sh?   -  person cdarke    schedule 10.06.2016
comment
@anishsane Как уже упоминалось, команда работает нормально, когда запускается в Терминале вручную, но не внутри приложения.   -  person Santanu Karar    schedule 10.06.2016
comment
@Cdarke Если бы я запустил команду в Терминале вручную, у меня было бы следующее: -r-xr-xr-x 1 root wheel 632672 Dec 3 2015 /bin/sh. Я планирую запустить это из нашего приложения, если вы думаете иначе.   -  person Santanu Karar    schedule 10.06.2016
comment
& какие окончания строки отображаются для file /path/to/script?   -  person anishsane    schedule 10.06.2016


Ответы (3)


попробуйте следующее: $ ls -l@ whereverthescriptis Если он говорит, что у него есть com.apple.quarantine, проблема в этом. Выполните на нем одно из следующих действий, от наименее опасного до наиболее:

$ xattr -d com.apple.quarantine whereverthescriptis   # delete that attr
$ xattr -c whereverthescriptis    # delete ALL the attrs on file
$ xattr -c *         # on every file in this dir
$ xattr -cr .        # and all subdirectories
person OsamaBinLogin    schedule 01.06.2019
comment
Только что столкнулся с этим в 2020 году на macOS Catalina. - person Jon Buys; 17.09.2020

Я надеюсь, что это кому-то поможет, потому что у меня было немного уникальное решение вышеуказанной проблемы: у меня был кто-то другой, который сделал код для меня, поэтому, когда я получил код, он не работал со статусом Operation Not Permitted как на Android, так и на iOS .

Оказывается, мне нужно перейти в папку, содержащую проект, и стать владельцем папки. Вы можете сделать это на Mac, перейдя в папку, содержащую проект Flutter, и щелкнув «Получить информацию» в контекстном меню. Затем измените свои права доступа на «только чтение», а затем снова на запись и чтение на последней панели внизу.

Следуйте этому одному из советов выше, чтобы удалить атрибут карантина Apple из папки, перейдя в Терминал, затем используйте команду cd, чтобы перейти к папке, содержащей ваш проект Flutter, и введите следующую команду:

xattr -dr com.apple.quarantine [your flutter project directory name]

Вот и все! Теперь Android Studio или выбранная вами IDE сможет запускать версии iOS и Android из этой папки.

person sbenati    schedule 24.05.2021

Я решаю это, если вы используете только стручки

  1. очистка контейнера
  2. установка пакета

и проект готов к запуску

person islam XDeveloper    schedule 30.01.2020
comment
Не могли бы вы объяснить, что такое модуль на самом деле и как его установить? Просто во избежание недоразумений - person Mouse On Mars; 31.01.2020