Learn how to make free out-going calls and receive your very own US phone number for your iPod touch to receive free incoming calls right on your iPod touch just like a fully fuctional phone.
Click on the link below to learn how!
SOURCES
1 iFortner Inc: http://ifortner.zoomshare.com/repo.xml
2 AppTapp Official: http://repository.apptapp.com
3 Conceited Software: http://conceitedsoftware.com/iphone
4 Conceited Software Beta: http://conceitedsoftware.com/iphone/beta
5 Ste Packaging: http://psmxy.org/iphone-apps
6 Additional Sources
7 TouchRepo: http://touchrepo.com/repo.xml
8 HighTymes: http://hightymes.org/iphone/plist/index.xml
9 iSwitcher: http://meachware.com/list.xml
10 Loring Studios: http://loringstudios.com/iPhone-schnapps/index.xml
11 AlohaSoft 1.0.2: http://homepage.mac.com/reinholdpenner/102.xml
12 AlohaSoft 1.1.1: http://homepage.mac.com/reinholdpenner/111.xml
13 AlohaSoft 1.1.2: http://homepage.mac.com/reinholdpenner/112.xml
14 Apogee LTD: http://apogeeltd.com
15 Asuraku’s Repo: http://asuraku.googlepages.com/repo.xml
16 aXP: http://lostsoul.aeroxp.org/iphone/index.xml
17 BigBoss: http://markmon.mine.nu:90/iphone/repo/repo.plist/sleepers.net/iphonerepo
18 Blaze Ultimate: http://blazecompany.googlepages.com/blaze.xml
19 CedSoft: http://prog.cedsoft.free.fr
20 Chinese LumaQQ: http://lumaqq.linuxsir.org/update/repository.plist
21 CopyCoders: http://homepage.mac.com/hartsteins/copycoders/copycoders.xml
22 Death to Design: http://iphone.deathtodesign.com/index.xml
23 Demosthenes705’s eBooks: http://chriss.brandonsgames.com/index.xml
24 iApp-a-Day: http://iappaday.com/install
25 iBlackJack: http://iphonefanclub.com/native
26 Imagine09: http://home.twcny.rr.com/imagine09/Imagine09.xml
27 Internet Plug-In: http://brandonschlenker.com/plugin.xml
28 iPhone Apps: http://repo.us.to or applerepo.a.la
29 iPhone DevDocs: http://idevdocs.com/install
30 iSolitaire: http://iphone.rustyredwagon.com/repo
31 iUnlock: http://i.unlock.no
32 Java Runtime Environment: http://apptapp.saurik.com
33 Limited Edition iPhone: http://limitededitioniphone.com/lei.xml
34 Mateo: http://bblk.net/iphone
35 Mod My iFone: http://modmyifone.com/installer.xml
36 MobileStacks: http://mobilestack.googlecode.com/svn/repository/internal.plist
37 Moyashi’s Stuff: http://hpcgi3.nifty.com/moyashi/ipodtouch/repository.cgi
38 MTL Repository: http://home.mike.tl/iphone
39 Nuclear Design: http://nucleardesign.net/repository
40 Patricks Source: http://sources.st3alth.org/sources.xml
41 Pyrofer’s Projects: http://pyrofersprojects.com/repos/repos.xml
42 PXL Repository: http://pxl.freemyiphone.com
43 R4m0n Repository: http://iphone.r4m0n.net/repos
44 Robota International: http://iphone.robota.nl
45 Scientific Calcs: http://tinyurl.com/2b32sn
46 ScummVM: http://urbanfanatics.com/scummvm.xml
47 Shai’s Repo: http://ride4.org/shai.xml
48 Simek’s Graphic: http://simek.ddl2.pl
49 Studded: http://studded.net/installer/index.xml
50 Surge: http://iphonesurge.com/iphonesurge.xml
51 Swell: http://lyndellwiggins.com/installer/Swell
52 weTools: http://app.weiphone.com/installer
53 PBF: http://www.polarbearfarm.com/repo/
54 iFob: http://www.icloseby.com/downloads/iFob.pxl
55 newattiphone: http://www.newattiphone.com/repo.xml
56 byooi.com digicide: http://byooi.com/iphone/digicide.plist
57 Maomaland Themes: http://maomaland.com/iphone/repo.xml
58 Languages
59 Arabic: http://apps.iphoneislam.com
60 Simplified Chinese: http://iphone.org.hk/repository.plist
61 Chinese: http://iphone.freecoder.org/rep/
62 Danish: http://iphone.vildmedmac.dk/install
63 FrenchIphone: http://rep.frenchiphone.com
64 Greek: http://greek-iphone.com/grloc
65 Hebrew: http://ihebrew.net
66 iPhone for Taiwan: http://iphone4.tw/unlock/
67 Korean: http://bomijoa.com/iphone / agaat.info/demo
68 Norwegian http://iFon: install.ifon.no
69 Polish iPolish: http://wakoman.ovh.org/iphone
70 Portugues-Brasil(1.1.2): http://iphonemod.com.br/forum/repo/installer.xml
71 Russian iPhone: http://russianiphone.ru/beta
72 Russian Tools (in English): http://russianiphone.ru/beta/en
73 Spanish Phyros iPhone-ES: http://iphone.frickr.es/index.xml
74 Swedish iFun.se: http://ifun.se/swe
75 Taiwanese: http://iphone4.tw/unlock
76 Vietnamese: http://iphone.billydragon.net
FOR DEVELOPERS ONLY
plist structure
bundleIdentifier (string, required) - The unique bundle identifier of this package, this is how Installer knows what you are talking about. Do not ever change this value once a package goes live, unless you want to fork your package.
name (string, required) - The name of the package as it will appear in the Installer package listings.
version (string, required) - The version of your package. Currently, Installer.app does not parse version numbers, but rather compares them -- meaning that you can only have one version of a product at a time live on the repositories. This shortcoming will be addressed in the near future.
location (string, required) - The location for the associated package zip file. This zip file MUST retain executable permissions if you are going to be installing any executables.
size (string, required) - The exact byte size of the package zip file. This must match or the Installer will not be able to install the package.
url (string, optional) - A url to link the "More info..." button to.
description (string, optional) - A package description or README. At this time Installer can only view a small portion of this text, but this will be addressed soon.
maintainer (string, optional) - The third party maintainer name for this package. You do not need to set this if it is the same as the repository maintainer.
contact (string, optional) - The third party maintainer contact (e-mail) for this package. You do not need to set this if it is the same as the repository maintainer's contact.
restartInstaller (boolean, optional) - set to true if you want installer to prompt the user to restart Installer itself after installing or updating this package.
scripts (array, required) - This is where the core installation procedure takes place. It is composed of one or more Installer scripts:
preflight(array, optional) - this script is executed before any installs or updates, but NOT uninstalls. It is typically used to check whether the package can be installed.install(array, required) - this is the install script, without this, the user won't be able to install the package. Makes sense, doesn't it?update(array, optional) - this script is executed when the user updates the package, if it is not defined, installer uses the install script (see above) to update instead, effectively overwriting the old package -- this is useful for smaller packages that don't really need a separate update script.postflight(array, optional) - this script is executed after any install or update of the package, but NOT uninstalls.uninstall(array, optional) - this script is executed when the user chooses to uninstall the package. Although it is optional, it is HIGHLY recommended that you do define it so that your package can be uninstalled. If it is not defined, the uninstall button will not show up in Installer.
Each of these scripts is an array, containing script commands in the following format:
<array> <string>CommandName</string> <string>Argument 1</string> <string>Argument 2</string> </array>A command may take any number of arguments, as well as some commands take array arguments that can even contain other scripts embedded in the same format. The commandn name however, is always a string. Please note that in the event that the Installer cannot identify a command name, the script execution will be aborted (notifying the user).
script commands
CopyPath(source, destination)- Copies a path recursively. You can specify a folder or a file, but in either case the destination path must be absolute, do not leave out the filename when copying to a folder! It may work, but it is bad practice to do so and may cause unexpected results in some circumstances. The source path, when specified without a preceding slash (/, absolute path) will resolve to the contents of the zip file -- in the case that a full path is specified, it will resolve against the user's filesystem.
Creating a Source Repository for use with Installer.app
Installer.app, like Macintosh OS X, reads external properties, such as sources for package downloads, from an Apple Property List (commonly known as a plist). These property lists can be represented in either XML or binary format. A sample can be viewed in the sample below.
When creating a repository, it is generally recommended that you use Apple’s property list editor, although any plain text editor, such as Microsoft’s Notepad, will work just as well. One common source of errors is using a Rich Text Editor, such as Microsoft’s Wordpad or Apple’s TextEdit.
Contents
[hide]
· 1 Sample Repository
· 2 Building A Repository
o 2.1 Header Information
o 2.2 Info
o 2.3 Package Information
o 2.4 Scripts
· 3 Common Script Commands
o 3.1 CopyPath() and RemovePath()
o 3.2 Other Common Commands
o 3.3 If / IfNot
· 4 More on ~/
· 5 More on MD5
· 6 Download this page in .doc format
[edit] Sample Repository
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>info</key>
<dict>
<key>name</key>
<string>iFortner Inc</string>
<key>description</key>
<string>The Official iFortner Repository</string>
<key>maintainer</key>
<string>Steven Fortner</string>
<key>contact</key>
<string>ifortner2008@gmail.com</string>
<key>url</key>
<string>http://www.ifortner.com</string>
<key>category</key>
<string>iFortner Apps/Themes</string>
</dict>
<key>packages</key>
<array>
<dict>
<key>bundleIdentifier</key>
<string>com.ifortner.iHide</string>
<key>name</key>
<string>iHide</string>
<key>version</key>
<string>2.0</string>
<key>location</key>
<string>http://www.ifortner.com/Apps/iHide.zip</string>
<key>category</key>
<string>Games</string>
<key>size</key>
<string>1276224</string>
<key>hash</key>
<string>2c250d07856eb73d7215d5a27e99fe4f</string>
<key>url</key>
<string>http://www.ifortner.com/iHide/index.html</string>
<key>maintainer</key>
<string>Steven Fortner</string>
<key>contact</key>
<string>ifortner2008@gmail.com</string>
<key>description</key>
<string>iHide will allow you to hide your music, contacts, videos, notes and etc.</string>
<key>date</key>
<string>1201815661</string>
<key>scripts</key>
<dict>
<key>install</key>
<array>
<array>
<string>CopyPath</string>
<string>iZoo.app/</string>
<string>/Applications/iHide.app</string>
</array>
</array>
<key>uninstall</key>
<array>
<array>
<string>RemovePath</string>
<string>/Applications/iHide.app</string>
</array>
</array>
</dict>
</dict>
</array>
</dict>
</plist>
[edit] Building A Repository
[edit] Header Information
The basic header information is the standard for Apple plists. You should not change this.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
...
...
...
</dict>
</plist>
[edit] Info
Within this plist, you should create a dictionary with two keys. The first of which is the info key. This is where Installer gets all the information about your repository.
<key>info</key>
<dict>
<key>name</key>
<string>iFortner Inc.</string>
<key>description</key>
<string>The Official iFortner Repository</string>
<key>maintainer</key>
<string>Steven Fortner</string>
<key>contact</key>
<string>ifortner2008@gmail.com</string>
<key>url</key>
<string>http://www.ifortner.com</string>
<key>category</key>
<string>iFortner Apps/Themes</string>
</dict>
Key Optional Description
category No. This is the category in which you want you source to appear in Installer's Sources List.
name No. This is the name you want Installer to display for your source in its Sources List.
description Yes. This is the description you want Installer to display for your source in its Sources List.
maintainer No. Your name or your company's name.
contact No. The email at where you want to receive email form users about your source
url Yes. This is the link you want to load when the user taps the "More Info" tab about your source.
[edit] Package Information
This is the second key in your main dictionary, in which you tell Installer about each specific package in your repository. Each package should be set up as a separate dictionary within an array.
<key>packages</key>
<array>
<dict>
<key>bundleIdentifier</key>
<string>com.ifortner.iHide</string>
<key>name</key>
<string>iHide</string>
<key>version</key>
<string>2.0</string>
<key>location</key>
<string>http://www.touchrepo.com/Apps/iHide.zip</string>
<key>category</key>
<string>iFortner Apps/Themes</string>
<key>size</key>
<string>1276224</string>
<key>hash</key>
<string>2c250d07856eb73d7215d5a27e99fe4f</string>
<key>url</key>
<string>http://www.ifortner.com/iHide/index.html</string>
<key>maintainer</key>
<string>Steven Fortner</string>
<key>contact</key>
<string>ifortner2008@gmail.com</string>
<key>description</key>
<string>iHide will allow you to hide your music, contacts, videos, notes and etc.</string>
<key>date</key>
<string>1201815661</string>
<key>scripts</key>
<dict>
<key>install</key>
<array>
<array>
<string>CopyPath</string>
<string>iHide.app/</string>
<string>/Applications/iHide.app</string>
</array>
</array>
<key>uninstall</key>
<array>
<array>
<string>RemovePath</string>
<string>/Applications/iHide.app</string>
</array>
</array>
</dict>
</dict>
</array>
Key Description
bundleIdentifier This is how Installer knows what your package is. DO NOT CHANGE THIS once you have it set, or else you will break updates.
category This is the category in which your package appears; ie Games. Books, Themes, etc.
name This is the actual name of your package.
description The package description that the user sees.
version Your package's current version number. Any change to this causes your package to appear as an update.
location This is the actual location of your package; the specific place from where Installer will download your package.
maintainer The name of whoever maintains the package. It's a good idea to put the package creator here.
contact This is the contact email of whoever created the package. Use yours from the info key if you do not have the creator's email.
size This is the exact size of your package in bits. If you are one bit off, Installer will refuse the download.
sponsor Creates a tag at where your Sponsor's name will appear.
hash This is the md5 checksum of your package. If this does not match your package's size exactly, Installer will refuse the download.
date This is the standard UNIX timestamp. It is the number of seconds since 1970.
scripts This is where you put the preflight, install, upgrade, postflight, and uninstall scripts.
url The link that is loaded when the user taps the "More Info" tab in Installer's about section for your package.
[edit] Scripts
Scripts are the instructions that Installer uses to actually install or uninstall your package. There are five types of scripts you can use, each performing their own special functions. Scripts should appear in a subdictionary of its package directly attached to the "scripts" key.
Each script should appear as a key of this subdictionary with its commands forming an array. Each command should appear as a separate array of strings within the script's master array.
<key>scripts</key>
<dict>
<key>install</key>
<array>
<array>
<string>CopyPath</string>
<string>iHide.app/</string>
<string>/Applications/iHide.app</string>
</array>
<array>
<string>Notice</string>
<string>This is how you create a second command in a script</string>
</array>
<array>
<string>Notice</string>
<string>This is another command. Notice how each command is listed in a subarray of the script's master array.<string>
</array>
</array>
<key>uninstall</key>
<array>
<array>
<string>RemovePath</string>
<string>/Applications/iHide.app</string>
</array>
</array>
</dict>
Script Usage
install Used for Installing the actual package.
uninstall Used for uninstalling the package.
upgrade Used when upgrading requires special instructions. If there is no uninstall script, Installer uses the install script when upgrading.
preflight This script runs before the install process. This is handy for performing checks as to whether Install should install the package or abort the package. Also this can be used to ready the iPhone/iPod for install.
postflight This script runs after install. It is handy for such things as verifying proper install, cleaning up install, setting certain privileges, or anything else that must occur after installing a package.
The only script that is necessary is the install script. If you leave out the uninstall script, Installer will only give the user the option to install or reinstall (as seen in the Uninstall Section of Installer when you select to uninstall Installer).
[edit] Common Script Commands
[edit] CopyPath() and RemovePath()
The most common commands you will use are the CopyPath(oldPath, newPath) and the RemovePath(path) commands. These will be expressed as
<array>
<string>CopyPath</string>
<string>iHide.app/</string>
<string>/Applications/iHide.app</string>
</array>
and
<array>
<string>RemovePath</string>
<string>/Applications/iHide.app</string>
</array>
respectively. You will find yourself using both during both the install and uninstall phase.
In the CopyPath command, the first string (the oldPath) represents the directory within your package where all your files are. DO NOT put a slash at the beginning of this string. The second path (newPath) is the exact location of where you would like the package to be saved on the iPhone/iPod. Notice that this path has the slash at the beginning of the string. This is absolutely necessary, else your package will be installed into a temporary directory and will be deleted upon reboot. Make sure to put the EXACT location in here. CopyPath will overwrite files by default, so again, make sure your newPath is exactly correct. Finally, do not use shortcuts such as an expanding tilde to represent the user's home directory.
Also, note that CopyPath() can be used for copying files withing the iPhone/iPod itself. This is handy for back up purposes. In this case, you will want the oldPath string to begin with a slash. The oldPath MUST also have the exact address of the fil or directory that you want to copy.
In the RemovePath, you will need to specify the exact location of the file or directory that you want to remove. Know that removing a file or directory is a permanent. Be careful
[edit] Other Common Commands
Remember that each command is an array of strings. Look at CopyPath and RemovePath if you are not sure how to create an array out of each command.
Command What It Does
AbortOperation(string) This will make Installer both abort the install process and display a message telling the user why. Example: "This package requires firmware version 1.1.2 to be installed first."
AddSource(url) Adds the named url to Installer's Sources List. Don't forget the http://. Also, make sure you have your capitalization absolutely correct.
Exec(terminalCommand) Runs a Terminal command. Useful for things like chmod, chown, etc.
InstallApp(nameOfApp) Installs your Application. Example: InstallApp(iHide.app)
LinkPath(oldPath, newPath) Links the two paths.
MovePath(oldPath, newPath) Moves files from one location to another
Notice(string) Displays a pop message while Installing
RemoveSource(url) Removes the source with the specified url from Installer's Sources List.
SetStatus Sets the status of the install process. Useful for lengthy installs or adding zazz to you install.
UninstallApp(NameOfApp) Uninstalls your Application. Example: Uninstall(iHide.app)
[edit] If / IfNot
If(condition[array], action[array]) Use this to check for specific conditions and have Installer react accordingly. Example
<array>
<string>IfNot</string>
<array>
<array>
<string>FirmwareVersionIs</string>
<array>
<string>1.1.2</string>
</array>
</array>
</array>
<array>
<array>
<string>AbortOperation</string>
<string>Firmware 1.1.2 is required to update to 1.1.3.</string>
</array>
</array>
</array>
IfNot(condition[array], action[array]) Uses this to check for specific conditions and have Installer react accordingly. Example
<array>
<string>IfNot</string>
<array>
<array>
<string>InstalledPackage</string>
<string>com.natetrue.iphone.iphone_binkit</string>
</array>
</array>
<array>
<array>
<string>AbortOperation</string>
<string>You must install the BSD Subsystem package first.</string>
</array>
</array>
</array>
Some common things to check with If / IfNot
Command What It Does
InstalledPackages(bundleIdentifierFromInfoPlistOfApplication) Checks to see whether or not an application is installed.
ExistsPath(path) Checks to see whether a specific file or directory exists.
FirmwareVersionIs(arrayOfFirmwaresTocheck) Checks the iPhone / iPod firmware.
[edit] More on ~/
Installer 3.0 and later has the ability to use expanding tildes in its paths. This is to accomodate the fact that some users are using firmware 1.1.2 or earlier, and some people are using firmware 1.1.3 or later. After 1.1.3 was released, Mobile OS X starting running the user as "mobile" instead of "root." While this is great for security purposes, it makes install a headache. Repository Managers would have to have to check firmware version then install to the right location, creating more work and taking up needless space (causing giant repositories). In order to prevent these two options, Installer now lets Repository Managers use one simply script for install and uninstall. Installer automatically locates the correct directory.
As the ~ feature is only available using Installer 3.0 or later, it is not recommended that you use it yet, as not everybody has yet updated to Installer 3.0.
[edit] More on MD5
The md5 is a checksum. That is, it is the encrypted size of the package. In this case, it is 32 bit encryption. Installer uses this to verify each package it downloads. If it does not match, then Installer will reject the package. Note that the string representing the checksum must be written entirely in numbers and lowercase letters. Uppercase has been known to cause Installer the reject the download.
Having Installer verify the package is to ensure that your package has not been tainted. It is also one more step to ensure the legitimacy of your package.
While currently not necessary, Installer will start making this tag mandatory. That is, it will not download packages without a hash tag. It's a good idea to start implementing this as soon as possible to avoid obsolescence.
There are several tools you can use to find out the md5 of your package. In Linux, you can use the md5 tool built into Terminal. If you don't have it, then open up terminal and type
sudo apt-get install md5sum
On a Mac, you can download and use MD5.app, a free application distributed by Eternal Storms Software. http://www.eternalstorms.at/md5/index.html
On A Windows Platform Download http://www.pc-tools.net/files/win32/freeware/md5sums-1.2.zip and then just drop the zip file over the md5sums.exe file
