xiaozhuai / odourless

Free Palestine🇵🇸🇵🇸🇵🇸Odourless is a tool for preventing .DS_Store creation.
MIT License
101 stars 10 forks source link

Problems with Odourless Installation #3

Closed noib3 closed 3 years ago

noib3 commented 3 years ago

macOS version: macOS Catalina 10.15.7 output of csrutil status: System Integrity Protection status: disabled.

I tried to follow the installation instructions:

  1. I downloaded the zipped file from the release page and unzipped it;
  2. I moved Odourless.app to /Applications.

But if I try to open it, either via Spotlight or by clicking the icon through Finder, I get the error Installation Check .. You must install this application under /Appplications, even though it already is under /Applications!

2020-Dec-09@13:29:14

I then tried manually installing it with this bash script

local path_resources="/Applications/Odourless.app/Contents/Resources"
cat "$path_resources/odourless-daemon.plist" \
| sed "s#___replace_me_daemon_path__#$path_resources/bin/odourless-daemon#" \
| sudo tee /Library/LaunchDaemons/odourless-daemon.plist &>/dev/null

launchctl load "/Library/LaunchDaemons/odourless-daemon.plist"

which runs without errors. After rebooting, if I manually launch Odourless with

/Applications/Odourless.app/Contents/MacOS/odourless

I can see that the daemon is installed and running 2020-Dec-09@13:36:21

However Odourless doesn't seem to work, Finder still created .DS_Store files, as you can see in this gif

output

xiaozhuai commented 3 years ago

Hello @noib3 , will you provide /tmp/odourless-inject.log and /tmp/odourless-daemon.log?

noib3 commented 3 years ago

Here you go: odourless-daemon.log and odourless-inject.log. I usually quit Finder as soon as I log in, so that's why most of the lines in odourless-daemon.log are just I: finder not running.

xiaozhuai commented 3 years ago

@noib3 I've release a new version 0.0.6, would you please try this? Don't forget to reinstall daemon. And check logs. tail -f /usr/local/var/.odourless_cage/daemon.log, tail -f /usr/local/var/.odourless_cage/inject.log You should see something like this

I: module: 0x7ffe01c05940
I: bootstrapFunc: 0x100c4bdd0
I: finder pid: 45016
I: odourless-inject init
I: getattrlist(path: /Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-115314/.DS_Store, list: 0x70000f3eb5d8, buf: 0x70000f3eb210, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-115314/_DS_Store, list: 0x70000f3eb5d8, buf: 0x70000f3eb210, bufSize: 950, options: 25)
I: getattrlist(path: /Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-115314/.DS_Store, list: 0x70000f3ed9d8, buf: 0x70000f3ed1e0, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-115314/_DS_Store, list: 0x70000f3ed9d8, buf: 0x70000f3ed1e0, bufSize: 2022, options: 25)
I: getattrlist(path: /Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-112305/.DS_Store, list: 0x70000f4f15d8, buf: 0x70000f4f1210, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-112305/_DS_Store, list: 0x70000f4f15d8, buf: 0x70000f4f1210, bufSize: 950, options: 25)
I: getattrlist(path: /Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-112305/.DS_Store, list: 0x70000f4f39d8, buf: 0x70000f4f31e0, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/com.apple.TimeMachine.localsnapshots/Backups.backupdb/xiaozhuai-master/2020-12-10-112305/_DS_Store, list: 0x70000f4f39d8, buf: 0x70000f4f31e0, bufSize: 2022, options: 25)
I: getattrlist(path: /Volumes/.DS_Store, list: 0x70000f46e5d8, buf: 0x70000f46e210, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/_DS_Store, list: 0x70000f46e5d8, buf: 0x70000f46e210, bufSize: 950, options: 25)
I: getattrlist(path: /Volumes/.DS_Store, list: 0x70000f4709d8, buf: 0x70000f4701e0, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Volumes/_DS_Store, list: 0x70000f4709d8, buf: 0x70000f4701e0, bufSize: 2022, options: 25)
I: getattrlist(path: /Users/xiaozhuai/work/odourless/build/dist/.DS_Store, list: 0x70000f780e68, buf: 0x70000f780aa0, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/work/odourless/build/dist/_DS_Store, list: 0x70000f780e68, buf: 0x70000f780aa0, bufSize: 950, options: 25)
I: getattrlist(path: /Users/xiaozhuai/work/odourless/build/dist/.DS_Store, list: 0x70000f783268, buf: 0x70000f782a70, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/work/odourless/build/dist/_DS_Store, list: 0x70000f783268, buf: 0x70000f782a70, bufSize: 2022, options: 25)
I: openx_np(path: /Users/xiaozhuai/work/odourless/build/dist/.DS_Store, flags: 2561, fsec: 0x6000000020c0) ---> openx_np(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/work/odourless/build/dist/_DS_Store, flags: 2561, fsec: 0x6000000020c0)
I: open(path: /Users/xiaozhuai/work/odourless/build/dist/.DS_Store, flags: 2561, mode: 420) ---> open(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/work/odourless/build/dist/_DS_Store, flags: 2561, mode: 420)
I: getattrlist(path: /Users/xiaozhuai/work/odourless/build/dist/.DS_Store, list: 0x70000f784d98, buf: 0x70000f7849f0, bufSize: 926, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/work/odourless/build/dist/_DS_Store, list: 0x70000f784d98, buf: 0x70000f7849f0, bufSize: 926, options: 25)
I: getattrlist(path: /Users/xiaozhuai/Downloads/.DS_Store, list: 0x70000f368bb8, buf: 0x70000f3687f0, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/Downloads/_DS_Store, list: 0x70000f368bb8, buf: 0x70000f3687f0, bufSize: 950, options: 25)
I: getattrlist(path: /Users/xiaozhuai/Downloads/.DS_Store, list: 0x70000f36afb8, buf: 0x70000f36a7c0, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/Downloads/_DS_Store, list: 0x70000f36afb8, buf: 0x70000f36a7c0, bufSize: 2022, options: 25)
I: getattrlist(path: /Users/xiaozhuai/wuta_project/wuta_android/wuta_native/assets/.DS_Store, list: 0x70000f368bb8, buf: 0x70000f3687f0, bufSize: 950, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/wuta_project/wuta_android/wuta_native/assets/_DS_Store, list: 0x70000f368bb8, buf: 0x70000f3687f0, bufSize: 950, options: 25)
I: getattrlist(path: /Users/xiaozhuai/wuta_project/wuta_android/wuta_native/assets/.DS_Store, list: 0x70000f36afb8, buf: 0x70000f36a7c0, bufSize: 2022, options: 25) ---> getattrlist(path: /usr/local/var/.odourless_cage/Users/xiaozhuai/wuta_project/wuta_android/wuta_native/assets/_DS_Store, list: 0x70000f36afb8, buf: 0x70000f36a7c0, bufSize: 2022, options: 25)
xiaozhuai commented 3 years ago

@noib3 Hey bro, does it work now? : ) Waiting for your further feedback.

noib3 commented 3 years ago

@xiaozhuai Sorry I was a little busy yesterday. I'm still experiencing the same issues even with version 0.0.6. The GUI interface still says that Odourless should be placed in /Applications even if it already is, and .DS_Store files are still created when I start Finder.

However I noticed that when I quit Finder they are deleted. Is Odourless supposed to delete .DS_Store files after the Finder creates them or is it supposed to prevent Finder from creating them? If it's the first one then it works.

xiaozhuai commented 3 years ago

@noib3 Never mind : ) Odourless would not search and delete .DS_Store files that already exists. However, it move .DS_Store file to cage when Finder access it next time. And if Finder wants to create a new one .DS_Store, it will be in cage directory. It means Odourless not only prevent .DS_Store creation and also move exists .DS_Store to cage.

You can delete .DS_Store manually. sudo find / -name ".DS_Store" -delete Or just let Odourless handle it, all .DS_Store will be in cage directory, finally.

And the installation check, I don't know why it happen. I am on 10.15.7 too, and it works fine. Would you please compile Odourless by yourself and check file src/gui/odourless.cpp func OdourlessApp::OnInit? It's pretty easy to build Odourless, just follow the instruction. Thanks!

noib3 commented 3 years ago

And if Finder wants to create a new one .DS_Store, it will be in cage directory.

Then it doesn't work. After I open Finder a new .DS_Store file is created, but it gets moved to the cage directory if I quit Finder. If I understood how Odourless works correctly, the .DS_Store file should've been created in the cage directory in the first place.

I compiled Odourless from source, this is the content of src/gui/odourless.cpp:

//
// Created by xiaozhuai on 2019/12/12.
//

#include "Log.h"
#include "MainFrame.h"

#include <wx/wx.h>
#include <OdourlessUtils.h>
#include <ProcessHelper.h>

class OdourlessApp : public wxApp {

public:
    OdourlessApp()
            : wxApp(),
              m_mainFrame(nullptr) {
        Log::init();
    }

    ~OdourlessApp() override {
        Log::destroy();
    }

    bool OnInit() override {
        if(OdourlessUtils::checkSIPEnabled()) {
            wxMessageBox("You must disable SIP to use this application", "SIP Check", wxOK | wxICON_ERROR);
            Exit();
            return false;
        }

#ifdef ODOURLESS_MUST_INSTALL_TO_APPLICATIONS
        if(ProcessHelper::getCurrentExecutablePath() != ODOURLESS_INSTALL_PATH "/Contents/MacOS/odourless") {
            wxMessageBox("You must install this application under /Applications", "Installation Check", wxOK | wxICON_ERROR);
            Exit();
            return false;
        }
#endif

        m_mainFrame = new MainFrame();
        m_mainFrame->Show(true);
        return true;
    }

private:
    MainFrame *m_mainFrame;
};

wxIMPLEMENT_APP(OdourlessApp);

Edit: If I compile from source everything seems to work fine.

xiaozhuai commented 3 years ago

@noib3 If you compile it from source, then everything seems to work fine? So strange...

xiaozhuai commented 3 years ago

@noib3 I make a testing version, would you please run this to help me figure out installation issue? Thanks! It will show a message box print executable path. Odourless_0.0.6_for_testing.zip

image

xiaozhuai commented 3 years ago

@noib3 Hi bro! Merry Christmas! I've release Odourless 0.0.7, and it will be helpful if you can give it a try. Thanks~~

noib3 commented 3 years ago

@xiaozhuai I've tested version 0.0.7 and everything seems to be working fine. I no longer get an error when trying to launch via GUI.

xiaozhuai commented 3 years ago

@noib3 Glad to hear that : )