Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ProcessException: Permission denied on MacOS Sonoma 14.1.1 macos app #372

Open
farellsujanto opened this issue May 31, 2024 · 11 comments
Open

Comments

@farellsujanto
Copy link

farellsujanto commented May 31, 2024

I'm developing windows & macos app, the windows one is already running well, but I got some problem when building the macos app. Already doing chmod +x & 777 on the entire project & builds but still not working.

I'm using orm v4.1.0

I got this error

flutter: ProcessException: Permission denied
  Command: ./prisma/prisma-query-engine --enable-metrics --enable-open-telemetry --enable-raw-queries --port 0 --datamodel Ly8gVGhpcyBpcyB5b3VyIFByaXNtYSBzY2hlbWEgZmlsZSwKLy8gbGVhcm4gbW9yZSBhYm91dCBpdCBpbiB0aGUgZG9jczogaHR0cHM6Ly9wcmlzLmx5L2QvcHJpc21hLXNjaGVtYQoKZ2VuZXJhdG9yIGNsaWVudCB7CiAgcHJvdmlkZXIgPSAiZGFydCBydW4gb3JtIgogIG91dHB1dCAgID0gIi4uL2xpYi9zcmMvcHJpc21hX2NsaWVudCIKfQoKZGF0YXNvdXJjZSBkYiB7CiAgcHJvdmlkZXIgPSAicG9zdGdyZXNxbCIKICB1cmwgICAgICA9IGVudigiREFUQUJBU0VfVVJMIikKfQoKZW51bSBVc2VyUm9sZSB7CiAgU1VQRVJfQURNSU4KICBBRE1JTgp9Cgptb2RlbCBVc2VyIHsKICBpZCAgICAgICBJbnQgICAgICBAaWQgQGRlZmF1bHQoYXV0b2luY3JlbWVudCgpKQogIHVzZXJuYW1lIFN0cmluZyAgIEB1bmlxdWUKICBwYXNzd29yZCBTdHJpbmcKICBzYWx0ICAgICBTdHJpbmcKICByb2xlICAgICBVc2VyUm9sZQogIGVuYWJsZWQgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAp9Cgptb2RlbCBDdXN0b21lciB7CiAgaWQgICAgICBJbnQgICAgIEBpZCBAZGVmYXVsdChhdXRvaW5jcmVtZW50KCkpCiAgbmFtZSAgICBTdHJpbmcKICBhZGRyZXNzIFN0cmluZwogIHBob25lICAgU3RyaW5nCiAgZW5hYmxlZCBCb29sZWFuIEBkZWZhdWx0KHRydWUpCgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICBzYWxlc1JlcG9ydHMgU2FsZXNSZXBvcnRbXQp9Cgptb2RlbCBQcm9kdWN0IHsKICBpZCAgICAgICAgICAgSW50ICAgICBAaWQgQGRlZmF1bHQoYXV0b2luY3JlbWVudCgpKQogIG5hbWUgICAgICAgICBTdHJpbmcKICBsb3dlc3RQcmljZSAgSW50CiAgaGlnaGVzdFByaWNlIEludAogIGVuYWJsZWQgICAgICBCb29sZWFuIEBkZWZhdWx0KHRydWUpCgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICBzdG9ja3MgU3RvY2tbXQp9Cgptb2RlbCBXYXJlaG91c2UgewogIGlkICAgICAgIEludCAgICAgQGlkIEBkZWZhdWx0KGF1dG9pbmNyZW1lbnQoKSkKICBuYW1lICAgICBTdHJpbmcKICBsb2NhdGlvbiBTdHJpbmcKICBlbmFibGVkICBCb29sZWFuIEBkZWZhdWx0KHRydWUpCgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICBzYWxlc21hbnMgU2FsZXNtYW5bXQoKICBzYWxlc1JlcG9ydHMgU2FsZXNSZXBvcnRbXQoKICBzb3VyY2VXYXJlaG91c2VzIFdhcmVob3VzZVRyYW5zcG9ydFJlcG9ydFtdIEByZWxhdGlvbigiU291cmNlV2FyZWhvdXNlIikKICB0YXJnZXRXYXJlaG91c2VzIFdhcmVob3VzZVRyYW5zcG9ydFJlcG9ydFtdIEByZWxhdGlvbigiVGFyZ2V0V2FyZWhvdXNlIikKCiAgc3RvY2tzIFN0b2NrW10KfQoKbW9kZWwgU2FsZXNtYW4gewogIGlkICAgICAgSW50ICAgICBAaWQgQGRlZmF1bHQoYXV0b2luY3JlbWVudCgpKQogIG5hbWUgICAgU3RyaW5nCiAgZW5hYmxlZCBCb29sZWFuIEBkZWZhdWx0KHRydWUpCgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICB3YXJlaG91c2UgICBXYXJlaG91c2UgQHJlbGF0aW9uKGZpZWxkczogW3dhcmVob3VzZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICB3YXJlaG91c2VJZCBJbnQKCiAgc2FsZXNSZXBvcnRzIFNhbGVzUmVwb3J0W10KfQoKbW9kZWwgU2FsZXNQcm9kdWN0IHsKICBpZCAgICAgICAgICAgSW50ICAgIEBpZCBAZGVmYXVsdChhdXRvaW5jcmVtZW50KCkpCiAgbmFtZSAgICAgICAgIFN0cmluZwogIHNlbGxpbmdQcmljZSBJbnQKICBxdHkgICAgICAgICAgSW50CiAgcmV0dXJuZWQgICAgIEludCAgICBAZGVmYXVsdCgwKQoKICBjcmVhdGVkQXQgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0IERhdGVUaW1lIEB1cGRhdGVkQXQKCiAgc2FsZXNSZXBvcnQgICBTYWxlc1JlcG9ydD8gQHJlbGF0aW9uKGZpZWxkczogW3NhbGVzUmVwb3J0SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHNhbGVzUmVwb3J0SWQgSW50PwoKICBwcm9kdWN0SWQgSW50CgogIHdhcmVob3VzZVRyYW5zcG9ydFJlcG9ydCAgIFdhcmVob3VzZVRyYW5zcG9ydFJlcG9ydD8gQHJlbGF0aW9uKGZpZWxkczogW3dhcmVob3VzZVRyYW5zcG9ydFJlcG9ydElkXSwgcmVmZXJlbmNlczogW2lkXSkKICB3YXJlaG91c2VUcmFuc3BvcnRSZXBvcnRJZCBJbnQ/Cn0KCm1vZGVsIFNhbGVzUmVwb3J0IHsKICBpZCAgICAgIEludCAgICAgQGlkIEBkZWZhdWx0KGF1dG9pbmNyZW1lbnQoKSkKICBlbmFibGVkIEJvb2xlYW4gQGRlZmF1bHQodHJ1ZSkKCiAgcGFpZCBJbnQgICAgIEBkZWZhdWx0KDApCiAgZGVzYyBTdHJpbmc/CgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICB3YXJlaG91c2UgICBXYXJlaG91c2UgQHJlbGF0aW9uKGZpZWxkczogW3dhcmVob3VzZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICB3YXJlaG91c2VJZCBJbnQKCiAgc2FsZXNtYW4gICBTYWxlc21hbj8gQHJlbGF0aW9uKGZpZWxkczogW3NhbGVzbWFuSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHNhbGVzbWFuSWQgSW50PwoKICBjdXN0b21lciAgIEN1c3RvbWVyPyBAcmVsYXRpb24oZmllbGRzOiBbY3VzdG9tZXJJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY3VzdG9tZXJJZCBJbnQ/CgogIHNhbGVzUHJvZHVjdHMgU2FsZXNQcm9kdWN0W10KfQoKbW9kZWwgV2FyZWhvdXNlVHJhbnNwb3J0UmVwb3J0IHsKICBpZCAgICAgIEludCAgICAgQGlkIEBkZWZhdWx0KGF1dG9pbmNyZW1lbnQoKSkKICBlbmFibGVkIEJvb2xlYW4gQGRlZmF1bHQodHJ1ZSkKCiAgcGFpZCBJbnQgICAgIEBkZWZhdWx0KDApCiAgZGVzYyBTdHJpbmc/CgogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAoKICB3YXJlaG91c2UgICBXYXJlaG91c2UgQHJlbGF0aW9uKCJTb3VyY2VXYXJlaG91c2UiLCBmaWVsZHM6IFt3YXJlaG91c2VJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgd2FyZWhvdXNlSWQgSW50CgogIHRhcmdldFdhcmVob3VzZSAgIFdhcmVob3VzZSBAcmVsYXRpb24oIlRhcmdldFdhcmVob3VzZSIsIGZpZWxkczogW3RhcmdldFdhcmVob3VzZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICB0YXJnZXRXYXJlaG91c2VJZCBJbnQKCiAgc2FsZXNQcm9kdWN0cyBTYWxlc1Byb2R1Y3RbXQp9Cgptb2RlbCBTdG9jayB7CiAgaWQgIEludCBAaWQgQGRlZmF1bHQoYXV0b2luY3JlbWVudCgpKQogIHF0eSBJbnQgQGRlZmF1bHQoMCkKCiAgY3JlYXRlZEF0IERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCBEYXRlVGltZSBAdXBkYXRlZEF0CgogIHByb2R1Y3QgICBQcm9kdWN0IEByZWxhdGlvbihmaWVsZHM6IFtwcm9kdWN0SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2R1Y3RJZCBJbnQKCiAgd2FyZWhvdXNlICAgV2FyZWhvdXNlIEByZWxhdGlvbihmaWVsZHM6IFt3YXJlaG91c2VJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgd2FyZWhvdXNlSWQgSW50Cn0K --engine-protocol json --overwrite-datasources W3sibmFtZSI6ImRiIiwidXJsIjoicG9zdGdyZXM6Ly9wb3N0Z3Jlcy52eWZrbWZpZGhpcHFxbXZld2l0bTpqSnVyYWdhbjIzMDZAYXdzLTAtYXAtc291dGhlYXN0LTEucG9vbGVyLnN1cGFiYXNlLmNvbTo1NDMyL3Bvc3RncmVzIn1d

Here is the flutter doctor result

[✓] Flutter (Channel stable, 3.22.1, on macOS 14.1.1 23B81 darwin-arm64, locale en-ID)
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 15.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.1)
[✓] VS Code (version 1.85.1)
[✓] VS Code (version 1.85.1)
[✓] Connected device (4 available)
[✓] Network resources

On release build its forced close but in debug build I got those error log, can you help me to solve this? Thanks!

@farellsujanto
Copy link
Author

I'm using MacOS Sonoma 14.1.1 M1 chip

@medz
Copy link
Owner

medz commented May 31, 2024

chmod +x priama-query-engine

@medz
Copy link
Owner

medz commented May 31, 2024

You don't need to add permissions to the whole project. I just experimented with it. I just need to add x permissions to the engine.

@farellsujanto
Copy link
Author

Its still not working for me. Do you need to have admin acces on your mac device's user account? Because my user is not an administrator

@medz
Copy link
Owner

medz commented Jun 1, 2024

@farellsujanto Is your project directory and running directory in your user directory? If not, then this is a matter of strict authority. You can either use the administrator account to authorize x permissions or run under your user directory.

@farellsujanto
Copy link
Author

I think my problem is, I don't know which prisma-query-engine is called on the app, because when I delete all prisma-query-engine from the project directory it still says Permission denied but there is no any of the engine remaining.

Is it possible to specify which prisma-query-engine location to be used on the app?

@medz
Copy link
Owner

medz commented Jun 3, 2024

@farellsujanto
image
It will search three directories:

$PWD
$PWD/prisma
$PWD/.dart_tool

Engine files should exist in these three locations, otherwise an error of not finding the engine will be thrown instead of a permission error.

@farellsujanto
Copy link
Author

I've found something strange, my project location is at /Users/username/Desktop/app_name, then I've searched the whole device for prisma-query-engine and I've found one on /Users/username/Library/Containers/com.example.appName/Data/prisma

When I tried to delete it it shows another error

Exception: No query engine binary found (prisma-query-engine) in [/Users/username/Library/Containers/com.example.appName/Data, /Users/username/Library/Containers/com.example.appName/Data/prisma, /Users/username/Library/Containers/com.example.appName/Data/.dart_tool]

Then I restore the deleted prisma-query-engine and add chmod +x to it, but it gives me another error

ProcessException: Operation not permitted

Just like what is reported on #326, I think its better if we have some freedom to use which prisma-query-engine that we wanted to use.

@medz
Copy link
Owner

medz commented Jun 3, 2024

@farellsujanto
Thanks for finding the key issue. I'm working on it, please pay attention to 👉 #379 and #328. I've done it iOS and Android platform.

The temporary solution is usually:

  1. Upgrade orm to 4.2 or higher

  2. Use PrismaClient.use factory to create the client

  3. Import BinaryEngine from package:orm/engines/binary.dart to re-specify the query engine path.

Notes: I'm working on the macOS integration of Flutter and orm normally, and I can directly rely on orm_flutter to solve this problem when I'm done.

@medz
Copy link
Owner

medz commented Jun 3, 2024

In addition, the root cause of this problem is that the engine is included in the app's data directory. Due to macOS's permission control, the commands in it cannot be run directly from the outside. You can put the binary engine into flutter assets and write it to the system temporary directory during the startup phase, and then run it.

@farellsujanto
Copy link
Author

Yeah I confirmed this is because of Directory.current on macos app is different than other platform due to the strict rules. I'm able to solve my issue with your suggestions above.

I've also found out that you don't need to use the temporary solution that you gave above by removing the app sandboxing on XCode. I don't know yet the side effect of removing the sandboxing but it works fine without any changes on the code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants