Designing an iPhone Application: tools round up

There are different schools on how to start the design of an iPhone app. Some will prefer designing on paper (I do), others will use the computer to design their next breath-taking GUI.

So here is a list of some of the tools, template to design your next iPhone application.

Continue reading Designing an iPhone Application: tools round up

Relative date to now

In my current project, I needed to know if a given NSDate was today, yesterday or earlier. Simple task, I thought. Until I looked at the documentation for NSCalendar, NSDateComponents and NSDate. While these are extremely powerful, I am not proud of the code I’ve written. It should be easier.

Anyway, the code below will take a date and return a formatted version relative from today:

  • Today, 11h35
  • Yesterday, 8h27
  • January 12, 22h27

Continue reading Relative date to now

Reading the battery level programmatically

A beta-tester was complaining the application was draining its battery. To check if this was really the case, I needed to get the battery level with a better accuracy than just looking at the battery icon. So I used this little routine to check.

This routine is adapted from a post on MacRumors.com.

Continue reading Reading the battery level programmatically

Redirect NSLog to a file on the iPhone

If you need to debug your app when disconnected from your Mac (and from the console), redirect all your NSLog calls to a file so you can later read it.

The method below will create a file name “console.log” in the Documents folder of your application so you can later read it.

Just call this method in your program:

- (void) redirectConsoleLogToDocumentFolder
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                       NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *logPath = [documentsDirectory 
                       stringByAppendingPathComponent:@"console.log"];
  freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

The log will never be erased, so use with caution.

Continue reading Redirect NSLog to a file on the iPhone

Macros for Xcode

These are some of the macros I use with Xcode:

CMLog: I use this macro to replace NSLog:

#define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);

When you use this macro, it outputs text to the console, including the class and method from where it was called. So, if you call this macro from the class MyAppDelegate and the method applicationDidFinishLaunching,

CMLog(@"My iPhone is an %@, v %@", [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion]);

you get this in the console:
Continue reading Macros for Xcode

HowTo fit text inside a UIWebView

If, like me, you want to make sure your text will fit inside your UIWebView (without scrolling), you can implement the following javascript:

    <script language='javascript' type="text/javascript">
    function adjustHeight(maxHeight) {
      elem = document.getElementById("sign");
      height = elem.offsetHeight;
      current_size = elem.style.fontSize.replace('px','')/1;
      while ((current_size-- > 10) && (height > maxHeight)){
        elem.style.fontSize = current_size + 'px';
        height = elem.offsetHeight;
      }
    }
    </script>

Continue reading HowTo fit text inside a UIWebView

Selecting an UITabBarItem in the “More…” section

I needed to select an UITabBarItem located in the “More…” section, and I came to this solution:

To select a viewController¬† of the tabBarController, I do the following (each tabBarItem has a tag) : Continue reading Selecting an UITabBarItem in the “More…” section