Adobe Captivate, SCORM and undeclared resources


So you just purchased Adobe Captivate and produced your first eLearning course. Now the next step is to produce the SCORM package and upload it in your LMS (Learning Management System). After fiddling around in the Quiz Settings in Captivate for a while you finally get the SCORM package setup and upload it to your LMS.

Now one of two things will happen:

1. It works – yay! Everything is great and you can go home and enjoy a well deserved glass of red wine, while you revel in your success.

2. It doesn’t work (or only partly works) – sigh! This is what many developers fear. You have just spent many hours on producing content in Adobe Captivate and now a whole new can of worms have just opened up. Frantically you open up Google and type “Captivate not working in LMS” and are introduced to new and exiting concepts such as SCORM, imsmanifest, package interchange file(PIF) , asynchronous SCORM API communications etc.

I take it that you are not drinking red wine since you are reading this post. There could be many reasons why your course isn’t working in your LMS. Perhaps you published to the wrong SCORM version (try publishing to SCORM 1.2 in stead of SCORM 2004), perhaps some of your settings in Captivate Quiz Preferences were wrong etc.

However one other thing that could be wrong is that your particular LMS is picky about accepting and handling “undeclared resources”.  If you have FLV videos, externalized animations/widgets etc. then this could very well be the problem.

Basically when you create a SCORM package from Captivate you will get a ZIP file as output. Inside this ZIP file is the content that you created along with a variety of different “support” files that will allow your course to communicate with your LMS.

One of the really important files is called “imsmanifest.xml”. This file is what tells your LMS what it is loading and how it should process it. It basically contains the information that your LMS require to play your course.

But something is missing in this file. Say for example that you add some FLV videos to your course. When you publish your course to SCORM these videos are copied into the SCORM package (PIF) – now you would expect that this was all that there was to it and that you could upload this SCORM package to your LMS. The problem is that these FLV files are not referenced correctly in the imsmanifest even though they are copied to the SCORM package. What this means is that you have “undeclared resources” in your SCORM package. A lot of LMS’s will ignore this and still play your content, but some LMS’s might not. Some LMS’s might even ditch all undeclared resources and not upload them to the LMS.

This can of course cause major headaches for you since your course isn’t working.

Essentially all resources needs to be defined in the imsmanifest in the “resources” element.

Resources element defined:

The <resources> element identifies a collection of content and its files. Individual resources are declared as a <resource> element nested within the <resources> element. A <resource> is not necessarily a single file. It may be a collection of files that support the presentation of the associated presentation structure (<item> element). These files may be internally referenced or externally referenced via a URL. Internally referenced files must be included in the Package Interchange File.

Source: IMS Global

If we look at the resource node / element from a course I created in Captivate it looks like this:

<resource adlcp:scormType=”sco” identifier=”SCO_ID1_RES” type=”webcontent” href=”CaptivateContent.htm”>
<file href=”CaptivateContent.swf”></file>
<file href=”CaptivateContent.htm”></file>
<file href=”SCORM_support/scorm_support.htm”/>
<file href=”SCORM_support/scorm_support.js”/>
<file href=”SCORM_support/scorm_support.swf”/>

You can see that it has the Captivate SWF, the Captivate HTM and some SCORM support files declared. However, no FLV videos are declared in the manifest (actually the standard.js that Captivate relies on is not declared either).

A simple fix could be to open up the imsmanifest.xml in Notepad and add new lines under the resource node with the relevant files.

<file href=”standard.js”></file>
<file href=”videos/flvVideo1.flv”></file>
<file href=”videos/flvVideo2.flv”></file>

In many cases this will be enough to solve the problem of an LMS not accepting undeclared resources.

The same problem occurs if you use Widgets or Animations and tick the “Externalize resources” in your Captivate publish settings. The files may get copied to the SCORM ZIP package, but they will not be declared in the imsmanifest.xml so you will need to do that manually.

While we are at it then lets tackle one more common problem. Imagine that you have created a course, which have links to some PDF or Word documents. In your course you have created click boxes to open these and when you test locally then it works perfectly well.

Now you create the SCORM package and upload the course to your LMS. The course works fine, but none of the PDF or Word documents open up. Why? Simply because Captivate has not copied these files to your SCORM package. If you rely on “external files” then you will need to copy these to your SCORM package manually. You will also need to declare these files manually in the imsmanifest yourselves.

Good luck ;o)




  1. I had this problem last week and simply adding the resources to the manifest that Captivate generated not work. I needed to create a new manifest from scratch. It was a hassle, but it did finally work.

    Not an easy solution for newbies.

  2. @Magda

    Yes unfortunately that may be the ony solution in some cases and that is indeed a hassle.

    Actually I never use the Captivate SCORM support myself. I always build the manifest myself in Reload and use custom SCORM scripts – that way I’m 100% sure that I can control what information is sent from Captivate to the LMS. I’m thinking that maybe I should write up a tutorial on that, but I’m scared I might open the doors to something scary with all those different LMS’s and various degrees of SCORM conformance / acceptance.

    By the way – I really like your work Magda. I have been peeking at it earlier and you create some great stuff!