1
0
mirror of https://github.com/mbirth/wiki.git synced 2024-12-25 23:04:06 +00:00

Added various posts.

This commit is contained in:
Markus Birth 2015-02-22 21:32:56 +01:00
parent 222a361bd2
commit 570e6d3b7d
16 changed files with 3245 additions and 0 deletions

153
assets/genapidoc.py Normal file
View File

@ -0,0 +1,153 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import re
import sys
class JSDocGen:
def __init__( self, apifile, prefix ):
self.jsonfile = apifile
self.indent = 0
self.indentstring = " "
jf = open( apifile, "r" )
self.json = json.load( jf )
jf.close()
self.parse( self.json, prefix, True )
def p( self, str, end=None ):
indent = self.indentstring * self.indent
print( indent + str, end=end )
def getTypeExample( self, type ):
if type == "string":
return "''"
elif type == "boolean" or type == "bool":
return "true"
elif type == "Object" or type == "object":
return "new Object()"
elif type == "list":
return "[]"
elif type == "double":
return "0.0"
return "0" # default to int
def parseProperty( self, name, obj, isLast ):
print()
self.p( "/**" )
if "description" in obj:
self.p( " * %s" % obj["description"] )
if "type" in obj:
type = obj["type"]
else:
type = "undefined"
if name == name.upper():
self.p( " * @constant" )
self.p( " * @final" )
if "since" in obj:
self.p( " * @since %s" % obj["since"] )
self.p( " */" )
dummyvalue = self.getTypeExample( type )
self.p( "%s: %s" % ( name, dummyvalue ), end="" )
if not isLast:
print( "," ) # we don't want indentation here
else:
print() # we don't want indentation here
def getJSType( self, type ):
if type == "string" or type == "String":
return "String"
elif type == "bool" or type == "boolean":
return "bool"
elif type == "int" or type == "integer":
return "int"
elif type == "double":
return "double"
elif type == "list" or type == "array":
return "Array"
elif type == "method" or type == "function":
return "Function"
elif type == "object" or type == "args" or type == "options" or type == "Object" or type == "hash":
return "Object"
elif type == "contact":
return "Titanium.Contacts.Contact"
print( "WARNING: Type %s may be no valid JavaScript type." % type, file=sys.stderr )
return type
def parseMethod( self, name, obj, isLast ):
print()
self.p( "/**" )
if "description" in obj:
self.p( " * %s" % obj["description"] )
args = []
if "arguments" in obj:
for a in obj["arguments"]:
self.p( " * @param %s (%s) %s" % ( a["name"], self.getJSType( a["type"] ), a["description"] ) )
args.append( a["name"] )
args = ", ".join( args )
if "returns" in obj and obj["returns"] is not None:
self.p( " * @return (%s) %s" % ( self.getJSType( obj["returns"]["type"] ), obj["returns"]["description"] ) )
self.p( " */" )
self.p( "%s: function(%s) { }" % ( name, args ), end="" )
#self.p( "}", end="" )
if not isLast:
print( "," ) # we don't want indentation here
else:
print() # we don't want indentation here
def cleanObject( self, obj ):
for k in [ "deprecated", "description", "name", "object", "platforms", "property", "since", "method", "arguments", "returns" ]:
if k in obj:
del obj[k]
return obj
def parseObject( self, name, obj, isLast ):
obj = self.cleanObject( obj ) # remove all properties which do not belong to the object
if name == "Titanium":
self.p( "%s = {" % ( name ) ) # root element
else:
self.p( "%s: {" % ( name ) )
self.indent += 1
subitems = len( obj )
ctr = 0
for subname, sub in obj.items():
ctr += 1
lastone = False
if ( ctr == subitems ):
lastone = True
self.parse( sub, subname, lastone )
self.indent -= 1
self.p( "}", end="" )
if isLast and self.indent == 0:
print( ";" ) # we don't want indentation here
print( "Ti = Titanium;" ) # copy object to alias
elif not isLast:
print( "," ) # we don't want indentation here
else:
print() # do newline only
def parse( self, jsonobj, name, isLast ):
if "property" in jsonobj or "method" in jsonobj and not "object" in jsonobj:
if "property" in jsonobj and jsonobj["property"]:
# Property / Constant
self.parseProperty( name, jsonobj, isLast )
elif "method" in jsonobj and jsonobj["method"]:
# Function / Method
self.parseMethod( name, jsonobj, isLast )
else:
print( "!!! UNKNOWN TYPE for %s !!!" % name, file=sys.stderr )
else:
# Object
self.parseObject( name, jsonobj, isLast )
if __name__=="__main__":
jsd = JSDocGen( "apicoverage.json", "Titanium" )

2306
assets/titanium.js Normal file

File diff suppressed because it is too large Load Diff

BIN
assets/tmobile_germany.ipcc Normal file

Binary file not shown.

View File

@ -0,0 +1,19 @@
---
title: Flash in Safari
layout: default
created: 2009-04-23 23:34:27 +0200
updated: 2009-04-26 22:23:01 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- safari
- flash
---
(Found [here](http://www.gizmodo.com.au/2008/12/flash_for_iphone_comes_via_jailbroken_imobilecinema_app-2.html).)
You need to have a [jailbroken]({% post_url 2009-06-20-jailbreak %}) iPhone for this.
Add the repository `http://d.imobilecinema.com/` to Cydia and find the **iMobileCinema**. After installing it, you should be able to watch Flash movies in Safari (most of the times).

View File

@ -0,0 +1,32 @@
---
title: Appulous
layout: default
created: 2009-04-20 20:39:02 +0200
updated: 2009-05-16 11:11:42 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- hacking
- apps
---
* **Homepage:** [appulo.us](http://appulo.us/appdb/)
Appulous is a **special** AppStore for [jailbroken]({% post_url 2009-06-20-jailbreak %}) iPhones. The problem of the
original AppStore is that you can't test the applications. You are mostly dependent on the reviews - if there are some.
Appulous lets you test drive most applications from the AppStore.
To install it, add the following source to *Cydia*: `http://cydia.hackulo.us` . Then install the **Installous** package
using Cydia.
*(If you decide to keep an application, buy it from the original AppStore. The developer deserves it.)*
<p><div class="noteclassic" markdown="1">
Apps installed via Installous are mostly wiped upon a sync with iTunes. To fix this, buy them.[^1]
</div></p>
[^1]: or search for how to disable the killswitch via *SBSettings*

View File

@ -0,0 +1,136 @@
---
title: Firmware Unpacking
layout: default
created: 2009-05-20 02:17:15 +0200
updated: 2009-05-24 23:27:24 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- firmware
- hacking
---
Preparations
============
You'll need the following tools:
* [genpass.c](http://www.theiphonewiki.com/wiki/index.php?title=GenPass)
* [vfdecrypt-linux.tar.gz](http://code.google.com/p/iphone-elite/downloads/list)
* [Xpwn](http://www.zdziarski.com/iphone-forensics/v2.x-Base/Xpwn/)
* [OpenSSL 0.9.8h sources](http://www.openssl.org/source/openssl-0.9.8h.tar.gz)
Now compile the `genpass.c`:
1. untar `openssl-0.9.8h.tar.gz` and rename the directory to just `openssl`
1. compile OpenSSL:
cd openssl/
./config && make
1. now go one directory up (I assume this is where you put the `genpass.c`) and compile it:
gcc genpass.c openssl/libcrypto.a -o genpass -I openssl/include
1. the `vfdecrypt-linux.tar.gz` comes with a precompiled binary. If you want to compile it on your own, do it like this:
gcc vfdecrypt.c ../openssl/libcrypto.a -I ../openssl/include/ -o vfdecrypt
Unpacking the ipsw file
=======================
The ***iP**hone **S**oft**w**are* `.ipsw` files are normal ZIP files. You can extract them with e.g. *IZArc*. The archives
contain several files and some disk images: the iPhone OS itself, an Upgrade image and a Restore image. These 3 interesting
files for the iPhone OS 3.0 BETA 5 are named like this (output of `unzip -l`):
~~~
Archive: iPhone1,2_3.0_7A312g_Restore.ipsw
Length Date Time Name
-------- ---- ---- ----
208347136 05-04-09 13:09 018-4965-005.dmg
13086064 05-04-09 13:00 018-4970-005.dmg
13086064 05-04-09 13:00 018-4972-005.dmg
~~~
The larger one is the iPhone OS image, the other two are the two loader images (upgrade/restore).
Decrypt a loader image
======================
You need an *initialization vector* and a *key* for decrypting this. For now, these are posted
on [theiphonewiki.com](http://www.theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys:_3.x#iPhone_3G_5).
Do this using the **Xpwntool**:
./xpwntool 018-4972-005.dmg ramdisk.dmg -iv 5508FD2D20F22048D4BC1780A0B1CAFF -k 198FEAFD04973FC8B07A052BE75B9288
Find encryption key for iPhoneOS
================================
The key might be already posted on [theiphonewiki.com](http://www.theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys:_3.x#iPhone_3G_5),
so maybe we don't need this step.
Use the compiled `genpass.c` to extract the encryption key from the decrypted loader image:
./genpass s5l8900x ./ramdisk.dmg 018-4965-005.dmg
This will give something like this:
~~~
passphrase: fcdf5fbe3bdcaeff0c3de34430ffb473ac34cb0b55efdc087e70aa7c558a1055
not block 0
not block 1
not block 2
not block 3
not block 4
not block 5
vfdecryptk: f7b1edb0ee9196a1393dccdc8d090051308b84ab322bf860cb1d3ca566ef2e29752fa79a
~~~
Decrypt iPhoneOS
================
This was a bit tricky as the syntax for `vfdecrypt` was wrong in all other manuals and even in the syntax help of `vfdecrypt` itself.
Run this:
./vfdecrypt -i018-4965-005.dmg -kf7b1edb0ee9196a1393dccdc8d090051308b84ab322bf860cb1d3ca566ef2e29752fa79a -odmg.dmg
(Note the missing *\<SPACE\>* between the parameter's name and value.)
This will give you a file `dmg.dmg` which is the decrypted iPhoneOS image.
Uncompress iPhoneOS image
=========================
Since the `dmg.dmg` (199 MiB) is a compressed image, you can't mount it directly in Linux. You first have to unpack it.
There's a tool `dmg` among the **Xpwntools**. So use it like this:
./dmg extract dmg.dmg dmg-raw.dmg
You'll get a 441 MiB file `dmg-raw.dmg`.
Mount iPhoneOS
==============
To go exploring the iPhoneOS files, you can now mount the uncompressed image like this:
sudo mount -o loop -t hfsplus ./dmg-raw.dmg /mnt/iphoneimage
(Make sure that `/mnt/iphoneimage` exists and is an empty folder.)
Links
=====
* [mail-archive.com](http://www.mail-archive.com/linux4nano-dev@gna.org/msg00209.html) --- technical explanation
* [tungchingkai.blogspot.com](http://tungchingkai.blogspot.com/2009/04/how-to-decrypt-iphone-os-30-beta.html) --- how to decrypt the firmware file
* [theiphonewiki.com](http://www.theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys:_3.x#iPhone_3G_5) --- several encryption keys for iPhone firmware files

View File

@ -0,0 +1,20 @@
---
title: Crashing Applications
layout: default
created: 2009-05-27 09:48:31 +0200
updated: 2009-05-27 09:48:31 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- crashing
---
If you have to problem that some apps crash directly after running them, i.e. you see the app "popup" but it
immediately disappears leaving you back at the home screen, it might be a problem with Apple's DRM. This can
occur if a Sync with iTunes is aborted or the connection was lost.
I found the solution between the comments on [iphonehacks.com](http://www.iphonehacks.com/2008/07/app-crash-fix.html#comment-6a00d83534e7f169e2010534da1d1c970c):
Just download **any** (free) app from the AppStore - might also be some app you already bought but deleted
from the phone. After the app is installed, all other apps should work fine again.

View File

@ -0,0 +1,33 @@
---
title: Google Calendars
layout: default
created: 2009-05-30 23:11:26 +0200
updated: 2009-05-30 23:11:26 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- google
- calendar
---
If you want to sync your iPhone primarily with an Exchange server of your company but do want to have your (private) Google Calendars with you, you can add them as CalDAV calendars (since iPhone OS 3.0).
Go to *Settings**Mail, Contacts, Calendars**Add Account…**Other**Add CalDAV Account*:
* enter the following:
* **Server:** `www.google.com`
* **User Name:** `<username>@gmail.com`
* **Password:** *`<yourpassword>`*
* touch *Next*, this will create an entry with your default (first) Google Calendar
If you want to add another calendar, repeat the above steps and do this to change to another calendar:
* after adding the calendar touch the new entry (called *"Google"*)
* touch *Advanced Settings*
* edit the *Account URL*, the default one looks like `https://www.google.com:443/calendar/dav/<username>%40gmail.com/user`:
* replace `<username>%40gmail.com` by the Calendar ID of the other calendar
* you will find this ID in the settings of the specific Google Calendar, it is in the section **Calendar Address**, it looks like this: `2et3hcu26nrtli1r5r1slvus84@group.calendar.google.com`
* you might have to replace the `@` by `%40`
* go back and open the Calendar app to download the calendar data

View File

@ -0,0 +1,69 @@
---
title: Carrier Settings
layout: default
created: 2009-06-20 21:20:46 +0200
updated: 2009-06-20 21:20:46 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- settings
---
To enable MMS and Tethering, you might have to install a carrier-specific file for your carrier.
* **T-Mobile Germany:** [24100.net](http://www.24100.net/2009/03/t-mobile-germany-vodafone-germany-iphone-os-30-mms/)
* the same file with more features enabled (see next section): [Download here]({{ site.url }}/assets/tmobile_germany.ipcc)
Details
=======
If you look at the `.ipcc`-file you'll notice that it's a standard ZIP archive. Inside you'll find a folder `Payload`
and a folder with your carrier's name. There you'll find a file `carrier.list` along some others. It is an XML file
with all the features for your carrier. Some interesting snippets:
{% highlight xml %}
<key>AllowEDGEEditing</key>
<true/>
<key>AllowMMSCEditing</key>
<true/>
<key>AllowMMSEditing</key>
<true/>
...
<key>ShowCallForwarded</key>
<false/>
<key>ShowCallForwarding</key>
<false/>
<key>ShowTTY</key> <!-- Show options for TTY devices -->
<false/>
...
<key>SupportMMS</key>
<true/>
...
<key>SupportsNITZ</key> <!-- Network Identity and TimeZone (time synching via carrier) -->
<false/>
{% endhighlight %}
You can upload the `.ipcc` file using the Developer version of iTunes 8.2.0.10[^1]. Or you can upload the file to a
webserver and download it to your phone. There's also the possibility of creating a single merged XML file which then
must be sent using the MIME type `application/x-apple-aspen-config`.
MMS Settings
============
The carrier file for T-Mobile Germany doesn't contain the MMS settings. So go to *Settings**General* → *Network*
*Cellular Data Network* and input the following under the **MMS** section:
* **APN:** `mms.t-d1.de`
* **Username:** `t-mobile`
* **Password:** `mms`
* **MMSC:** `mms.t-mobile.de/servlets/mms`
* **MMS Proxy:** `172.28.23.131:8008`
* **MMS Max Message Size:** 300
* **MMS UA Prof URL:** *\<leave blank\>*
[^1]: Or change the shortcut to iTunes so that it reads: `...\iTunes.exe" /setPrefInt carrier-testing 1`, Mac users run `defaults write com.apple.iTunes carrier-testing -bool TRUE`

View File

@ -0,0 +1,91 @@
---
title: Hidden Features
layout: default
created: 2009-06-20 21:18:27 +0200
updated: 2009-06-20 21:19:17 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- features
---
There are some hidden options which you have to enable via modifying some file.
(see [here](http://www.funkyspacemonkey.com/iphone-os-30-episode-iii-howto-enable-battery-percentage-toggle-settings)
and [here](http://www.funkyspacemonkey.com/iphone-os-30-episode-iihowto-enable-videorecording-interface-iphone-2g3g).)
Enable a feature
================
For this you have to have [ssh-access]({% post_url 2009-04-26-ssh-access %}) enabled!!
1. `ssh` into the iPhone (remember: the `root`-password is **`alpine`**)
1. `cd` to `/System/Library/CoreServices/Springboard.app/`
1. run this command: `plutil -c xml1 M68AP.plist` (this will convert the binary-XML to plaintext)
1. now use `nano`, `mcedit` or `vim` to edit the file
1. find the **capabilites** dictionary right at the top of the file
1. add the following two key/value-pair:
{% highlight xml %}
<key>gas-gauge-battery</key>
<true/>
{% endhighlight %}
1. save the file
1. run `plutil -c binary1 M68AP.plist` to convert the file back into binary-XML format
1. logout
1. reboot(=respring) the iPhone
Features Explained
==================
accessibility
-------------
This will add a new settings menu below *General* (right below *International*). It is empty on iPhone 3G.
gas-gauge-battery
-----------------
This will enable a new setting under *General**Usage* to enable a percentage field left of the battery icon.
video-camera
------------
This will enable a new photo <=> video switch in the camera interface.
<p><div class="notewarning" markdown="1">
Enabling this feature will make the camera **unusable**! You won't be able to take normal photos with this feature enabled. (as of BETA 5)
</div></p>
voice-control
-------------
This will add a new settings menu below *General**International*. It is empty on iPhone 3G.
More Features
=============
In the file `/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices` there are various more feature codes listed - here's a screendump:
~~~
...device-name-localized...device-name.still-camera....cameraRestriction...telepho
ny...sms.video-camera....auto-focus-camera...wifi....accelerometer...magnetometer.
...gps.location-services...microphone..opengles-1..opengles-2..volume-buttons..rin
ger-switch...piezo-clicker...bluetooth...unified-ipod....youtube.youtubePlugin...g
reen-tea...not-green-tea...international-settings..stand-alone-contacts....delay-s
leep-for-headset-click...launch-applications-while-animating.load-thumbnails-while
-scrolling.sensitive-ui....apple-internal-install..all-features....nike-ipod...app
licationInstallation.voice-control...proximity-sensor....gas-gauge-battery...acces
sibility...mms.encrypted-data-partition....encode-aac..fcc-logos-via-software..tel
ephony-maximum-generation....hiccough-interval...application-display-identifiers.t
v-out-settings.screen-dimensions...main-screen-width...main-screen-height..main-sc
reen-scale...main-screen-orientation.explicitContentRestriction..volume-limit-rest
riction....inAppPurchasesRestriction...enforce-shutter-click...enforce-googlemail.
~~~
Anyone tried `nike-ipod` or enabling the `magnetometer` on a 3G? Also what could `green-tea` be?

View File

@ -0,0 +1,96 @@
---
title: Firmware 3.0 BETA without registration
layout: default
created: 2009-05-14 17:17:58 +0200
updated: 2009-08-01 20:03:23 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- firmware
- hacking
---
There is a way to install and activate the most recent BETA firmware without registering the device's UDID as a developer.
What you'll need:
* [iTunes 8.2](http://www.iphoneheat.com/2009/05/download-iphone-os-30-beta-5-7a312g-and-itunes-82-b10/)
* [iPhoneOS 3.0 BETA firmware file](http://www.iphoneheat.com/2009/03/download-iphone-firmware-files-all-at-one-place/)
* [iUtilities](http://blog.alltechrelated.com/2008/10/24/iutilities-usefully-theme-windows-application/) or [DiskAid](http://www.digidna.net/diskaid/)
* [QuickPwn](http://www.quickpwn.com/2009/05/quickpwn-3-0-beta-5.html) for the specific firmware version
* maybe the carrier-specific features file
Steps
=====
1. Install iTunes 8.2
1. Maybe make a backup of your iPhone
1. Hold <kbd>Shift</kbd> and click the *Restore* button (MAC users: try holding <kbd></kbd> while clicking)
1. Select the iPhone OS 3.0 firmware file
1. Wait until the firmware is installed (~15min)
* Your iPhone will need activation after bootup, but since your UDID isn't registered at Apple, iTunes will deny the activation
* the trick is to make iTunes think, there's a 2.2.1 firmware on your phone which it will activate without any problems
1. Jailbreak the phone using *QuickPwn* (make sure, the *Activate** option is **unchecked**!!)
1. now use *iUtilities* or *DiskAid*:
* **iUtilities:** Click the *String Editor* tab and find the section *System Version*
* enter **2.2.1** into the first box and **5H11** into the second one
* click *Go*
* **DiskAid:** Open DiskAid, set the starting node to *Root* in the bottom left
* navigate to `/System/Libraries/Core Services` and find the file `SystemVersion.plist`
* open this file (or copy to PC and open there) with an editor (e.g. notepad.exe)
* change the *ProductBuildVersion* to **5H11** and change the *ProductVersion* to **2.2.1**. Make sure that *ReleaseType* is **Public**
* save the file (or drag from PC back into *DiskAid*)
1. reboot your iPhone (hold Home and Power until the slider appears)
1. launch iTunes and it will activate your iPhone
1. now you might revert the changes made by *iUtilities* or *DiskAid*, see the table below:
| Device | Version | Build | Note |
|:------:|:-------:|:------:|:---------------|
| 3G | 2.2.1 | 5H11 | |
| 3G | 3.0 | 7A238j | BETA 1 |
| 3G | 3.0 | 7A259g | BETA 2 |
| 3G | 3.0 | 7A280f | BETA 3 |
| 3G | 3.0 | 7A300g | BETA 4 |
| 3G | 3.0 | 7A312g | BETA 5 |
| 3G | 3.0 | 7A341 | Final / Gold Master |
| 3G | 3.1 | 7C97d | BETA 1 |
| 3G | 3.1 | 7C106c | BETA 2 |
| 3G | 3.1 | 7C116a | BETA 3 |
SystemVersion.plist
===================
In case you didn't make a backup copy, the file looks like this:
{% highlight xml %}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>7A312g</string>
<key>ProductCopyright</key>
<string>1983-2009 Apple Inc.</string>
<key>ProductName</key>
<string>iPhone OS</string>
<key>ProductVersion</key>
<string>3.0</string>
<key>ReleaseType</key>
<string>Beta</string>
</dict>
</plist>
{% endhighlight %}
Links
=====
* [facepunch.com](http://www.facepunch.com/showthread.php?t=732296)
* [alltechrelated.com](http://blog.alltechrelated.com/2009/05/13/guide-how-to-bypass-the-udid-registration-for-os-30/)
* [hackint0sh.org](http://www.hackint0sh.org/forum/f201/72220.htm)
*[UDID]: Unique Device IDentifier

View File

@ -0,0 +1,41 @@
---
title: Emojis
layout: default
created: 2009-11-30 16:00:28 +0100
updated: 2009-11-30 22:21:44 +0100
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- emojis
---
[Emojis](http://en.wikipedia.org/wiki/Emoji) is the Japanese term for emoticons. Every mobile phone in the
Japanese area has a fixed set of emoticons included and they are all compatible between different
manufacturers of mobile phones.
Apple chose to include them as well, but didn't use the defacto-standard encoding for them but decided to
encode them in the private use area. So the emoticons are only compatible between iPhones. Read more about
it at [inner.geek.nz](http://inner.geek.nz/archives/2009/02/06/the-truth-about-iphone-emoji/).
Enable the Emoji keyboard
=========================
To use the Emojis, the iPhone has a special keyboard. But because of the incompatibility, the keyboard is
only available for *SoftBank Mobile* customers. But there exist some programs in the AppStore to enable
the keyboard regardless of the SIM card.
But don't get ripped off. You don't have to pay for e.g.
[iEmoji](http://appshopper.com/utilities/iemoji-get-your-emoji) - which is totally useless after the
keyboard has been enabled.
Just get [Spell Number](http://appshopper.com/utilities/spell-number) for free, start it and enter the
magical number `91929394.59`. After that, go to *Settings**General**Keyboard**International* → *Japanese*
and enable the **Emoji keyboard**. Done.
<p><div class="noteclassic">To be able to use Emojis while writing mails, you have to reboot your iPhone.</div></p>
You can find these instructions with pictures
at [maketecheasier.com](http://maketecheasier.com/enable-emoji-icons-on-your-iphone-for-free/2009/02/11).

View File

@ -0,0 +1,36 @@
---
title: iPhone vs. Android
layout: default
created: 2010-03-07 12:06:49 +0100
updated: 2010-03-30 13:22:47 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- android
- comparison
---
| iPhone | Android (esp. Nexus One) |
|:------------------------------------------|:--------------------------------------------------------------|
| It's from *Apple*. | It's **NOT** from *Apple*. (or: It's from *Google*.) |
| can change keyboard layout on the fly | keyboard language related to GUI language (not independently configurable!), but different input methods (not only keyboards) downloadable/switchable on the fly |
| ~150.000 Apps (most are gimmicks though) | ~30.000 Apps and growing, some well-known web-based services still missing as a native App |
| Apple decides which apps get onto the phone/in the AppStore | very loose controlled Market store<br />can install apps via USB or web download, even from Linux |
| only syncs with one single *iTunes*, i.e. no Linux support at all, no sync at multiple places | supports USB HDD mode where you can use the microSD-card like a flash disk |
| can sync with local software (e.g. Outlook) via iTunes | syncs mostly with Google services or Exchange, but custom apps available for ActiveSync, SyncML, Outlook, etc. |
| supports Push Notifications via Apple servers | Push Notifications are a bit complicated and not native (e.g. IBM MQTT) **but** can use Jabber/XMPP messages via *Google Talk* for notifications |
| Tethering depends on network carrier / paid | Tethering via different methods from free to $30 |
| cheap iPhone OS upgrades in the future (OS2 → OS3 for iPod Touch was $9.95), new versions still support (almost) all old devices | Android updates depend on cell phone maker |
| Apple forbids downgrades of software, even from 3.1.3 to 3.1.2 is not possible --- even when they have broken a feature | You even get the [instructions](http://developer.htc.com/adp.html) from them... |
| you are limited to those service providers *Apple* cooperates with ("exclusive contracts") | open for all network service providers |
| can't replace/change battery | spare batteries are available |
| Apple's sense of *security* is not the best: [h-online.com](http://www.h-online.com/security/news/item/Mac-OS-X-safer-but-less-secure-957981.html) | |
| [iPhone's Headset](http://www.howtomobile.com/apple-iphone/how-to-use-the-iphone-stereo-headset/) has only 1 button (push once to Play/Pause; push twice to Skip Track) | [Android Headset](http://www.google.com/support/android/bin/static.py?page=guide.cs&guide=27201&topic=27212&answer=168441#1084954) has 3 buttons (Last Track; Play/Pause; Next Track) |
| only one App can be used at a time | Multitasking! |
| Apps are limited to their own files (+Pictures/Camera), i.e. you can't access file stored with a different App | Apps have access to all files in your Home directory, i.e. Images, Music, etc. |
| somewhat sloppy (3G) | blazing fast |
| can only have App icons on the Home screen, nothing else is configurable<br />up to 11 pages with 110 Apps (more can be run by searching) | Home screen can have Widgets, Icons, Subfolders (for more Icons) and you can change the wallpaper (even to an animated "Live Wallpaper")<br />5 pages, but folders allow for more Apps; also "All Apps at once" view integrated; searching is also available |
| syncs fine with Exchange | doesn't sync Exchange calendars |
| have to check Inboxes of each mail acct | Unified inbox available |

View File

@ -0,0 +1,39 @@
---
title: Develop iOS Apps
layout: default
created: 2009-04-20 22:07:23 +0200
updated: 2010-04-02 18:07:54 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- development
---
real Apps
=========
* XCode
* [appcelerator](http://appcelerator.com/) (write in JavaScript, but gets natively compiled to standalone apps)
* currently my weapon of choice for iPhone+Android development, needs a Mac with XCode though for the iPhone part
* see [appcelerator Titanium Framework]({% post_url 2010-06-08-appcelerator-titanium %})
Pseudo-Apps
===========
*Pseudo-Apps* is what I call the apps which are actually a bunch of HTML pages with JavaScript and some JavaScript-API
for accessing the iPhone internal features. These open in a WebKit-control so that they are basically some spiced up websites.
* [PhoneGAP](http://phonegap.com/) (HTML/JavaScript/CSS, gets compiled and can be offered through AppStore; standalone apps)
* [nachbaur.com](http://blog.nachbaur.com/2009/04/native-ui-controls-in-phonegap-coming.html) native UI controls in PhoneGap
* [Big Five](http://www.big5apps.com/) (HTML/JavaScript/CSS, runs off the web → slow when switching pages, needs Big5-Launcher)
Web-Apps
========
* [iUI](http://joehewitt.com/files/iphone/navigation.html) iPhone navigation emulated using JavaScript and CSS ([Google Code project](http://code.google.com/p/iui/))
* [CiUI](http://www.clientcide.com/cnet-js-standards/ciui-cnet-iphone-ui/) similar to iUI
* [Moousture](http://neofreeman.freepgs.com/Moousture/iphone.html) finger-gesture control

View File

@ -0,0 +1,83 @@
---
title: AirVideo Server under Linux
layout: default
created: 2010-02-16 21:28:54 +0100
updated: 2010-05-17 14:45:34 +0200
toc: false
tags:
- know-how
- hardware
- apple
- iphone
- airvideo
- multimedia
---
*[AirVideo](http://www.inmethod.com/air-video/)* is a Client/Server-Mediaplayer, which allows you to stream videos
directly from your PC to your iPhone. Its server software started as Windows-/Mac-only but now there's also a Linux
server module available, too.
All details are explained in [their user forums](http://www.inmethod.com/forum/posts/list/34.page).
Compile the special FFmpeg under Ubuntu
=======================================
1. download the customized version of *FFmpeg* from: <http://www.inmethod.com/air-video/licenses.html>
(use the 2.2.5 version!) and unpack it to some directory
1. install the following packages: [libmp3lame-dev](apt://libmp3lame-dev), [libfaad-dev](apt://libfaad-dev),
[libx264-dev](apt://libx264-dev) (`0.svn20100115-0.0~kkstemp1` from [Stéphane Marguet's PPA](https://launchpad.net/~stemp/+archive/ppa)!),
[mpeg4ip-server](apt://mpeg4ip-server), [git-core](apt://git-core), [pkg-config](apt://pkg-config)
1. change to the directory to where you have unpacked *FFmpeg*
1. run:
{% highlight bash %}
$ ./configure --enable-pthreads --disable-shared --enable-static --enable-gpl --enable-libx264 --enable-libmp3lame --enable-libfaad --disable-decoder=aac
$ make
{% endhighlight %}
1. after the build is complete, download the `AirVideoServerLinux.jar` and `test.properties` from [this posting](http://www.inmethod.com/forum/posts/list/60/34.page#3935) (**UPDATE:** [Newer version](http://www.inmethod.com/forum/posts/list/120/34.page#5252))
1. modify the `test.properties` and fix the paths to the 3 tools and your video directory:
* `path.ffmpeg` should point to your just compiled `ffmpeg`-binary
* `path.mp4creator` is `/usr/bin/mp4creator`
* `path.faac` is `/usr/bin/faac`
* `folders` format is: *\<label1\>*`:`*\<path1\>*`,`*\<label2\>*`:`*\<path2\>*`,`…`,`*\<labelN\>*`:`*\<pathN\>*
* leave the other options as they are
1. finally you can run:
{% highlight bash %}
java -jar AirVideoServerLinux.jar test.properties
{% endhighlight %}
1. manually add the server (by its IP!) to *AirVideo* on your iPhone
1. Have fun!
Autostart AirVideoServer
========================
To autostart *AirVideoServer* upon bootup, you can use [UpStart](http://upstart.ubuntu.com/) which is the default
way in *Karmic Koala*.
Just create a file `/etc/init/airvideo.conf` with these contents:
~~~
start on runlevel [2345]
stop on shutdown
respawn
exec sudo -H -n -u mbirth /usr/bin/java -jar /opt/AirVideoServer/AirVideoServerLinux.jar /opt/AirVideoServer/test.properties
~~~
This will tell *UpStart* to run the server process as user `mbirth` upon reaching one of the runlevels 2-5 and stop the
server when the system shuts down. `respawn` tells it to restart the server if it crashed.
You can also control it manually by doing
sudo start airvideo
or
sudo stop airvideo
Bonjour Announcement
====================
*jcheshire* pointed out how to add *AirVideo* to the [avahi-daemon](apt://avahi-daemon), so that it is automatically
recognized by the clients. Read more in the [AirVideo forums](http://www.inmethod.com/forum/posts/list/165/34.page#6907).

View File

@ -0,0 +1,91 @@
---
title: appcelerator Titanium Framework
layout: default
created: 2010-04-02 18:06:40 +0200
updated: 2010-06-08 09:53:45 +0200
toc: true
tags:
- know-how
- software
- framework
- appcelerator
- titanium
---
* **Homepage:** <http://www.appcelerator.com/>
* **API Docs:** <http://developer.appcelerator.com/apidoc/mobile/>
Generate JSDoc file for your IDE
================================
To get auto-completion for the Titanium framework, you have to let your IDE know of all available methods and
properties. Most IDEs can do this by parsing a JavaScript file. If you add JSDoc tags to it, you will even have
descriptions, parameter hints, etc.
For more information about JSDoc, take a look at these links:
* <http://code.google.com/p/jsdoc-toolkit/wiki/TagReference>
* <http://code.google.com/closure/compiler/docs/js-for-compiler.html>
* <http://jsdoc.sourceforge.net/#tagref>
My very first try was with the 0.8.3 API and I created a JSDoc tagged JavaScript file by hand. The file is still
available here: [titanium.js]({{ site.url }}/assets/titanium.js)
Now there's a file [apicoverage.json](http://github.com/appcelerator/titanium_mobile/blob/master/site_scons/apicoverage.json)
available from the *Titanium Mobile* Git repository which contains names and descriptions of all the functions.
You just have to get this into JavaScript code for your IDE to understand.
I wrote a Python3 script, which parses the JSON of the `apicoverage.json` file and generates a dummy JavaScript
file for your IDE. To get that file, first run:
wget -N http://github.com/appcelerator/titanium_mobile/raw/master/site_scons/apicoverage.json
After that, download this script, put it into the same directory and on Linux make it executable (`chmod a+x genapidoc.py`):
* [genapidoc.py]({{ site.url }}/assets/genapidoc.py)
Now you only have to run this command:
genapidoc.py > Titanium.js
or on Windows run this (make sure you installed [Python 3.x.x](http://python.org/download/)):
python.exe genapidoc.py > Titanium.js
Problems in Linux
=================
Doesn't start on Lucid
----------------------
If *Titanium Developer* doesn't start on *Ubuntu Lucid* complaining about `/usr/lib/libgtk-x11-2.0.so.0`, go
to `$TITANIUM/runtime/linux/1.0.0` and delete the files `libgobject*`, `libglib*`, `libgio*` and `libgthread*`.
Maybe repeat that in older versions of the Runtime.
See [support.appcelerator.net](http://support.appcelerator.net/discussions/support/2361-titanium-developer-10-wont-start-on-ubuntu-1004).
Can't install to device
-----------------------
If you can't install apps to your device connected via USB, check the list of attached devices running the following
command (from the Android SDK):
~~~
$ ./adb devices
List of devices attached
???????????? no permissions
~~~
If you get a device listed as `???????????? no permissions`, do the following:
~~~
$ sudo ./adb kill-server
$ sudo ./adb start-server
$ ./adb devices
List of devices attached
HT9CVPxxxxxx device
~~~
See [this thread](http://www.google.com/support/forum/p/android/thread?tid=08945730bbd7b22b&hl=en) for details.