mirror of
https://github.com/mbirth/wiki.git
synced 2024-11-09 13:16:45 +00:00
Added various posts.
This commit is contained in:
parent
222a361bd2
commit
570e6d3b7d
153
assets/genapidoc.py
Normal file
153
assets/genapidoc.py
Normal 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
2306
assets/titanium.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
assets/tmobile_germany.ipcc
Normal file
BIN
assets/tmobile_germany.ipcc
Normal file
Binary file not shown.
@ -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).
|
32
know-how/hardware/apple-iphone/_posts/2009-05-16-appulous.md
Normal file
32
know-how/hardware/apple-iphone/_posts/2009-05-16-appulous.md
Normal 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*
|
@ -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
|
@ -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.
|
@ -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
|
@ -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`
|
@ -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?
|
@ -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
|
41
know-how/hardware/apple-iphone/_posts/2009-11-30-emojis.md
Normal file
41
know-how/hardware/apple-iphone/_posts/2009-11-30-emojis.md
Normal 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).
|
@ -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 |
|
@ -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
|
@ -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).
|
91
know-how/software/_posts/2010-06-08-appcelerator-titanium.md
Normal file
91
know-how/software/_posts/2010-06-08-appcelerator-titanium.md
Normal 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.
|
Loading…
Reference in New Issue
Block a user