From 3b44f9d6c5e66553b756e0fa76f09a0148c98e97 Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Fri, 20 Mar 2015 14:06:48 +0000 Subject: [PATCH 1/5] Added ignore for OpenSSL This is to stop buildbot from wiping out the openssl dir when switching. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e400bc2f..4bdaf615 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ config.h /ext/cryptopp562 /ext/gmock-1.6.0 /ext/gtest-1.6.0 +/ext/openssl /src/gui/Makefile* /src/gui/object_script* /src/gui/tmp From f5cac2846e548dba287cc430cb6d8551d5221e54 Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Mon, 2 Mar 2015 17:31:43 +0000 Subject: [PATCH 2/5] Removed obsolete code and used Qt to codesign #4397 --- ext/toolchain/commands1.py | 71 ++++---------------------------------- 1 file changed, 7 insertions(+), 64 deletions(-) diff --git a/ext/toolchain/commands1.py b/ext/toolchain/commands1.py index 3dcfb1c1..1b476764 100644 --- a/ext/toolchain/commands1.py +++ b/ext/toolchain/commands1.py @@ -795,8 +795,6 @@ class InternalCommands: for target in targets: self.macPostMake(target) - self.fixQtFrameworksLayout() - def symlink(self, source, target): if not os.path.exists(target): os.symlink(source, target) @@ -805,39 +803,6 @@ class InternalCommands: if os.path.exists(source): shutil.move(source, target) - def fixQtFrameworksLayout(self): - # reorganize Qt frameworks layout on Mac 10.9.5 or later - # http://goo.gl/BFnQ8l - # QtCore example: - # QtCore.framework/ - # QtCore -> Versions/Current/QtCore - # Resources -> Versions/Current/Resources - # Versions/ - # Current -> 5 - # 5/ - # QtCore - # Resources/ - # Info.plist - dir = self.getGenerator().binDir - target = dir + "/Synergy.app/Contents/Frameworks" - (major, minor) = self.getMacVersion() - if major == 10: - if minor >= 9: - for root, dirs, files in os.walk(target): - for dir in dirs: - if dir.startswith("Qt"): - self.try_chdir(target + "/" + dir +"/Versions") - self.symlink("5", "Current") - self.move("../Resources", "5") - self.restore_chdir() - - self.try_chdir(target + "/" + dir) - dot = dir.find('.') - frameworkName = dir[:dot] - self.symlink("Versions/Current/" + frameworkName, frameworkName) - self.symlink("Versions/Current/Resources", "Resources") - self.restore_chdir() - def macPostMake(self, target): dir = self.getGenerator().binDir @@ -859,46 +824,24 @@ class InternalCommands: shutil.copy(targetDir + "/synmacph", launchServicesDir) if self.enableMakeGui: + + self.loadConfig() + if not self.macIdentity: + raise Exception("run config with --mac-identity") + # use qt to copy libs to bundle so no dependencies are needed. do not create a # dmg at this point, since we need to sign it first, and then create our own # after signing (so that qt does not affect the signed app bundle). - bin = "macdeployqt Synergy.app -verbose=2" + bin = "macdeployqt Synergy.app -verbose=2 -codesign='" + self.macIdentity + "'" self.try_chdir(dir) err = os.system(bin) self.restore_chdir() if err != 0: raise Exception(bin + " failed with error: " + str(err)) - - (qMajor, qMinor, qRev) = self.getQmakeVersion() - if qMajor <= 4: - frameworkRootDir = "/Library/Frameworks" - else: - # TODO: auto-detect, qt can now be installed anywhere. - frameworkRootDir = "/Developer/Qt5.2.1/5.2.1/clang_64/lib" - - target = dir + "/Synergy.app/Contents/Frameworks" - - # copy the missing Info.plist files for the frameworks. - for root, dirs, files in os.walk(target): - for dir in dirs: - if dir.startswith("Qt"): - shutil.copy( - frameworkRootDir + "/" + dir + "/Contents/Info.plist", - target + "/" + dir + "/Resources/") def signmac(self): - self.loadConfig() - if not self.macIdentity: - raise Exception("run config with --mac-identity") - - self.try_chdir("bin") - err = os.system( - 'codesign --deep -fs "' + self.macIdentity + '" Synergy.app') - self.restore_chdir() - - if err != 0: - raise Exception("codesign failed with error: " + str(err)) + print "signmac is now obsolete" def signwin(self, pfx, pwdFile, dist): generator = self.getGeneratorFromConfig().cmakeName From c05d7fad36f9b5025846a16681c5072e477d996d Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Mon, 2 Mar 2015 17:50:42 +0000 Subject: [PATCH 3/5] Removed remnants of synmacph tool #4398 --- ext/toolchain/commands1.py | 6 -- src/gui/gui.pro | 4 +- src/gui/res/mac/Info.plist | 4 - src/gui/src/AXDatabaseCleaner.h | 42 -------- src/gui/src/AXDatabaseCleaner.mm | 166 ------------------------------- src/gui/src/main.cpp | 4 - 6 files changed, 1 insertion(+), 225 deletions(-) delete mode 100644 src/gui/src/AXDatabaseCleaner.h delete mode 100644 src/gui/src/AXDatabaseCleaner.mm diff --git a/ext/toolchain/commands1.py b/ext/toolchain/commands1.py index 1b476764..b40af000 100644 --- a/ext/toolchain/commands1.py +++ b/ext/toolchain/commands1.py @@ -817,12 +817,6 @@ class InternalCommands: shutil.copy(targetDir + "/synergys", bundleBinDir) shutil.copy(targetDir + "/syntool", bundleBinDir) - if self.macSdk == "10.9": - launchServicesDir = dir + "/Synergy.app/Contents/Library/LaunchServices/" - if not os.path.exists(launchServicesDir): - os.makedirs(launchServicesDir) - shutil.copy(targetDir + "/synmacph", launchServicesDir) - if self.enableMakeGui: self.loadConfig() diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 0576f266..c3a37d3e 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -89,9 +89,7 @@ HEADERS += src/MainWindow.h \ src/CommandProcess.h RESOURCES += res/Synergy.qrc RC_FILE = res/win/Synergy.rc -macx { - HEADERS += src/AXDatabaseCleaner.h - OBJECTIVE_SOURCES += src/AXDatabaseCleaner.mm +macx { QMAKE_INFO_PLIST = res/mac/Info.plist TARGET = Synergy QSYNERGY_ICON.files = res/mac/Synergy.icns diff --git a/src/gui/res/mac/Info.plist b/src/gui/res/mac/Info.plist index 992df616..c2e4eac7 100644 --- a/src/gui/res/mac/Info.plist +++ b/src/gui/res/mac/Info.plist @@ -17,9 +17,5 @@ CFBundleIdentifier synergy SMPrivilegedExecutables - - synmacph - anchor apple generic and identifier "synmacph" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = SP58PFWX5L) - diff --git a/src/gui/src/AXDatabaseCleaner.h b/src/gui/src/AXDatabaseCleaner.h deleted file mode 100644 index dc41f31b..00000000 --- a/src/gui/src/AXDatabaseCleaner.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2014 Synergy Si Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file COPYING that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include - -// HACK: ideally this file should not be included in project, -// if it is below marvericks, but it seems that .pro can't -// specify mac version -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 - -class AXDatabaseCleaner { -public: - AXDatabaseCleaner(); - ~AXDatabaseCleaner(); - - bool loadPrivilegeHelper(); - bool xpcConnect(); - bool privilegeCommand(const char* command); - -private: - class Private; - Private* m_private; - bool m_waitForResponse; -}; - -#endif diff --git a/src/gui/src/AXDatabaseCleaner.mm b/src/gui/src/AXDatabaseCleaner.mm deleted file mode 100644 index 96435b1e..00000000 --- a/src/gui/src/AXDatabaseCleaner.mm +++ /dev/null @@ -1,166 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2014 Synergy Si Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file COPYING that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#import "AXDatabaseCleaner.h" - -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 - -#import -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 -#import -#endif -#import -#import -#import - -const NSString* const label = @"synmacph"; - -class AXDatabaseCleaner::Private { -public: - NSAutoreleasePool* autoReleasePool; - AuthorizationRef authRef; - xpc_connection_t xpcConnection; -}; - -AXDatabaseCleaner::AXDatabaseCleaner() -{ - m_private = new Private; - m_private->autoReleasePool = [[NSAutoreleasePool alloc] init]; - - m_waitForResponse = false; -} - -AXDatabaseCleaner::~AXDatabaseCleaner() -{ - [m_private->autoReleasePool release]; - delete m_private; -} - -bool AXDatabaseCleaner::loadPrivilegeHelper() -{ -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 // mavericks - - OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &m_private->authRef); - if (status != errAuthorizationSuccess) { - assert(NO); - m_private->authRef = NULL; - } - - AuthorizationItem authItem = {kSMRightBlessPrivilegedHelper, 0, NULL, 0}; - AuthorizationRights authRights = {1, &authItem}; - AuthorizationFlags flags = kAuthorizationFlagDefaults - | kAuthorizationFlagInteractionAllowed - | kAuthorizationFlagPreAuthorize - | kAuthorizationFlagExtendRights; - - BOOL result = NO; - NSError* error = nil; - - status = AuthorizationCopyRights(m_private->authRef, &authRights, kAuthorizationEmptyEnvironment, flags, NULL); - if (status != errAuthorizationSuccess) { - error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil]; - } - else { - CFErrorRef cfError; - result = (BOOL)SMJobBless(kSMDomainSystemLaunchd, (CFStringRef)label, m_private->authRef, &cfError); - - if (!result) { - error = CFBridgingRelease(cfError); - } - } - - if (!result) { - assert(error != nil); - NSLog(@"bless error: domain= %@ / code= %d", [error domain], (int) [error code]); - return false; - } - - return true; -} - -bool AXDatabaseCleaner::xpcConnect() -{ - const char *cStr = [label cStringUsingEncoding:NSASCIIStringEncoding]; - m_private->xpcConnection = xpc_connection_create_mach_service( - cStr, - NULL, - XPC_CONNECTION_MACH_SERVICE_PRIVILEGED); - - if (!m_private->xpcConnection) { - NSLog(@"failed to create xpc connection"); - return false; - } - - xpc_connection_set_event_handler(m_private->xpcConnection, ^(xpc_object_t event) { - xpc_type_t type = xpc_get_type(event); - - if (type == XPC_TYPE_ERROR) { - if (event == XPC_ERROR_CONNECTION_INTERRUPTED) { - NSLog(@"xpc connection interupted"); - - } - else if (event == XPC_ERROR_CONNECTION_INVALID) { - NSLog(@"xpc connection invalid, releasing"); - xpc_release(m_private->xpcConnection); - } - else { - NSLog(@"unexpected xpc connection error"); - } - } - else { - NSLog(@"unexpected xpc connection event"); - } - }); - - xpc_connection_resume(m_private->xpcConnection); - - return true; -} - -bool AXDatabaseCleaner::privilegeCommand(const char* command) -{ - xpc_object_t message = xpc_dictionary_create(NULL, NULL, 0); - xpc_dictionary_set_string(message, "request", command); - m_waitForResponse = true; - - xpc_connection_send_message_with_reply( - m_private->xpcConnection, - message, - dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), - ^(xpc_object_t event) { - const char* response = xpc_dictionary_get_string(event, "reply"); - NSLog(@"reply from helper tool: %s", response); - m_waitForResponse = false; - }); - - QTime time = QTime::currentTime(); - time.start(); - - while (m_waitForResponse) { - sleep(1); - if (time.elapsed() > 10000) { - QMessageBox::critical(NULL, "Synergy", - QObject::tr("No response from helper tool.Restart Synergy may solve this problem.")); - return false; - } - } -#endif - - return true; -} - -#endif diff --git a/src/gui/src/main.cpp b/src/gui/src/main.cpp index 2e3df613..4bdff3ec 100644 --- a/src/gui/src/main.cpp +++ b/src/gui/src/main.cpp @@ -32,10 +32,6 @@ #if defined(Q_OS_MAC) #include -#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 -#include "AXDatabaseCleaner.h" -#endif - #endif class QThreadImpl : public QThread From 3deb5492d60f2f181ea42aa0ff5b98410b29a7c4 Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Mon, 2 Mar 2015 18:06:23 +0000 Subject: [PATCH 4/5] Removed remnants of synmacph tool (part 2) #4398 --- ext/toolchain/commands1.py | 59 -------------------- src/cmd/CMakeLists.txt | 6 -- src/cmd/synmacph/CMakeLists.txt | 39 ------------- src/cmd/synmacph/Info.plist | 18 ------ src/cmd/synmacph/Launchd.plist | 12 ---- src/cmd/synmacph/synmacph.c | 99 --------------------------------- 6 files changed, 233 deletions(-) delete mode 100644 src/cmd/synmacph/CMakeLists.txt delete mode 100644 src/cmd/synmacph/Info.plist delete mode 100644 src/cmd/synmacph/Launchd.plist delete mode 100644 src/cmd/synmacph/synmacph.c diff --git a/ext/toolchain/commands1.py b/ext/toolchain/commands1.py index b40af000..f29a721e 100644 --- a/ext/toolchain/commands1.py +++ b/ext/toolchain/commands1.py @@ -484,12 +484,6 @@ class InternalCommands: if generator.cmakeName.find('Eclipse') != -1: self.fixCmakeEclipseBug() - - # only on osx 10.9 mavericks. - # manually change .xcodeproj to add code sign for - # synmacph project and specify its info.plist - if self.macSdk == "10.9" and generator.cmakeName.find('Xcode') != -1: - self.fixXcodeProject(target) if err != 0: raise Exception('CMake encountered error: ' + str(err)) @@ -591,59 +585,6 @@ class InternalCommands: file.write(content) file.truncate() file.close() - - def fixXcodeProject(self, target): - print "Fixing Xcode project..." - - insertContent = ( - "CODE_SIGN_IDENTITY = '%s';\n" - "INFOPLIST_FILE = %s/src/cmd/synmacph/Info.plist;\n") % ( - self.macIdentity, - os.getcwd() - ) - - dir = self.getBuildDir(target) - file = open(dir + '/synergy.xcodeproj/project.pbxproj', 'r+') - contents = file.readlines() - - buildConfigurationsFound = None - releaseConfigRefFound = None - releaseBuildSettingsFound = None - fixed = None - releaseConfigRef = ""; - - for line in contents: - if buildConfigurationsFound: - matchObj = re.search(r'\s*(.*)\s*\/\*\s*Release\s*\*\/,', line, re.I) - if matchObj: - releaseConfigRef = matchObj.group(1) - releaseConfigRefFound = True - break - elif buildConfigurationsFound == None: - if 'PBXNativeTarget "synmacph" */ = {' in line: - buildConfigurationsFound = True - - if not releaseConfigRefFound: - raise Exception("Release config ref not found.") - - for n, line in enumerate(contents): - if releaseBuildSettingsFound == None: - if releaseConfigRef + '/* Release */ = {' in line: - releaseBuildSettingsFound = True - elif fixed == None: - if 'buildSettings = {' in line: - contents[n] = line + insertContent - fixed = True - - if not fixed: - raise Exception("Xcode project was not fixed.") - - file.seek(0) - for line in contents: - file.write(line) - file.truncate() - file.close() - return def persist_cmake(self): # even though we're running `cmake --version`, we're only doing this for the 0 return diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt index ea7ff60c..0e7e8d1a 100644 --- a/src/cmd/CMakeLists.txt +++ b/src/cmd/CMakeLists.txt @@ -23,9 +23,3 @@ add_subdirectory(syntool) if (WIN32) add_subdirectory(synergyp) endif() - -if (APPLE) - if (OSX_TARGET_MINOR GREATER 8) - add_subdirectory(synmacph) - endif() -endif() diff --git a/src/cmd/synmacph/CMakeLists.txt b/src/cmd/synmacph/CMakeLists.txt deleted file mode 100644 index 6555a1a4..00000000 --- a/src/cmd/synmacph/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -# synergy -- mouse and keyboard sharing utility -# Copyright (C) 2014 Synergy Si Ltd. -# -# This package is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# found in the file COPYING that should have accompanied this file. -# -# This package is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -file(GLOB sources "*.c" "*.plist") - -include_directories( - ../ -) - -add_executable(synmacph ${sources}) - -get_target_property(current_property synmacph LINK_FLAGS) - -set(OTHER_LINK_FLAGS "-sectcreate __TEXT __info_plist ${root_dir}/src/cmd/synmacph/Info.plist -sectcreate __TEXT __launchd_plist ${root_dir}/src/cmd/synmacph/Launchd.plist") - -if (NOT ${current_property}) - set_target_properties(synmacph PROPERTIES LINK_FLAGS ${OTHER_LINK_FLAGS}) -endif() - -target_link_libraries(synmacph) - -if (CONF_CPACK) - install(TARGETS - synmacph - COMPONENT core - DESTINATION bin) -endif() \ No newline at end of file diff --git a/src/cmd/synmacph/Info.plist b/src/cmd/synmacph/Info.plist deleted file mode 100644 index fcbc5a88..00000000 --- a/src/cmd/synmacph/Info.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - CFBundleIdentifier - synmacph - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - synmacph - CFBundleVersion - 1.5 - SMAuthorizedClients - - anchor apple generic and identifier "synergy" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = SP58PFWX5L) - - - diff --git a/src/cmd/synmacph/Launchd.plist b/src/cmd/synmacph/Launchd.plist deleted file mode 100644 index 9ac34f46..00000000 --- a/src/cmd/synmacph/Launchd.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Label - synmacph - MachServices - - synmacph - - - diff --git a/src/cmd/synmacph/synmacph.c b/src/cmd/synmacph/synmacph.c deleted file mode 100644 index 652feded..00000000 --- a/src/cmd/synmacph/synmacph.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * synergy -- mouse and keyboard sharing utility - * Copyright (C) 2014 Synergy Si Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file COPYING that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#include -#include - -const char* const label = "synmacph"; - -static void xpcEventHandler(xpc_connection_t connection, xpc_object_t event); -static void xpcConnectionHandler(xpc_connection_t connection); - -static void xpcEventHandler(xpc_connection_t connection, xpc_object_t event) -{ - syslog(LOG_NOTICE, "received event in helper"); - - xpc_type_t type = xpc_get_type(event); - - if (type == XPC_TYPE_ERROR) { - if (event == XPC_ERROR_CONNECTION_INVALID) { - // the client process on the other end of the connection has either - // crashed or cancelled the connection. After receiving this error, - // the connection is in an invalid state, and you do not need to - // call xpc_connection_cancel(). Just tear down any associated state - // here. - } - else if (event == XPC_ERROR_TERMINATION_IMMINENT) { - // handle per-connection termination cleanup. - } - } - else { - xpc_connection_t remote = xpc_dictionary_get_remote_connection(event); - - const char* command = xpc_dictionary_get_string(event, "request"); - syslog(LOG_NOTICE, "received command in helper: %s", command); - system(command); - - xpc_object_t reply = xpc_dictionary_create_reply(event); - xpc_dictionary_set_string(reply, "reply", "command has been executed"); - xpc_connection_send_message(remote, reply); - xpc_release(reply); - } -} - -static void xpcConnectionHandler(xpc_connection_t connection) -{ - syslog(LOG_NOTICE, "configuring message event handler for helper"); - - xpc_connection_set_event_handler(connection, ^(xpc_object_t event) { - xpcEventHandler(connection, event); - }); - - xpc_connection_resume(connection); -} - -int main(int argc, const char * argv[]) -{ -#pragma unused(argc) -#pragma unused(argv) - - xpc_connection_t service = xpc_connection_create_mach_service( - label, - dispatch_get_main_queue(), - XPC_CONNECTION_MACH_SERVICE_LISTENER); - - if (!service) { - syslog(LOG_NOTICE, "failed to create service"); - exit(EXIT_FAILURE); - } - - syslog(LOG_NOTICE, "configuring connection event handler for helper"); - xpc_connection_set_event_handler(service, ^(xpc_object_t connection) { - xpcConnectionHandler(connection); - }); - - xpc_connection_resume(service); - - dispatch_main(); - - xpc_release(service); - - return EXIT_SUCCESS; -} From 0b4d480bcc8725e0894a0755e6a5d83cb1cb91cf Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Tue, 3 Mar 2015 18:05:59 +0000 Subject: [PATCH 5/5] Removed remnants of synmacph tool (part 3) #4398 --- src/gui/res/mac/Info.plist | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/res/mac/Info.plist b/src/gui/res/mac/Info.plist index c2e4eac7..5cd23eaf 100644 --- a/src/gui/res/mac/Info.plist +++ b/src/gui/res/mac/Info.plist @@ -16,6 +16,5 @@ Synergy CFBundleIdentifier synergy - SMPrivilegedExecutables