Skip to content

Instantly share code, notes, and snippets.

@artem78
Last active November 12, 2024 17:26
Show Gist options
  • Save artem78/cb2b9650af186844f7b5654964676284 to your computer and use it in GitHub Desktop.
Save artem78/cb2b9650af186844f7b5654964676284 to your computer and use it in GitHub Desktop.
Developing for Symbian OS guide

Thanks to NEK-RA for English translation. Original text in Russian language.


Usefull resources for Symbian development

  1. Small site, contains links to SDK and other usefull resources - https://mrrosset.github.io/Symbian-Archive/index.html
  2. List of active Symbian developers - mrRosset/Symbian-Archive#10
  3. Chat - https://discord.gg/5Bm5SJ9 or https://discord.com/channels/431429574975422464/743412813279526914
  4. Symbian Basics presentation - http://www.cs.rug.nl/~aiellom/images/SymbianOS.pdf
  5. Files:
  6. Literature
  7. Symbian OS sources - https://github.com/SymbianSource
  8. Docs for different Symbian OS versions - https://docs.huihoo.com/symbian/
  9. List of versions and models
  10. Nokia phone manuals:

Development environment installation guide on the example of Symbian 9.2

Tested on Windows XP и Windows 7. Installation of other SDK versions should be similar.

Java Runtime Environment (JRE)

Download from https://www.oracle.com/technetwork/java/javase/downloads/2133151 or http://java-runtime.ru/download

It`s better to install 5.0 version, because emulator settings don't work with newer java versions. Download link: http://www.oldversion.com/windows/java-platform-runtime-5-0-update-5

SDK

http://www.mediafire.com/file/9uc7fjb2ynmxlud/s60v3.1_SDK.zip/file

Emulator needs activation, otherwise it works only in 14-days trial mode. To reset trial I wrote this bat-script. On Windows 7 and higher run as Administrator

Open C/C++ Plugin

(Optional installation)

Provides ability to use standart C++ libraries (like stdio, iostream, string, etc.) https://ia800905.us.archive.org/7/items/nokia_sdks_n_dev_tools/s60_open_c_cpp_plug_in_v1_7_en.zip

Carbide IDE

http://www.mediafire.com/file/6z54qrceef73x9s/Carbide_cpp_v2_7_en.exe/file 2.7 – last version, which still supports Symbian OS 9.2. (If I remember correctly, Carbide 3.2 can works only with Symbian 9.3 and higher. (ToDo: refine))


HowTo

Troubles with icons

"\Symbian\Carbide\workspace\GUIDemo\group\BLD.INF" FATAL ERROR(S): \Symbian\Carbide\workspace\GUIDemo\group\BLD.INF(21) : \Symbian\Carbide\workspace\GUIDemo\group\ICONS_SCALABLE_DC.MK does not exist

We need to modify group/bld.inf, change string:

gnumakefile icons_scalable_dc.mk

to this:

gnumakefile icons_aif_scalable_dc.mk

Errors "undefined reference ..."

How it looks:

undefined reference to `RpositionServer::RPositionServer()'
undefined reference to `Rpositioner::RPositioner()'
undefined reference to `TpositionInfo::TPositionInfo()'
undefined reference to `Rpositioner::Open(RPositionServer&)'

Solution:

We need to add lib-file. (In this case - lbs.lib). Open mmp-file and add library in Libraries tab.

Enabling alerts on phone when panics occur

By default apps just close on panic. No alerts, error messages and etc. will be shown. To enable alerts, we need to create empty file called errrd (without extension) in c:\resource\ directory. To do this you need to unlock phone and give full access to system files, otherwise security system will not allow you to create this file.

Can't create sis/sisx files

Trouble:

Building sis(x) package failed when compiling project.

Solution:

Go to: ProjectPropertiesCarbide.c++Build configurations. Choose Phone release (GCCE) in Active Configuration combobox. In SIS Builder tab press Add button. Choose PKG-file and press Ok.

Enabling icon in menu

Trouble:

When creating console application from template Basic Console Application (EXE), app icon doesn`t appear in applications menu.

Solution: ToDo: make bat-script for automation

Go to data folder and create file

YourAppName_reg.rss
with the following text (replace bold values with yours):

#include 

UID2 KUidAppRegistrationResourceFile
UID3 0x12345678      // Replace with your application ID

RESOURCE APP_REGISTRATION_INFO
    {
    app_file = "YourAppName";      // Replace with your application executable file name (exe) without extension
    }

Then add to mmp-file:

SOURCEPATH ..\data
START RESOURCE YourAppName_reg.rss
	TARGETPATH \private\10003a3f\apps
END

Add to pkg-file:

"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\YourAppName_reg.rsc"   -"!:\private\10003a3f\import\apps\YourAppName_reg.rsc"

App is incompatible with phone

Trouble:

Error "App is incompatible with phone" appears on sis(x) package installation

Reason:

pkg file should contains information of supported platforms and phone models. This error appears if your phone model is not supported or such list in pkg file is not defined (empty) (for example, when creating new project from Basic console, application (EXE) template).

Solution:

Add list of supported "products" to your sis/YourAppName.pkg as strings:

[ProductUID], VersionRange, {"ProductName"}

Where:

  • ProductUID - Unique identifier of platform/product as HEX-number (list of available IDs will be shown below)
  • VersionRange - Firmware version of platform (I`m using 0.0.0, which means "any version")
  • ProductName - Platform name in quotes (as I understand, it doesn`t affect anything)

Example:

;Platform version     (";" is used for single-line comments)
[0x101F7961], 0, 0, 0, {"S60 3rd Edition devices"}
[0x1028315F], 0, 0, 0, {"S60 5th Edition devices"}

In this example application should works on S60v3 and S60v5 (Symbian 9.1 and 9.4). (Example of complete PKG-file)

Also there is backward compatibility for previous platform versions: app created for Symbian OS 9.2 should also works on OS version 9.1.

ProductUIDs of Symbian OS 9.X:

Platform ProductUID
S60 3rd Edition (Symbian 9.1) 0x101F7961
S60 3rd Edition FP1 (Symbian 9.2) 0x102032BE
S60 3rd Edition FP2 (Symbian 9.3) 0x102752AE
S60 5th Edition (Symbian 9.4) 0x1028315F
UIQ3 (Symbian 9.1) 0x101F6300
UIQ3.1 (Symbain 9.2) 0x101F63DF

Full list available in SISContents app or on this site.

How to find out which SDK versions are installed or change active one?

Use command devices in command line. Available arguments:

C:\Documents and Settings\user>devices -help
Syntax: devices -info @deviceID         Displays detailed device information
devices -default        Displays the default device information
devices -setdefault @deviceID   Sets the default device
devices -setalias new_alias @deviceID   Sets the alias for a device
devices -add device_path tools_path @deviceID
devices -remove @deviceID
devices -help   Displays this help
  where deviceID is a device identifier (of the form 'kit:name') or
  device alias, preceded by '@'
  new_alias is a new device alias
  device_path is the location of the main epoc32 directory
  tools_path is the location of the epoc32\tools directory
Note: When using -setalias or -add, the device may not be referred to by
an alias.

With no arguments or switches, devices lists all device names and aliases

If command not found, add this path to PATH environment variable: C:\Program Files\Common Files\Symbian\Tools (or C:\Program Files (x86)\Common Files\Symbian\Tools).

To see list of all installed SDKs run command devices without any arguments:

C:\Documents and Settings\user>devices
S60_3rd:com.nokia.s60
S60_5th_Edition_SDK_v1.0:com.nokia.s60
S60_3rd_FP1:com.nokia.s60 - default

You can set certain SDK as default with -setdefault option (note: do not miss @ before SDK identifier):

devices -setdefault @S60_3rd_FP1:com.nokia.s60
@artem78
Copy link
Author

artem78 commented Dec 5, 2022

@ra1n08
Copy link

ra1n08 commented Apr 26, 2023

using C++?, wow, i don't know that, i just know make app for symbian using java

@Sergiaws
Copy link

Sergiaws commented May 8, 2023

I'm still wondering how can I really develop Symbian apps using Python, web technologies or Java. I wish to tarjet Symbian Belle and maybe some older platforms, that if I some day get a Symbian phone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment