Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Update plugins for Apple Silicon #2634

Open
pjrobertson opened this issue Feb 13, 2022 · 113 comments
Open

Update plugins for Apple Silicon #2634

pjrobertson opened this issue Feb 13, 2022 · 113 comments
Milestone

Comments

@pjrobertson
Copy link
Member

pjrobertson commented Feb 13, 2022

Here's a list of all plugins in the Quicksilver Organisation on Github. Let's tick them off one by one as they get updated for Apple Silicon. I think all those with a last commit of 5th Feb have already been done by @skurfer

Outstanding for 2.0:

  • MiniInterface-qsplugin (last commit: 2022-02-21) [ready to build & release]

2.1.0 and up:

  • 1Password (last commit: 2018-09-05)
  • Twitter-Plugin (last commit: 2022-03-09) [ready to build & release]
  • elements.clipboard-qsplugin (last commit: 2022-02-19) [needs rebuilding]
  • Firefox (last commit: 2022-02-19) @pjrobertson [needs rebuilding]
  • elements.support.mail-qsplugin (last commit: 2022-02-19) [needs rebuilding]
  • iTunes (last commit: 2018-02-14)
  • QSQRCode-qsplugin (last commit: 2022-02-21) [needs rebuilding]
  • Gmail - com.google.mail-qsplugin (last commit: 2022-02-21) @pjrobertson [needs rebuilding]
  • MicrosoftOffice-qsplugin (last commit: 2022-02-18) @pjrobertson - done needs rebuilding
  • GrowlNotifier-qsplugin (last commit: 2012-01-22) Discontinued
  • iTerm2-qsplugin (last commit: 2014-04-20)
  • Developer (com.apple.Xcode.devdocs-qsplugin / com.apple.Xcode.devdocs-qsplugin)
  • BezelHUD (I seem to remember this was an external theme, abandoned. But if it's this popular then we should maybe re-theme Bezel to look like it and re-release)
  • iPhoto-qsplugin (last commit: 2012-08-15)
  • iMessages (is this still a thing?)
  • ChatSupport-qsplugin (last commit: 2012-10-24)
  • Music Support
  • Cyberduck-qsplugin (last commit: 2012-07-11) @pjrobertson
  • Apple Mail (last commit: 2014-09-09) Broken: see Apple Mail Plugin not available or doesn't work #2648
  • The Rest
  • Networking-qsplugin (last commit: 2022-02-13) [needs rebuilding]
  • iCal-qsplugin (last commit: 2022-02-13)
  • zoom.us (last commit: 2022-02-05)
  • Yojimbo-qsplugin (last commit: 2022-02-05)
  • QSWindowInterfacePlugIn-qsplugin (last commit: 2022-02-05)
  • elements.websearch-qsplugin (last commit: 2022-02-05)
  • Viscosity-qsplugin (last commit: 2022-02-05)
  • UIAccess-qsplugin (last commit: 2022-02-05)
  • TextStartRanker-qsplugin (last commit: 2022-02-05)
  • elements.textmanipulation-qsplugin (last commit: 2022-02-05)
  • Terminal-qsplugin (last commit: 2022-02-05)
  • Shelf-qsplugin (last commit: 2022-02-05)
  • Services-qsplugin (last commit: 2022-02-05)
  • ScreenCapture-qsplugin (last commit: 2022-02-05)
  • com.apple.Safari-qsplugin (last commit: 2022-02-05)
  • ProcessManipulationPlugIn-qsplugin (last commit: 2022-02-05)
  • PathFinder-qsplugin (last commit: 2022-02-05)
  • NotificationHub-qsplugin (last commit: 2022-02-05)
  • Nostromo (last commit: 2022-02-05)
  • elements.trigger.mouse-qsplugin (last commit: 2022-02-05)
  • Menu-qsplugin (last commit: 2022-02-05)
  • Keychain-qsplugin (last commit: 2022-02-05)
  • ImageManipulation-qsplugin (last commit: 2022-02-05)
  • elements.hfsattributes-qsplugin (last commit: 2022-02-05)
  • FaceTime-qsplugin (last commit: 2022-02-05)
  • ExtraScripts-qsplugin (last commit: 2022-02-05) [needs rebuiling]
  • elements.trigger.event-qsplugin (last commit: 2022-02-05)
  • Displays-qsplugin (last commit: 2022-02-05)
  • DictPlugin-qsplugin (last commit: 2022-02-05)
  • Dash-qsplugin (last commit: 2022-02-05)
  • com.apple.AddressBook-qsplugin (last commit: 2022-02-05)
  • Compression-qsplugin (last commit: 2022-02-05)
  • CommandLineTool-qsplugin (last commit: 2022-02-05)
  • GoogleChrome-qsplugin (last commit: 2022-02-05)
  • Calculator-qsplugin (last commit: 2022-02-05)
  • BezelClassic-qsplugin (last commit: 2022-02-03)
  • Audio-qsplugin (last commit: 2022-02-03)
  • RemoteHosts-qsplugin (last commit: 2022-02-03)
  • Spotlight-qsplugin (last commit: 2018-07-14)
  • iTunes-qsplugin (last commit: 2018-02-14)
  • SocialBookmarks-qsplugin (last commit: 2018-01-18)
  • PluginDevelopmentReference (last commit: 2017-11-26)
  • VDKQueue (last commit: 2017-04-18)
  • ndhotkeyevent (last commit: 2017-01-10)
  • remember-the-milk-qsplugin (last commit: 2016-07-03)
  • QSOmniWebPlugIn-qsplugin (last commit: 2016-06-15)
  • CubeInterface-qsplugin (last commit: 2015-11-14)
  • OpenMetaFileTagging (last commit: 2015-08-31)
  • showcase (last commit: 2015-08-13)
  • LaunchAtLoginController (last commit: 2014-07-23)
  • Evernote-qsplugin (last commit: 2014-04-20)
  • FileTagging-qsplugin (last commit: 2013-12-06)
  • Abracadabra-qsplugin (last commit: 2013-12-04)
  • Transmit-qsplugin (last commit: 2013-12-02)
  • MailMate-qsplugin (last commit: 2013-11-13)
  • MiniBezel-qsplugin (last commit: 2013-08-09)
  • CloudApp-qsplugin (last commit: 2013-04-25)
  • com.apple.Xcode.devdocs-qsplugin (last commit: 2013-02-15)
  • Deminimizer-qsplugin (last commit: 2012-11-16)
  • Messages-qsplugin (last commit: 2012-11-12)
  • Adium-qsplugin (last commit: 2012-10-18)
  • com.apple.Automator-qsplugin (last commit: 2012-09-13)
  • QuickTimePlayer-qsplugin (last commit: 2012-07-10)
  • Flashlight-qsplugin (last commit: 2012-07-01)
  • qsopera (last commit: 2012-06-24)
  • qs-update (last commit: 2011-11-28)
  • QSCubeInterface-unused-qsplugin (last commit: 2011-09-09)
  • AirPort-qsplugin (last commit: 2011-08-24)
  • public.file.tags-qsplugin (last commit: 2011-07-26)
  • com.facebook-qsplugin (last commit: 2011-07-26)
  • com.apple.spaces-qsplugin (last commit: 2011-07-26)
  • YouControlDesktopsPlugIn-qsplugin (last commit: 2011-07-26)
  • XattrMetadataImporter-qsplugin (last commit: 2011-07-26)
  • Xattr-qsplugin (last commit: 2011-07-26)
  • X10PlugIn-qsplugin (last commit: 2011-07-26)
  • UserAccounts-qsplugin (last commit: 2011-07-26)
  • Translation-qsplugin (last commit: 2011-07-26)
  • TextMate-qsplugin (last commit: 2011-07-26)
  • Teleflip-qsplugin (last commit: 2011-07-26)
  • TSActionsPlugin-qsplugin (last commit: 2011-07-26)
  • SystemKeys-qsplugin (last commit: 2011-07-26)
  • Stikkit-qsplugin (last commit: 2011-07-26)
  • StartupDisk-qsplugin (last commit: 2011-07-26)
  • SoundSupport-qsplugin (last commit: 2011-07-26)
  • Slideshow-qsplugin (last commit: 2011-07-26)
  • Skype-qsplugin (last commit: 2011-07-26)
  • SafariSearches-qsplugin (last commit: 2011-07-26)
  • RemoteDesktop-qsplugin (last commit: 2011-07-26)
  • QSWeatherPlugin-qsplugin (last commit: 2011-07-26)
  • QSSpellcheckAction-qsplugin (last commit: 2011-07-26)
  • QSSlimInterfacePlugIn-qsplugin (last commit: 2011-07-26)
  • QSShiiraPlugIn-qsplugin (last commit: 2011-07-26)
  • QSSherlockPlugIn-qsplugin (last commit: 2011-07-26)
  • QSRSSPlugIn-qsplugin (last commit: 2011-07-26)
  • QSPatchPlugIn-qsplugin (last commit: 2011-07-26)
  • QSOmniFocusPlugIn-qsplugin (last commit: 2011-07-26) Builds and installs, can list projects, but the plugin doesn't actually do anything AFAICT, needs updating for OF3. Will work on this eventually -n8henrie
  • QSHomestarRunnerPlugIn-qsplugin (last commit: 2011-07-26)
  • QSFullscreenPlugIn-qsplugin (last commit: 2011-07-26)
  • QSDesktopPictureAction-qsplugin (last commit: 2011-07-26)
  • QSBezelInterfacePlugIn-qsplugin (last commit: 2011-07-26)
  • QSAdiumPlugIn-qsplugin (last commit: 2011-07-26)
  • ProcessSwitcherSupportPlugIn-qsplugin (last commit: 2011-07-26)
  • Printer-qsplugin (last commit: 2011-07-26)
  • PowerManagementPlugIn-qsplugin (last commit: 2011-07-26)
  • Phone-qsplugin (last commit: 2011-07-26)
  • OrnateInterface-qsplugin (last commit: 2011-07-26)
  • OnMyCommand-qsplugin (last commit: 2011-07-26)
  • NowContact-qsplugin (last commit: 2011-07-26)
  • NimbusAppSwitcher-qsplugin (last commit: 2011-07-26)
  • NetworkLocation-qsplugin (last commit: 2011-07-26)
  • NetNewsWire-qsplugin (last commit: 2011-07-26)
  • MusicArtwork-qsplugin (last commit: 2011-07-26)
  • Monolith-qsplugin (last commit: 2011-07-26)
  • Markdown-qsplugin (last commit: 2011-07-26)
  • Mailsmith-qsplugin (last commit: 2011-07-26)
  • MachineSource-qsplugin (last commit: 2011-07-26)
  • InternetExplorer-qsplugin (last commit: 2011-07-26)
  • Indigo-qsplugin (last commit: 2011-07-26)
  • GoogleCalendar-qsplugin (last commit: 2011-07-26)
  • Google-qsplugin (last commit: 2011-07-26)
  • Flickr-qsplugin (last commit: 2011-07-26)
  • FindModule-qsplugin (last commit: 2011-07-26)
  • Expert-qsplugin (last commit: 2011-07-26)
  • Eudora-qsplugin (last commit: 2011-07-26)
  • Editor-qsplugin (last commit: 2011-07-26)
  • DokuWiki-qsplugin (last commit: 2011-07-26)
  • Dock-qsplugin (last commit: 2011-07-26)
  • DiskImage-qsplugin (last commit: 2011-07-26)
  • DiscInterface-qsplugin (last commit: 2011-07-26)
  • DiffModule-qsplugin (last commit: 2011-07-26)
  • Deviant-qsplugin (last commit: 2011-07-26)
  • DesktopManager-qsplugin (last commit: 2011-07-26)
  • DeliciousLibrary-qsplugin (last commit: 2011-07-26)
  • Daemons-qsplugin (last commit: 2011-07-26)
  • ColloquyPlugin-qsplugin (last commit: 2011-07-26)
  • Cl1p-qsplugin (last commit: 2011-07-26)
  • Camino-qsplugin (last commit: 2011-07-26)
  • CalendarSupport-qsplugin (last commit: 2011-07-26)
  • CLIX-qsplugin (last commit: 2011-07-26)
  • BuddyPop-qsplugin (last commit: 2011-07-26)
  • Bluetooth-qsplugin (last commit: 2011-07-26)
  • Bezel-qsplugin (last commit: 2011-07-26)
  • BBEdit-qsplugin (last commit: 2011-07-26)
  • LegacyAudio-qsplugin (last commit: 2011-07-26)
  • Amazon-qsplugin (last commit: 2011-07-26)
  • Alarm-qsplugin (last commit: 2011-07-26)
  • AddressBookActionsPlugIn-qsplugin (last commit: 2011-07-26)
  • AOL-qsplugin (last commit: 2011-07-26)

Code used to compile the list:

import requests
import json
r1 = requests.get('https://api.github.com/orgs/quicksilver/repos?per_page=100')
r2 = requests.get('https://api.github.com/orgs/quicksilver/repos?per_page=100&page=2')

js = r1.json()
js.extend(r2.json())

for repo in sorted(js, key=lambda x: x['pushed_at'], reverse=True):
    print("- [ ] {} (last commit: {})".format(repo['name'], repo['pushed_at'][:10]))
@pjrobertson pjrobertson added this to the 1.7.0 milestone Feb 13, 2022
@n8henrie
Copy link
Member

n8henrie commented Feb 14, 2022 via email

@pjrobertson
Copy link
Member Author

A script I whipped up to download and compile in parallel is here: <

Nice, this is similar to my script below. The extra steps you're missing are:

  1. Pull the latest updates from Github (some plugins have been updated recently)
  2. Bump the version number using bltrversion (or some other way)
  3. Commit, and push the commit back to the GH repo
  4. Build the plugin (your script)
  5. qs-push-plugin to actually push the updated plugin to the QS update server. For that @skurfer has the password (I lost track). If you're willing to update the plugins, then I'm sure Rob could share the password.

I suggest we refine your/my script and add it to Tools in Quicksilver

for folder in QSPlugins/*/; do
  cd $folder

  // bump version number
  INFOPLIST_FILE=$(find . -name Info.plist -maxdepth 1)
  /tmp/QS/Tools/bltrversion
  git commit -a -m "Update version number for M1 build"
  git push origin master

  // build (taken from the default Xcode Github action: https://github.com/quicksilver/Quicksilver/new/master?filename=.github/workflows/objective-c-xcode.yml&workflow_template=objective-c-xcode)
  scheme_list=$(xcodebuild -list -json | tr -d "\n")
  scheme=$(echo $scheme_list | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]")
  echo Using default scheme: $scheme
  filetype_parameter="project"
  file_to_build="`ls -A | grep -i \\.xcodeproj\$`"
  file_to_build=`echo $file_to_build | awk '{$1=$1;print}'`
  SETTINGS=$(xcodebuild -configuration Release -scheme "$scheme" -project "$file_to_build" -showBuildSettings | sort -u)
  xcodebuild clean build -quiet -configuration Release -scheme "$scheme" -"$filetype_parameter" "$file_to_build"
  FULL_PRODUCT_NAME=$(echo ${SETTINGS} | grep "FULL_PRODUCT_NAME" | sed 's/[ ]*FULL_PRODUCT_NAME = //')
  // do codesigning stuff
  /path/to/qs-push-plugin -c “<ul><li>Updated for Apple M1 Silicon</li></ul>" "/tmp/QS/build/Release/$FULL_PRODUCT_NAME"
  echo “Built and uploaded $FULL_PRODUCT_NAME successfully"
done

@n8henrie
Copy link
Member

Out of curiosity -- those aren't valid comments. Is this just an example of what your script looks like? What shell do you use?

@n8henrie
Copy link
Member

n8henrie commented Feb 15, 2022

It looks like all of the 2022-02-05 commits were @skurker updating -- those can be checked off, right?

EDIT: :g/2022-02-05/s/- \[ \]/- [x]/, assuming that's the case

@skurfer
Copy link
Member

skurfer commented Feb 15, 2022

For a couple of them, the issue is that the YAJL.framework is Intel only. I can’t find the original source for that. Any pointers?

@n8henrie
Copy link
Member

Figuring out what some of these do is kind of rough.

Based on the last updated date, it looks like the latter is the one providing the "Calendar Plugin," but I don't see much in the info pane to clue me in. It might be helpful at some point to have a link to the source in the info pane.

Screen Shot 2022-02-15 at 13 17 26

Seems like some should probably just be deprecated / archived?

@n8henrie
Copy link
Member

n8henrie commented Feb 15, 2022

I can’t find the original source for that.

This may be it: https://github.com/lloyd/yajl

@skurfer
Copy link
Member

skurfer commented Feb 15, 2022

Yeah, maybe when we’re done building and releasing what can still be built, I’ll go through the database and just disable those with an update date before this year.

@n8henrie
Copy link
Member

n8henrie commented Feb 15, 2022

I'm not getting anywhere fast, again running into this issue, which I never really figured out why it went away last time.

Working on https://github.com/quicksilver/QSOmniFocusPlugIn-qsplugin -- can't get it to build,

'QSCore/QSObject.h' file not found
$ fd 'qsobject\.h' /tmp/QS
/tmp/QS/build/Debug/QSCore.framework/Versions/A/Headers/QSObject.h
/tmp/QS/build/Debug/Quicksilver.app/Contents/Frameworks/QSCore.framework/Versions/A/Headers/QSObject.h
/tmp/QS/build/Release/QSCore.framework/Versions/A/Headers/QSObject.h
/tmp/QS/build/Release/Quicksilver.app/Contents/Frameworks/QSCore.framework/Versions/A/Headers/QSObject.h
/tmp/QS/build/Release/dmg/Quicksilver.app/Contents/Frameworks/QSCore.framework/Versions/A/Headers/QSObject.h

I think I have QSFrameworks (/Applications/Quicksilver.app/Contents/Frameworks) and QS_SOURCE_ROOT set correctly.

Checkpoint on a couple scripts -- to download the plugin repos in parallel:

#!/usr/bin/env python3
import asyncio
import json
from pathlib import Path
from urllib.request import urlopen


def scrape(outfile):
    page = 1
    repos = []
    while True:
        with urlopen(
            "https://api.github.com/orgs/quicksilver/repos?per_page=100"
            f"&page={page}"
        ) as req:
            data = json.loads(req.read().decode())
            repos.extend(data)

            if (link := req.headers.get("link")) and "next" in link:
                page += 1
            else:
                break

    outfile.write_text(json.dumps(repos, indent=4))
    return repos


async def clone(sem, repo):
    async with sem:
        await asyncio.subprocess.create_subprocess_exec(
            "git",
            *[
                "clone",
                "--recurse-submodules",
                repo["ssh_url"],
                Path("QSPlugins") / repo["name"],
            ],
        )


async def clone_many(repos):
    sem = asyncio.Semaphore(10)
    coros = [
        clone(sem, repo)
        for repo in repos
        if (url := repo.get("ssh_url")) and "qsplugin" in url.lower()
    ]
    await asyncio.gather(*coros)


def main():
    outfile = Path("repos.json")
    if outfile.is_file():
        repos = json.loads(outfile.read_text())
    else:
        repos = scrape(outfile)

    asyncio.run(clone_many(repos))


if __name__ == "__main__":
    main()

and to build the plugin:

#!/bin/bash

set -Eeuf -o pipefail

log() {
  echo "$*" > /dev/stderr
}

err() {
  log "error: $*"
  exit 1
}

json() {
  input=$1
  target=$2
  tr -d '\n' <<< "${input}" | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)${target}"
}

main() {

  local plugin_name
  plugin_name=$1

  # Workaround for no mapfile in bash 3, preserving compatibility with /bin/bash
  target_plugin=()
  while read -r -d '' target; do
    target_plugin+=("${target}")
  done < <(
    find QSPlugins \
      -maxdepth 1 \
      -mindepth 1 \
      -type d \
      -iname "*${plugin_name}*" \
      -print0
  )

  if [[ "${#target_plugin[@]}" -ne 1 ]]; then
    err "possible matches for plugin ${plugin_name} ${target_plugin[*]}"
  fi

  plugindir="${target_plugin[0]}"
  pushd "${plugindir}"
  git stash
  git pull origin master
  git submodule update --init --recursive

  INFOPLIST_FILE=$(find . ./Resources -maxdepth 1 -name Info.plist -print -quit)
  if [[ -z "${INFOPLIST_FILE}" ]]; then
    err "no plist"
  fi

  PYTHONPATH=/tmp/QS/Tools/python-support \
    INFOPLIST_FILE=${INFOPLIST_FILE} \
    QS_BACKWARDS_COMPATIBILITY_BREAK=4001 \
    QS_BUNDLE_VERSION=4026 \
    /tmp/QS/Tools/bltrversion

  project=$(find . -maxdepth 1 -name '*.xcodeproj' -not -iname "*test.xcodeproj" -print -quit)

  if [[ -z "${project}" ]]; then
    scheme_list=$(xcodebuild -list -json || true)
  else
    scheme_list=$(xcodebuild -list -json -project "${project}")
  fi

  if [[ -z "${scheme_list}" ]]; then
    err "unable to determine scheme list"
  fi

  # build (taken from the default Xcode Github action: https://github.com/quicksilver/Quicksilver/new/master?filename=.github/workflows/objective-c-xcode.yml&workflow_template=objective-c-xcode)
  scheme=$(json "${scheme_list}" "['project']['targets'][0]")

  log "Using default scheme: ${scheme}"
  filetype_parameter="project"

  # Absence of a project can still build, but will error if `-project` is specified
  if [[ -z "${project}" ]]; then
    SETTINGS=$(xcodebuild -configuration Release -scheme "${scheme}" -showBuildSettings -json)
    xcodebuild build -quiet -configuration Release -scheme "${scheme}"
  else
    SETTINGS=$(xcodebuild -configuration Release -scheme "${scheme}" -project "${project}" -showBuildSettings -json)
    xcodebuild build -quiet -configuration Release -scheme "${scheme}" -"${filetype_parameter}" "${project:-}"
  fi

  FULL_PRODUCT_NAME=$(json "${SETTINGS}" '[0]["buildSettings"]["FULL_PRODUCT_NAME"]')

  log "Built ${FULL_PRODUCT_NAME} successfully"

  while :; do
    read -r -p "push changes? [y/n]: " response
    case "${response}" in
      Y | y) break ;;
      *)
        echo "bye"
        exit 0
        ;;
    esac
  done

  git commit --all --message="Update version number for M1 build"
  git push origin master
  log "Pushed ${FULL_PRODUCT_NAME} to master"
  "${QS_REPO}/Quicksilver/Tools/qs-push-plugin" \
    --changes "<ul><li>Updated for Apple M1 Silicon</li></ul>" \
    --password "${QS_PLUGIN_PASS}" \
    "/tmp/QS/build/Release/${FULL_PRODUCT_NAME}"
  log "Pushed ${FULL_PRODUCT_NAME} to main QS repo"
}
main "$@"

@pjrobertson
Copy link
Member Author

pjrobertson commented Feb 16, 2022 via email

@n8henrie
Copy link
Member

Very helpful, thanks for the reminder. I know I've read through it before, but reviewing it helped resolve the first few errors.

(Hopefully some of these keywords will be easy issue search terms for other contributors / new devs.)

@skurfer
Copy link
Member

skurfer commented Feb 16, 2022

I ran across quite a few plug-ins that were either missing frameworks, or they weren’t correctly set up.

It should look like this for each one.

Screen Shot 2022-02-15 at 9 31 34 PM

@n8henrie
Copy link
Member

OK, I think I figured out my issue -- at least in part -- and why it seemed to suddenly fix itself last time as well. I cloned the recently updated iCal plugin to have something that should work, but was still not able to find e.g. QSFoundation.h.

I knew the plugin build depends on the quicksilver build, which creates /tmp/QS (and /tmp/QS/build/{Debug,Release} etc.), as well as the QSFrameworks and QS_SOURCE_ROOT paths).

What I discovered, is that when I (out of habit) run the clean action (cmdshiftk) from the Plugin, I can no longer successfully build the plugin.

I have to return to the Xcode window building Quicksilver, re-build there, and then return to the plugin window, make sure not to clean, and then build -- and the build succeeds.

Does this sound right? I didn't expect a clean run from the plugin project to be removing necessary build artifacts from the Quicksilver build.

@skurfer
Copy link
Member

skurfer commented Feb 16, 2022

Does this sound right? I didn't expect a clean run from the plugin project to be removing necessary build artifacts from the Quicksilver build.

Hmmm. That doesn’t sound right. I feel like I used to do that all the time, but it’s been a while.

@pjrobertson
Copy link
Member Author

pjrobertson commented Feb 16, 2022 via email

@n8henrie
Copy link
Member

n8henrie commented Feb 16, 2022

xcodebuild clean build seems to have the same effect; removing the clean and the script has a fair number of successes. I'll update the script above.

With the script above, these seem to succeed without further effort (I imagine most already done by @skurfer -- should have filtered by last push date):

elements.trigger.mouse-qsplugin
com.apple.Automator-qsplugin
Yojimbo-qsplugin
QSQRCode-qsplugin
TextStartRanker-qsplugin
QSWindowInterfacePlugIn-qsplugin
ChatSupport-qsplugin
Shelf-qsplugin
elements.trigger.event-qsplugin
Displays-qsplugin
ScreenCapture-qsplugin
MicrosoftOffice-qsplugin
iTunes-qsplugin
BezelClassic-qsplugin
DictPlugin-qsplugin
ProcessManipulationPlugIn-qsplugin
QSOmniWebPlugIn-qsplugin
elements.textmanipulation-qsplugin
PathFinder-qsplugin
FaceTime-qsplugin
com.apple.Safari-qsplugin
NotificationHub-qsplugin
Abracadabra-qsplugin
elements.websearch-qsplugin
UIAccess-qsplugin
Menu-qsplugin
Networking-qsplugin
Dash-qsplugin
Deminimizer-qsplugin
Compression-qsplugin
elements.hfsattributes-qsplugin
Services-qsplugin
Keychain-qsplugin
Cyberduck-qsplugin
CommandLineTool-qsplugin
Spotlight-qsplugin
ImageManipulation-qsplugin
Terminal-qsplugin
com.apple.Xcode.devdocs-qsplugin
com.apple.AddressBook-qsplugin
RemoteHosts-qsplugin
GoogleChrome-qsplugin
iCal-qsplugin
QuickTimePlayer-qsplugin
ExtraScripts-qsplugin
MiniBezel-qsplugin
Calculator-qsplugin

Failing:

Firefox-qsplugin
Bluetooth-qsplugin
com.apple.spaces-qsplugin
CLIX-qsplugin
OnMyCommand-qsplugin
DesktopManager-qsplugin
Stikkit-qsplugin
Transmit-qsplugin
QSDesktopPictureAction-qsplugin
Cl1p-qsplugin
AddressBookActionsPlugIn-qsplugin
QSHomestarRunnerPlugIn-qsplugin
GoogleCalendar-qsplugin
MailMate-qsplugin
QSCubeInterface-unused-qsplugin
Messages-qsplugin
CubeInterface-qsplugin
com.apple.Mail-qsplugin
Slideshow-qsplugin
Indigo-qsplugin
Daemons-qsplugin
MachineSource-qsplugin
Flashlight-qsplugin
Monolith-qsplugin
Skype-qsplugin
Dock-qsplugin
Bezel-qsplugin
UserAccounts-qsplugin
public.file.tags-qsplugin
Printer-qsplugin
QSSlimInterfacePlugIn-qsplugin
Xattr-qsplugin
QSShiiraPlugIn-qsplugin
OrnateInterface-qsplugin
XattrMetadataImporter-qsplugin
Eudora-qsplugin
Mini-qsplugin
Markdown-qsplugin
Alarm-qsplugin
com.facebook-qsplugin
SocialBookmarks-qsplugin
BuddyPop-qsplugin
remember-the-milk-qsplugin
Mailsmith-qsplugin
Audio-qsplugin
GrowlNotifier-qsplugin
elements.update-qsplugin
Camino-qsplugin
Translation-qsplugin
DeliciousLibrary-qsplugin
elements.clipboard-qsplugin
elements.support.music-qsplugin
elements.trigger.hotkey-qsplugin
com.google.mail-qsplugin
QSBezelInterfacePlugIn-qsplugin
CloudApp-qsplugin
Flickr-qsplugin
elements.support.mail-qsplugin
elements.trigger.time-qsplugin
BBEdit-qsplugin
AirPort-qsplugin
Deviant-qsplugin
Google-qsplugin
Phone-qsplugin
Viscosity-qsplugin
iTerm2-qsplugin
DokuWiki-qsplugin
elements.composerui-qsplugin
MusicArtwork-qsplugin
QSRSSPlugIn-qsplugin
NimbusAppSwitcher-qsplugin
DiskImage-qsplugin
AOL-qsplugin
Amazon-qsplugin
CalendarSupport-qsplugin
QSPatchPlugIn-qsplugin
Template-qsplugin
Evernote-qsplugin
QSOmniFocusPlugIn-qsplugin
X10PlugIn-qsplugin
SafariSearches-qsplugin
Expert-qsplugin
FindModule-qsplugin
com.apple.Xcode.application-qsplugin
SoundSupport-qsplugin
Adium-qsplugin
QSAdiumPlugIn-qsplugin
Teleflip-qsplugin
PowerManagementPlugIn-qsplugin
DiffModule-qsplugin
elements.webbridge-qsplugin
QSFullscreenPlugIn-qsplugin
elements.support.window-qsplugin
ProcessSwitcherSupportPlugIn-qsplugin
ColloquyPlugin-qsplugin
FileTagging-qsplugin
QSSherlockPlugIn-qsplugin
NetNewsWire-qsplugin
LegacyAudio-qsplugin
iPhoto-qsplugin
DiscInterface-qsplugin
YouControlDesktopsPlugIn-qsplugin
SystemKeys-qsplugin
TSActionsPlugin-qsplugin
NowContact-qsplugin
QSSpellcheckAction-qsplugin
QSWeatherPlugin-qsplugin
elements.trigger.gesture-qsplugin
NetworkLocation-qsplugin
RemoteDesktop-qsplugin
PrimerInterface-qsplugin
elements.survey-qsplugin
InternetExplorer-qsplugin
TextMate-qsplugin
Editor-qsplugin
StartupDisk-qsplugin

EDIT: remove QSPlugin/ prefix

@pjrobertson
Copy link
Member Author

Here's a ranking of top 45 plugins by all-time downloads. Looks like most are already re-build and released. Let's make sure the these are re-built before we announce 2.0.0. iTunes is number one - we should update that to work with Music I guess.

+-------------------------------------------------------+---------+
| identifier                                            | dls     |
+-------------------------------------------------------+---------+
| com.blacktree.Quicksilver.QSiTunesPlugIn              |  927176 |
| com.blacktree.Quicksilver.QSSafariPlugIn              |  444939 |
| com.blacktree.Quicksilver.QSAddressBookPlugIn         |  432135 |
| com.blacktree.Quicksilver.QSTerminalPlugIn            |  334308 |
| com.blacktree.Quicksilver.QSAppleMailPlugIn           |  324278 |
| com.blacktree.Quicksilver.QSEmailSupport              |  312152 |
| se.stdin.quicksilver.GoogleChrome                     |  280363 |
| com.blacktree.Quicksilver.QSKeychainPlugIn            |  255774 |
| com.blacktree.Quicksilver.QSWebSearchPlugIn           |  248645 |
| com.qsapp.Networking                                  |  200737 |
| com.blacktree.Quicksilver.QSFirefoxPlugIn             |  193340 |
| com.blacktree.quicksilver.TSCalculatorPlugin          |  183881 |
| com.blacktree.Quicksilver.QSClipboardPlugIn           |  141902 |
| com.blacktree.Quicksilver.QSShelfPlugIn               |  129241 |
| com.qsapp.Quicksilver.MicrosoftOfficePlugin           |  127561 |
| com.robertson.Quicksilver.OnePassword                 |  111178 |
| com.qsapp.QSFaceTime                                  |  107745 |
| com.blacktree.Quicksilver.QSGrowlPlugIn               |   92758 |
| com.blacktree.Quicksilver.QSiCalModule                |   65658 |
| se.stdin.quicksilver.iTerm2                           |   65373 |
| com.skurfer.Quicksilver.RemoteHosts                   |   63182 |
| com.blacktree.Quicksilver.QSGmailPlugIn               |   62739 |
| com.blacktree.Quicksilver.QSDeveloperPlugIn           |   57236 |
| com.blacktree.Quicksilver.QSSpotlightPlugIn           |   55846 |
| com.blacktree.Quicksilver.QSScreenCapturePlugIn       |   51874 |
| com.blacktree.Quicksilver.QSUIAccessPlugIn            |   50543 |
| com.blacktree.Quicksilver.QSTextManipulationPlugIn    |   49604 |
| com.blacktree.Quicksilver.QSCompressionPlugIn         |   47328 |
| com.blacktree.Quicksilver.QSCommandLineTool           |   46740 |
| com.blacktree.Quicksilver.BezelHUD                    |   44533 |
| com.qsapp.Quicksilver.NostromoInterface               |   44073 |
| com.blacktree.Quicksilver.QSCubeInterfacePlugIn       |   44069 |
| com.blacktree.Quicksilver.QSMenuInterfacePlugin       |   43486 |
| com.blacktree.Quicksilver.QSExtraScriptsPlugIn        |   41091 |
| com.blacktree.Quicksilver.QSServicesMenuPlugIn        |   39601 |
| com.blacktree.Quicksilver.QSImageManipulationPlugIn   |   38170 |
| com.blacktree.Quicksilver.QSiPhotoPlugIn              |   38082 |
| com.blacktree.Quicksilver.QSiChatPlugIn               |   37794 |
| com.blacktree.Quicksilver.QSDictionaryPlugIn          |   37631 |
| com.blacktree.Quicksilver.QSMiniInterfacePlugin       |   34593 |
| com.blacktree.Quicksilver.QSChatSupport               |   34193 |
| com.blacktree.Quicksilver.QSMusicSupport              |   33329 |
| com.blacktree.Quicksilver.Cyberduck                   |   30267 |

@pjrobertson
Copy link
Member Author

I've updated the original post to split those we're yet to build, but need to build for 2.0

@n8henrie
Copy link
Member

n8henrie commented Feb 16, 2022

Using repos.json from above to filter repos with no pushes in 2022:

$ jq --raw-output '.[] | select((.pushed_at | fromdateiso8601 ) < ("2022-01-01" | strptime("%Y-%m-%d") | mktime)) | .name' repos.json
Plugins
1Password-Plugin
QSCubeInterface-unused-qsplugin
AOL-qsplugin
AddressBookActionsPlugIn-qsplugin
Alarm-qsplugin
Amazon-qsplugin
LegacyAudio-qsplugin
BBEdit-qsplugin
Bezel-qsplugin
Bluetooth-qsplugin
BuddyPop-qsplugin
CLIX-qsplugin
CalendarSupport-qsplugin
Camino-qsplugin
Cl1p-qsplugin
ColloquyPlugin-qsplugin
Cyberduck-qsplugin
Daemons-qsplugin
DeliciousLibrary-qsplugin
DesktopManager-qsplugin
Deviant-qsplugin
DiffModule-qsplugin
DiscInterface-qsplugin
DiskImage-qsplugin
Dock-qsplugin
DokuWiki-qsplugin
Editor-qsplugin
Eudora-qsplugin
Expert-qsplugin
FindModule-qsplugin
Firefox-qsplugin
Flashlight-qsplugin
Flickr-qsplugin
Google-qsplugin
GoogleCalendar-qsplugin
GrowlNotifier-qsplugin
Indigo-qsplugin
MachineSource-qsplugin
Mailsmith-qsplugin
Markdown-qsplugin
Mini-qsplugin
Monolith-qsplugin
MusicArtwork-qsplugin
NetNewsWire-qsplugin
NetworkLocation-qsplugin
NimbusAppSwitcher-qsplugin
NowContact-qsplugin
OnMyCommand-qsplugin
OrnateInterface-qsplugin
Phone-qsplugin
PowerManagementPlugIn-qsplugin
PrimerInterface-qsplugin
Printer-qsplugin
ProcessSwitcherSupportPlugIn-qsplugin
QSAdiumPlugIn-qsplugin
QSBezelInterfacePlugIn-qsplugin
QSDesktopPictureAction-qsplugin
QSFullscreenPlugIn-qsplugin
QSHomestarRunnerPlugIn-qsplugin
QSOmniFocusPlugIn-qsplugin
QSOmniWebPlugIn-qsplugin
QSPatchPlugIn-qsplugin
QSRSSPlugIn-qsplugin
QSSherlockPlugIn-qsplugin
QSShiiraPlugIn-qsplugin
QSSlimInterfacePlugIn-qsplugin
QSSpellcheckAction-qsplugin
QSWeatherPlugin-qsplugin
RemoteDesktop-qsplugin
SafariSearches-qsplugin
Skype-qsplugin
Slideshow-qsplugin
SoundSupport-qsplugin
Spotlight-qsplugin
StartupDisk-qsplugin
Stikkit-qsplugin
SystemKeys-qsplugin
TSActionsPlugin-qsplugin
Teleflip-qsplugin
TextMate-qsplugin
Translation-qsplugin
Transmit-qsplugin
UserAccounts-qsplugin
X10PlugIn-qsplugin
Xattr-qsplugin
XattrMetadataImporter-qsplugin
YouControlDesktopsPlugIn-qsplugin
com.apple.Automator-qsplugin
com.apple.Mail-qsplugin
com.apple.Xcode.application-qsplugin
com.apple.Xcode.devdocs-qsplugin
Messages-qsplugin
com.apple.spaces-qsplugin
com.facebook-qsplugin
com.google.mail-qsplugin
SocialBookmarks-qsplugin
elements.composerui-qsplugin
elements.support.mail-qsplugin
elements.support.music-qsplugin
elements.support.window-qsplugin
elements.survey-qsplugin
elements.trigger.gesture-qsplugin
elements.trigger.hotkey-qsplugin
elements.trigger.time-qsplugin
elements.update-qsplugin
elements.webbridge-qsplugin
iPhoto-qsplugin
public.file.tags-qsplugin
InternetExplorer-qsplugin
PluginDevelopmentReference
MicrosoftOffice-qsplugin
Template-qsplugin
AirPort-qsplugin
iTunes-qsplugin
CubeInterface-qsplugin
qs-update
Adium-qsplugin
remember-the-milk-qsplugin
iTerm2-qsplugin
QuickTimePlayer-qsplugin
qsopera
MiniBezel-qsplugin
Deminimizer-qsplugin
QSQRCode-qsplugin
Evernote-qsplugin
Abracadabra-qsplugin
ndhotkeyevent
ChatSupport-qsplugin
OpenMetaFileTagging
CloudApp-qsplugin
VDKQueue
FileTagging-qsplugin
MailMate-qsplugin
LaunchAtLoginController
showcase
plugin_template

Looks like these have not been updated but can probably just get scripted:

$ comm -1 -2 <(sort norecentpushes) <(sort success.log)
Abracadabra-qsplugin
ChatSupport-qsplugin
Cyberduck-qsplugin
Deminimizer-qsplugin
MicrosoftOffice-qsplugin
MiniBezel-qsplugin
QSOmniWebPlugIn-qsplugin
QSQRCode-qsplugin
QuickTimePlayer-qsplugin
Spotlight-qsplugin
com.apple.Automator-qsplugin
com.apple.Xcode.devdocs-qsplugin
iTunes-qsplugin

As a test run, I built iTunes-qsplugin, confirmed it resulted in a universal binary, confirmed it installed (admittedly without testing functionality), and then ran qs-push-plugin args... -- I'm getting a password prompt. Had hoped it would just pick up my ssh config.

EDIT: To be more explcity -- @skurfer, do I need a password to use qs-push-plugin?

@pjrobertson
Copy link
Member Author

@n8henrie - Yes, you need a password for qs-push-plugin. PM for it.

I've updated the 1st post to mark my name next to plugins I will test and update. We have two options here: just blindly update a plugin to work on Apple Silicon, or test functionality and fix any broken plugins. I vote for the latter. So e.g. for the iTunes-plugin - we should rename it to 'Music', and at the very least test that it still works before pushing any changes.

@skurfer
Copy link
Member

skurfer commented Feb 17, 2022

The iTunes plug-in won’t work at all. See #2495

I think all we need to do is

  1. Rewrite QSiTunesDatabase to pull data from the newer iTunesLibrary API
  2. Update all the bundle IDs so the plug-in interacts with the correct app (and we might as well rename a lot of classes and variables)

The catch is that I think the app has to be properly signed in order to be allowed access to iTunesLibrary.

@n8henrie
Copy link
Member

n8henrie commented Feb 17, 2022

The catch is that I think the app has to be properly signed in order to be allowed access

I see where it says that, but it seems to run without any extra effort in swift. (I imagine it might also in objc, I just can't whip up a test case.)

// swift-tools-version:5.5.0
import iTunesLibrary

let library = try ITLibrary(apiVersion: "1.1")
let playlists = library.allPlaylists

for playlist in playlists {
    for item in playlist.items {
    print("\(item.title) by \(item.artist?.name ?? "<blank>") from playlist \(playlist.name)")
    }
}
$ swiftc itunes.swift
$ ./itunes | tail
I Get It by Chevelle from playlist Workout
Judith by A Perfect Circle from playlist Workout
Set Me On Fire (Original) by Killaflaw from playlist Workout
This Is The New Shit by Marilyn Manson from playlist Workout
Like A G6 by Far East Movement from playlist Workout
Forgot About Dre by Dr. Dre from playlist Workout
Blue Monday by Orgy from playlist Workout
The Hand That Feeds by Nine Inch Nails from playlist Workout
Burn It Down by Linkin Park from playlist Workout
Party Rock Anthem by Lmfao from playlist Workout

@floriandk
Copy link

The updated 1.7.0 that I got together with other updates today gets installed but isn't working with QS 1.6.1 on OS 10.12.6: Not reacting to cmd-L, pref-pane empty. (I am not using other plug-ins much, but likewise installed new Contacts-plugin seems to be working.)

If you (understandably enough) don't want to support 10.12 any more there should be a block for the updates or a warning. Also a link to the earlier versions of the plugins from https://qsapp.com/plugins.php would be good to have.

@n8henrie
Copy link
Member

Not reacting to cmd-L

Clipboard history?

pref-pane empty

Can you send a screenshot?

I'm confused about 1.7.0 vs 1.6.1 -- which are you using?

@floriandk
Copy link

Not reacting to cmd-L

Clipboard history?

yes! (edited the name out again, sorry)

pref-pane empty

Can you send a screenshot?

https://www.dropbox.com/s/kwohurxupg86q47/Screen%20Shot%202022-02-18%20at%2016.14.25.png?dl=0

I'm confused about 1.7.0 vs 1.6.1 -- which are you using?

QS 1.6.1, the plug-in states its version as 1.7.0

https://www.dropbox.com/s/g9cc9k4axqasjyg/Screen%20Shot%202022-02-18%20at%2016.15.10.png?dl=0

Plugin version 1.5.0 from my backup still working nicely.

@n8henrie
Copy link
Member

Ok, so this is specifically the clipboard plugin? If you can confirm I think we should make a separate issue.

Mine is showing version clipboard plugin version 1.6.2 -- can you refresh and see if that is available?

@floriandk
Copy link

Ok, so this is specifically the clipboard plugin? If you can confirm I think we should make a separate issue.

yes, as far as I can see the other updated plugins work, but, as I said, I hardly use most of them apart from Contacts and Clipboard. The Dictionary plugin comes up when evoked, but doesn't seem to send the word to the dictionary app though. But I wouldn't know if it did earlier as I didn't use it.

Mine is showing version clipboard plugin version 1.6.2 -- can you refresh and see if that is available?

After reverting to 1.5.0 the update dialog offers only 1.7.0:

https://www.dropbox.com/s/cpr2z5zuy5l0pqo/Screen%20Shot%202022-02-18%20at%2017.51.37.png?dl=0

@pjrobertson
Copy link
Member Author

Thanks for the report @floriandk - v1.7.0 of the clipboard plugin was just released for Apple Silicon. If you're on 10.12, then you should stick with the previous version.

I have updated our system to not offer you the v1.7.0 version now. Stick to the 1.5.0 version of the plugin, and you should be all good!

Thanks

@pjrobertson
Copy link
Member Author

Edit: I already upgraded and pushed the websearch plugin as I made that guide.

@n8henrie
Copy link
Member

Back in town, but will be a busy week at work.

I incorporated @pjrobertson's PLUGIN_NAME fix here and Calculator now builds and signs on GA.

$ codesign --verify -vvv Calculator\ Plugin.qsplugin/
Calculator Plugin.qsplugin/: valid on disk
Calculator Plugin.qsplugin/: satisfies its Designated Requirement

Unfortunately, I'm getting a warning with double-click to install:

Screen Shot 2022-03-19 at 11 03 21

Have you guys been seeing this?

@n8henrie
Copy link
Member

n8henrie commented Mar 19, 2022

Got Twitter building on GA (had to add a new secret for Consumerkey.h): https://github.com/quicksilver/Twitter-Plugin/actions

I get the same warning as in the post above, and it's a bit of a pain with right clicking -> open, relaunch, it repeats this a few times, I eventually get the "do you really want to open" dialog. I wasn't getting this before, wonder if it's because I updated to MacOS 12.3 last night? 🤦‍♂️

But it works! After installing the GA build: https://twitter.com/n8henrie/status/1505235750110986243?s=20&t=9Hpm9yq4Zgv_QReKZUjg0A

EDIT: I pushed the new plugin, it should be live.

@n8henrie
Copy link
Member

Tweaked the signing action a bit to give the artifact for the signed plugin* a pretty name (so one's ~/Downloads folder isn't full of indistinguishable SIGNED_PLUGIN (7).zip files for several different plugins): https://github.com/quicksilver/Calculator-qsplugin/blob/88eeb324f4e38db8b16353ab663487daaa8ad36e/.github/workflows/ci.yml

  • I'd like to merge this into Calculator master if that's okay
  • as noted above I think it would be nice to refactor the core logic into something in Quicksilver/Tools, leaving the GitHub Action fairly bare

Any concerns with these?

* Only pretty-naming the signed plugin artifact for now because there is a little more "doing" involved with the unsigned artifact, since the signing step depends on the unsigned artifact, and the signed version doesn't have access to the plugin name at the point of downloading the artifact -- rather than dealing with a dynamically named dependency, it seems a lot easier to just leave this as UNSIGNED_PLUGIN for the time being, which serves the purpose of clearly differentiating them.

@n8henrie
Copy link
Member

n8henrie commented Mar 19, 2022

@pjrobertson -- Just curious, is TSCalculatorPlugin (as opposed to EDIT: hehe QSCalculatorPlugin) a typo in the Calculator plugin?

$ ls -d ~/Library/Application\ Support/Quicksilver/Plugins/*Calc*
/Users/n8henrie/Library/Application Support/Quicksilver/Plugin/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin

In the plugin repo:

$ git grep TSCalculator
CalculatorPlugin.xcodeproj/project.pbxproj:                             PRODUCT_BUNDLE_IDENTIFIER = com.blacktree.quicksilver.TSCalculatorPlugin;
CalculatorPlugin.xcodeproj/project.pbxproj:                             PRODUCT_BUNDLE_IDENTIFIER = com.blacktree.quicksilver.TSCalculatorPlugin;
Info.plist:                             <string>com.blacktree.quicksilver.TSCalculatorPlugin</string>
$ git log -G TSCalculator
commit abe5c598e52c951afc27437c36304a8c67a5c8db
Author: Patrick Robertson <robertson.patrick@gmail.com>
Date:   Fri May 6 10:16:03 2016 +0800

    Upgrade project (Xcode defaults)

commit 9ff5bbbc048999eb1f74cd70c09ab2018388eeb1
Author: Etienne Samson <tiennou7@gmail.com>
Date:   Mon Feb 11 23:09:11 2013 +0100

    Documentation + s/Module/Plugin/ + remove unused files.

commit 1ba53debc6c1bb743e8656798a90f57f79caab61
Author: Patrick Robertson <robertson.patrick@gmail.com>
Date:   Sun Jul 10 19:05:48 2011 +0100

    initial commit

@n8henrie
Copy link
Member

Regarding #2634 (comment), here's what I'm seeing when I try to install the codesigned plugin, after clicking "Relaunch":

$ log stream --predicate 'eventMessage contains[c] "library load"'
Filtering the log data using "composedMessage CONTAINS[c] "library load""
Timestamp                       Thread     Type        Activity             PID    TTL
2022-03-20 09:21:24.808256-0600 0x30a31a   Default     0x0                  0      0    kernel: (AppleSystemPolicy) ASP: Library load (/Users/n8henrie/Library/Application Support/Quicksilver/PlugIns/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin/Contents/MacOS/Calculator Plugin) rejected: library load disallowed by system policy
2022-03-20 09:21:24.808855-0600 0x30a31a   Default     0x0                  70192  0    Quicksilver: (QSCore) Failed loading bundle NSBundle </Users/n8henrie/Library/Application Support/Quicksilver/PlugIns/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin> (not yet loaded) error: Error Domain=NSCocoaErrorDomain Code=3588 "dlopen(/Users/n8henrie/Library/Application Support/Quicksilver/PlugIns/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin/Contents/MacOS/Calculator Plugin, 0x0109): tried: '/Users/n8henrie/Library/Application Support/Quicksilver/PlugIns/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin/Contents/MacOS/Calculator Plugin' (code signature in <5AB228AD-44C8-3CEC-9057-32FFBACA0F6F> '/Users/n8henrie/Library/Application Support/Quicksilver/PlugIns/com.blacktree.quicksilver.TSCalculatorPlugin.23A.qsplugin/Contents/MacOS/Calculator Plugin' not valid for use in process: library load disallowed by system policy)" UserInfo={NSLocalizedFailureReason=The bundle couldn’t be loaded., NSLocalizedRecoverySuggestion=Try reinstalling the bundle., NSFilePath=/Users/n8henrie/Library/Application Support/Quicksil

@n8henrie
Copy link
Member

Reviewing https://support.blackfire.io/en/articles/3669492-issues-with-macos-catalina:

$ xattr Calculator\ Plugin.qsplugin/
com.apple.macl
com.apple.quarantine
$ xattr -cr Calculator\ Plugin.qsplugin/
$ xattr Calculator\ Plugin.qsplugin/

It then installs without this problem. I'll add to the GA for Calculator and retest.

@n8henrie
Copy link
Member

xattr -cr in CI doesn't fix the issue -- the problematic attributes get re-added upon download:

$ xattr Calculator\ Plugin.qsplugin
com.apple.macl
com.apple.quarantine

Just removing the quarantine flag seems to be sufficient:

$ xattr -d com.apple.quarantine Calculator\ Plugin.qsplugin

Oddly, it seems like it installed from the QS interface just fine, even though it still has quarantine flags:

$ cd ~/Library/Application\ Support/Quicksilver/PlugIns
$ xattr -r com.qsapp.QSTwit.A7.qsplugin
com.qsapp.QSTwit.A7.qsplugin/Contents/_CodeSignature/CodeResources: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/_CodeSignature: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/MacOS/QSTwitter: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/MacOS: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/Resources/QSTwit.icns: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/Resources/GTMOAuthWindow.nib: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/Resources/QSTwitterPrefPane.nib: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/Resources: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents/Info.plist: com.apple.quarantine
com.qsapp.QSTwit.A7.qsplugin/Contents: com.apple.quarantine

¯\_(ツ)_/¯

So for the moment it seems that separately downloading and double-click-to-installing is a minor problem. So I guess this might end up being a documentation issue -- people manually downloading and installing will likely face this issue. Hopefully people installing via QS will not have trouble.

@skurfer
Copy link
Member

skurfer commented Mar 20, 2022

I think documenting this on https://qsapp.com/plugins.php is sufficient. I don’t know if anyone ever installs that way these days, unless there are unofficial plug-ins out there somewhere.

@pjrobertson
Copy link
Member Author

@pjrobertson -- Just curious, is TSCalculatorPlugin (as opposed to EDIT: hehe QSCalculatorPlugin) a typo in the Calculator plugin?

No idea how that happened, I think it could be a typo, 6 years ago so... :P

My guess (just a guess) is that the calculator plugin can't be signed because it's using a private framework, something that's probably not allowed. I can't find anything to support my guess though. I also can't find a decent alternative for the Calculate.framework either.

@pjrobertson
Copy link
Member Author

EDIT: I pushed the new plugin, it should be live.

Great! I've marked it off in the 1st post. Just MiniInterface and 1Password left now.

@pjrobertson pjrobertson modified the milestones: 2.0.0, 2.1.0 Mar 29, 2022
@jbaraban
Copy link

Has the Flashlight plugin been updated? It doesn't work for me (except under Rosetta). Thanks

@pjrobertson
Copy link
Member Author

It hasn't been updated yet, but I'll work on a new build and get it out in the next 1-2 days.

Thanks

@jbaraban
Copy link

jbaraban commented Apr 17, 2022 via email

@pjrobertson
Copy link
Member Author

Hi @jbaraban,

Please update to the latest version of the Flashlight plugin from within Quicksilver, it's now been updated to work with Apple Silicon :)

@jbaraban
Copy link

jbaraban commented Apr 19, 2022 via email

@pjrobertson
Copy link
Member Author

Any chance of reverting to the upper left hand corner placement

Done, and thanks for your support!

@pjrobertson pjrobertson modified the milestones: 2.1.0, 3.0.0 Apr 23, 2022
@jbaraban
Copy link

jbaraban commented Apr 24, 2022 via email

@n8henrie
Copy link
Member

n8henrie commented Oct 11, 2022 via email

@jbaraban
Copy link

jbaraban commented Oct 11, 2022 via email

@jbaraban
Copy link

jbaraban commented Nov 9, 2022

Apparently the image didn't come through last time:
image

@n8henrie
Copy link
Member

n8henrie commented Nov 9, 2022

Are you sure it was an update to the calculator plugin that caused it? Looks like Flashlight was updated about the same time: https://github.com/quicksilver/Flashlight-qsplugin

@n8henrie
Copy link
Member

n8henrie commented Nov 9, 2022

I've just reset both the flashlight and calculator plugins to a commit from ~6 months ago (the most recent commit after a long hiatus in both cases), and unfortunately I see the same behavior.

@jbaraban
Copy link

jbaraban commented Nov 10, 2022 via email

@n8henrie
Copy link
Member

@jbaraban -- would you mind creating a separate issue for the flashlight / calculator issue?

@jbaraban
Copy link

jbaraban commented Dec 14, 2022 via email

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

No branches or pull requests

5 participants