Getting Sky Explorer to Work on Symbian 3rd Edition

It is actually still quite confusing for me. :)

Firstly, Sky Explorer needs keycapture module which requires SwEvent capability. Refer S60 3rd Edition Development.

To sign the SIS file with SwEvent capability means that I need to get a symbian cert. Go to www.symbiansigned.com and get a free Symbian Developer Certificate. (need to download DevCertRequest tool to generate cert, the Developer cert can only be used in 1 phone by specifying 1 imei no.)

At first, I try to sign PythonForS60_1_3_20_3rdEd_unsigned_freedevcert.SIS with only the required capabilities, this doesn't work. So, I request another cert with all 13 capabilities included and sign with this and this works!

I am using Nokia Remote Device Access for testing, so when using a freshly generated cert, I need to change the phone's timezone to my timezone. :)

Next, I need to modify my code to know where it is (the path it resides in). In 3rd edition phone, it is in \private\<uid> (Sky Explorer uid is 0x2000A1C6, so the scripts will be in \private\2000A1C6), the application can know its own uid from appuifw.app.uid() and the sys.path will also contain this path, thus I can know the exact path. Good thing, this private path is writable for the owning application, so saving of preference and application tagging data requires no changes.

I have already written a python extension applist.pyd (view code)to retrieve the list of applications info from the phone and have already tested that it is working correctly in my 2nd edition phone with a slight modification. Getting it to work on 3rd edition isn't as easy though.

The applist module cannot be imported from the private dir !? The alternative is to make it go into the executable dir in \sys\bin . Since the py2sis script has an option leavetemp that allows us to tweak the installation path of each component in the pkg file, I think of using that. This turns out bad for 3rd edition sis, I kept getting errors from py2sis until I gave up! :-(

I then turn my attention to ensymble.py (Great stuff! Turns out to be my saviour! :) Get it from Ensymble development by Jussi Ylänen) to search for more options.

python ensymble.py simplesis --uid=0x2000A807 --version=1.0.0 applist APPLIST.sis

The simplesis command creates a sis file from the source dir applist preserving the path structure that applist contains. In this case, I should create a sys\bin subdir in applist and put the applist.pyd inside the sys\bin subdir. This creates the unsigned version.

python ensymble.py mergesis --cert=mycert.cer --privkey=mykey.key --passphrase=xxx SkyExplorer.sis 

APPLIST.sis SkyExplorer_v1.sis

The mergesis command merges several SIS files into one. The resulting SIS file is then signed with the certificate provided.

After this is done and installed, the applist module still cannot be imported! There is a permission denied error, check that applist.pyd is compiled to have same capabilities as this python interpreter process! So, although applist.pyd doesn't requires any capabilities, but in order for my program to load it, it will require the same capabilities as my program! Yes! This is the weird part! I am thinking what if another program also embeds the same module but it requires a different set of capabilities, so what will happen when this program is installed with the same module? The only way this can seem to work is if the module will acquire a union of the set of capabilities :roll:

python ensymble.py signsis --cert=mycert.cer --privkey=mykey.key --passphrase=xxx

--dllcaps=LocalServices+NetworkServices+ReadUserData+WriteUserData+SwEvent APPLIST.sis APPLIST_v1.sis

Use signsis command to sign APPLIST.sis with the same set of capabilities that I use for Sky Explorer and then use mergesis to merge into one and then try again. I confirm this finally works! (only on 1 phone)

python ensymble.py signsis --cert=mycert.cer --privkey=mykey.key --passphrase=xxx

--execaps=LocalServices+NetworkServices+ReadUserData+WriteUserData+SwEvent

skyexplorer_3rdEd_1.0.1.unsigned.sis skyexplorer_3rdEd_1.0.1.devsigned.sis

Note: use execaps option instead when resigning skyexplorer.

Download at http://code.google.com/p/skyexplorer/downloads/list

skyexplorer_3rdEd_1.0.1.unsigned.sis

APPLIST_3rdEd_1.0.unsigned.sis

pyemail_3rdEd_1.0.unsigned.sis

The SkyExplorer 2nd edition comes with the applist.sis.

skyexplorer_2ndEd_1.0.1.sis

Comments

blog comments powered by Disqus

Pages

Categories