Closed crcastle closed 4 months ago
Did some research into how the manifest is validated when the -p
flag is used. From these lines in the code for the office-addin-manifest
package, I see that a web service at https://validationgateway.omex.office.net/package/api/check is being used to validate the manifest.
I replicated the request using curl and get the same error, so it seems that the issue here is with this service. Can you ask the team or person responsible for this web service if the error I'm seeing is the intended behavior?
Here is the output of the request using curl:
❯ curl -s -X POST 'https://validationgateway.omex.office.net/package/api/check?clientId=Default' \
-H "Content-Type: application/xml" \
--data-binary "@manifest.xml"
{"utcTimestamp":"2024-02-15T03:18:48.0571929+00:00","status":"Rejected","errors":[{"id":"1f9a991b-be34-49c5-939a-46b5170d7dbf","title":"Icon URL Unreachable","content":"Unable to retrieve an image from the icon URL.","code":"The IconURL supplied in the app manifest is not reachable, IconURL : https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png."}],"warnings":[],"notes":[{"id":"c5506d85-f984-41dd-ab09-78fd9f584de9","title":"Package Type Identified","content":"Package of your add-in was parsed successfully."},{"id":"0bf7e171-217e-40a1-98ad-1f0eaed9098b","title":"Correct Package","content":"Your package matches the submission type."},{"id":"8cf46fb0-8901-49c0-b3c2-15c3114425b4","title":"Valid Manifest Schema","content":"Your manifest does adhere to the current set of XML schema definitions for Add-in manifests."},{"id":"a95552d7-e476-4dd9-a58d-dcf4a246e7af","title":"Manifest Version Correct Structure","content":"The manifest version number has the correct structure for the platform that it supports."},{"id":"587a65ee-44a8-4412-9ccb-73201a8bf5a1","title":"Manifest Version Correct Value","content":"The manifest version number is greater or equal to 1.0."},{"id":"f7bca1c6-051e-405a-88bf-5df8d263f3f0","title":"Manifest ID Valid Prefix","content":"The product ID in the manifest has a valid prefix","code":"d348c7c2-36c5-49cc-a8a2-ea185b8427ec"},{"id":"69e8d286-0a0b-44af-8a41-0193391478f0","title":"Manifest ID Correct Structure","content":"The structure of the product ID is correct.","code":"d348c7c2-36c5-49cc-a8a2-ea185b8427ec"},{"id":"8968ae09-0f70-49b5-a839-5410639f65e5","title":"Desktop Source Location Present","content":"A desktop or default source location URL is found."},{"id":"19192530-7680-4f18-a68a-8bd07b656422","title":"Secure Desktop Source Location","content":"The manifest desktop source location URLs use HTTPS."},{"id":"cec06602-b4a7-40e4-aa50-a13a29a90584","title":"The manifest source location URLs are valid.","content":"The manifest source location URLs are valid."},{"id":"69150951-4963-4c4b-ae6b-58c07160e673","title":"Supported Office Identified","content":"Supported Office products were successfully determined."},{"id":"64f19c25-db3f-445a-8af8-a8dc02701d14","title":"Support URL Present","content":"The manifest support URL is present.","code":"https://crcastle.github.io/saascap-data/assets/help/"},{"id":"abd58ba2-327b-48b7-ad18-c567f963d859","title":"Valid and reachabe Support URL","content":"The manifest support URL is valid and reachable.","code":"https://crcastle.github.io/saascap-data/assets/help/"},{"id":"38e76e9c-314f-4759-b3fb-3afa252ce0c6","title":"Valid OnlineMeetingCommandSurface ExtensionPoint.","content":"OnlineMeetingCommandSurface ExtensionPoint extracted from manifest is found to be valid."},{"id":"987201dd-ea13-4dc3-9ead-190f6ea3fb36","title":"Valid Manifest Resource Urls","content":"The manifest Resource URLs are valid."},{"id":"145e9494-a40d-43aa-98fd-bbb76b430d2f","title":"Valid Manifest AppDomain Urls","content":"The manifest AppDomain URLs are valid."},{"id":"c658985f-8366-4495-9b82-0a534450c406","title":"High Resolution Icon Present","content":"A high resolution icon element was expected and is present.","code":"https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"},{"id":"718c518d-b110-4d7e-b9a5-d8430e94c96b","title":"Supported High Resolution Icon URL File Extension","content":"The manifest high resolution icon URL has a valid image file extension.","code":"png"},{"id":"79b5a5c9-cb79-40c2-b584-436ab550f030","title":"Secure High Resolution Icon URL","content":"The manifest high resolution icon URL uses HTTPS.","code":"https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"},{"id":"1ecd4300-6e81-4fbb-9437-499a4c725df9","title":"Correct High Resolution Icon Dimensions","content":"The manifest high resolution icon dimensions are correct."},{"id":"1ba2f086-5f1b-401d-8ad6-482cb6526616","title":"Icon Present","content":"A icon element was expected and is present.","code":"https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"},{"id":"94330b32-277b-4292-9655-8acbc3ba6fd9","title":"Supported Icon URL File Extension","content":"The manifest icon URL has a valid image file extension.","code":"png"},{"id":"07780e16-8979-4fb8-b1c2-da8cfce1ed0c","title":"The manifest icon URL uses HTTPS.","content":"Secure Icon URL","code":"https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"},{"id":"99e2d71a-d2cb-41d1-949e-6cf7eeaede99","title":"All GetStarted strings are present in Resources","content":"All GetStarted strings are present in Resources"},{"id":"906eba01-3ef7-44d9-8b44-c606b4fb9f55","title":"Acceptance Test Completed","content":"Acceptance test service has finished checking provided add-in."}],"addInDetails":{"adminInstallOnly":false,"capabilities":[{"code":"ReadWriteDocument","title":"Can read and make changes to your document"},{"code":"SendReceiveData","title":"Can send data over the Internet"}],"defaultLocale":"en-US","description":"SaaS Capital Excel Tools","displayName":"SaaS Cap Data","highResolutionIconUrl":"https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png","hosts":["Workbook"],"iconUrl":"https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png","localizedDescriptions":{"en-US":"SaaS Capital Excel Tools"},"localizedDisplayNames":{"en-US":"SaaS Cap Data"},"localizedHighResolutionIconUrls":{"en-US":"https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"},"localizedIconUrls":{"en-US":"https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"},"localizedRootSourceUrls":{"en-US":"https://crcastle.github.io/saascap-data/taskpane.html"},"productId":"d348c7c2-36c5-49cc-a8a2-ea185b8427ec","providerName":"SaaS Capital","requirements":"<Requirements xmlns=\"http://schemas.microsoft.com/office/appforoffice/1.1\"><Sets DefaultMinVersion=\"1.1\"><Set Name=\"SharedRuntime\" MinVersion=\"1.1\" /></Sets></Requirements>","rootSourceUrl":"https://crcastle.github.io/saascap-data/taskpane.html","subtype":"TaskPane","supportedProducts":[{"code":"Mac_Excel","title":"Excel 2019 or later on Mac","version":"16.38.0.0"},{"code":"Win32_Excel","title":"Excel on Windows (Microsoft 365)","version":"16.0.12527.20092"},{"code":"WAC_Excel","title":"Excel on the web","version":"16.0"},{"code":"Mac_Excel","title":"Excel on Mac (Microsoft 365)","version":"16.38.0.0"}],"supportedLanguages":["en-US"],"type":"ClientInstalled","version":"1.0.5.0","autorunLaunchEvents":[]}}⏎
~/Desktop/WinShared/Saas Cap Data main*
❯
And if I format that JSON response in a more human-readable way, I get this. Note the error at the top of the JSON matches the error I reported when I opened this issue. But again, I don't understand the error because the URL is accessible, returns a 200 response, and returns a 32x32 PNG image.
{
"utcTimestamp": "2024-02-15T03:17:39.9340609+00:00",
"status": "Rejected",
"errors": [
{
"id": "1f9a991b-be34-49c5-939a-46b5170d7dbf",
"title": "Icon URL Unreachable",
"content": "Unable to retrieve an image from the icon URL.",
"code": "The IconURL supplied in the app manifest is not reachable, IconURL : https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png."
}
],
"warnings": [],
"notes": [
{
"id": "c5506d85-f984-41dd-ab09-78fd9f584de9",
"title": "Package Type Identified",
"content": "Package of your add-in was parsed successfully."
},
{
"id": "0bf7e171-217e-40a1-98ad-1f0eaed9098b",
"title": "Correct Package",
"content": "Your package matches the submission type."
},
{
"id": "8cf46fb0-8901-49c0-b3c2-15c3114425b4",
"title": "Valid Manifest Schema",
"content": "Your manifest does adhere to the current set of XML schema definitions for Add-in manifests."
},
{
"id": "a95552d7-e476-4dd9-a58d-dcf4a246e7af",
"title": "Manifest Version Correct Structure",
"content": "The manifest version number has the correct structure for the platform that it supports."
},
{
"id": "587a65ee-44a8-4412-9ccb-73201a8bf5a1",
"title": "Manifest Version Correct Value",
"content": "The manifest version number is greater or equal to 1.0."
},
{
"id": "f7bca1c6-051e-405a-88bf-5df8d263f3f0",
"title": "Manifest ID Valid Prefix",
"content": "The product ID in the manifest has a valid prefix",
"code": "d348c7c2-36c5-49cc-a8a2-ea185b8427ec"
},
{
"id": "69e8d286-0a0b-44af-8a41-0193391478f0",
"title": "Manifest ID Correct Structure",
"content": "The structure of the product ID is correct.",
"code": "d348c7c2-36c5-49cc-a8a2-ea185b8427ec"
},
{
"id": "8968ae09-0f70-49b5-a839-5410639f65e5",
"title": "Desktop Source Location Present",
"content": "A desktop or default source location URL is found."
},
{
"id": "19192530-7680-4f18-a68a-8bd07b656422",
"title": "Secure Desktop Source Location",
"content": "The manifest desktop source location URLs use HTTPS."
},
{
"id": "cec06602-b4a7-40e4-aa50-a13a29a90584",
"title": "The manifest source location URLs are valid.",
"content": "The manifest source location URLs are valid."
},
{
"id": "69150951-4963-4c4b-ae6b-58c07160e673",
"title": "Supported Office Identified",
"content": "Supported Office products were successfully determined."
},
{
"id": "64f19c25-db3f-445a-8af8-a8dc02701d14",
"title": "Support URL Present",
"content": "The manifest support URL is present.",
"code": "https://crcastle.github.io/saascap-data/assets/help/"
},
{
"id": "abd58ba2-327b-48b7-ad18-c567f963d859",
"title": "Valid and reachabe Support URL",
"content": "The manifest support URL is valid and reachable.",
"code": "https://crcastle.github.io/saascap-data/assets/help/"
},
{
"id": "38e76e9c-314f-4759-b3fb-3afa252ce0c6",
"title": "Valid OnlineMeetingCommandSurface ExtensionPoint.",
"content": "OnlineMeetingCommandSurface ExtensionPoint extracted from manifest is found to be valid."
},
{
"id": "987201dd-ea13-4dc3-9ead-190f6ea3fb36",
"title": "Valid Manifest Resource Urls",
"content": "The manifest Resource URLs are valid."
},
{
"id": "145e9494-a40d-43aa-98fd-bbb76b430d2f",
"title": "Valid Manifest AppDomain Urls",
"content": "The manifest AppDomain URLs are valid."
},
{
"id": "c658985f-8366-4495-9b82-0a534450c406",
"title": "High Resolution Icon Present",
"content": "A high resolution icon element was expected and is present.",
"code": "https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"
},
{
"id": "718c518d-b110-4d7e-b9a5-d8430e94c96b",
"title": "Supported High Resolution Icon URL File Extension",
"content": "The manifest high resolution icon URL has a valid image file extension.",
"code": "png"
},
{
"id": "79b5a5c9-cb79-40c2-b584-436ab550f030",
"title": "Secure High Resolution Icon URL",
"content": "The manifest high resolution icon URL uses HTTPS.",
"code": "https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"
},
{
"id": "1ecd4300-6e81-4fbb-9437-499a4c725df9",
"title": "Correct High Resolution Icon Dimensions",
"content": "The manifest high resolution icon dimensions are correct."
},
{
"id": "1ba2f086-5f1b-401d-8ad6-482cb6526616",
"title": "Icon Present",
"content": "A icon element was expected and is present.",
"code": "https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"
},
{
"id": "94330b32-277b-4292-9655-8acbc3ba6fd9",
"title": "Supported Icon URL File Extension",
"content": "The manifest icon URL has a valid image file extension.",
"code": "png"
},
{
"id": "07780e16-8979-4fb8-b1c2-da8cfce1ed0c",
"title": "The manifest icon URL uses HTTPS.",
"content": "Secure Icon URL",
"code": "https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"
},
{
"id": "99e2d71a-d2cb-41d1-949e-6cf7eeaede99",
"title": "All GetStarted strings are present in Resources",
"content": "All GetStarted strings are present in Resources"
},
{
"id": "906eba01-3ef7-44d9-8b44-c606b4fb9f55",
"title": "Acceptance Test Completed",
"content": "Acceptance test service has finished checking provided add-in."
}
],
"addInDetails": {
"adminInstallOnly": false,
"capabilities": [
{
"code": "ReadWriteDocument",
"title": "Can read and make changes to your document"
},
{
"code": "SendReceiveData",
"title": "Can send data over the Internet"
}
],
"defaultLocale": "en-US",
"description": "SaaS Capital Excel Tools",
"displayName": "SaaS Cap Data",
"highResolutionIconUrl": "https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png",
"hosts": [
"Workbook"
],
"iconUrl": "https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png",
"localizedDescriptions": {
"en-US": "SaaS Capital Excel Tools"
},
"localizedDisplayNames": {
"en-US": "SaaS Cap Data"
},
"localizedHighResolutionIconUrls": {
"en-US": "https://crcastle.github.io/saascap-data/assets/saascap-icon-64.png"
},
"localizedIconUrls": {
"en-US": "https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png"
},
"localizedRootSourceUrls": {
"en-US": "https://crcastle.github.io/saascap-data/taskpane.html"
},
"productId": "d348c7c2-36c5-49cc-a8a2-ea185b8427ec",
"providerName": "SaaS Capital",
"requirements": "<Requirements xmlns=\"http://schemas.microsoft.com/office/appforoffice/1.1\"><Sets DefaultMinVersion=\"1.1\"><Set Name=\"SharedRuntime\" MinVersion=\"1.1\" /></Sets></Requirements>",
"rootSourceUrl": "https://crcastle.github.io/saascap-data/taskpane.html",
"subtype": "TaskPane",
"supportedProducts": [
{
"code": "Mac_Excel",
"title": "Excel 2019 or later on Mac",
"version": "16.38.0.0"
},
{
"code": "Win32_Excel",
"title": "Excel on Windows (Microsoft 365)",
"version": "16.0.12527.20092"
},
{
"code": "WAC_Excel",
"title": "Excel on the web",
"version": "16.0"
},
{
"code": "Mac_Excel",
"title": "Excel on Mac (Microsoft 365)",
"version": "16.38.0.0"
}
],
"supportedLanguages": [
"en-US"
],
"type": "ClientInstalled",
"version": "1.0.5.0",
"autorunLaunchEvents": []
}
}
Hello? Anyone watching this repo's issues? I am blocked by this issue.
We do look at the issues . . . just not on a daily basis.
As pointed out, the tool just calls the web service that is supposed to be doing the same validation that is done when submitting to Partner Source. The information provided by the service call is what we report in the output.
Have you tried asking Partner Center support for clarification? https://learn.microsoft.com/en-us/partner-center/report-problems-with-partner-center
Hi @millerds. Thanks and apologizes for my slightly snarky message. I have reported the issue following the directions at the link you provided.
@crcastle Did you hear back from Partner Center?
Hey @millerds- Thanks for the follow-up. I did hear from them. It seems that the error message provided from the certification web service was a bit misleading. The URL was reachable, and the file extension was png
, but the file was actually in WebP
format. I converted it to png and the manifest certification was successful.
I replied to the thread with Partner Center suggesting they tweak the error message to say "the URL is unreachable or file is in the wrong format" instead of just "URL unreachable," which sent me on a bit of a wild goose chase. Alternatively separate out the unreachable error condition from the unreadable file error condition (including associated error messages).
Feel free to close this issue.
Glad you were able to get it resolved. Hopefully they take your feedback.
Expected behavior
I expect the "Icon URL Unreachable" error to not be shown because the URL is reachable.
Current behavior
Running
npm run validate -- -p
fails with the following error:However, accessing https://crcastle.github.io/saascap-data/assets/saascap-icon-32.png from both curl or a browser show that the PNG file is in fact reachable.
Here it is in-line in this GH issue pulled from that URL that the validation says is unreachable:
curl:
Note that
npm run validate
does say the manifest is valid. However, I neednpm run validate -- -p
to be successful in order to submit my add-in to the Partner Center for listing in AppSource.Also, I receive the same error when I upload this
manifest.xml
file to the Partner Center (screenshot) to submit the add-in to be published in AppSource.Steps to Reproduce
Please provide detailed steps for reproducing the issue.
npm run validate -- -p
with the thismanifest.xml
file in the current directoryContext
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
package.json
:"office-addin-manifest": "^1.12.3",
Here is a link to the
manifest.xml
file I'm using: https://gist.github.com/crcastle/a0a241b2ce87b5067cf288549b6be879Failure Logs
See above.