Symbol Not Found Error before App.AppBase Initialize gets called - no debug info

I have an app that runs fine on 1.3 and above devices. I changed the minimum version from 1.3 to 1.2 and tried build/running it for an Epix in the simulator. On startup it just gives me a "Symbol Not Found Error". It doesn't say anything about what symbol or where. I tried building it (in debug mode) and placed it on the actual Epix and created the app.txt file in the logs folder. When I run it there, the watch reboots and places nothing in the log files (global or for the app).

I have a Sys.println("init") message in my AppBase class's initialize routine and it also never gets called.

The app still runs just fine on my 630, and simulated 630.

Any suggestions how to track this down? I'm guessing I'm using something that isn't supported in 1.2 but no idea what that might be.

Here is the log from the simulator when I try to run it on the Epix.

Connecting to device...
Device Version 0.1.0
Device id 1 name "A garmin device"
Shell Version 0.1.0
Symbol Not Found Error
Connection Finished
Closing shell and port
  • I started just commenting out big chunks of code. One particular file seems to be able to get me past the error, but haven't narrowed down exactly what this problem is yet.

    But i do then get an error that Array.add() is not supported. Sure enough, in the docs is says this was added to 1.3. Is there anyway to increase the size of an array in 1.2? Or do I need to manually create a new array and add elements?

    I had a request to support an Epix (I actually have one) but with limits like this, might not be worth it. I'd have to rewrite major parts of my app.
  • What I'd consider (it works in 1.2.x and 1.3.x) is not do .add() at all. Create the array as large as you think you need, and then handle what happens when that array getting full.

    Making a new array and copying things over to add a single item, means you will keep using about twice the memory you need to during the copy.
  • What I'd consider (it works in 1.2.x and 1.3.x) is not do .add() at all. Create the array as large as you think you need, and then handle what happens when that array getting full.

    Making a new array and copying things over to add a single item, means you will keep using about twice the memory you need to during the copy.


    That's exactly what I started doing. I have 3 arrays that were growing that I generally have an upper limit for. So I'm just allocating them and keeping track of how many are used rather than array.size().

    As for the "symbol not found" issue for which I started this thread, I had the following line of code that was causing the problem:

    const DegreeSym=176.toChar(); //utf-8, b0 hex, 176 dec
  • const DegreeSym=176.toChar(); //utf-8, b0 hex, 176 dec

    You can avoid doing this at all by making it a literal character (or character string). For it to work, you need to set the file encoding to UTF-8 though. You can do this by right-clicking the file in the Project Explorer view in Eclipse, selecting Properties, and setting the text file encoding to UTF-8.

    Then you can do either of these...

    // const DegreeSym = '°'; // for ConnectIQ 1.3 and later devices
    const DegreeSym = "°"; // will work for all devices.