Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Scott Little edited this page May 7, 2014 · 8 revisions

Welcome to the Mail Plugin Manager toolset!

Mail Plugin Manager Icon

Mail plugin developers have specific challenges when creating a product and we all share some similar tasks that we ought to handle similarly, in order to ensure that our customers all understand the issues and can deal with those as easily as possible. These include ensuring that their plugins are up-to-date, working around Mail's sandbox, getting crash reports and proper installation of the plugin.

The Mail Plugin Manager toolset helps to standardize these tasks and give the user some control over the plugin environment, while allowing the developer to focus on writing the product that they need.


Main Features

  • Mail Plugin Manager (for users)
  • Installation
  • Uninstallation
  • Automatic Updates (without having to add a framework to your plugin)
  • Ability to send crash reports back to developer
  • Checks for compatibility of plugins at boot time (i.e. after an install)
  • Determine relevant information about the user's system (Mail, Message, etc.)
  • Allow the loading/unloading of LaunchAgents
  • Keep updated list of OS versions, including future versions, that are accessible to plugins
  • Preference migration into OS X sandbox for Mail
  • Ensures that Mail has been launched at least once to ensure that all the directories and such are there
  • Display list of plugins available on the internet that can be installed

The features provided are separated into 3 separate applications, a user facing app and a faceless app that always work together and the separate installer. In truth the faceless app (MailPluginTool), is not truly faceless as it does interact with the user, but it is a NSUIElement = 1 application.

The MailPluginTool application is be embedded inside of the Mail Plugin Manager application. When plugins call it this will be done using a file-based mechanism in order to be compatible with the sandbox. A .h file will be available with macros defined for the calls to the MailPluginTool. It's done this way in order to avoid namespace conflicts between plugins using this code. A List is provided in these docs so you can see what you can do.

The Installer comes as a pre-built application that your build process will need to modify and resign, but there are scripts available to help you construct your complete installer.

This manager supports Lion, Mountain Lion & Mavericks.

Why use this toolset?

  1. It allows you to easily integrate Sparkle, which isn't difficult in and of itself, but for plugins it can be a problem, when other plugins also include Sparkle. This way you don't have to maintain an additional application to avoid those problems.
  2. It gives you some tools to preemptively deal with Mail upgrades and UUID issues.
  3. It provides debugging tools for your user, i.e. system info collection and crash reports.
  4. It gives the user an easy way to manage the plugin.
  5. It provides a simplified installer and uninstaller, again without you having to maintain another separate application.
  6. It allows for the installation of plugins that have been made known to it as a way for promotion of a product.
  7. Integration for you is simple and straightforward, with no other dependencies.
  8. The more developers support Mail Plugin Manager, the more users will have a better Mail plugin experience.

Mail Plugin Manager Window

This interface is for the user to interact with and is the default mode when the Mail Plugin Manager is opened without a file. Here is an example of what it looks like:

Mail Bundle Manager Window


Contents

  1. Read about the Mail Plugin Manager
  2. See how to integrate the MailPluginTool
  3. Find out how to use the Plugin Installer

Thanks to Fabian Jäger from Chungwasoft for his contributions to Version 2.0.

Clone this wiki locally