Ludicrous Software

Mobile and Flash Development

Simple App to Ipa Script

I have a client who asks for .ipa files of test builds, but the Corona SDK (among others) creates .app files. The process of creating an .ipa from an .app file is pretty simple, but I wanted to automate it a little more. The result is this simple little bash script.

Remove Unused Libraries From Corona Apps

Ansca has incorporated a lot of libraries into the Corona SDK that make it very easy to add social, analytics, and other features to your app. The downside is that all these great features are still bundled into your app during the build process, even if you don’t use them. Ideally, Corona would exclude these unused libraries, but currently it does not. However, if you’re building for Android, it’s possible to remove them from the apk file.

Corona Bunnymark Performance

Last week I ported Iain Lobb’s Bunnymark performance test to Corona, as I was curious to see how it would perform. I posted the results on Twitter, but thought that I’d follow up with a post showing the Bunnymark code, and also talk about how the results have changed after testing again using the graphics optimizations recently announced by Ansca.

PlayBook Sales/Downloads

I have two PlayBooks apps available in BlackBerry’s App World: Poker Solitaire (available for $0.99) and Marblous (a free app). I recently noticed a bit of a spike in sales of the former and downloads of the latter, and while I was looking at the numbers, I realized that I’ve never done a sales/stats post. So here’s a sales/stats post. The numbers for both apps are overall pretty low (I’m not retiring off this income), but I think what’s interesting is the trend that they both indicate, which is that the market for PlayBook apps seems to be growing.

Scope in Corona

Scope in Lua can be a bit of a challenge if you’re used to how scope works in other languages, such as AS3. Rather than try to write the exhaustive, authoritative description of scope in Lua, I figured I’d do a quick overview to explain a few things that may not be obvious when you’re starting out, and also describe how I typically handle potential scoping issues.

hasEventListener() in Corona

One of the nice things about Corona if you’re a Flash developer is the similarity between Corona’s API and some Flash APIs. For example, the event listener, although different in some respects, are also quite similar, which makes learning Corona a lot easier. But sometimes, those differences mean you’re missing out on things that you “take for granted” in Flash. For example, Corona has no native hasEventListener function. But I needed one, so I wrote one.

Speed Up Device Builds in Image-heavy Apps

I’m currently working on an image-heavy Corona iPad application for a client. And when I say “image-heavy”, I mean extremely image-heavy. The app is about 150MB in size, and about 99.8% of that is PNG images, and most of those images are fullscreen (i.e. 1024 x 768) images. It takes about eight(!) minutes to build the app using the latest public release of the Corona SDK, and I wanted to find a way to speed that up.

Fixing the Corona Debugger in Snow Leopard

Last week somebody commented on my post about using the Corona debugger that they’re getting an error with one of the daily builds. I tested this out against the latest public build and I experienced the same thing. Here’s what I’m seeing:

dyld: Library not loaded: /usr/lib/libedit.3.dylib
  Referenced from: /Applications/CoronaSDK/debugger
    Reason: image not found
Trace/BPT trap

Build Missile Command With the Corona SDK

Last week I had the pleasure and the honour of being able to deliver both an introduction to Corona presentation and a full-day game development workshop at FITC Screens. The workshop attendees built (most of) a complete cross-platform Missile Command game using the Corona SDK; we ran out of time before we could implement everything you’ll find in the workbook, but we covered all of the basics. I’ve uploaded the materials I used in the workshop to GitHub, so feel free to check it out.

Performance of Local v. Table Functions

Short version: If you’re creating a Lua module with publicly accessible functions, just add the functions as properties of the table you’re returning, rather than as local functions with a table reference. Now for the long(er) version…

Update: added one more example for further context. It’s at the bottom of the post.