tags:

views:

83

answers:

2

I installed HelloJava from Cydia, made a copy as "Hello", renamed the executable, and changed the appropriate elements in Info.plist. When I reload SpringBoard, my app is not recognized. What does it take for SpringBoard to recognize a new app? Is there some install step that I'm missing? (As an aside: Why does Apple make this so complicated?)

+2  A: 

If I understand you correctly, you took an existing app and modified the contents and expected the iPhone to still recognize it as a valid app.

The problem is that apps are crypto signed. That means that the app and all its contents have a signature attached. The iPhone checks to make sure this signature is valid before it recognizes the app. The way the signature remains valid is if none of the contents of the app have changed since the signature was created. (There are other ways to invalidate signatures)

If you want to rename that app, then you need to re-sign it with your own signature after any modifications. This part does require some work and for you to sign up with Apple's iPhone developer program.

Why so complicated? For one, it allows Apple to have some control over malicious activity. It makes it hard for someone to write a virus or other cell network or iPhone damaging app, without running through some hoops. It also should crack down on some level of piracy, such as someone taking my apps and renaming them and selling them as their own.

Nothing's perfect, but the behavior you are seeing is the way it is intended to be.

mahboudz
+1  A: 

First, I edited /var/mobile/Library/Caches/com.apple.mobile.installation.plist and added my app (Hello.app). After restarting SpringBoard, my app showed up and will run. Next, I deleted /var/mobile/Library/Caches/com.apple.mobile.installation.plist and restarted SpringBoard. Not only did Hello still show up, but a simple program that I wrote and installed yesterday, showed up, too. So, it's not really a matter of signatures (the Hello binary is a shell script and can't be signed). It's a matter of adding to or clearing the SpringBoard cache.

Thornton