Building for Jailbroken devices on iOS SDK 4.2
I have an app I distribute over Cydia. It's nothing hacky, just a GUI to connect to a web API.
The last time I submitted an update was before SDK 4.0, I used the instructions available here to build it from Xcode without signing and, used ldid
on OSX terminal to sign it. Everything worked just fine.
Now when I'm building using the 4.2 SDK exactly like I u开发者_如何学JAVAsed to do, the no-codesigning (and ldid
) still works, and I can run it on a 4.2 device, but the app won't run on a 3.1.3 Device (just shows Default.png and crashes). If I build & run from Xcode, on the other hand, it runs just fine on any Device, from iOS 3.0 to 4.2. So I don't think this could be a issue with libraries or linking, but with the code signing.
On project settings, I have 4.2 as the base SDK and 3.0 as the deployment target.
This is what I get on the console if I try to start the app on a 3.0 iPhone 2G Device:
kernel[0] <Debug>: seatbelt: hook..execve() killing pid 913: outside of container && !i_can_has_debugger
SpringBoard[162] <Warning>: Failed to spawn MyApp. Unable to obtain a task name port right for pid 913: (os/kern) failure
com.apple.launchd[1] <Notice>: (UIKitApplication:org.lobato.MyApp[0xaa9d]) Exited: Killed
com.apple.launchd[1] <Warning>: (UIKitApplication:org.lobato.MyApp[0xaa9d]) Throttling respawn: Will start in 2147483647 seconds
SpringBoard[162] <Warning>: Application 'MyApp' exited abnormally with signal 9: Killed
Anyone got some experience in this area that maybe could point me in the right direction?
Thanks!
I'm seeing the exact same thing you are. I have an app that is being compiled with the latest xcode, targets latest SDK (4.2) and Device 3.0.
I'm trying to install on a original iphone jailbroken running 3.1.3.
When I compile with no code signing and run ldid, I see the same crash on startup. One thing I did find is that if I just sign it with my development cert and SSH over to the device it runs fine (with no provisioning profiles installed). Need to try this again to make sure it really is working. I tried to make sure I deleted all provisioning profiles and rebooted to make sure nothing was in memory.
An updated ldid
that can sign fat binaries is available here (source)
The problem was ldid
can't sign fat binaries, meaning you need to build your app for only armv6
or armv7
(not both). You can do that by going in your project settings and editing the Architectures parameter.
To double check your binary only have one architecture, you can use the lipo
tool:
lipo -i MyApp.app/MyApp
精彩评论