Reputation: 21
I am developing an add in for Outlook which contains a custom tab, some groups and several buttons.
As a sanity test I have created a manifest which will provide me with the custom tab, one group and one button, see example code below (redacted due to security/confidentiality concerns):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp
xsi:type="MailApp"
xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0"
xmlns:mailappor="http://schemas.microsoft.com/office/mailappversionoverrides/1.0">
<Id>3146b891-b800-431c-8fd3-feceea31a889</Id>
<Version>1.2</Version>
<ProviderName>redacted</ProviderName>
<DefaultLocale>en-US</DefaultLocale>
<DisplayName DefaultValue="redacted mikeeTest Add-In"/>
<Description DefaultValue="Various features from mikee directly in your Outlook or OWA."/>
<IconUrl DefaultValue="redacted"/>
<HighResolutionIconUrl DefaultValue="redacted"/>
<SupportUrl DefaultValue="redacted" />
<AppDomains>
<!-- redacted -->
</AppDomains>
<Hosts>
<Host Name="Mailbox"/>
</Hosts>
<Requirements>
<Sets>
<Set Name="MailBox" MinVersion="1.4"/>
</Sets>
</Requirements>
<FormSettings>
<Form xsi:type="ItemRead">
<DesktopSettings>
<SourceLocation DefaultValue="redacted"/>
<RequestedHeight>250</RequestedHeight>
</DesktopSettings>
</Form>
</FormSettings>
<Permissions>ReadWriteMailbox</Permissions>
<Rule xsi:type="RuleCollection" Mode="Or">
<Rule xsi:type="ItemIs" ItemType="Message" FormType="Edit" />
<Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" />
</Rule>
<DisableEntityHighlighting>false</DisableEntityHighlighting>
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
<Hosts>
<Host xsi:type="MailHost">
<DesktopFormFactor>
<FunctionFile resid="funcFile"/>
<ExtensionPoint xsi:type="MessageReadCommandSurface">
<CustomTab id="TabTest">
<Group id="mikeeTestGroup">
<Label resid="mikeeTestGroupLabel"/>
<Control xsi:type="Menu" id="mikeeTestMenu">
<Label resid="mikeeTestMenuLabel" />
<Supertip>
<Title resid="mikeeTestMenuTitle" />
<Description resid="mikeeTestMenuLabelDesc" />
</Supertip>
<Icon>
<bt:Image size="16" resid="mikeeTestMenuIcon-16" />
<bt:Image size="32" resid="mikeeTestMenuIcon-32" />
<bt:Image size="80" resid="mikeeTestMenuIcon-80" />
</Icon>
<Items>
<Item id="delBlock">
<Label resid="delBlockButtonLabel" />
<Supertip>
<Title resid="delBlockButtonTitle" />
<Description resid="delBlockButtonLabelDesc" />
</Supertip>
<Icon>
<bt:Image size="16" resid="delBlockIcon-16" />
<bt:Image size="32" resid="delBlockIcon-32" />
<bt:Image size="80" resid="delBlockIcon-80" />
</Icon>
<Action xsi:type="ExecuteFunction">
<FunctionName>deleteAndBlockSender</FunctionName>
</Action>
</Item>
<Item id="mvToInbox">
<Label resid="mvToInboxButtonLabel" />
<Supertip>
<Title resid="mvToInboxButtonTitle" />
<Description resid="mvToInboxButtonLabelDesc" />
</Supertip>
<Icon>
<bt:Image size="16" resid="mvToInboxIcon-16" />
<bt:Image size="32" resid="mvToInboxIcon-32" />
<bt:Image size="80" resid="mvToInboxIcon-80" />
</Icon>
<Action xsi:type="ExecuteFunction">
<FunctionName>moveToInbox</FunctionName>
</Action>
</Item>
<Item id="mvToLowPriority">
<Label resid="mvToLowPriorityButtonLabel" />
<Supertip>
<Title resid="mvToLowPriorityButtonTitle" />
<Description resid="mvToLowPriorityButtonLabelDesc" />
</Supertip>
<Icon>
<bt:Image size="16" resid="mvToLowPriorityIcon-16" />
<bt:Image size="32" resid="mvToLowPriorityIcon-32" />
<bt:Image size="80" resid="mvToLowPriorityIcon-80" />
</Icon>
<Action xsi:type="ExecuteFunction">
<FunctionName>moveToLowPriority</FunctionName>
</Action>
</Item>
<Item id="markAsSuspicious">
<Label resid="markAsSuspiciousButtonLabel" />
<Supertip>
<Title resid="markAsSuspiciousButtonTitle" />
<Description resid="markAsSuspiciousButtonLabelDesc" />
</Supertip>
<Icon>
<bt:Image size="16" resid="markAsSuspiciousIcon-16" />
<bt:Image size="32" resid="markAsSuspiciousIcon-32" />
<bt:Image size="80" resid="markAsSuspiciousIcon-80" />
</Icon>
<Action xsi:type="ExecuteFunction">
<FunctionName>markAsSuspicious</FunctionName>
</Action>
</Item>
</Items>
</Control>
</Group>
<Label resid="onePluginTabLabel"/>
</CustomTab>
</ExtensionPoint>
</DesktopFormFactor>
</Host>
</Hosts>
<Resources>
<bt:Images>
<bt:Image id="mikeeTestMenuIcon-16" DefaultValue="redacted"/>
<bt:Image id="mikeeTestMenuIcon-32" DefaultValue="redacted"/>
<bt:Image id="mikeeTestMenuIcon-80" DefaultValue="redacted"/>
<bt:Image id="delBlockIcon-16" DefaultValue="redacted"/>
<bt:Image id="delBlockIcon-32" DefaultValue="redacted"/>
<bt:Image id="delBlockIcon-80" DefaultValue="redacted"/>
<bt:Image id="mvToInboxIcon-16" DefaultValue="redacted"/>
<bt:Image id="mvToInboxIcon-32" DefaultValue="redacted"/>
<bt:Image id="mvToInboxIcon-80" DefaultValue="redacted"/>
<bt:Image id="mvToLowPriorityIcon-16" DefaultValue="redacted"/>
<bt:Image id="mvToLowPriorityIcon-32" DefaultValue="redacted"/>
<bt:Image id="mvToLowPriorityIcon-80" DefaultValue="redacted"/>
<bt:Image id="markAsSuspiciousIcon-16" DefaultValue="redacted"/>
<bt:Image id="markAsSuspiciousIcon-32" DefaultValue="redacted"/>
<bt:Image id="markAsSuspiciousIcon-80" DefaultValue="redacted"/>
</bt:Images>
<bt:Urls>
<bt:Url id="funcFile" DefaultValue="redacted"/>
</bt:Urls>
<bt:ShortStrings>
<bt:String id="mikeeTestGroupLabel" DefaultValue="Email Feedback"/>
<bt:String id="mikeeTestMenuLabel" DefaultValue="Email Feedback"/>
<bt:String id="mikeeTestMenuTitle" DefaultValue="Actions providing feedback"/>
<bt:String id="delBlockButtonLabel" DefaultValue="Delete and Block Sender"/>
<bt:String id="delBlockButtonTitle" DefaultValue="Delete and Block Sender"/>
<bt:String id="mvToInboxButtonLabel" DefaultValue="Move to Inbox"/>
<bt:String id="mvToInboxButtonTitle" DefaultValue="Mark as safe and put back in Inbox"/>
<bt:String id="mvToLowPriorityButtonLabel" DefaultValue="Move to Low Priority Inbox"/>
<bt:String id="mvToLowPriorityButtonTitle" DefaultValue="Remove from safe list and move to Low Priority"/>
<bt:String id="markAsSuspiciousButtonLabel" DefaultValue="Report as Suspicious"/>
<bt:String id="markAsSuspiciousButtonTitle" DefaultValue="Flag as suspicious"/>
<bt:String id="quarantineButtonLabel" DefaultValue="End User Web"/>
<bt:String id="quarantineButtonTitle" DefaultValue="Go to End User Web"/>
<bt:String id="aboutButtonLabel" DefaultValue="About"/>
<bt:String id="aboutButtonTitle" DefaultValue="About"/>
<bt:String id="onePluginTabLabel" DefaultValue="redacted"/>
</bt:ShortStrings>
<bt:LongStrings>
<bt:String id="mikeeTestMenuLabelDesc" DefaultValue="Give feedback about bulk and spam emails"/>
<bt:String id="delBlockButtonLabelDesc" DefaultValue="Move the email to Trash and add the sender to a block list"/>
<bt:String id="mvToInboxButtonLabelDesc" DefaultValue="Restore email to Inbox and remove from block list"/>
<bt:String id="mvToLowPriorityButtonLabelDesc" DefaultValue="Remove from safe list and move to Low Priority folder"/>
<bt:String id="markAsSuspiciousButtonLabelDesc" DefaultValue="Report this message as suspicious"/>
<bt:String id="quarantineButtonLabelDesc" DefaultValue="View you quarantine settings in end user web"/>
</bt:LongStrings>
</Resources>
</VersionOverrides>
</OfficeApp>
I have validated the manifest using Office Addin Validator which has provided the following output:
$ validate-office-addin ~/ef-manifest.xml
Calling validation service. This might take a moment...
-------------------------------------
Validation: Passed
Based on the requirements specified in your manifest, your add-in can run on the following platforms; your add-in will be tested on these platforms when you submit it to the Office Store:
- Outlook 2013 or later
- Outlook 2016 or later
- Outlook 2016 for Mac
- Outlook on the Web
Important: This analysis is based on the requirements specified in your manifest and does not account for any runtime JavaScript calls within your add-in. For information about which API sets and features are supported on each platform, see Office Add-in host and platform availability. (https://dev.office.com/add-in-availability).
*This does not include mobile apps. You can opt-in to support mobile apps when you submit your add-in.
-------------------------------------
I have also confirmed that my dummy template has worked in with the following setup:
Windows 10 Pro
Outlook 2019 Version 1808 (Build 10338.20019)
The picture below shows the add in, the custom tab, the group and the button: custom tab working in Windows
The issue I am having is when I try to use the same manifest on a Mac whose setup is:
macOs High Sierra Version 10.13.6 (17G3025)
Outlook 2016 Version 16.16.4 (181110)
In this case the add in installs and can initially be seen in the 'my add-ins: custom add-ins' section of the store. However when I return to Outlook from the store the add in does not appear. If I then subsequently return to the store the add-in no longer shows up in the 'my add-ins: custom add-ins' section.
Some information I've already gathered: MS maintains a list of supported/availability for the different parts of the add ins. Currently add in commands are listed as being supported on all available platforms (Web, Windows, Mac, Android, etc). See the list here: MS Outlook add in support
Microsoft documentation states “You can use add-in commands to add a button on the ribbon or an item to a context menu.”, here: MS add in commands definition
Their documentation goes on to say “An add-in command appears on the ribbon as a button. When a user installs an add-in, its commands appear in the UI as a group of buttons labeled with the add-in name. This can either be on the ribbon's default tab or on a custom tab.”, here: MS custom tab support
I have already come across an issue on here which mentions that ribbon groups are not available in Outlook for Mac: Related stackoverflow question
So given this brief history I have two questions: 1) Are custom tabs supported in Outlook for Mac? and if so 2) Am I missing something in my manifest file?
Upvotes: 1
Views: 1095
Reputation:
You are not missing anything in the manifest. Mac Outlook doesn't support custom tabs. You will have to use Office Tab.
Upvotes: 2