Archive

Posts Tagged ‘iPhone’

Presenting, Appirater

September 7th, 2009 16 comments

Like most developers, I’m not thrilled with the way the App Store presents my apps. There are several problems, but in particular, I really don’t like the user review system. It’s biased towards bad reviews, and that ends up hurting sales (there are odd exceptions to this). The only time a user is reminded or asked to rate an app is when you delete it, and you probably don’t care for the app if you’re deleting it. In comparison to the unhappy user, the satisfied user rarely takes the time to review your app. Which leaves you with crummy reviews from uninformed users hurting sales of your app.

If Apple would allow developers to respond to reviews, or more easily challenge the validity of a review, this would be no big deal. But I don’t have any hopes of Apple wising up and fixing anything, so I’m left trying to get more positive reviews of my apps to drown out the negatives ones.

Appirater
The goal of Appirater is to encourage your satisfied user’s to rate your app. To use it, place the Appirater code into your project, and add the following code in your app’s delegate class.

// import the Appirater class
#import “Appirater.h”

@implementationMyAppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// all your app’s startup code
    // …

// call the Appirater class
    [Appirater appLaunched];return YES;
}

@end

Finally, open up Appirater.h and change the APPIRATER_APP_ID to your apps software id. You can also change the other #defines, for a more customized reminder message and buttons, but the default should suffice for most apps.

Now every time the user launches your app, Appirater will see if they’ve used the app for 30 days and launched it at least 15 times. If they have, they’ll be asked to rate the app, and then be taken to your app’s review page in the App Store. If you release a new version of your app, Appirater will again wait until the new version has been used 15 times for 30 days and then prompt the user again for another review. Optionally, you can adjust the days to wait and the launch number by changing DAYS_UNTIL_PROMPT and LAUNCHES_UNTIL_PROMPT in Appirater.h.

Appirater as used in Prayer Book app

Code: http://github.com/arashpayan/appirater/

BTW, if you like Appirater, please consider checking out my game, Jabeh or the lite version of it.

UPDATE: Ivan Nikitin has made a MonoTouch port of Appirater.

t-zones is even easier to setup now

May 11th, 2009 9 comments

After restoring a family member’s iPhone that was acting up, I began setting up t-zones for them, but couldn’t find the t-zones hack in the BigBoss repository. After some experimenting, I soon realized that none of the proxy configuration work is required anymore either. Setting up t-zones on your iPhone is now an easy 3 step process:

  1. Go to Settings->General->Network->Cellular Data Network
  2. Type wap.voicestream.com for the APN (leave the username and password) blank
  3. There’s no step 3!

That’s all there is to it. YouTube even works over t-zones now.

BTW, if you’re a long time T-Mobile customer, you can call in right now and ask about the loyal customer plan. If you’ve been with them long enough, you can have a plan which gives you unlimited minutes for only $50 a month.

Categories: iPhone, Tutorials Tags: ,

Jabeh: Puzzle Game for iPhone and iPod Touch

February 25th, 2009 Comments off

The project that I’ve been working on for the past couple months has finally come to fruition, and is available for purchase on the iTunes App Store.

Jabeh is a puzzle game where you search for 12 hidden stones on a board. Arrows on the board point in the direction of one or more stones, and the column and row numbers show how many stones are in the respective column and row. Using deduction you can figure out where the stones can’t be in order to ultimately find out where all 12 stones are. While you’re playing the game, some light music plays in the background (which you can download for free from the Jabeh website), and when you solve the puzzle you’re rewarded with one of the beautiful pieces of art created exclusively for Jabeh.

You can get Jabeh now for $4.99 or download Jabeh Lite for free if you wanna try before you buy.

Categories: iPhone Tags: , ,

On App Store Download Statistics

January 15th, 2009 Comments off

It seems that nobody wants to release statistics about how their apps are doing on the iTunes App Store, yet a lot of people want to know how well various apps are doing. I’ve seen a couple of examples of income and download numbers, but I’d still like to see more. So, I’m putting my money where my mouth is and publishing the download statistics for my first app, Prayer Book.

For some background about the app, you may want to check out my earlier post. After submitting Prayer Book to Apple on September 24th, they approved it for sale on October 2nd. It was immediately placed on the App Store, but it was never at the top of the recently released apps list, because I had set the release date to be September 24th. It wasn’t until 3 months later that I learned that your order in the App Store has nothing to do with the date Apple approves your app.

Prayer Book Monthly Download Stats

Up until the writing this post, there have been 9,448 downloads of Prayer Book, with an average of 91 downloads a day. Not bad I think. December was a particularly interesting month, so I’ll share some more detailed numbers there.

Prayer Book December Downloads

December was shaping up to be a pretty regular month, and then on the 22nd, there was a spike to 118 downloads, then a drop, and then another spike that lasted from the 25th-29th.

I only have data up to the 13th of January included in the monthly table above, but that’s already further ahead in downloads than the same time in December (941 downloads from December 1-13). Granted, December will probably still be better than January because of the Christmas activity.

Have any links to download numbers for other apps? Please share them in the comments. :-)

APXML: NSXMLDocument ‘substitute’ for iPhone/iPod Touch

January 14th, 2009 3 comments

After spending some time working on Jabeh, my latest creation for iPhone/iPod Touch, I’m taking some time to dump a little learned knowledge into my blog.

In my first app, my XML needs weren’t that great, so putting up with the lack of NSXMLDocument in the iPhone SDK was not a big deal. However, in Jabeh I was changing the XML format so often and using so much of it for my network communication creating delegates for NSXMLParser quickly became a huge time sink. After a little hacking, I came up with APXML to solve my DOM problem. It’s not a perfect implementation of the W3C XML 1.0 standard, but it’s close enough for a lot of usage. One particular shortcoming is its lack of support for namespaces but maybe somebody else can add that support. If you just want to jump in and start using it (LGPL license), you can get the code from github:

http://github.com/arashpayan/apxml/

Most of my XML manipulation experience has been with various Java libraries (org.w3c.dom interface, JDOM and XOM), and the only one that I enjoyed using was XOM, because of its simplicity and licensing. Almost all of my design decisions were based on how XOM does things.

Let’s say we want to represent the following XML document in memory using APXML:

<books>
    <book id="1" author="Michael Pollan">The Omnivore’s Dilemma</book>
    <book id="2" author="Foley, van Dam, Feiner, Hughes">Computer Graphics: Principles and Practices</book>
</books>

In code, we do the following:

#import "APXML.h"

@implementation AppDelegate

– (void)applicationDidFinishLaunching:(UIApplication *)application {
    // create the document with it’s root element
    APDocument *doc = [[APDocument alloc] initWithRootElement:[APElement elementWithName:@"books"]];
    APElement *rootElement = [doc rootElement]; // retrieves same element we created the line above
    
    // create the first book entry (The Omnivore’s Dilemma)
    APElement *book1 = [APElement elementWithName:@"book"];
    [book1 addAttributeNamed:@"id" withValue:@"1"];
    [book1 addAttributeNamed:@"author" withValue:@"Michael Pollan"];
    [book1 appendValue:@"The Omnivore’s Dilemma"];
    [rootElement addChild:book1];
    
    // create the second book entry (Computer Graphics)
    APElement *book2 = [APElement elementWithName:@"book"];
    [book2 addAttributeNamed:@"id" withValue:@"2"];
    [book2 addAttributeNamed:@"author" withValue:@"Foley, van Dam, Feiner, Hughes"];
    [rootElement addChild:book2];
}

@end

And if we want to convert the document to an NSString*, we use one of the two methods in APDocument:

    // converts the xml to a compact string with no newlines or tabs (good for production)
    NSString *xml = [doc xml];

or

    // converts the xml to an easy to read string with newlines and tabs (good for debugging)
    NSString *prettyXML = [doc prettyXML];

Often times when I’m working with XML, I like to see what the current element contains, so for added convenience, you can obtain an XML string containing the element you’re working with, its attributes and all its children directly from the APElement by calling one of two methods:

- (NSString*)prettyXML:(int)tabs;
– (NSString*)xml;

Now for the best part of the library, which is the ability to read in XML and represent it in APXML. All you have to execute is one simple line:

    APDocument *doc = [APDocument documentWithXMLString:xmlString];

Hopefully this will be helpful to other developers out there. I may post another article soon if anybody has some questions.

UPDATE Sep 5, 2009: Here’s an example that demonstrates traversing the XML document.

    APElement *rootElement = [doc rootElement];
    NSLog(@"Root Element Name: %@", rootElement.name);
    
    // get all the child elements (each book)
    NSArray *childElements = [rootElement childElements];
    
    for (APElement *child in childElements)
    {
        // returns the tag name
        NSLog(@"Child Name: %@", child.name);
        
        // reads the attribute named ‘author’
        NSLog(@"Author: %@", [child valueForAttributeNamed:@"author"]);
        
        // returns the text content of the element
        NSLog(@"Title: %@", [child value]);
    }

In the console you’ll see (I’ve removed the NSLog markup):

Root Element Name: books
Child Name: book
Author: Michael Pollan
Title: The Omnivore’s Dilemma
Child Name: book
Author: Foley, van Dam, Feiner, Hughes
Title: Computer Graphics: Principles and Practices

Prayer Book for iPhone and iPod Touch

October 2nd, 2008 13 comments

My first iPhone app has just been posted to the iTunes app store. It’s called Prayer Book and it contains 231 English prayers from the Writings of the Bahá’í Faith. They’re organized by categories and you can bookmark your favorite prayers for easy access as well. I’ll be updating the program over time with new features and prayer translations, and eventually I’d like to have all the Writings of the Bahá’í Faith in there.

It’s available for free on the iTunes store, so go ahead and take it for a spin.

T-Zones on iPhone 2.0

July 26th, 2008 8 comments

If you’re trying to get T-Zones working on the iPhone 2.0 software, you don’t need to follow the old manual way of doing it. Just go into Cydia and search for ‘TZones Hack’ (without the quotes) and install the BigBoss tweak that comes up. Restart your phone, and you’re good to go.

As usual, the YouTube app still won’t work with this hack.

Categories: iPhone, Tutorials Tags: ,

t-zones on 1.1.4

March 2nd, 2008 Comments off

I finally upgraded my iPhone from 1.1.1 to 1.1.4, and after dealing with the Installer.app “main script execution failed” error (solution here), I began to setup my EDGE access. The steps are mostly the same as before, with the exception of the location of the preferences.plist file. Previously, it was located in the user partition, but now the file is located in:

/Library/Preferences/SystemConfiguration/preferences.plist

In addition to the upgrade, I also took the opportunity to install Telesphoreo/Cydia, which is a port of APT to the iPhone by Jay Freeman. There seems to be lots of interesting ports available to install, and a Java VM, which is of particular interest to me. If I make any progress in developing with the new tools, I’ll post any helpful info I find.

Categories: iPhone Tags: ,