Thursday, April 24, 2008

What is "S60 platform services"

S60 platform services are the fundamental services provided by the S60 platform, these include:

1. Application Framework Services — providing the basic capabilities for 
a) launching applications and servers, 
b) state persistence management, and 
c) UI components.
2. UI Framework Services — providing 
a) concrete look and feel for UI components and 
b) handling UI events.

3. Graphics Services — providing 
a) capabilities for the creation of graphics and
b) drawing to the screen.

4. Location Services — allowing the S60 platform to be aware of a device’s location.

5. Web-Based Services — providing 
a) services to establish connections and interact with Web-based functionality, including browsing, file download, and messaging.

6. Multimedia Services — providing 
a) capabilities to play audio and video, 
b) support for streaming and speech recognition.

7. Communication Services — providing 
a) support for local and wide area communications, ranging from Bluetooth technology to voice calls.

Monday, April 21, 2008

How how to get information about my Certificate [Dev Cert].

I do generate a lots of numbers of dev certs for development in office and personal use. and i am not used to generating a dev cert that have all the capabilities that it can have and all my device IMEIs. So each dev cert is different from other by following parameters.

1. Capabilities.
2. IMEIs

let us say if i forget which capabilities and IMEIs a particular Dev cert has, and i do not have time to generate new ones.

;-)

I simple found the answer .... as follows.

devertlist [/c] [/i] [/b] [/?] devcert.cer

- /c - List the capabilities associated
- /i - List the IMEI's associated with the devcert
- /b - List the output as bare, suitable for pipelining
- /? - print out the about information and command list

Friday, April 18, 2008

How to use mobile theme skin as a background for our application.

1. Enable skins support in our application by calling apps AppUi base constructor:

void CMyAppUi::ConstructL()
{
BaseConstructL(EAknEnableSkin);
...
}


2. We will require a specific context to hold the skin bitmap for your control.

CAknsBasicBackgroundControlContext* iBgContext;

3. Initialise context to a reference of the background bitmap:

void CMyAppView::ConstructL()
{
...
iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain,aRect,ETrue);
...
}


4. Don't forget to call the context destructor:

void CSkinDemoAppView::~CSkinDemoAppView()
{
...
delete iBgContext;
...
}


5. As we are ready with a context that has the backgoround that we want to use in all controls. This is done throgh MOP relationship and we need to override the MopSupplyObject():

TTypeUid::Ptr CMyAppView::MopSupplyObject(TTypeUid aId)
{
if (iBgContext )
{
return MAknsControlContext::SupplyMopObject( aId, iBgContext );
}
return CCoeControl::MopSupplyObject(aId);
}


6. Each control Draw now be updated to display the skin as background:

void CMyAppView::Draw(const TRect& aRect) const
{
// Get the standard graphics context
CWindowGc& gc = SystemGc();

// Redraw the background using the default skin
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
AknsDrawUtils::Background( skin, cc, this, gc, aRect );

...
}


and

void CMyAppView::SizeChanged()
{
if(iBgContext)
{
iBgContext->SetRect(Rect());
if ( &Window() )
{
iBgContext->SetParentPos( PositionRelativeToScreen() );
}
}
}


7. Now we are ready so if we have to use it in a list box then we can use as below.
ListBox->ItemDrawer()->ColumnData()->SetSkinEnabledL(ETrue)

Header Files: AknsDrawUtils.h, AknsBasicBackgroundControlContext.h
Lib Files: aknskins.lib aknskinsrv.lib

note:
1. Nokia has introduced skin support only in S60 v2.
2. Unfortunately, the Skin API is not very well documented and may not be compatible in S60 3rd Edition

Friday, April 04, 2008

Nokia OS [NOS / ISA]

Nokia OS (NOS) is an informal name for the operating system in many Nokia mobile phones. These are informal names, there is no such product or trademark. Officially it is referred as ISA platform. It is a proprietary platform only for Nokia's internal use, it is not licensed to anyone. No direct API is provided either, but most ISA phones can be programmed with J2ME. It is sometimes called the "domestic OS"..

ISA powers Nokia Series 40 and Series 30 mobile phones.
Obtaining UID of a calling application.

The Call Application UID is 0x10005883.

you can find in the following way :
1) Firstly retrieve window id of Call Application.
2) Then passe this Window id to CApaWindowGroupName::FindByAppUid function which returns the UID.
How to start a application in a specific orientation

By default, applications are started in the current orientation of the device screen. In order to force an application to be started in landscape mode or portrait mode, a corresponding flag needs to be passed to the BaseConstructL() function in AknAppUi::ConstructL():

void CMyAppUi::ConstructL()
{
BaseConstructL( EAknEnableSkin | EAppOrientationLandscape ); // start in landscape mode
//BaseConstructL( EAknEnableSkin | EAppOrientationPortrait ); // start in Portrait mode
...
}



Note: enums Passed BaseConstructL() are different from enums that are passed to SetOrientationL().
How to change screen orientation of UI application

void CMyClass::RotateMe()
{

// Change the screen orientation.
if (CAknAppUi::EAppUiOrientationPortrait != AppUi()->Orientation())
{
AppUi()->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait);
}
else
{
AppUi()->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape);
}
}
How to handle Foreground / Background events

The application framework calls CCoeAppUI::HandleForegroundEventL() when the application is switched to the foreground or background. While the default implementation of this method is empty, it can be, for example, used to display messages or pause a game when a focus change event occurs.

Example:

void CMyViewAppUi::HandleForegroundEventL(TBool aForeground)
{
if (aForeground==TRUE)
{
iEikonEnv->InfoMsg(_L("Foreground true"));
}
else
{
iEikonEnv->InfoMsg(_L("Foreground false"));
}
}


Note: The aForeground parameter is true if the application is switched to the foreground (is visible) and false if the application has gone to the background.
How to handle Layout change events

Layout change events are generated when the screen size or layout is changed. The S60 platform supports multiple screen resolutions[also called as "Scalable UI"]. Thus, layout awareness is particularly crucial for those applications to reorganize the position as required. Applications can detect the changes in layout with, for example, the following methods:

1. Controls can override the CCoeControl::HandleResourceChange() to detect the KEikDynamicLayoutVariantSwitch message.
The following example code for HandleResourceChange():

    void CMyControl::HandleResourceChange(TInt aType)
{
CCoeControl::HandleResourceChange(aType); //call base class implementation
if ( aType==KEikDynamicLayoutVariantSwitch )
{
TRect rect;
// ask where container's rectangle should be
// EMainPane equals to area returned by
//CEikAppUi::ClientRect()
AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,rect);
SetRect(rect);
}
}


2. UI controllers can override the CEikAppUi::HandleResourceChangeL() to detect the KEikDynamicLayoutVariantSwitch message.

The following example code for HandleResourceChangeL():

    void CExampleAppUi::HandleResourceChangeL(TInt aType)
{
CAknAppUi::HandleResourceChangeL( aType );
if ( aType == KEikDynamicLayoutVariantSwitch )
{
// do the re-layout of the components
}
// Controls derived from CCoeControl, handled in a
// container class
iExampleControlContainer->HandleResourceChange( aType );
//Must not call this if the components are on the control stack
//iView->HandleResourceChangeL( aType );
}

S60 View based UI application architecture


The S60 view architecture only allows one view to be active in each application. If a new view is switched to within an application, the current view is immediately deactivated.


S60 platform applications that follow the S60 view architecture require:

1. A UI controller derived from CAknViewAppUi
Responsibilities are
a) It creates one or more CAknView-derived view controllers.
b) It handles events that are not handled by the view controllers.
c) To switch between views, it activates and deactivates views.
d) It handles menu commands passed to it by the view controllers.
e) It receives events such as layout and foreground notifications from the run-time environment.

2. A view controller derived from CAknView
Responsibilities are
a) It creates one of more CCoeControl-derived views.
b) It handles registering controls for key event handling.
c) It handles menu commands.

3. 1 or more views derived from CCoeControl
Responsibilities are
a) Shows application data and state on the screen.

As this architecture allows one view to be active in each application, so it is not appropriate in the following cases:

1. Applications with any view that cannot cleanly handle unexpected activation of another view in that application.
2. Applications that provide views that can be nested over other applications, [except where embedding is used.]
3. Applications that provide controls that can be used inside other applications (for example, using a Web control inside an e-mail viewer to show an e-mail with HTML content).

Traditional Symbian OS UI application architecture


The traditional Symbian OS UI application architecture provides the most flexible approach to application UI construction. Traditional architecture is easier to port across different platforms. Traditional architecture is also the best choice for single-view applications, if launching the view from external applications is not required.


S60 platform applications that follow the traditional Symbian OS UI application architecture require:

1. A UI controller derived from CAknAppUi
Responsibilities are
a. It creates one or more CCoeControl-derived views.
b. It handles events, including enabling views to handle key events.
c. To switch between views, it creates and destroys or shows and hides views.
d. It handles menu commands.
e. It receives events such as layout and foreground notifications from the run-time environment.
2. 1 or more views derived from CCoeControl
Responsibilities are
a. Shows application data and state on the screen.
b. Receives user input.
c. Notifies the CAknAppUi-derived class of relevant events.
d. Often observes model changes (directly or via the UI controller) and updates the screen accordingly.
UI Controller in S60

UI controller is an object derived from either CAknAppUi or CAknViewAppUi, depending on your UI architecture. The UI controller is part of the controller structure in the Model - View - Controller (MVC) design pattern used to design the architecture of many GUI-based mobile applications.

Examples of services and responsibilities provided by the UI controller are as follows:

1. control stack for event handling
2. construction of views for applications
3. the top-level window owning control of the application

The UI controller is implemented in one of the following classes:

1. In a traditional architecture application architecture, the UI controller must be derived from CAknAppUi.
2. In S60 View application architecture, the UI controller must be derived from CAknViewAppUi.
3. In dialog architecture, the UI controller is typically derived from CAknAppUi

Thursday, April 03, 2008

3 things you must have in mind while making your application scalable.

If your application is scala then you allow your application to support the different display sizes, resolutions, and layouts for different S60 devices.

1. Layout information should not be hard-coded.
The S60 platform provides the AknLayoutUtils class for building layouts from resource files.
Note: that you need to override CCoeControl::HandleResourceChange and CEikAppUi::HandleResourceChangeL in your application to draw your application again in the event that the orientation of the display changes.
2. Scalable fonts should be used.
The S60 platform provides methods in the AknLayoutUtils for using logical fonts from an enumeration in the avkon.hrh file.
3. Scalable icons should be used.
Scalable icons are based on SVG Tiny (SVG-T) format graphics.
10 things you must remember when doing internationalization of your application:

1. Keep code and content separate.
2. Use Locales.
3. In UI component design, allow for text expansion.
4. Do not concatenate. [Localizing concatenated strings is difficult or impossible.]
5. Do not reuse strings. [The context, meaning, or the space available may change, making localization difficult.]
6. Use re-orderable parameters in strings.
7. Do not use text in graphics. [It all needs to be localizable.]
8. Comment the text strings.
9. Use common components
* Use AVKON component library wherever possible.
* Use StringLoader.h for re-orderable parameters.
* Use CharConv for inbound and outbound character conversions.
* CharConv contains conversion tables for all supported S60 languages and most common encodings.
* Use locale for sorting.
* Use AVKON time and date formatter strings for time/date formatting, or if you need to have new formats, use locale formatters.
10. Follow the formats / templates provided by symbian.
What is Data Caging in Symbian V9.x?

Data caging means that different applications are allowed to access only particular data areas. This prevents applications from accessing the private data of other applications.

The following list describes where different file types are stored on a mobile device:

1. The \sys\bin folder contains all binaries. This is the only folder from where an application can be launched.
Note: An application cannot read (or write) anything under the \sys\ folder without AllFiles (or TCB) capability.

2. The private (\private\) folder includes folders for all applications. The \ subfolders are application-specific and applications can access only their own folders. An application with AllFiles capability can access all private directories. The directory name under \private is determined by the SecureId (SID) of the application. If an SID is not specified, the UID3 provided in the mmp file is used.

3. The resource folder (\resource\apps\) is used for resource files of applications. This data can be icons, bitmaps, and other material useful for all the applications. Read access is allowed by all applications, write access only by processes with the AllFiles capability.

Note: So if you want to shared File / databse for both read and write between applications or between 2 exes of same application, then use a folder in c:\data\
What are @publishedAll APIs and How to find out which is @publishedAll API or not.

These Group/set of symbian APIs can be used by a 3rd party developer to futre proof his application. That means these APIs will be changed in feature versions of the SDK. So @publishedAll APIs are binary and source compatible across OS releases

By checking the .h files for the API a developer can find out if the API is @publishedAll or not.

Other tags included in Symbian headers are.
01) @internalTechnology
02) @internalComponent
03) @internalAll
04) @publishedPartner
05) @publishedAll
06) @prototype
07) @interim (a deprecated synonym of @prototype)
08) @released
09) @deprecated
10) @removed
11) @test
How To: Remove an installed application from the WINS Emulator?

All applications on symbian os emulator must reside in
[EPOCROOT]\epoc32\release\wins\udeb\z\system\apps\
or
[EPOCROOT]\epoc32\release\wins\urel\z\system\apps\
or
[EPOCROOT]\epoc32\wins\c\system\apps\

just delete the dir of the application you want.

Note: only applicable to pre-Symbian v9
How To: display global notes (independent of the focused view)

CAknGlobalNote* iGlobalNote = CAknGlobalNote::NewL();
CleanupStack::PushL( iGlobalNote );
iGlobalNote->ShowNoteL(EAknGlobalConfirmationNote, _L(”Screenshot taken!”));
CleanupStack::PopAndDestroy();
How To: make asynchronous functions synchronous?

Simply add WaitForRequest() and remove SetActive();

Example:
TRequestStatus iStat = KRequestPending;
iEncoder->Convert(&iStat, *iImage, iJpgImageData);
User::WaitForRequest(iStat); //Remove SetActive();
How To: avoid repetitive key events when pressing a key?

Use TEventCode to only capture EEventKeyDown:

TKeyResponse CAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
if((aKeyEvent.iScanCode == ‘*’)&& aType == EEventKeyDown)
{
iMenuView->HandleCommandL(ECommand);
return EKeyWasConsumed;
}
else
return EKeyWasNotConsumed;
}
How To: Externalizing and internalizing descriptors

Example:
TBuf KMaxFileNameLength iFileName
void TSettings Settings::ExternalizeL(RWriteStream& aStream) const
{
aStream << iFileName;
}

void TSettings::InternalizeL(RReadStream& aStream)
{
aStream >> iFileName;
}
In which files are UIDs used? (In Symbian v9.x)

a. in xxxApplication.cpp file static const TUid KUidXXXApp = {0xXXXXXXXX};
b. in .pkg file Header #{”XXX”},(0xXXXXXXXX),1,0,0
“..\sis\backup_registration.xml” -”!:\private\xxxxxxxx\backup_registration.xml”
private directory
c. in resource file xxx_reg-rss UID3 0xXXXXXXXX
d. when sending application to the background (HandleCommandL)
e. in paths to private directory
f. In project/properties!
In which files are UIDs used? (In Pre-Symbian v9.x)

UIDs have to be stored in several locations:
1. in xxxApplication.cpp file static const TUid KUidXXXApp = {0xXXXXXXXX};
2. in .pkg file Header #{”XXX”},(0xXXXXXXXX),1,05,223
3. in .mmp file UID 0×100039CE 0xXXXXXXXX
4. in iaf resource file xxxaif.rss RESOURCE AIF_DATA { app_uid=0xXXXXXXX;….}
5. when sending application to the background:

CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(CCoeEnv::Static()->WsSession(), task.WgId());
if (wgName->AppUid().iUid == 0xXXXXXXXX) //ur application uid
{
response = ETrue;
task.SendToBackground();
}
How To: Symbian Signing and unsigning a sis

a. During development and testing a developer or self-signed certificate is used ( sis-file is signed with Createsis wrapper tool in Carbide)
b. Before submitting to test house developer certificate is stripped using “createsis strip” : createsis strip xxx.sis xxxstripped.sis
c. For freeware the stripped sis-file can be sent to user.( to be signed by user on there own)
d. For Commerical applications the sis-file has to be signed with ACS publisher ID with “signsis” :
signsis xxxstripped.sis xxxsigned.sis xxxx.cer xxxx.key
remark: “createsis sign” should perform the same but does not seem to work
e. At each stage the signing status of the file can be checked with “VerifySymbianSigned” : verifysymbiansigned xxx.sis
verifysymbiansigned.exe You need to log in and then download.
HowTo: Backporting from 3rd to 2nd edition

1. Create new S60 project
- File | new |C++ application for S60 project (choose view based app)
- Add UID
2. Delete all unnecessary files
Keep following files:
src: xxxapp.cpp xxxdocument.cpp
inc: xxxapp.h xxxdocument.h xxx.loc xxx.hrh
data: xxx.rss xxx_caption.rss
aif: xxx.aifdef xxxaif.rss
sis: xxx.pkg
3. Import 3d edition files
src/inc: from appui
aif: icons + add them in aifdef
4. Overwrite files
rss
hrh
loc
pkg
5. Add libraries
6. Add include path inc/icl
7. Change include and class names in xxxdocument.cpp and xxxdocument.h
8. Change parts of code (back port)
9. Change file location (settings file, sounds, images,…)
10. Replace name of all xxx.rsg , xxx.hrh xxx.mbg files
11. Replace all UIDs
12. Replace svg images with mbm files
13. pur resource files in right places
HowTo: Security diagnostics and capability violations

In order to check capability violations build and run for the emulator and chsck the epocwind.out log-file located in “C:\Documents and Settings\myName\Local Settings\Temp\EPOCWIND.OUT” Lines to search for start with *PlatSec* . PlatSecDiagnostics has to be turned to ON in the Epoc.ini file located in Epoc32/data Capabilities allowed with self-signing : ReadUserData, WriteUserData, UserEnvironment, LocalServices, NetworkServices Leave all certificate fields including password empty
Free Symbian code verification tools

Automatic code verification tools are a great help to increase the production quality of software and also increase the probability to pass certification. They offer a quick and powerful way to get your code at a professional level.

Below an overview of the available tools:

1. The Symbian C++ compiler

The compiler is of course the first verification tool for your code, though at the most basic level to get your code working. However, warnings often are not taken seriously although they are an important indicator for the cleanliness of your code.

2.SymScan

SymScan is a free command line tool scanning for deprecated literal macro (“_L()”) , correct usage of the Cleanup stack , opening and closing of ‘R’ classes, functions marked as non-leaving which can leave and correct use of descriptors in function calls. It is available for download at the offical Symbian site.

This utility is installed in the C:\Program Files\Common Files\Symbian\Tools\ directory.

To scan single files, type from a Windows command prompt:

symscan “filename.cpp” where filename.cpp is the name of the file you want to scan.

To save the results you can pipe the output to a file e.g. symscan myfile.cpp > output.txt

There are several command line options, to limit the scanning to look for specific warnings.

-H : Display help on available commands
-C : Scan for CleanupStack violations
-D : Scan for misuse of descriptors
-S : Scan for standards violations i.e. deprecated _L()
-L : LeaveScan will be executed when SymScan has completed parsing of the source file.
-A : Perform all scans

e.g. to scan for misuse of descriptors use the following: symscan -D t1.cpp >output.txt

Symscan can also be run from the command line to scan whole directories and output to a file. Use the Windows “for” command to scan directories, eg:

for /R %i in (*.cpp) do SymScan “%i” >> SymScan.txt

SymScan guarantees your code is compliant with the basic Symbian guidelines.

3.Review-X

The trial version of Review-X available at the website of Tieto-X is limited to checks on Leaving function naming, class naming and function parameter naming. The price of the registered version is 500 Euros per license and includes:

• constant naming
• delete without reassignment
• standard C++ construction
• member variable destruction
• leave with KErrNone
• T-class member variable types
• member variable naming
• multiple inclusion
• member variable cleanup
• standard C++ types
• NewLC used in a trap

The full version also offers access to the command line interface, which can be integrated into your build scripts. Review-X features an easy to use graphical interface and html based reporting.

4. LowMem

Although strictly speaking LowMem is not a code verification tool, it indirectly points to badly written Symbian code. LowMem checks the start-up behaviour under simulated low-memory conditions by systematically increasing the available memory at startup by 1 kbyte, starting at 40 kbyte.
Although this test is often described as “strange” it is very effective at exposing code which is not compliant with the Symbian code idioms. LowMem also reports the number of memory leaks. To pass the test a score of at least 90 % is required (less than 10 % failed startups).

5. AppTest Lite

As LowMem, not a code verification tool. AppTest Lite for Symbian OS pre-v9 from SysOpen Digia aims at fully testing against the Symbian Signed Test citeria:

PKG-01: ACS PUBLISHER ID
PKG-02: INSTALLATION AND START UP
PKG-03: FILE CREATION LOCATION
PKG-04: UNINSTALL
PKG-05: INSTALLATION TO ALL MEMORY DEVICES
PKG-06: REINSTALL
PKG-07: UID
GEN-01: SYSTEM FEATURES AND OS FRIENDLY
GEN-02: STRESS TEST
MEM-02: LOW STORAGE MEMORY DURING EXECUTION
PHN-01: SERVICE INTERRUPTION
PHN-02: UNEXPECTED REBOOT
CON-01: TASK LIST
CON-03: BILLABLE EVENTS
MEM-01: LOW MEMORY START-UP

When your application passes all of the above tests you can submit it for certification with some confidence (but no guarantee of passing).

LowMem and AppTest Lite are available at the SymbianSigned website.
Note: At the time of writing there is no avaliable LowMem tool for Symbian v9.x.

Conclusion

Code verification tools and related utilities are becoming very important in Symbian mobile development. They allow to quickly verify if your code is compliant with the Symbian guidelines and increase the likelyhood to pass certification tests. They highlight the importance of the quality and robustness of mobile software in the constrained and demanding environment of mobile devices.

Tuesday, April 01, 2008

Using MIF files in Symbian OS (Part 1)

What is a Mif File

.mif files - Machine-readable files with all the SVG-t/bmp icons packed into them.

How to create a MIF File.

There are at least three ways.
1. The easiest way is to buy Adobe Illustrator CS2 to draw icons. Illustrator CS2 can save to SVG-Tiny format. It costs some money but it will save you a lot of time. If you're not great at drawing - there's a feature that will convert a photo to an SVG line drawing with color fills. So, make a photo of an object with your phone and have illustrator convert it to a line drawing.

2. You can download a free editor named Inkscape. Inkscape saves to SVG format but not SVG-Tiny. You'll have to use the SVG2SVGT tool to convert the icon (found under S60Tools folder in SDK). But there's a problem. If you use certain draw object types then Inkscape will produce SVG code that will not work. Start with a very simple image such as a box - test it - and then add some details. (Inkscape is open source Java so anyone of us could fix it to directly generate SVG-T for S60.)

3. You can type an SVG file into a text editor. It's XML syntax. {not recomended}

How to create a MIF file.

1. Direct mifconv call method
go to your folder where your SDKs tools folder then run following command

c:\Symbian\9.1\S60_3rd_MR\Epoc32\tools>mifconv MyNewApp.mif /c32 C:\TestIConPrj\gfx\Test_Icon1.svg ...
in this case the mif is created in the tools folder.

2. Using Make File Method
a) Edit bld.inf File

        PRJ_MMPFILES
gnumakefile Test_Icon.mk
TestIConPrj.mmp


b) Create Test_Icon.mk file
You can use the Templete as given below.
  
ifeq (WINS,$(findstring WINS, $(PLATFORM)))
ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
else
ZDIR=$(EPOCROOT)epoc32\data\z
endif

TARGETDIR=$(ZDIR)\resource\apps
ICONTARGETFILENAME=$(TARGETDIR)\Test_Icon.mif

HEADERDIR=$(EPOCROOT)epoc32\include
HEADERFILENAME=$(HEADERDIR)\Test_Icon.mbg

ICONDIR=..\gfx

do_nothing :
@rem do_nothing

MAKMAKE : do_nothing

BLD : do_nothing

CLEAN : do_nothing

LIB : do_nothing

CLEANLIB : do_nothing

# In the below lines the c32,8 the 32 is for the image and
# 8 is for it's mask. See how the BMP file is mentioned
# below the SVG's here.

RESOURCE :
mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
/c32,8 $(ICONDIR)\Test_Icon1.svg\
/c32,8 $(ICONDIR)\Test_Icon2.svg\
/c32,8 $(ICONDIR)\Test_IconN.svg\
/c24 $(ICONDIR)\Test_BMPIcon1.bmp\
/c8 $(ICONDIR)\Test_BMPIcon1_Mask.bmp\
/c24 $(ICONDIR)\Test_BMPIcon2.bmp\
/c8 $(ICONDIR)\Test_BMPIcon2_Mask.bmp\
/c24 $(ICONDIR)\Test_BMPIconN.bmp\
/c8 $(ICONDIR)\Test_BMPIconN_Mask.bmp


FREEZE : do_nothing

SAVESPACE : do_nothing

RELEASABLES :
@echo $(HEADERFILENAME)&& \
@echo $(ICONTARGETFILENAME)

FINAL : do_nothing


c) Clean build your project.
(note: you can't do this step from carbide.c++ or carbide.vs you have to use commandline).
        bldmake bldfiles
abld reallyclean
abld build gcce urel



Note:
1. Make your icon on a 44x44 pixel canvas. This might not be necessary in some cases but it is not clear whether S60 will scale your icon in all the places it can be used.

2. Keep in mind that S60 caches icons between runs of your application - so sometimes when you update an icon you still see the previous version. Do not losing your mind - it's caching the icon. Try restarting the phone when updating icons.
S60 3rd Edition SDK FP2 - Workarounds and Updates

What is carbide.VS

Carbide.vs is targeted at developers with Visual Studio skills who want to create C++ applications for Symbian OS platforms. Carbide.vs provides easy entry into Symbian OS C++ development with wizards and other automated functions that integrate with Visual Studio. User can get started with minimal manual configuration. Carbide.vs also contains functionality to automate several development tasks specific to Symbian OS.

Versions

1. Carbide.vs 2.x is a Visual Studio 2003 plugin which enables developers to use Visual Studio.NET 2003 as the IDE for Symbian development.

2. Carbide.vs 3.x is a Visual Studio 2005 plugin that enables efficient Symbian OS C++ application development using the Microsoft Visual Studio.NET 2005 IDE and Symbian OS SDKs.

Workarounds for S60 3rd Edition FP2

The available Carbide.vs versions (2.0.2 and 3.0.1) do not detect the S60 3rd Edition FP2 SDK. The steps given below must be followed to ensure that Carbide.vs detects this SDK.
Carbide.vs 2.0.2:

Install Carbide.vs 2.0.2. Copy the S60_3rd_FP2_v2.xml file to the folder C:\Program Files\Common Files\Symbian\SDK Descriptors\Nokia for Carbide.vs to detect the SDK.

Carbide.vs 3.0.1:

Case I: No Previous SDKs are installed in the system

Step 1:
To skip the SDK detection while installation of Carbide.vs 3.0.1 make following registry entry HKEY_LOCAL_MACHINE\SOFTWARE\Nokia\Carbide.vs.30 -> Add String value "ForcePrereq" = "1".

Step 2:
To enable S60 3rd Edition, FP2 SDK detection in Carbide.vs 3.0.1, copy the S60_3rd_FP2_v3.xml file to the folder C:\Program Files\Common Files\Symbian\SDK Descriptors\Nokia.

Case II: Previous SDKs are already installed in the system

Step 1:
To enable S60 3rd Edition, FP2 SDK detection copy the S60_3rd_FP2_v3.xml file to the folder C:\Program Files\Common Files\Symbian\SDK Descriptors\Nokia.
stats counter