Under The BridgeUnder The Bridge

Musings
Library: AntiCrack

Whilst as we’ve mentioned before we feel it is at the very best a complete waste of time and more usually actively harmful by way of annoying your honest customers to spend anything past the most cursory efforts at copy protecting software that’s delivered to a user’s machine … there are many who do not agree. Some of which have money to back up their disagreement with! So, for their benefit — and ours if they’re paying — here’s a library that may be of some interest:

AntiCrack contains proven technology which completely eliminates the risk of your apps getting pirated. As of version 2.0 it contains the strongest defense mechanisms possible to detect cracking attempts as well as technology to thwart Crackulous. In version 1.x it was only possible to detect cracks and not prevent them. Our cutting edge research team has developed two new methods which make it impossible for Crackulous to even decrypt your app. Also AntiCrack 2.0 is completely rewritten from ground up to make it unfeasable for crackers to try to disable AntiCrack with a hex editor…

A certain red flag and bull air to the hubris on display here, wethinks. But hey, if you’re less cynical than we are, give it a shot!

h/t: iphonesb!

Roundup: Xcode Tips

Aaaaand to celebrate today’s release of the iPhone OS 3.1 SDK with the latest Xcode versions for Leopard and Snow Leopard, let’s make a list of useful Xcode tips and resources from around the web, shall we?

Oldies but goodies:

Stack Overflow’s Xcode Tips And Tricks

Mobile Orchard’s 14 Essential Xcode Tips, Tricks and Resources

Up-to-the minute stuff:

Static Code Analysis (Clang) and Xcode 3.2

Complete Xcode Keyboard Shortcut List

clang Source Annotations

Helper Goodies:

BuildCleaner

Accessorizer

Any others you find particularly useful, Dear Readers?

Hardware Connectivity: H4I

[EDIT: Discontinued.]

Now here’s something a bit different for this neck of the woods: how to develop hardware iPhone products. Yes, indeed, hardware products … that do not use the ExternalAccessory framework for Apple-blessed accessory connectivity development:

Progical Solutions LLC is targeting an audience of iPhone professionals in the software and hardware industries currently unable to bring their accessories to market.

Now just how do they do that, one wonders? Well, get this, they turn the audio jack into a modem. Yes, a modem. Seriously.

The H4I program has evolved from the initial work done by Alex Winston. Although this work was groundbreaking at the time there wasn’t an easy way to support developers who might adopt this technology. However with the release of the iPhone SDK 3.0 Apple also released the External Accessory framework. With this framework as the model Progical Solutions LLC has implemented these interfaces as a standardized means to integrate apps with external accessories through the 3.5mm audio jack. At speeds up to 19.2K baud, serial data can be programmatically sent and received by the iPhone and iPod.

Must admit we’re not 100% clear on why exactly you’d want to go this route instead of through the official method; but hey, it’s an impressively geeky achievement nevertheless!

h/t: MobileOrchard!

OpenGL ES 2.0

So, like us, chances you’re probably aware that the 3GS brought OpenGL ES 2.0 to the iPhone SDK world … but just haven’t got around to sorting out just how different it is from 1.1, aside from the vague impression that the correct magnitude is “very different indeed”. Well, here’s a tutorial at Mobile Orchard to start getting you up to speed:

… They don’t even provide a barebones sample or XCode template to get your started with OpenGL ES 2.0. If you want to take advantage of the new graphics capabilities, apparently it’s up to you to figure out how to use it. Don’t be fooled into thinking that OpenGL ES 2.0 is a minor upgrade over OpenGL ES 1.1 with only a couple new available functions. It’s a whole new beast! The fixed-function pipeline is gone, and it requires you to use shaders and be more familiar with the basics of computer graphics before you can even get a triangle on screen.

Given the total lack of documentation, I set out to create the most barebones app using OpenGL ES 2.0 on the iPhone. Something that could be used as a starting point by other developers in their own apps…

Yes, very thoughtful, indeed. We don’t have anything planned that it makes any sense to make 3GS-dependent in the foreseeable future; but hey, if you’re that hardcore, there you go.

And whilst we’re talking about ‘hardcore’ and ‘OpenGL’ … if you’re really hardcore, have we got a video for you:

In depth analysis of iPhone 2G/3G rendering pipeline – not at the level of OpenGL ES, but looking deeper. Understanding what driver actually does, how communication between CPU and GPU is implemented and what data is sent – can help you not only to write a faster and probably better code for iPhone, but also provides an insight in what happens behind the scenes with modern GPUs.

Yeah, we’re more the “ooh, shiny!” level on that stuff. But if GPU-level minutiae get your geek on — there you go!

iSigns

Oh, look here; another fine, fine Trollwerks project snuck onto the App Store when we weren’t looking: iSigns! And what is that, you ask?

iSigns is all-in-one type of application for sports and fun activities. With this easy-to-use and simple interface application you are fully equipped for any indoor and outdoor activity.

Yes, indeed. You may recall our post about custom fonts? Yes, that was when we were putting together the scoreboard view. Harder than you’d think it should be, that, but it worked out nicely:

scoreboard.png

Just what you need for your iPhone, yes? Or the flashcards, or the numeric ratings … and if so, you know what to do!

[POST-MORTEM: Now withdrawn from store…]

Tip: CACurrentMediaTime

Here’s a subtlety of time-based computation that you probably aren’t (well, we weren’t) aware of on the iPhone: Chances are that you’re using CFAbsoluteTimeGetCurrent or its wrappers like [NSDate timeIntervalSinceReferenceDate] for your time snaps … and that is actually not good practice!

See, those functions return clock time. Clock time is synchronized, unpredictably, with the network time signal. So if you’re looking for a reliable timer for in-application events … that’s not it! Discussion here if you’re on the dev forums, but the solution is simple: Use instead the Core Animation function CACurrentMediaTime, which we hadn’t noticed before but apparently takes care of the tricky bits in converting mach_absolute_time() into seconds.

So if you’ve noticed any weirdness in your timing, or if you have something that could be hopelessly confused by clock synchronization turning your “elapsed” time into a negative value, or the like … best to make that switch now!

h/t: 71^2!

Tip: CodeSign FAIL

Here’s a little tip we stumbled across whilst digging into that Facebook thing, which we haven’t run into ourselves but would be handy to know when we do:

Okay, so you’ve spent months working hard on your iPhone project, and you finally go gold. You get sign off from your client, you’ve squashed the last of your bugs and you think “I’m ready to submit this bad boy!”. You package it up for release as per Apple’s instructions, and then try and upload it using the Application Loader that Apple supplies.

Then you get a message from the Application Loader:

Application failed codesign verification.

What the?? If you check the activity log you also see the following:

A sealed resource is missing or invalid

Yep, sounds like the kind of “helpful” message you get when things go wrong. And what is the solution? Why here you go:

After countless hours trawling Google and finding nothing, I worked out that I needed to do two things:

1. Remove all files from the project that started with ._ (dot then underscore). See my previous post for more, however you just open the terminal and run find . -name "._*" -print0 | xargs -0 rm -rf from the command line in the root of the project

2. Make sure that the Icon File setting in the info.plist file is empty

After making these two changes, and rebuilding my project (make sure you do a “clean all”) it submitted to Apple without problem. I really hope that helps someone…

Handy if you need it!

Camera Shutter Animation

So let’s say you have a camera-using application and you want to make a screencast using the simulator, since videos of the iPhone screen suck, but you’ve been rather stymied by the lack of camera functionality in the simulator. Well, guess what, now some helpful fellows have fixed that! For some value of “fixed” that equates to “provided animations to fake it”, anyways:

… So, we searched the ‘net for someone who may have had the same problem, hoping to find an app/animation/resource/whatever that might make our lives a little easier. Sadly, we couldn’t find anything.

As these things go, we spent a bit of time building our own camera animations, and we’ve decided to share them with the community. It’s our hope that these animations will help anyone who finds themselves in the same situation we were in.

First, download iPhone Camera Shutter Animation.zip (7.24 MB)…

A handy little addition to your screencast-making bag of tricks, indeed.

h/t: iPhoneFlow!

Library: jQTouch Beta

And a little something for our web developer friends today: if you’re into jQuery — and seems everybody is, these days — there’s a plugin called jQTouch for your mobile WebKit programming needs, and sounds like the new beta version is indeed all that and a ham sandwich:

Just wanted to let everyone know I just released a new beta for jQTouch — a jQuery plugin for mobile development, similar to iUI. The new beta has a ton of features like native animations, event callbacks (including swipe detection), and a ton of shortcuts for creating fullscreen apps.

Pretty impressively updated from our first mention back in March … enough we figure to merit a reminder in case you weren’t bowled over back then!

h/t: iPhoneWebDev!

Source: AppReviews

Here’s a handy open-source application for the busy little iPhone programmer:

AppReviews is a tool for iPhone and iPod touch developers, allowing you to keep track of how your applications are being reviewed and rated by users across all of the iTunes App Stores worldwide…

AppReviews is open-source, the source code is available on github. You will require a copy of the iPhone SDK from Apple in order to compile the source code.

Very helpful, very nice, this fellow couldn’t get Apple to approve it so he open sources it … but wait! The plot thickens!

Today I discovered that there is a recent app in the App Store also called AppCritics, which also scrapes review data from the AppStore. I was doubly shocked by this because:

1) I submitted my AppCritics to the AppStore on 30th November 2008 and it was finally rejected in January 2009 because it scrapes data using a non-public web API (the same API iTunes uses). So how come this new app gets approved when it does the same thing?

2) I thought that I “owned” the name AppCritics in the AppStore because I still have the rejected app in my iTunes app listing, with a button that says “Resubmit Binary”. So how can someone else come along and submit an app with the same name, that does the same thing, and get approved?

This is yet another example of how inconsistent and poorly run the App Store still is.

I am emailing Apple about this matter now, I doubt that I will get any meaningful response beyond some canned auto-reply. In the meantime I will be renaming my AppCritics to AppReviews instead.

Heh. On the one hand, at least he GOT a rejection, instead of 110+ days in limbo like our Forgotten Project™, but really, approving an app that does the same thing with the same name … now, that’s just rubbing salt into the wounds, isn’t it?

h/t: LinkedIn – Cocoa Touch!