From 5a5bce4baa7b14ebfc085779b55689d511bc8665 Mon Sep 17 00:00:00 2001 From: Nathan Henrie Date: Fri, 24 Nov 2023 07:55:26 -0700 Subject: [PATCH] Run all tests (#2979) * Really run tests Previously CI was *running* tests but ignoring failures. This change makes the build fail on failures. * Objects can't be equal if they have differing names, now can they? * Compare objects with `is[Not]EqualTo:`, not `[=!]=` * Don't automatically index private directories when testing By default, `QSCorePlugIn-Info.plist` is configured to index directories that newer editions of MacOS consider "sensitive," such as: - `~/Desktop` - `~/Downloads` - `~/Documents` Accessing these directories *immediately* provokes a permissions popup that **blocks** until dismissed or accepted. Unfortunately, this is problematic for testing (and especially headless testing / CI) in that the tests block -- indefinitely -- until this popup is acted on, whether or not these directories are actually required for the test. Thankfully none of our existing tests necessarily require access to any of these directories. This commit provides an alternative file (`QSCorePlugIn-Info-Testing.plist`) to be used only during the Testing scheme that does *not* index these directories and thereby avoids this problematic default. One test was changed to as to not access `~/Downloads`, which seemed unnecessary for the function being tested. Additionally, this commit sets the `QSDisableExternalPlugIns` environment variable -- only for the Testing scheme -- which prevents automatic loading of plugins in `~/Library/Application Support/Quicksilver/PlugIns` (among other locations). For reproducibility, these user-installed plugins should probably *not* be automatically included during testing. For example, having the `AddressBook` plugin enabled will trigger a permissions popup (similar to those described above) at launch time, blocking the test indefinitely, even though it is not required for the Quicksilver test suite. * Remove unused build phase Looks like this has been commented out since b4840326497dcf30282f9df31dceb57941add7a6 * Resolve build / test time race condition This seems to resolve a long-time thorn-in-the-side, where XCode fails to build Quicksilver from scratch the first time, then succeeds upon a second (or maybe third) try. See also: - https://github.com/quicksilver/Quicksilver/issues/332 - https://github.com/quicksilver/Quicksilver/issues/2583#issuecomment-1210089367 The related failures can usually be traced back to a missing `/tmp/QS/Configuration/Quicksilver.pch`. It seems that the existing `Copy Files` build step in `Preflight`, which copies the `Configuration` directory, doesn't specify `Quicksilver.pch` explicitly (instead copying the entire directory). Unfortunately XCode doesn't seem smart enough to realize that the directory contents may be required for downstream dependencies and therefore doesn't take it into consideration for automatic dependency ordering. Adding a second noop build step that *specifies this output file* (`Quicksilver.pch`) clues XCode in and seems to resolve the issues with the automatic dependency detection. Several ways to skin this cat, I chose this route because shell scripts can contain comments, so I can warn future devs not to remove the "empty" step. * What applications are available? * Remove debug print * Test on QS itself For some reason CI doesn't seem to like using `TextEdit.app`. * Revert "Test on QS itself" This reverts commit 154ca03fa79a135ff655fbefbdcc66829455eafe. Apparently having the application available was not the issue. * Cleanup * Refactor, test configuration Testing * Remove extra `\n` * Use implicit dependency order everywhere * Use the `Testing` configuration for all tests * Debug test path * Force path * Update GA runner * keyEventWithType:10 -> keyEventWithType:NSEventTypeKeyDown * Give better name * Rename test plan * Disable loading external plugins when testing * Remove `Quicksilver` dependendy from `Core Support` This leads to a "cycle in dependencies" issue due to the `BUNDLE_LOADER` setting. `Core Support` doesn't depend on QS. This also adds Core Support as a dependency of `Quicksilver Tests`, which *is* needed. * Unset `BUNDLE_LOADER`, which otherwise gives a linker error if `QS` is not a target dependency. * Test for nil interface controller * Avoid cyclic dependencies between QS and plugins Add dependencies to Quicksilver Tests as needed * Don't build external plugins during testing * Randomize execution order * Don't show accessibility prompt during testing * Skip tests if running with `QS_BUILD_ONLY` Still build a `Testing` copy, which allows one to start monitoring this target in Instruments.app / profiling / debuggers *before any tests have run*. * Run signing steps in CI Little reason not to test signing the artifacts in CI which should help alert us to issues in between releases. * Try MacOS 13 * Specify and show xcode version * Select command line tools * Switch command line tools * Revert back to MacOS 12? * Revert setting xcode version * Default interface is primer, not bezel * Don't show setup assistant if testing * Fallback / default is bezel The comment reports it will fall back to bezel but then tries to use Primer -- this fixes that. * Remove activate:nil to fix test Unclear why this fixes the test on my machine. But it does. * Test on bezel, not primer * Add a separate envvar for signing vs build_only `QS_BUILD_ONLY`: Just build, don't test or sign `QS_DONT_SIGN`: Build and test but don't sign * Add build status badge * Don't scan HOME when `Testing` Scanning HOME triggers blocking permissions popups that can block further execution until manual intervention. --- .github/workflows/ci.yml | 4 +- Quicksilver/Code-App/QSController.m | 9 + .../Code-QuickStepCore/QSInterfaceMediator.m | 4 +- Quicksilver/Code-QuickStepCore/QSObject.m | 4 +- .../QSCorePlugIn-Info-Testing.plist | 2286 +++++++++++++++++ .../Quicksilver Tests/Quicksilver_Tests.m | 18 +- ...tion.xctestplan => Quicksilver.xctestplan} | 9 +- .../Quicksilver.xcodeproj/project.pbxproj | 134 +- .../xcschemes/Bezel Interface.xcscheme | 13 +- .../xcschemes/Build Documentation.xcscheme | 2 +- .../xcschemes/Core Support.xcscheme | 13 +- .../xcschemes/Finder Plugin.xcscheme | 13 +- .../xcschemes/HotKey Triggers.xcscheme | 13 +- .../xcshareddata/xcschemes/Preflight.xcscheme | 2 +- .../xcschemes/Primer Interface.xcscheme | 13 +- .../xcshareddata/xcschemes/QSDroplet.xcscheme | 4 +- .../xcschemes/QSScriptingDictionary.xcscheme | 2 +- .../xcschemes/QuickStep Core.xcscheme | 13 +- .../xcschemes/QuickStep Effects.xcscheme | 4 +- .../xcschemes/QuickStep Foundation.xcscheme | 13 +- .../xcschemes/QuickStep Interface.xcscheme | 4 +- .../Quicksilver Distribution.xcscheme | 2 +- .../xcschemes/Quicksilver.xcscheme | 11 +- Quicksilver/Resources/QSDefaults.plist | 2 +- Quicksilver/Tests/Tests-QSCore/TestQSObject.m | 4 +- Quicksilver/Tools/qsrelease | 15 +- Quicksilver/Tools/qstest | 31 +- README.md | 10 +- 28 files changed, 2508 insertions(+), 144 deletions(-) create mode 100644 Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info-Testing.plist rename Quicksilver/Quicksilver.xcodeproj/{Quicksilver Distribution.xctestplan => Quicksilver.xctestplan} (90%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e68167fb..9f7ee1849 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,9 +13,9 @@ on: jobs: build: - runs-on: macos-11 + runs-on: macos-12 env: - QS_BUILD_ONLY: 1 + QS_DONT_SIGN: 1 steps: - uses: actions/checkout@v3 with: diff --git a/Quicksilver/Code-App/QSController.m b/Quicksilver/Code-App/QSController.m index fa711ec58..fc175b507 100644 --- a/Quicksilver/Code-App/QSController.m +++ b/Quicksilver/Code-App/QSController.m @@ -708,8 +708,13 @@ - (void)checkForFirstRun { default: // QSApplicationNormalLaunch: break; } + + // Don't block the interface with the setup assistant if running a test build +#ifndef TESTING if (![defaults boolForKey:kSetupAssistantCompleted] || lastVersion <= [@"3694" hexIntValue] || ![defaults boolForKey:@"QSAgreementAccepted"]) runningSetupAssistant = YES; +#endif + #ifndef DEBUG [NSApp updateLaunchStatusInfo]; #endif @@ -804,6 +809,10 @@ - (void)relaunchQuicksilver # pragma mark - Accessibility Permissions -(BOOL)checkForAccessibilityPermission { + #ifdef TESTING + return YES; + #endif + // Prompt for accessibility permissions on macOS Mojave and later. if (!accessibilityChecker) { accessibilityChecker = [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) { diff --git a/Quicksilver/Code-QuickStepCore/QSInterfaceMediator.m b/Quicksilver/Code-QuickStepCore/QSInterfaceMediator.m index 21c02c1c3..1b0c988b6 100644 --- a/Quicksilver/Code-QuickStepCore/QSInterfaceMediator.m +++ b/Quicksilver/Code-QuickStepCore/QSInterfaceMediator.m @@ -11,7 +11,7 @@ @implementation QSRegistry (QSCommandInterface) - (NSString *)preferredCommandInterfaceID { NSString *key = [[NSUserDefaults standardUserDefaults] stringForKey:kQSCommandInterfaceControllers]; - if (![[self tableNamed:kQSCommandInterfaceControllers] objectForKey:key]) key = @"QSPrimerInterfaceController"; + if (![[self tableNamed:kQSCommandInterfaceControllers] objectForKey:key]) key = @"QSBezelInterfaceController"; return key; } @@ -23,7 +23,7 @@ - (QSInterfaceController*)preferredCommandInterface { [prefInstances setObject:mediator forKey:kQSCommandInterfaceControllers]; } else { QSShowNotifierWithAttributes([NSDictionary dictionaryWithObjectsAndKeys:@"QSNotification", QSNotifierType, [QSResourceManager imageNamed:kQSBundleID], QSNotifierIcon, NSLocalizedString(@"Interface Changed", nil), QSNotifierTitle, NSLocalizedString(@"Interface could not be loaded. Switching to Bezel",nil), QSNotifierText, nil]); - mediator = [self instanceForKey:@"QSPrimerInterfaceController" inTable:kQSCommandInterfaceControllers]; + mediator = [self instanceForKey:@"QSBezelnterfaceController" inTable:kQSCommandInterfaceControllers]; [prefInstances setObject:mediator forKey:kQSCommandInterfaceControllers]; } } diff --git a/Quicksilver/Code-QuickStepCore/QSObject.m b/Quicksilver/Code-QuickStepCore/QSObject.m index af35bc61c..a28d285da 100644 --- a/Quicksilver/Code-QuickStepCore/QSObject.m +++ b/Quicksilver/Code-QuickStepCore/QSObject.m @@ -131,8 +131,8 @@ - (BOOL)isEqual:(QSObject *)anObject { } } // test the meta dictionary for QSObjectName, QSObjectLabel - if they're not equal then return no - if ([meta objectForKey:kQSObjectAlternateName] != [anObject->meta objectForKey:kQSObjectAlternateName] || - [meta objectForKey:kQSObjectPrimaryName] != [anObject->meta objectForKey:kQSObjectPrimaryName] ) { + if ([[meta objectForKey:kQSObjectAlternateName] isNotEqualTo:[anObject->meta objectForKey:kQSObjectAlternateName]] || + [[meta objectForKey:kQSObjectPrimaryName] isNotEqualTo:[anObject->meta objectForKey:kQSObjectPrimaryName]] ) { return NO; } return YES; diff --git a/Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info-Testing.plist b/Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info-Testing.plist new file mode 100644 index 000000000..af9d70f44 --- /dev/null +++ b/Quicksilver/PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info-Testing.plist @@ -0,0 +1,2286 @@ + + + + + CFBundleName + Core Support + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + QSPresetAdditions + + + name + Applications + source + QSGroupObjectSource + children + + + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.application + + folderDepth + 3 + scanContents + 1 + watchTarget + + kind + Folder + path + /Applications/ + type + + watchPaths + + /Applications/Utilities + + + ID + QSPresetMainApplications + name + Applications + + + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.application + + folderDepth + 3 + scanContents + 1 + kind + Folder + path + /System/Applications/ + type + + + ID + QSPresetSystemApplications + name + System Applications + + + source + QSFileSystemObjectSource + requiresSettingsPath + + watchTarget + + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.application + + folderDepth + 3 + scanContents + 1 + kind + Folder + path + ~/Applications/ + skipItem + + + ID + QSPresetUserApplications + name + Applications (User) + + + source + QSProcessObjectSource + ID + QSPresetRunningProcesses + + + source + QSAllApplicationsObjectSource + enabled + + ID + QSPresetAllApplications + + + catalogPath + / + ID + QSPresetApplications + icon + GenericApplicationIcon + + + source + QSGroupObjectSource + children + + + source + QSGroupObjectSource + children + + + source + QSGroupObjectSource + supressChildren + + children + + + source + QSFileSystemObjectSource + requiresSettingsPath + + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.systempreference.prefpane + + folderDepth + 1 + scanContents + 1 + kind + Folder + path + /Library/PreferencePanes + skipItem + 1 + + ID + QSPresetLibraryPreferencePanes + icon + PrefFileIcon + + + name + System Preferences (User) + requiresSettingsPath + + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.systempreference.prefpane + + folderDepth + 1 + scanContents + 1 + kind + Folder + path + ~/Library/PreferencePanes + skipItem + 1 + type + + + ID + QSPresetUserPreferencePanes + icon + PrefFileIcon + + + name + System Preferences (System) + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.systempreference.prefpane + + folderDepth + 1 + scanContents + 1 + kind + Folder + path + /System/Library/PreferencePanes + skipItem + 1 + + ID + QSPresetSystemPreferencePanes + icon + PrefFileIcon + + + ID + QSPresetPreferencePanes + icon + SystemPreferencesIcon + + + ID + QSPresetConfiguration + icon + prefsGeneral + + + source + QSGroupObjectSource + children + + + source + QSVolumesObjectSource + ID + QSPresetVolumes + icon + InternalVolmeIcon + + + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.application + + folderDepth + 1 + scanContents + 1 + path + ~/Library/Printers + skipItem + 1 + + ID + QSPresetPrinters + icon + PrintCenterIcon + + + source + QSVolumesObjectSource + ID + QSPresetRemovableVolumes + icon + RemovableVolumeIcon + + + ID + QSPresetDevices + + + catalogPath + / + ID + QSPresetSystemGroup + icon + FinderIcon + + + source + QSGroupObjectSource + children + + + source + QSICloudDocumentSource + requiresPath + ~/Library/Mobile Documents + ID + QSPresetICloudDocuments + icon + iDiskGenericIcon + + + source + QSFileSystemObjectSource + settings + + path + ~/.Trash + + ID + QSPresetTrash + icon + TrashIcon + + + source + QSGroupObjectSource + children + + + source + QSDefaultsObjectSource + settings + + bundle + com.apple.dock + type + 5 + keypath + + persistent-apps + * + tile-data + file-data + + + ID + QSPresetDockApplications + + + source + QSDefaultsObjectSource + settings + + bundle + com.apple.dock + type + 5 + keypath + + persistent-others + * + tile-data + file-data + + + ID + QSPresetDockOthers + + + ID + QSPresetDockGroup + icon + DockIcon + + + source + QSGroupObjectSource + children + + + source + QSSharedFileListSource + settings + + path + ~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.RecentApplications.sfl + + ID + QSPresetRecentApplications106 + icon + GenericApplicationIcon + + + source + QSSharedFileListSource + settings + + path + ~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.RecentDocuments.sfl + + ID + QSPresetRecentDocuments106 + icon + GenericDocumentIcon + + + source + QSSharedFileListSource + settings + + path + ~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.RecentServers.sfl + + ID + QSPresetRecentServers + icon + GenericFileServerIcon + + + source + QSDefaultsObjectSource + settings + + bundle + .GlobalPreferences + type + 1 + keypath + + NSNavRecentPlaces + * + + + ID + QSPresetGlobalPrefsRecentFolders + icon + GenericFolderIcon + + + ID + QSPresetRecentItems + icon + SafariHistoryIcon + + + source + QSSharedFileListSource + enabled + + settings + + path + ~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.FavoriteServers.sfl + + ID + QSPresetFavoriteServers + icon + GenericFileServerIcon + + + catalogPath + / + ID + QSPresetUserGroup + icon + HomeFolderIcon + + + source + QSGroupObjectSource + children + + + source + QSCatalogEntrySource + enabled + + ID + QSPresetQSCatalogEntries + + + source + QSProxyObjectSource + enabled + + ID + QSPresetProxies + feature + 1 + + + source + QSObjCMessageSource + enabled + + ID + QSPresetInternalMessages + feature + 1 + + + source + QSHandledObjectHandler + enabled + + ID + QSPresetInternalObjects + feature + 1 + + + source + QSHistoryObjectSource + enabled + + ID + QSPresetCommandHistory + feature + 3 + + + name + Recent Objects + source + QSHistoryObjectSource + enabled + + ID + QSPresetObjectHistory + feature + 1 + + + name + Triggers + source + QSTriggersObjectSource + enabled + + ID + QSPresetTriggerObjects + feature + 1 + + + catalogPath + / + ID + QSPresetQSGroup + icon + Quicksilver + + + source + QSGroupObjectSource + children + + + source + QSFileSystemObjectSource + requiresSettingsPath + 1 + enabled + + settings + + parser + QSDirectoryParser + folderTypes + + public.script + public.plain-text + com.apple.applescript.script + dyn.age8u + + folderDepth + 3 + scanContents + 1 + path + /Library/Scripts + skipItem + 1 + + ID + QSPresetLibraryScripts + icon + ScriptIcon + + + name + Scripts (User) + requiresSettingsPath + 1 + source + QSFileSystemObjectSource + settings + + parser + QSDirectoryParser + folderTypes + + public.script + public.plain-text + com.apple.applescript.script + dyn.age8u + + folderDepth + 4 + scanContents + 1 + path + ~/Library/Scripts + skipItem + 1 + + ID + QSPresetUserScripts + icon + ScriptIcon + + + source + QSFileSystemObjectSource + requiresSettingsPath + 1 + settings + + parser + QSDirectoryParser + folderTypes + + com.apple.applescript.script + + folderDepth + 3 + path + ~/Library/Application Support/DVD Player Scripts + skipItem + 1 + + ID + QSPresetDVDPlayerScripts + icon + com.apple.DVDPlayer + + + catalogPath + / + ID + QSPresetScriptsGroup + icon + CompiledScriptIcon + + + CFBundleVersion + 99 + QSTriggerAdditions + + + set + Quicksilver + defaults + + enabled + + keyCode + 53 + modifiers + 1048840 + type + QSHotKeyTrigger + + command + QSGetGlobalSelectionCommand + ID + QSGetGlobalSelectionTrigger + + + set + Quicksilver + type + QSHotKeyTrigger + command + QSActivateTextModeCommand + ID + QSActivateTextModeTrigger + + + set + Quicksilver + applicationScopeType + 1 + enabled + + keyCode + 12 + modifiers + 1835305 + onPress + + type + QSHotKeyTrigger + applicationScope + + com.blacktree.Quicksilver + + ID + QSRelaunchSelfTrigger + command + QSRelaunchSelfCommand + + + CFBundleExecutable + Core Support + CFBundleDisplayName + Core Support + QSActions + + FileToTrashAction + + validatesObjects + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + actionSelector + trashFile: + + QSCommandAddTriggerAction + + actionClass + QSCommandObjectHandler + directTypes + + qs.command + + actionSelector + addTrigger:withType: + icon + Quicksilver + + QSLargeTypeAction + + actionClass + QSTextActions + directTypes + + NSStringPboardType + NSFilenamesPboardType + + precedence + 1 + actionSelector + showLargeType: + directFileTypes + + public.plain-text + + runInMainThread + + + AppActivateAction + + actionClass + QSProcessActionProvider + directTypes + + qs.process + + enabled + + actionSelector + activateApplication: + icon + QSDirectObjectIconProxy + + FileGetInfoAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + actionSelector + getInfo: + + QSCreateFileAction + + displaysResult + 1 + validatesObjects + + actionClass + QSObjectActions + directTypes + + NSStringPboardType + + indirectOptional + + indirectTypes + + public.folder + + actionSelector + saveObject:toDirectory: + runInMainThread + + icon + GenericDocumentIcon + + QSObjectShowChildrenAction + + validatesObjects + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + showChildren: + icon + Find + + QSTextShowDialogAction + + actionClass + QSTextActions + directTypes + + NSStringPboardType + + enabled + + actionSelector + showDialog: + + URLOpenWithAction + + validatesObjects + + actionClass + URLActions + directTypes + + Apple URL pasteboard type + + enabled + + indirectTypes + + com.apple.application-file + com.apple.application-bundle + + actionSelector + doURLOpenAction:with: + + PasteboardPasteActionAsPlainText + + validatesObjects + + actionClass + ClipboardActions + directTypes + + * + + enabled + + precedence + -0.5 + actionSelector + pasteObjectAsPlainText: + icon + Clipboard + runInMainThread + + + QSObjectExplodeCombinedAction + + validatesObjects + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + explodeCombinedObject: + + QSCommandExecuteAfterDelayAction + + actionClass + QSCommandObjectHandler + directTypes + + qs.command + + precedence + 2 + actionSelector + executeCommand:afterDelay: + runInMainThread + + icon + Recent + + FileMoveToAction + + alternateAction + FileCopyToAction + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + indirectTypes + + public.folder + public.directory + + actionSelector + moveFiles:toFolder: + + QSCatalogAddEntryAction + + actionClass + QSCatalogEntrySource + directTypes + + NSFilenamesPboardType + + enabled + NO + precedence + -0.05 + actionSelector + addCatalogEntry: + icon + Catalog + + PasteboardCopyAction + + actionClass + ClipboardActions + directTypes + + * + + precedence + -0.5 + actionSelector + copyObject: + icon + Clipboard + + QSObjCSendMessageAction + + displaysResult + 1 + validatesObjects + + actionClass + QSObjCMessageSource + directTypes + + qs.action + + precedence + 5 + actionSelector + sendMessage: + + FileMakeLinkInAction + + alternateAction + FileMakeHardLinkInAction + displaysResult + 0 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + precedence + -0.5 + indirectTypes + + public.folder + + actionSelector + makeLinkTo:inFolder: + feature + 1 + + AppShowHideAction + + alternateAction + AppHideOthersAction + actionClass + QSProcessActionProvider + directTypes + + qs.process + NSFilenamesPboardType + + enabled + + actionSelector + toggleApplication: + directFileTypes + + 'APPL' + + icon + QSDirectObjectIconProxy + + QSObjectShowChildMenu + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + showChildMenu: + runInMainThread + + icon + Menu + feature + 1 + + FileMakeAliasInAction + + displaysResult + 0 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + -0.5 + indirectTypes + + public.folder + + actionSelector + makeAliasTo:inFolder: + + FileGetURLAction + + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + precedence + -0.5 + actionSelector + getFileURLs: + feature + 1 + + FileRenameAction + + displaysResult + 1 + validatesObjects + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + actionSelector + renameFile:withName: + feature + 1 + + QSCreateFileTemplate + + displaysResult + 1 + actionClass + QSFileTemplateManager + directTypes + + NSFilenamesPboardType + + indirectOptional + + indirectTypes + + public.folder + + actionSelector + instantiateTemplate:inDirectory: + directFileTypes + + 'fold' + 'disk' + + runInMainThread + + icon + GenericDocumentIcon + reverseArguments + + + URLOpenAction + + alternateAction + URLOpenActionInBackground + validatesObjects + + actionClass + URLActions + directTypes + + Apple URL pasteboard type + + precedence + 2 + actionSelector + doURLOpenAction: + + URLJSAction + + validatesObjects + + directSubTypes + + Apple URL pasteboard type + + javascript + + + actionClass + URLActions + directTypes + + Apple URL pasteboard type + + actionSelector + doURLJSAction: + + QSObjectSearchChildrenAction + + displaysResult + 1 + validatesObjects + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + searchChildren: + icon + Find + runInMainThread + + + AppOpenFileAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + actionSelector + openFile:with: + directFileTypes + + 'APPL' + app + + icon + QSDirectObjectIconProxy + reverseArguments + + + QSCommandExecuteAtTimeAction + + alternateAction + QSCommandExecuteAfterDelayAction + actionClass + QSCommandObjectHandler + directTypes + + qs.command + + precedence + 2 + actionSelector + executeCommand:atTime: + runInMainThread + + icon + Recent + + FileRevealAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + 0.1000000014901161 + actionSelector + revealFile: + + FileOpenAction + + alternateAction + FileRevealAction + dynamic + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + 2.5 + validatesObjects + + actionSelector + openFile: + + FileGetHFSPathAction + + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + -0.5 + actionSelector + getFileLocations: + feature + 1 + + QSCatalogEntryShowAction + + actionClass + QSCatalogEntrySource + directTypes + + qs.catalogentry + + precedence + 3 + actionSelector + show: + icon + Catalog + + AppHideOthersAction + + actionClass + QSProcessActionProvider + directTypes + + qs.process + + enabled + + actionSelector + hideOtherApplications: + icon + QSDirectObjectIconProxy + + QSLoginItemRemoveAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + actionSelector + doNotOpenItemAtLogin: + icon + HomeFolderIcon + feature + 1 + + PasteboardPasteAction + + alternateAction + PasteboardPasteActionAsPlainText + validatesObjects + + actionClass + ClipboardActions + directTypes + + * + + enabled + + precedence + -0.5 + actionSelector + pasteObject: + icon + Clipboard + runInMainThread + + + QSObjectShowMenu + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + showMenu: + runInMainThread + + icon + Menu + feature + 1 + + FileGetPathAction + + alternateAction + FileGetPosixPathAction + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + precedence + -0.5 + actionSelector + getFilePaths: + feature + 1 + + QSObjectShowSourceAction + + displaysResult + 1 + validatesObjects + + actionClass + QSObjectActions + precedence + 0 + resolvesProxy + + actionSelector + findObjectInCatalog: + + QSObjectAssignMnemonic + + actionClass + QSObjectActions + directTypes + + * + + precedence + -0.2 + resolvesProxy + + indirectTypes + + NSStringPboardType + + actionSelector + setObjectMnemonic:string: + feature + 1 + + QSCommandSaveAction + + actionClass + QSCommandObjectHandler + directTypes + + qs.command + + precedence + 2 + indirectTypes + + public.folder + + actionSelector + saveCommand:toPath: + runInMainThread + + icon + Quicksilver + + QSNewFolderAction + + displaysResult + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + indirectTypes + + NSStringPboardType + + actionSelector + makeFolderIn:named: + directFileTypes + + 'fold' + 'disk' + + icon + GenericFolderIcon + + URLEmailAction + + validatesObjects + + actionClass + URLActions + directTypes + + Apple URL pasteboard type + + actionSelector + doURLOpenAction: + + QSTextSpeakAction + + actionClass + QSTextActions + directTypes + + NSStringPboardType + + enabled + + actionSelector + speakText: + + FileGetPosixPathAction + + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + precedence + -0.5 + actionSelector + getAbsoluteFilePaths: + feature + 1 + + QSObjectLogConsoleAction + + validatesObjects + + actionClass + QSObjectActions + directTypes + + * + + enabled + + actionSelector + logObjectToConsole: + + FileCopyToAction + + alternateAction + FileMoveToAction + displaysResult + 1 + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + indirectTypes + + public.folder + public.directory + + actionSelector + copyFiles:toFolder: + + DiskEjectAction + + validatesObjects + + actionClass + FSDiskActions + directTypes + + NSFilenamesPboardType + + + FileAlwaysOpenTypeWithAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + 0.1 + indirectTypes + + com.apple.application-file + com.apple.application-bundle + + actionSelector + alwaysOpenFile:with: + icon + GenericApplicationIcon + + QSObjectShowActionMenu + + actionClass + QSObjectActions + directTypes + + * + + actionSelector + showActionMenu: + runInMainThread + + icon + Menu + feature + 1 + + QSLoginItemAddAction + + alternateAction + QSLoginItemRemoveAction + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + actionSelector + openItemAtLogin: + icon + HomeFolderIcon + + AppQuitAction + + alternateAction + AppQuitOthersAction + actionClass + QSProcessActionProvider + directTypes + + qs.process + + actionSelector + quitApplication: + icon + QSDirectObjectIconProxy + + FileMakeHardLinkInAction + + displaysResult + 0 + hidden + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + precedence + -0.5 + indirectTypes + + public.folder + + actionSelector + makeHardLinkTo:inFolder: + feature + 1 + + QSCatalogEntryRescanAction + + actionClass + QSCatalogEntrySource + directTypes + + qs.catalogentry + + precedence + 2 + actionSelector + rescan: + icon + Catalog + + FileDeleteAction + + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + enabled + + actionSelector + deleteFile: + + QSTextTypeAction + + actionClass + QSTextActions + directTypes + + NSStringPboardType + + enabled + + actionSelector + typeObject: + + URLOpenActionInBackground + + validatesObjects + + actionClass + URLActions + directTypes + + Apple URL pasteboard type + + precedence + 1 + actionSelector + doURLOpenActionInBackground: + + AppleScriptProcessTextAction + + displaysResult + 1 + validatesObjects + + actionClass + QSAppleScriptActions + directTypes + + NSFilenamesPboardType + + precedence + 4 + actionSelector + doAppleScriptRunWithArgumentsAction:withArguments: + directFileTypes + + 'osas' + scpt + applescript + + icon + CompiledScriptIcon + + AppleScriptOpenFilesAction + + displaysResult + 1 + validatesObjects + + actionClass + QSAppleScriptActions + directTypes + + NSFilenamesPboardType + + precedence + 4 + actionSelector + doAppleScriptRunWithArgumentsAction:withArguments: + directFileTypes + + 'osas' + scpt + applescript + + icon + CompiledScriptIcon + + AppleScriptRunAction + + alternateAction + FileOpenAction + displaysResult + 1 + actionClass + QSAppleScriptActions + directTypes + + NSFilenamesPboardType + + precedence + 4 + validatesObjects + + actionSelector + doAppleScriptRunAction: + directFileTypes + + 'osas' + scpt + applescript + scptd + + icon + CompiledScriptIcon + + AppleScriptRunTextAction + + displaysResult + 1 + actionClass + QSAppleScriptActions + directTypes + + NSStringPboardType + + actionSelector + doAppleScriptRunTextAction: + icon + CompiledScriptIcon + + AppHideAction + + alternateAction + AppHideOthersAction + actionClass + QSProcessActionProvider + directTypes + + qs.process + + enabled + + actionSelector + hideApplication: + icon + QSDirectObjectIconProxy + + AppQuitOthersAction + + actionClass + QSProcessActionProvider + directTypes + + qs.process + + enabled + + actionSelector + quitOtherApplications: + icon + QSDirectObjectIconProxy + + QSCommandExecuteAction + + actionClass + QSCommandObjectHandler + directTypes + + qs.command + + precedence + 3 + actionSelector + executeCommand: + icon + Quicksilver + + AppRelaunchAction + + actionClass + QSProcessActionProvider + directTypes + + qs.process + + actionSelector + relaunchApplication: + icon + Rocket + + QSObjectSelectAction + + actionClass + QSObjectActions + directTypes + + * + + enabled + + actionSelector + selectObjectInCommandWindow: + runInMainThread + + icon + Quicksilver + resolvesProxy + + + FileOpenWithAction + + alternateAction + FileAlwaysOpenTypeWithAction + actionClass + FSActions + directTypes + + NSFilenamesPboardType + + precedence + 0.1 + indirectTypes + + com.apple.application-file + com.apple.application-bundle + + actionSelector + openFile:with: + icon + GenericApplicationIcon + + + CFBundlePackageType + BNDL + QSPlugIn + + author + Blacktree, Inc. + extendedDescription + Provides support and actions for basic types such as files, strings, and URLs. + helpPage + plugins:Core Support + hidden + + description + Provides basic file and URL handling + icon + Quicksilver + + QSRegistration + + QSObjectSources + + QSUserDefinedProxySource + QSUserDefinedProxySource + QSInternalObjectSource + QSInternalObjectSource + QSObjCMessageSource + QSObjCMessageSource + QSWebSource + QSWebSource + QSCatalogEntrySource + QSCatalogEntrySource + QSAllApplicationsObjectSource + QSAllApplicationsObjectSource + QSProxyObjectSource + QSProxyObjectSource + QSProcessObjectSource + QSProcessObjectSource + QSHistoryObjectSource + QSHistoryObjectSource + QSHandledObjectHandler + QSInternalObjectSource + QSFileSystemObjectSource + QSFileSystemObjectSource + QSDefaultsObjectSource + QSDefaultsObjectSource + QSVolumesObjectSource + QSVolumesObjectSource + QSICloudDocumentSource + QSICloudDocumentSource + QSSharedFileListSource + QSSharedFileListSource + QSGroupObjectSource + QSGroupObjectSource + + QSFileActionCreators + + QSShellScriptRunAction + QSShellScriptRunAction + QSAppleScriptActions + QSAppleScriptActions + + QSProxies + + QSLastCommandProxy + + providerClass + QSHistoryObjectSource + types + + qs.command + + icon + Quicksilver + name + Last Command + + com.blacktree.Quicksilver + + providerClass + QSController + types + + * + + icon + Quicksilver + name + Quicksilver Selection + + QSLastObjectProxy + + providerClass + QSHistoryObjectSource + types + + * + + icon + Object + name + Last Object + + + QSActionProviders + + URLActions + URLActions + QSAppleScriptActions + QSAppleScriptActions + QSCatalogEntrySource + QSCatalogEntrySource + QSFileTemplateManager + QSFileTemplateManager + QSLineReferenceActions + QSLineReferenceActions + FSActions + FSActions + QSTextActions + QSTextActions + FSDiskActions + FSDiskActions + + QSTypeDefinitions + + qs.catalogentry + + icon + Catalog + name + Catalog Entries + + qs.contact.email + + icon + ContactEmail + name + Email Addresses + + Apple URL pasteboard type + + smartspace + 6 + icon + DefaultBookmarkIcon + name + URLs + + qs.process + + icon + GenericApplicationIcon + name + Applications + + NSStringPboardType + + icon + ClippingText + name + Text + + public.rtf + + icon + ClippingText + name + RTF Text + + NSFilenamesPboardType + + icon + GenericDocumentIcon + name + Files & Folders + + + QSBundleChildPresets + + com.apple.airport.adminutility + QSAirPortNetworkObjectSource + com.apple.AddressBook + QSPresetAddressBook + com.apple.dock + QSPresetDockGroup + com.apple.preferences.users + QSPresetAccounts + com.apple.preference.network + QSPresetNetworkLocations + com.apple.systempreferences + QSPresetPreferencePanes + com.apple.iPhoto + QSPresetiPhotoAlbums + com.microsoft.Entourage + QSPresetEntourageContacts + com.apple.print.PrintCenter + QSPresetPrinters + com.apple.Terminal + QSPresetTerminalFiles + com.blacktree.Quicksilver + QSPresetQSCatalogEntries + com.karelia.watson + QSPresetWatsonGroup + com.ranchero.NetNewsWire + QSPresetNNWSubscriptions + + QSCommands + + QSRelaunchSelfCommand + + command + + actionID + QSObjCSendMessageAction + directID + QSRelaunch + + name + Relaunch Quicksilver + + QSGetGlobalSelectionCommand + + command + + actionID + QSObjectSelectAction + directID + QSGlobalSelectionProxy + + name + Show Command Window + + QSActivateTextModeCommand + + command + + actionID + QSObjCSendMessageAction + directID + QSInterfaceShowTransmogrifiedMessage + + name + Show Command Window + + + QSObjectHandlers + + qs.catalogentry + QSCatalogEntrySource + qs.ObjCMessage + QSObjCMessageSource + qs.handled + QSHandledObjectHandler + Apple URL pasteboard type + QSURLObjectHandler + NSColor pasteboard type + QSColorObjectHandler + NSStringPboardType + QSStringObjectHandler + QSRemovableVolumesParentType + QSVolumesObjectSource + NSFilenamesPboardType + QSFileSystemObjectHandler + qs.url.search + QSURLObjectHandler + + QSRegistryHeaders + + QSNotifiers + + type + mediator + classTable + + name + Notification + + QSTerminalMediators + + defaultPermitted + + type + mediator + classTable + + name + Command Line Interface + + QSFSBrowserMediators + + bundle + com.blacktree.Quicksilver.QSCorePlugIn + selector + FSBrowserMediator + type + mediator + classTable + + name + File System Browser + + QSWebBrowserMediators + + bundle + com.blacktree.Quicksilver.QSCorePlugIn + type + xmediator + classTable + + name + Web Browser + + + QSURLTypeParsers + + + QSHTMLLinkParser + php + QSHTMLLinkParser + htm + QSHTMLLinkParser + html + QSHTMLLinkParser + tld + QSHTMLLinkParser + txt + QSTextLineParser + + QSFSFileTypeParsers + + public.plain-text + QSTextLineParser + public.html + QSHTMLLinkParser + + QSURLParsers + + QSHTMLLinkParser + QSHTMLLinkParser + QSTextLineParser + QSTextLineParser + + QSFSParsers + + QSHTMLLinkParser + QSHTMLLinkParser + QSDirectoryParser + QSDirectoryParser + QSTextLineParser + QSTextLineParser + + + QSResourceAdditions + + Rocket + + bundle + com.blacktree.Quicksilver.QSCorePlugIn + resource + Rocket.png + + + CFBundleDevelopmentRegion + English + NSHumanReadableCopyright + Copyright © 2004, Blacktree, Inc. + CFBundleShortVersionString + 1.3.0 + + diff --git a/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m b/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m index 444c3d8ee..e697c06a0 100644 --- a/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m +++ b/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m @@ -35,8 +35,8 @@ - (void)testRightArrowIntoSynonym { NSDictionary *proxyDetails = [NSDictionary dictionaryWithObject:provider forKey:@"providerClass"]; QSProxyObject *proxy = [QSProxyObject proxyWithDictionary:proxyDetails]; // assign values to the proxy object - NSString *targetID = [@"~/Downloads" stringByExpandingTildeInPath]; - NSString *name = @"dls"; + NSString *targetID = @"/Applications"; + NSString *name = @"apps"; [proxy setIdentifier:[NSString stringWithFormat:@"QSUserDefinedProxy:%@", name]]; [proxy setName:name]; [proxy setObject:targetID forMeta:@"target"]; @@ -83,6 +83,10 @@ - (void)testClearingFirstPane { QSInterfaceController *i = [(QSController *)[NSApp delegate] interfaceController]; + + // Test is sure to fail if we can't get the interface controller + XCTAssertNotNil(i); + // Assumes the current interface can collect QSCollectingSearchObjectView *dSelector = (QSCollectingSearchObjectView *)[i dSelector]; @@ -114,7 +118,7 @@ - (void)testClearingFirstPane - (void)testClearingSearchStringOnTrigger { QSInterfaceController *i = [(QSController *)[NSApp delegate] interfaceController]; - NSEvent *typeAEvent = [NSEvent keyEventWithType:10 location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"a" charactersIgnoringModifiers:@"a" isARepeat:NO keyCode:0]; + NSEvent *typeAEvent = [NSEvent keyEventWithType:NSEventTypeKeyDown location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"a" charactersIgnoringModifiers:@"a" isARepeat:NO keyCode:0]; // Simulate typing 'a' into the dSelector [[i dSelector] keyDown:typeAEvent]; @@ -140,8 +144,8 @@ - (bool)isViewVisible:(QSSearchObjectView *)v forController:(QSInterfaceControll */ - (void)testThirdPaneClosingBehaviour { QSInterfaceController *i = [(QSController *)[NSApp delegate] interfaceController]; - [i activate:nil]; - NSEvent *typeAEvent = [NSEvent keyEventWithType:10 location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"a" charactersIgnoringModifiers:@"a" isARepeat:NO keyCode:0]; + + NSEvent *typeAEvent = [NSEvent keyEventWithType:NSEventTypeKeyDown location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"a" charactersIgnoringModifiers:@"a" isARepeat:NO keyCode:0]; [[i dSelector] keyDown:typeAEvent]; // dSelector is populated with an object @@ -157,14 +161,14 @@ - (void)testThirdPaneClosingBehaviour { // the iSelector should be closed XCTAssertFalse([self isViewVisible:[i iSelector] forController:i]); - NSEvent *searchForActionEvent = [NSEvent keyEventWithType:10 location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"open with" charactersIgnoringModifiers:@"open with" isARepeat:NO keyCode:0]; + NSEvent *searchForActionEvent = [NSEvent keyEventWithType:NSEventTypeKeyDown location:NSMakePoint(0, 0) modifierFlags:256 timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"open with" charactersIgnoringModifiers:@"open with" isARepeat:NO keyCode:0]; [[i aSelector] keyDown:searchForActionEvent]; XCTAssertFalse([[i iSelector] isHidden]); // iSelector should now be visible XCTAssertTrue([self isViewVisible:[i iSelector] forController:i]); // Clear the first pane (use ⌃U is easiest) - NSEvent *clearEvent = [NSEvent keyEventWithType:10 location:NSMakePoint(0, 0) modifierFlags:NSEventModifierFlagControl timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"u" charactersIgnoringModifiers:@"u" isARepeat:NO keyCode:32]; + NSEvent *clearEvent = [NSEvent keyEventWithType:NSEventTypeKeyDown location:NSMakePoint(0, 0) modifierFlags:NSEventModifierFlagControl timestamp:15127.081604936 windowNumber:[[i window] windowNumber] context:nil characters:@"u" charactersIgnoringModifiers:@"u" isARepeat:NO keyCode:32]; [[i dSelector] keyDown:clearEvent]; diff --git a/Quicksilver/Quicksilver.xcodeproj/Quicksilver Distribution.xctestplan b/Quicksilver/Quicksilver.xcodeproj/Quicksilver.xctestplan similarity index 90% rename from Quicksilver/Quicksilver.xcodeproj/Quicksilver Distribution.xctestplan rename to Quicksilver/Quicksilver.xcodeproj/Quicksilver.xctestplan index 022ae9cbf..495b32c03 100644 --- a/Quicksilver/Quicksilver.xcodeproj/Quicksilver Distribution.xctestplan +++ b/Quicksilver/Quicksilver.xcodeproj/Quicksilver.xctestplan @@ -2,7 +2,7 @@ "configurations" : [ { "id" : "E56A6C3A-9C80-47BF-BD69-C1ACAE708306", - "name" : "Configuration 1", + "name" : "QS Test config", "options" : { } @@ -16,6 +16,10 @@ "key" : "NSDeallocateZombies", "value" : "YES" }, + { + "key" : "QSDisableExternalPlugIns", + "value" : "YES" + }, { "enabled" : false, "key" : "NSZombieEnabled", @@ -26,7 +30,8 @@ "containerPath" : "container:Quicksilver.xcodeproj", "identifier" : "8D1107260486CEB800E47090", "name" : "Quicksilver" - } + }, + "testExecutionOrdering" : "random" }, "testTargets" : [ { diff --git a/Quicksilver/Quicksilver.xcodeproj/project.pbxproj b/Quicksilver/Quicksilver.xcodeproj/project.pbxproj index 7c2fb0cec..94cd85654 100644 --- a/Quicksilver/Quicksilver.xcodeproj/project.pbxproj +++ b/Quicksilver/Quicksilver.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -28,8 +28,8 @@ buildConfigurationList = 7F6B3E45085CE68E000735A8 /* Build configuration list for PBXAggregateTarget "Preflight" */; buildPhases = ( 4D8A0B3410AB23B6006AF163 /* CopyFiles */, + 600950E82ABB938B00F67DEB /* ShellScript */, D4DCF31114D059DB006672AB /* Copy Markdown Python module and bltrversion */, - 7F0399E8080EE58D001A9FA3 /* Remove PlugIns */, 7FA4EF1E0913AE44007DB407 /* Release Notes */, ); dependencies = ( @@ -761,34 +761,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 4D002D0713114662009040B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = Quicksilver; - }; - 4D002D8D131149A8009040B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = Quicksilver; - }; - 4D002DA013114A10009040B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = Quicksilver; - }; - 4D002DB213114A33009040B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = Quicksilver; - }; 4D002DB913114A7C009040B7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -845,13 +817,6 @@ remoteGlobalIDString = E1E5F9C707B1FEC50044D6EF; remoteInfo = "Core Support"; }; - 4DAAEB9E0E0BBF720088C72D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = Quicksilver; - }; 4DFD65B91EA93336003CD3CE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 4DFD65B01EA93335003CD3CE /* fmdb.xcodeproj */; @@ -901,6 +866,20 @@ remoteGlobalIDString = 83C73F0A1C326ADA00FFC730; remoteInfo = "FMDB MacOS"; }; + 60BA56E62AD5FF6700989FAA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = E1E5F9C707B1FEC50044D6EF; + remoteInfo = "Core Support"; + }; + 60BA57332ADCD8DC00989FAA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4D002D011311465B009040B7; + remoteInfo = "Bezel Interface"; + }; 66448D9B14F42796000FA2E2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -1256,6 +1235,7 @@ 4DFE7DA10E081A30000B9AA3 /* README.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = README.rtf; sourceTree = ""; }; 4DFE7DAD0E081BFD000B9AA3 /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = /System/Library/Frameworks/QuickLook.framework; sourceTree = ""; }; 6008C51E2AAF433900512CB2 /* QSPathsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QSPathsTests.m; sourceTree = ""; }; + 600950BC2ABB76AF00F67DEB /* QSCorePlugIn-Info-Testing.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "QSCorePlugIn-Info-Testing.plist"; sourceTree = ""; }; 60FCBED02844C9770091AB6B /* OSAKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSAKit.framework; path = System/Library/Frameworks/OSAKit.framework; sourceTree = SDKROOT; }; 6535A8DE1086EF23009D5C90 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = en.lproj/Localizable.strings; sourceTree = ""; }; 6535A91C1086EF5F009D5C90 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = de.lproj/Localizable.strings; sourceTree = ""; }; @@ -1795,7 +1775,7 @@ CD65B12B16FA1BE400932A9C /* QSPluginUpdater.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = QSPluginUpdater.xib; sourceTree = ""; }; CD661C5319DBD2F3000F3695 /* TestNSApplicationMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestNSApplicationMethods.m; path = "Tests/Tests-QSFoundation/TestNSApplicationMethods.m"; sourceTree = ""; }; CD661C5519DBD341000F3695 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - CD72C74E287732580040B065 /* Quicksilver Distribution.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = "Quicksilver Distribution.xctestplan"; path = "Quicksilver.xcodeproj/Quicksilver Distribution.xctestplan"; sourceTree = ""; }; + CD72C74E287732580040B065 /* Quicksilver.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = Quicksilver.xctestplan; path = Quicksilver.xcodeproj/Quicksilver.xctestplan; sourceTree = ""; }; CD72C74F2877C0D10040B065 /* TestNDHotkey.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestNDHotkey.m; path = "Tests/Tests-QSFoundation/TestNDHotkey.m"; sourceTree = ""; }; CD73A5B52869FB1700552A12 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ko; path = ko.lproj/Guide.html; sourceTree = ""; }; CD73A5BD2869FB2900552A12 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/ResultWindow.strings; sourceTree = ""; }; @@ -2641,7 +2621,7 @@ 29B97314FDCFA39411CA2CEA /* Quicksilver */ = { isa = PBXGroup; children = ( - CD72C74E287732580040B065 /* Quicksilver Distribution.xctestplan */, + CD72C74E287732580040B065 /* Quicksilver.xctestplan */, CD88502628559C9C00BDCB00 /* NSTreeController+BLTRExtensions.h */, CD88502728559C9C00BDCB00 /* NSTreeController+BLTRExtensions.m */, CD4C8FBA27DD6DDE00F5FFE4 /* Quicksilver.entitlements */, @@ -3334,6 +3314,7 @@ 7F840FC7096C3356006E6F0E /* Resources */, E18000F107B2B48800010DB0 /* Code */, E180011907B2B48900010DB0 /* QSCorePlugIn-Info.plist */, + 600950BC2ABB76AF00F67DEB /* QSCorePlugIn-Info-Testing.plist */, ); path = QSCorePlugIn; sourceTree = ""; @@ -4142,7 +4123,6 @@ buildRules = ( ); dependencies = ( - 4D002D0813114662009040B7 /* PBXTargetDependency */, ); name = "Bezel Interface"; productName = "Bezel Interface"; @@ -4160,7 +4140,6 @@ buildRules = ( ); dependencies = ( - 4D002DA113114A10009040B7 /* PBXTargetDependency */, ); name = "Finder Plugin"; productName = "Finder Module"; @@ -4178,7 +4157,6 @@ buildRules = ( ); dependencies = ( - 4D002D8E131149A8009040B7 /* PBXTargetDependency */, ); name = "Primer Interface"; productName = "Primer Interface"; @@ -4196,7 +4174,6 @@ buildRules = ( ); dependencies = ( - 4D002DB313114A33009040B7 /* PBXTargetDependency */, ); name = "Keyboard Triggers"; productName = "HotKey Triggers"; @@ -4316,6 +4293,8 @@ buildRules = ( ); dependencies = ( + 60BA57342ADCD8DC00989FAA /* PBXTargetDependency */, + 60BA56E72AD5FF6700989FAA /* PBXTargetDependency */, CD61BBC5192B18FA00040609 /* PBXTargetDependency */, ); name = "Quicksilver Tests"; @@ -4414,7 +4393,6 @@ buildRules = ( ); dependencies = ( - 4DAAEB9F0E0BBF720088C72D /* PBXTargetDependency */, ); name = "Core Support"; productName = QSAirPortPlugIn; @@ -4854,33 +4832,37 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 66CAE628153EF9AE0021BC65 /* Adjust Version-String */ = { + 600950E82ABB938B00F67DEB /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( ); - name = "Adjust Version-String"; + outputFileListPaths = ( + ); outputPaths = ( + "${QS_BUILD_ROOT}/Configuration/Quicksilver.pch", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Script to append development information to the QS version string\n\n# Created by Henning Jungkurth on Apr 18 2012\n# Modifications by Nathan Henrie on 20220405\n\nset -euf\n\nCURRENT_TAG=$(git describe --exact-match --tags 2> /dev/null || true)\nCURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)\nHEAD=$(git rev-parse --short HEAD)\n\n# Default: `2.0.2:main-a83756f6:Debug`\nNEW_VERSION_STRING=${QS_INFO_VERSION}:${CURRENT_BRANCH:-\"detached HEAD\"}-${HEAD}:${CONFIGURATION}\n\n# If on a tag, make pretty: `v2.0.2:Debug` or `v2.0.2`\nif [ -n \"${CURRENT_TAG}\" ]; then\n if [ \"${CONFIGURATION}\" = \"Release\" ]; then\n NEW_VERSION_STRING=${QS_INFO_VERSION}\n else\n NEW_VERSION_STRING=${QS_INFO_VERSION}:${CONFIGURATION}\n fi\nfi\n\nif [ -n \"${NEW_VERSION_STRING}\" ]; then\n defaults write \"$QS_APP_CONTENTS_FOLDER/Info\" CFBundleShortVersionString \"\\\"${NEW_VERSION_STRING}\\\"\"\nfi\n"; + shellScript = "# Intentionally blank -- only purpose is to tell XCode about the existence of\n# `Configuration/Quicksilver.pch`, copied in the step above, for automatic\n# dependency resolution. Without this (or something like it), one gets a race\n# condition with a lot of `/tmp/QS/Configuration/Quicksilver.pch: file not found`\n# type errors the first time XCode builds, which mysteriously resolve upon a\n# second build.\n#\n# Confirmed working alternatives to this hack:\n# - remove the `Copy Files` step above and use `cp -r` here instead\n# - Add a second (redundant) `Copy Files` step that explicitly (re-)copies `Quicksilver.pch`\n"; }; - 7F0399E8080EE58D001A9FA3 /* Remove PlugIns */ = { + 66CAE628153EF9AE0021BC65 /* Adjust Version-String */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Remove PlugIns"; + name = "Adjust Version-String"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#rm -rf \"$BUILT_PRODUCTS_DIR/Quicksilver.app/Contents/PlugIns\""; + shellScript = "# Script to append development information to the QS version string\n\n# Created by Henning Jungkurth on Apr 18 2012\n# Modifications by Nathan Henrie on 20220405\n\nset -euf\n\nCURRENT_TAG=$(git describe --exact-match --tags 2> /dev/null || true)\nCURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)\nHEAD=$(git rev-parse --short HEAD)\n\n# Default: `2.0.2:main-a83756f6:Debug`\nNEW_VERSION_STRING=${QS_INFO_VERSION}:${CURRENT_BRANCH:-\"detached HEAD\"}-${HEAD}:${CONFIGURATION}\n\n# If on a tag, make pretty: `v2.0.2:Debug` or `v2.0.2`\nif [ -n \"${CURRENT_TAG}\" ]; then\n if [ \"${CONFIGURATION}\" = \"Release\" ]; then\n NEW_VERSION_STRING=${QS_INFO_VERSION}\n else\n NEW_VERSION_STRING=${QS_INFO_VERSION}:${CONFIGURATION}\n fi\nfi\n\nif [ -n \"${NEW_VERSION_STRING}\" ]; then\n defaults write \"$QS_APP_CONTENTS_FOLDER/Info\" CFBundleShortVersionString \"\\\"${NEW_VERSION_STRING}\\\"\"\nfi\n"; }; 7FA4EF1E0913AE44007DB407 /* Release Notes */ = { isa = PBXShellScriptBuildPhase; @@ -5293,26 +5275,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 4D002D0813114662009040B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* Quicksilver */; - targetProxy = 4D002D0713114662009040B7 /* PBXContainerItemProxy */; - }; - 4D002D8E131149A8009040B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* Quicksilver */; - targetProxy = 4D002D8D131149A8009040B7 /* PBXContainerItemProxy */; - }; - 4D002DA113114A10009040B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* Quicksilver */; - targetProxy = 4D002DA013114A10009040B7 /* PBXContainerItemProxy */; - }; - 4D002DB313114A33009040B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* Quicksilver */; - targetProxy = 4D002DB213114A33009040B7 /* PBXContainerItemProxy */; - }; 4D002DBA13114A7C009040B7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4D002DAC13114A2E009040B7 /* Keyboard Triggers */; @@ -5353,16 +5315,21 @@ target = E1E5F9C707B1FEC50044D6EF /* Core Support */; targetProxy = 4DAAEB7E0E0BBE1B0088C72D /* PBXContainerItemProxy */; }; - 4DAAEB9F0E0BBF720088C72D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* Quicksilver */; - targetProxy = 4DAAEB9E0E0BBF720088C72D /* PBXContainerItemProxy */; - }; 4DFD65C71EA93366003CD3CE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "FMDB MacOS"; targetProxy = 4DFD65C61EA93366003CD3CE /* PBXContainerItemProxy */; }; + 60BA56E72AD5FF6700989FAA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = E1E5F9C707B1FEC50044D6EF /* Core Support */; + targetProxy = 60BA56E62AD5FF6700989FAA /* PBXContainerItemProxy */; + }; + 60BA57342ADCD8DC00989FAA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4D002D011311465B009040B7 /* Bezel Interface */; + targetProxy = 60BA57332ADCD8DC00989FAA /* PBXContainerItemProxy */; + }; 66448D9C14F42796000FA2E2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = E1E5F97107B1FCFC0044D6EF /* QuickStep Foundation */; @@ -6242,6 +6209,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6256,6 +6224,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6270,6 +6239,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6284,6 +6254,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6298,6 +6269,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6312,6 +6284,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6326,6 +6299,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6340,6 +6314,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6490,11 +6465,12 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info.plist"; + INFOPLIST_FILE = "PlugIns-Main/QSCorePlugIn/QSCorePlugIn-Info-Testing.plist"; PRODUCT_BUNDLE_IDENTIFIER = com.blacktree.Quicksilver.QSCorePlugIn; PROVISIONING_PROFILE_SPECIFIER = ""; }; @@ -6504,6 +6480,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6518,6 +6495,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6532,6 +6510,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6546,6 +6525,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6978,6 +6958,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; @@ -6992,6 +6973,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4DC3DD110E0BB27B009902EF /* QSPlugIn.xcconfig */; buildSettings = { + BUNDLE_LOADER = ""; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Bezel Interface.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Bezel Interface.xcscheme index 5c1ced31e..379941ba8 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Bezel Interface.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Bezel Interface.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Build Documentation.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Build Documentation.xcscheme index 090fa7c9e..ebf6f60dc 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Build Documentation.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Build Documentation.xcscheme @@ -23,7 +23,7 @@ diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Core Support.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Core Support.xcscheme index a2923a336..69c057eb4 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Core Support.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Core Support.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Finder Plugin.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Finder Plugin.xcscheme index 28fa64d35..fe88f54fc 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Finder Plugin.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Finder Plugin.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/HotKey Triggers.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/HotKey Triggers.xcscheme index 4985fa7c8..77fb913d0 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/HotKey Triggers.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/HotKey Triggers.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Preflight.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Preflight.xcscheme index bc88c5f76..d36e132bb 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Preflight.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Preflight.xcscheme @@ -23,7 +23,7 @@ diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Primer Interface.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Primer Interface.xcscheme index 4e028e1d8..ff2a24eb8 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Primer Interface.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Primer Interface.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSDroplet.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSDroplet.xcscheme index b34dfe359..d4d4eb6bf 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSDroplet.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSDroplet.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSScriptingDictionary.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSScriptingDictionary.xcscheme index 48242442a..ff3aaf7a6 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSScriptingDictionary.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QSScriptingDictionary.xcscheme @@ -23,7 +23,7 @@ diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Core.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Core.xcscheme index fce455256..f0b2d9f09 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Core.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Core.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Effects.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Effects.xcscheme index 6d97f4259..57fc223a5 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Effects.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Effects.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Foundation.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Foundation.xcscheme index 78a2a63e8..8f530aa17 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Foundation.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Foundation.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Interface.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Interface.xcscheme index cf7e41fe0..ab1984a00 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Interface.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/QuickStep Interface.xcscheme @@ -3,7 +3,7 @@ LastUpgradeVersion = "1320" version = "1.3"> diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver Distribution.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver Distribution.xcscheme index 3d0e87d1c..88afaa133 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver Distribution.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver Distribution.xcscheme @@ -29,7 +29,7 @@ shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver.xcscheme b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver.xcscheme index dd61a0dc7..a75dd1557 100644 --- a/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver.xcscheme +++ b/Quicksilver/Quicksilver.xcodeproj/xcshareddata/xcschemes/Quicksilver.xcscheme @@ -23,10 +23,10 @@ + shouldUseLaunchSchemeArgsEnv = "NO"> + + + + diff --git a/Quicksilver/Resources/QSDefaults.plist b/Quicksilver/Resources/QSDefaults.plist index e522a4fb4..fcf3f2e30 100644 --- a/Quicksilver/Resources/QSDefaults.plist +++ b/Quicksilver/Resources/QSDefaults.plist @@ -48,7 +48,7 @@ QSChatMediators com.apple.iChat QSCommandInterfaceControllers - QSPrimerInterfaceController + QSBezelInterfaceController QSFSBrowserMediators com.apple.finder QSLoadImagePreviews diff --git a/Quicksilver/Tests/Tests-QSCore/TestQSObject.m b/Quicksilver/Tests/Tests-QSCore/TestQSObject.m index ce748d485..0af8e222d 100644 --- a/Quicksilver/Tests/Tests-QSCore/TestQSObject.m +++ b/Quicksilver/Tests/Tests-QSCore/TestQSObject.m @@ -239,8 +239,8 @@ - (void)testEquality // unequal objects XCTAssertNotEqual(one, two); // same data - QSObject *data1 = [QSObject objectWithName:@"Data 1"]; - QSObject *data2 = [QSObject objectWithName:@"Data 2"]; + QSObject *data1 = [QSObject objectWithName:@"Data Name"]; + QSObject *data2 = [QSObject objectWithName:@"Data Name"]; [data1 setObject:@"string data" forType:QSTextType]; [data2 setObject:@"string data" forType:QSTextType]; [data1 setPrimaryType:QSTextType]; diff --git a/Quicksilver/Tools/qsrelease b/Quicksilver/Tools/qsrelease index aec774086..edf6c6b40 100755 --- a/Quicksilver/Tools/qsrelease +++ b/Quicksilver/Tools/qsrelease @@ -3,6 +3,8 @@ set -euf set -x +xcodebuild -version + TOOLSDIR=$(cd "$(dirname "$0")" && pwd) CONFIGURATION=${1-Release} @@ -31,17 +33,11 @@ for build_dir in "${build_parent}" "${build_parent}/Debug" "${build_parent}/Rele test -e "${build_dir}" && xattr -w com.apple.xcode.CreatedByBuildSystem true "${build_dir}" done -LOG=${BUILT_PRODUCTS_DIR}/build.log -DMG_TEMP=${BUILT_PRODUCTS_DIR}/dmg - -# `xcodebuild clean` sometimes refuses to remove the build directory and -# fails with error: -# Could not delete `/tmp/QS/build` because it was not created by the -# build system. xcodebuild -scheme 'Quicksilver Distribution' clean # Make sure `LOG` and its parents exist -mkdir -p "$(dirname "${LOG}")" +mkdir -p "${BUILT_PRODUCTS_DIR}" +LOG=${BUILT_PRODUCTS_DIR}/build.log touch "${LOG}" { @@ -61,6 +57,7 @@ cd "${BUILT_PRODUCTS_DIR}" chmod 644 Quicksilver.app/Contents/Info.plist ## Prepare the DMG directory +DMG_TEMP=${BUILT_PRODUCTS_DIR}/dmg mkdir -p "${DMG_TEMP}" cd "${DMG_TEMP}" @@ -70,7 +67,7 @@ cp "${SOURCE_ROOT}"/Resources/DMG_DS_Store ./.DS_Store ln -sf /Applications . cp "${SOURCE_ROOT}"/Resources/Images/QuicksilverDMG.icns ./.VolumeIcon.icns -if [ -n "${QS_BUILD_ONLY=}" ]; then +if [ -n "${QS_DONT_SIGN=}" ] || [ -n "${QS_BUILD_ONLY=}" ]; then cd .. echo "Skipping codesigning and using an ad-hoc signature for local testing instead" diff --git a/Quicksilver/Tools/qstest b/Quicksilver/Tools/qstest index 556451bd7..d545940ab 100755 --- a/Quicksilver/Tools/qstest +++ b/Quicksilver/Tools/qstest @@ -4,6 +4,11 @@ set -euf +log() { + scriptname=$(basename "$0") + printf '%s: %s\n' "${scriptname}" "$*" > /dev/stderr +} + CURRENT_ARCH=$(uname -m) readonly CURRENT_ARCH @@ -17,18 +22,36 @@ main() { cd "${TOOLSDIR}/.." + xcodebuild build \ + -project "${TOOLSDIR}"/../Quicksilver.xcodeproj \ + -destination "platform=macOS,arch=${CURRENT_ARCH}" \ + -configuration Testing \ + -scheme Quicksilver \ + GCC_PREPROCESSOR_DEFINITIONS="TESTING" + + # Having a `Testing` config built but not yet run can be nice for selecting a + # target for `Instruments.app` + if [ -n "${QS_BUILD_ONLY=}" ]; then + echo "Skipping tests" + return 0 + fi + + retval=0 for scheme; do - retval=0 + log "beginning tests for scheme: ${scheme}" xcodebuild test \ -project "${TOOLSDIR}"/../Quicksilver.xcodeproj \ -destination "platform=macOS,arch=${CURRENT_ARCH}" \ - -configuration Debug \ + -configuration Testing \ -scheme "${scheme}" \ GCC_PREPROCESSOR_DEFINITIONS="TESTING" || retval=$? - if [ "$retval" -ne 0 ]; then - printf 'Testing scheme %s failed with return value %s\n' "${scheme}" "${retval}" + if [ "${retval}" -ne 0 ]; then + log "testing ${scheme} failed with exit code ${retval}" + return "${retval}" fi + + log "testing succeeded for scheme: ${scheme}" done } diff --git a/README.md b/README.md index d38bd560e..9fd07fcc3 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ +[![build](https://github.com/quicksilver/Quicksilver/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/quicksilver/Quicksilver/actions/workflows/ci.yml) + # About Quicksilver # Quicksilver is a fast and free macOS productivity application that gives you the power to control your Mac quickly and elegantly. Quicksilver learns your habits, making your everyday chores simple and efficient. Learn more at: https://qsapp.com # About This Code Repository # -This repository contains the source code for the Quicksilver main app. It is also the place to browse existing issues and open new issues, via the [issue tracker](https://github.com/quicksilver/Quicksilver/issues). +This repository contains the source code for the Quicksilver main app. It is also the place to browse existing issues and open new issues, via the [issue tracker](https://github.com/quicksilver/Quicksilver/issues). The `main` branch contains the source for the currently released Quicksilver. @@ -16,7 +18,7 @@ Visit [QSApp.com](http://qsapp.com/download.php), and download the right version ## Before Trying the Source Code ## -Before building and testing Quicksilver, **ALWAYS BACKUP** your user data! +Before building and testing Quicksilver, **ALWAYS BACKUP** your user data! This is easily done by backing up the following: * `~/Library/Application Support/Quicksilver` @@ -50,9 +52,9 @@ By downloading and/or using this software you agree to the following terms of us Licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.