views:

1877

answers:

6

I'm doing iPhone development on a PowerPC Mac. How do I get code signing to work properly so that I can build to my iPhone?

The iPhone SDK doesn't officially support PowerPC, but with some fidgeting, it can be installed. See here. I've got the SDK installed and running fine in Xcode and the iPhone simulator works fine.

However, I can't build to my iPhone in Xcode -- the code signing is fubar. Some clever people have created workarounds here. Namely, I used the codesign script that Tiku posted along with some of the corrections. This has helped me make some progress. The code compiles now, but I still get an 0xE800003A error when it tries to deploy.

I think I have all my keys and provisioning profiles set up properly. My iPhone is registered for development, I've got the provisioning profile created. The AppID listed in the dev portal says MagicNumber.com.website.* and in my project, I have the Bundle ID set as com.website.${PRODUCT_NAME:identifier}. In project settings, product name is HelloWord, and the code signing identity is my developer certificate.

The console log of the iPhone says: Wed Feb 18 14:57:55 unknown afcd[180] : user mobile has uid 501

Wed Feb 18 14:57:55 unknown afcd[180] : mode is 0x41e8 Wed Feb 18 14:57:55 unknown mobile_installation_proxy[182] : install_embedded_profile: Skipping the installation of the embedded profile Wed Feb 18 14:57:55 unknown mobile_installation_proxy[182] : verify_executable: Could not validate signature: e800800e Wed Feb 18 14:57:55 unknown mobile_installation_proxy[182] : preflight_application_install: Could not verify /var/tmp/install_staging.QNk2sD/HelloWorld.app/HelloWorld Wed Feb 18 14:57:55 unknown mobile_installation_proxy[182] : install_application: Could not preflight application install Wed Feb 18 14:57:55 unknown mobile_installation_proxy[182] : handle_install: Installation failed

Any help is appreciated!

+3  A: 

This previous SO thread may be of use to you.

ceejayoz
+1  A: 

What does your codesign script look like? I used to use this one when I was working on a G4: (The original "/usr/bin/codesign" should be renamed "/usr/bin/codesign.orig" and then save this script as "/usr/bin/codesign". You would have to do it with "sudo". Also this script doesn't work if your path names have spaces in them.)

#!/usr/bin/perl 
#
$appDir=$ARGV[$#ARGV];
@tmpAry=split(/\//,$appDir);
$baseAppName=$tmpAry[$#tmpAry];
$baseAppName=~s/\.app$//;
$realAppName="$appDir"."/$baseAppName";

$sign=0;
for($b=0;$b<$#ARGV;$b++) {
if($ARGV[$b] eq "-s") {
$sign=1;
}
}

$mums=`file $realAppName`;
if($sign==1 && $mums=~/executable arm/) {
#print "Signing armv6..\n"; 
$dev="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/";
$tmp="$appDir"."/tmpbin";
`$dev/lipo -create $realAppName -output $tmp`;
`mv $tmp $realAppName`;
system("/usr/bin/codesign.orig",@ARGV);
`$dev/lipo -thin armv6 $realAppName -output $tmp`;
`mv $tmp $realAppName`;
system("rm $appDir"."/CodeResources");
system("cp $appDir"."/_CodeSignature/CodeResources $appDir"."/CodeResources");
exit 0;
} else {
exec '/usr/bin/codesign.orig',@ARGV;
}
Chris Lundie
A: 

I had the same problems as you - I could cross compile and install the app on the iphone, but it would always fail with a security violation.

To get around it, I had to jailbreak my phone and install a patched MobileInstaller (I believe the Cydia app now has package called Installous which patches your MobileInstaller. Unfortunately, I think Installous is also used to pirate apps). Then in your project's Info.plist, you need to add the following:

<key>SignerIdentity</key>
<string>Apple iPhone OS Application Signing</string>

This will allow your phone to run unsigned binaries, which is the only way I was able to develop from my ppc mac.

I'm still able to purchase apps from the appstore and have them run without any problems.

infinite8s
A: 

As of 12 of April 2009, iPhone Os 2.2.1 the script fix works perfectly on my iBook G4.

Anyway, having spent the better part of the day searching for fixes on Google I see that there are quite a few people that still have problems.

Make sure you copy/paste correctly, because if you get an error in the script and fail the codesign Xcode won't notice and it will try to install the application in its unsigned state, giving you an error when deploying (NOT when building). In my case I had pasted the text in a small terminal window, breaking some lines of code and it took me one day to find the mistake. At least now I have an impressive knowledge of certificates, code signing and Xcode...

If you still have problems it's probably due to a bundle identifier/appId mismatch on which there are tons of posts.

A: 

It may also be worth bearing in mind that XCode can be a bit flaky when it comes to certificates, signing and installing on devices (perhaps just on PPC, haven't tried on an Intel mac).

I find the following steps usually sort things out when a previously-working configuration suddenly stops working:

  1. Clean all targets in XCode
  2. Delete any installed version of the app from your device (usual app uninstall procedure, click the little 'x')
  3. Quit XCode completely, and start it again

If you've never successfully signed your app there may be an actual configuration issue, but once it's working make sure you try the above before worrying something's broken :)

Hope that helps.

A: 

what does this error mean. I am trying to upload my application to iphone for development testing then I am getting these errors.

Sat Nov 14 13:39:15 unknown mobile_installationd[232] : entitlement 'get-task-allow' has value not permitted by a provisioning profile Sat Nov 14 13:39:15 unknown mobile_installationd[232] : entitlement 'application-identifier' has value not permitted by a provisioning profile Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 verify_executable: Could not validate signature: e8008016 Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 preflight_application_install: Could not verify /var/tmp/install_staging.saMAXk/beamglobalspirits.app/beamglobalspirits Sat Nov 14 13:39:15 unknown mobile_installation_proxy[231] : handle_install: Installation failed Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 install_application: Could not preflight application install Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 handle_install: API failed Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 send_message: failed to send mach message of 64 bytes: 10000003 Sat Nov 14 13:39:15 unknown mobile_installationd[232] : 00808a00 send_error: Could not send error response to client Sat Nov 14 13:40:37 unknown mobile_installationd[238] : entitlement 'application-identifier' has value not permitted by a provisioning profile Sat Nov 14 13:40:37 unknown mobile_installationd[238] : 00808a00 verify_executable: Could not validate signature: e8008016 Sat Nov 14 13:40:37 unknown mobile_installationd[238] : 00808a00 preflight_application_install: Could not verify /var/tmp/install_staging.GB6V0O/beamglobalspirits.app/beamglobalspirits Sat Nov 14 13:40:37 unknown mobile_installationd[238] : 00808a00 install_application: Could not preflight application install

tony blue