Win Free Copies of iPhone Application Tune-Up Guide

Readers would be pleased to know that Mobile Orchard has teamed up with Packt Publishing and we are organizing a Giveaway especially for you and three lucky winners stand a chance to win a copy of iPhone Applications Tune-Up. Keep reading to find out how you can be one of the Lucky Winner.

Overview of iPhone Applications Tune-Up

  • Tune up every aspect of your iOS application for greater levels of stability and performance
  • Improve the users’ experience by boosting the performance of your app

Read more about this book and download free Sample Chapter: http://link.packtpub.com/HYhoIU

How to Enter?

All you need to do is head on over to the book page and look through the product description of this book and drop a line via the comments below to let us know what interests you the most about this book. It’s that simple

Product description for iPhone book: http://link.packtpub.com/HYhoIU#in_detail
Winners from the U.S. and Europe can either choose a physical copy of the book or the eBook. Users from other locales are limited to the eBook only.

Deadline

The contest will close on 12/05/11 at 11:59PM PST. Winners will be contacted by email, so be sure to use your real email address when you comment!

Talkcast tonight: One week of iTunes Match

Yes, it’s time again for the TUAW Talkcast! We’ll be live on our usual TalkShoe meeting place, podcast gods permitting, starting in just a couple of hours at 10 pm Eastern time.

It’s been a modest week for news, so we’ll be diving into the biggest shift in digital music since the Moog synthesizer: iTunes Match What’s working well, what not so well, and what not at all? Come on by with your experiences, tips and tricks and we’ll run them down — plus the usual gang of reprobates will be there.

To participate, you can use the browser-only Talkshoe client or download the classic TalkShoe Pro Java client; however, for maximum fun, you should call in. For the web UI, just click the Talkshoe Web button on our profile page at 4 HI/7 PDT/10 pm EDT Sunday. To call in on regular phone or VoIP lines: dial (724) 444-7444 and enter our talkcast ID, 45077 — during the call, you can request to talk by keying in *8. We’ll get started as usual around 10pm ET, which is 7pm PT.

If you’ve got a headset or microphone handy on your Mac, you can connect via the free Blink or X-Lite SIP clients. Talk to you tonight!

Talkcast tonight: One week of iTunes Match originally appeared on TUAW – The Unofficial Apple Weblog on Sun, 20 Nov 2011 20:05:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

Open Source: View Container For Easily Adding Animated Push, Rotate, And Drag Manipulation

In the past I’ve mentioned a guide on how to manipulate images touch gestures.

This open source control allows you to take things to another level.  What the control allows you to do is easily add touch manipulation in the manner it is done in the Our Choice app from Push Pop Press.

Here’s the promo video for Our Choice, take note of how images, and videos are manipulated.

This is the behavior this component is attempting to duplicate:

Here is the features list taken from the Github page:

– Two-finger direct manipulation support to scale, pan and rotate
– Tap support to go into fullscreen and back to the original frame (delegate can block this individually and this is also disabled if you add a button as a subview and the user tapped the button)
–  Fully animates when going into fullscreen or back to the view’s original frame
–  Semi-realistic bounce effect for scale and position depending on “distance” of view relative to its target appearance (e.g. when the view needs to move a lot back to its position there is more bounce than we the view only needs to move a little; also applied to changes in scale)
–  Detaches from the current view and docks on the main view, so that your view always expands to the full screen. This is especially useful if you’re adding PSPushPopPressView’s in a complex view hierarchy.

You can find the Github page here with full usage instructions and an example.

Another very useful control released by Peter Steinberger who also released this excellent control for customized stacking iPad UIViewControllers.

©2011 iPhone, iOS 5, iPad SDK Development Tutorial and Programming Tips. All Rights Reserved.

.

DeliciousTwitterTechnoratiFacebookLinkedInEmail


One trick for getting iTunes Match to recognize older tracks

Welcome, iTunes Match users. After you’ve coughed over your 25 bucks and waited all night for your music library to reconcile with the great iCloud in the sky, you may have noticed those mysterious cloud status icons scattered through your tracks. Apple’s tech note summarizes the icons; Macworld’s thorough rundown gives more status detail and recommends that you add the iCloud Status column to your iTunes list view for diagnostic purposes.

In my library, I saw a fairly substantial number of ‘ineligible’ icons, mostly on tracks that I had imported from my CD collection years and years ago. Some of my most vintage files show a ‘Date Modified’ in 1999, and were encoded into MPEG-1 Layer 2 (yes, an MP2 file) with MPecker or SoundJam MP (get off my lawn). Most of these, however, were recognized just fine by iTunes Match; more recent files seemed to have trouble.

Checking the standards of the iTunes Match process, Apple’s tech note shows that only certain music files are fit for matching. If your music was encoded below a bitrate of 96 kbps, iTunes Match will simply skip over it. When I took a closer look at my problem tracks, the issue was clear: in an attempt to save some disk space way back when, I had opted to go with variable-bitrate (VBR) MP3 files when ripping these CDs. This took somewhat longer, but kept quality reasonably high while creating smaller files.

Present-day me is now somewhat irked with past-me; how to get these vintage tracks synchronized with iTunes Match? I figured out a way, which was independently pointed out by Lex Friedman last week.

As Richard enthusiastically realized in June, one of the most helpful features of iTunes Match is how it ‘normalizes’ any tracks that exist in the iTunes store catalog up to 256 kbps AAC files, the same quality as iTunes Plus music that you buy from the store. While he was interested in lowering the storage requirements of his audiophile-friendly (and massive) ALAC files, this fix works in the other direction: getting low-bitrate or variable-bitrate files up to the standards of current-day digital music.

Step 1: Sort your library by the iCloud Status or cloud icon column. Just click on the column name to sort the track list, and then scroll to the end where all the ineligible songs are. You can take this an album at a time, to keep it simple. In the image above, you see an album’s worth of ineligible songs. You can click a track and choose Get Info (?-I) from the File menu to verify that the problem is inadequate bitrate.

Step 2: Double-check your iTunes import/conversion settings. You’ll find these under the iTunes preferences, in General, when you click the button marked “Import Settings.” For our purposes, AAC 128 kpbs “High Quality” is fine, and chances are that’s the default setting you already had. Click OK and close the Preferences dialog.

Step 3: Select all the tracks in the album you want to iCloud-ify. Right-click or control-click any of the selected tracks and choose “Create AAC Version” (also available under the Advanced menu in iTunes). Watch the tracks convert before your eyes.

Step 4: Once the conversion is done, you’ll have two copies of those songs in your library: the older VBR tracks, and the just-converted AAC 128 tracks. iTunes Match automatically kicks in and begins scanning the ‘new’ tracks, and (since they now meet the minimum criteria for matching) they’re matched!

If they exist in the iTunes store, the iCloud versions of them will be the store’s iTunes Plus 256 kpbs version; if not, they’ll be the 128 kbps AAC versions you just created. You can tell the difference by looking in the iCloud Status column, which will helpfully say ‘Matched’ or ‘Uploaded.’

At this point, for your tracks with ‘Uploaded’ status, what you’ve got is what you’ve got: VBR originals and AAC re-conversions, which may be a bit lower quality than the source files. If you have the disk space to keep both, you can, or give the AACs a listen and see if they sound OK to you. The other alternative is going back to the CDs to capture those files at a higher bitrate.

For the tracks with ‘Matched’ status, however, you can revitalize them to current standards by actually — gulp! — deleting your local copies and downloading the matched versions to replace them. Macworld has a walkthrough of using Smart Playlists to do this for the entire library, or you can go an album at a time if it makes you nervous to delete huge tracts of tracks (or if your Internet connectivity is metered and you can’t safely download gigabytes of music at one go). Simply delete both your originals and your local matches — careful NOT to check the box to delete from iCloud — and note that the matched tracks stay listed, with a little download icon next to them. Click it to grab the full-glory version of the song back from iCloud, or optionally just leave it in the cloud until you need it again to save yourself some disk space.

Got any killer tips for working with iTunes Match that you want to share with the world? Whisper them into our comments or hit our tip line.

One trick for getting iTunes Match to recognize older tracks originally appeared on TUAW – The Unofficial Apple Weblog on Sun, 20 Nov 2011 12:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

The All-ER lineup: Clooney and Wyle look to (re)-tackle Steve Jobs film role

No cited sources for this tidbit — not even the usual “a person close to the production” — but the UK’s Now magazine sparked a rumor wildfire this week when it suggested that two veterans of NBC’s ER are both interested in playing Steve Jobs for the upcoming film version of Walter Isaacson’s biography. George Clooney and Noah Wyle (50 and 40 years old, respectively) are the two leading men in question; if you guessed Anthony Edwards and Goran Visnjic, sorry.

The younger Wyle has two advantages in this horse race; for one, he’s played Jobs before in the TV movie Pirates of Silicon Valley. For another, he’s younger — if the producers hope to have a single actor portray the Apple co-founder from his Reed College & Cupertino garage days all the way forward through his life, they’ll either need an actor in the middle of that range or some serious help from the CGI wizards at Pixar.

If I were the one casting this film, I’d forgo the high-wattage but aging Clooney and the been-there-done-that Wyle for something different. Maybe a performer with a legitimate claim to Jobs’s Middle Eastern heritage (Alexander Siddig?) or a credible indie favorite with an edge (Sam Rockwell). Of course, if we want the perfect combination of Steve-esque looks and fan favorite, there’s always Justin Long.

[hat tip to CNET]

The All-ER lineup: Clooney and Wyle look to (re)-tackle Steve Jobs film role originally appeared on TUAW – The Unofficial Apple Weblog on Sun, 20 Nov 2011 10:20:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

Quick Look: System Monitor, Free Memory and Battery

Quick Look posts are paid submissions offering only a brief overview of an app. Vote in the polls below if you think this app is worth an in-depth AppStorm review!

In this Quick Look, we’re highlighting System Monitor, Free Memory and Battery. The developer describes System Monitor, Free Memory and Battery the most comprehensive all-in-one health check app that frees memory on your iPhone, boosts battery performance, monitors your system memory, CPU utilization and disk utilization. It is a complete iPhone/iPod Touch/iPad monitoring app, that lets you know about the current memory in use and free. You can then close unwanted apps that are slowing down your iPhone.

Read on for more information and screenshots!

Screenshots

System Monitor, Free Memory and Battery

System Monitor, Free Memory and Battery

About the App

Here are the top five features you can expect to see in the latest version:

  • Double tap Memory speedometer view to rotate to a 3D bar chart view.
  • Double tap battery or open it to see the battery capacity for your favorite apps.
  • Double tap the CPU speedometer view to view a 3D CPU utilization.
  • Shows the used and free space.
  • Shows the IP address acquired and hardware address of your device.

Requirements: iOS 4.3

Price: $0.99

Developer: Tekton Technologies

Vote for a Review

Would you like to see us write a full review of System Monitor, Free Memory and Battery? Have your say in our poll:

Would you like to see System Monitor, Free Memory and Battery reviewed in-depth on AppStorm?

Quick Look posts are paid submissions offering only a brief overview of an app. Vote in the poll if you think this app is worth an in-depth AppStorm review! If you’re a developer and would like to have your app profiled, you can submit it here.

3 Panoramic Photo Apps Compared

The iPhone’s camera has been getting better and better with time, and taking pictures with it is getting increasingly popular. I’m no professional photographer, but I really enjoy taking panoramic photos. The idea of capturing a very wide area inside of one picture fascinates me.

In this article, I’ll compare 3 very good and popular apps currently on the App Store that do exactly that: take panoramic pictures. I’ll be taking a look at 360 Panorama, Microsoft’s Photosynth and Dermandar. I want to look for the best of the three, considering 2 main aspects: the ease of use and the quality of the panoramas they take.

How I’ll Be Testing These Apps

I’ll be testing two main aspects: ease of use and quality of the results. Besides that, I’ll take two types of panoramas that in my experience are pretty hard for these apps. The first type is where there are too many lines and vanishing points. Normally, the apps can’t stitch the pictures together very well and you end up seeing non-continuous lines, which look bad. The second type are the wide and tall panoramas. In these pictures, you take photos to the left and right, but also up and down, obtaining a very large image, not just wide.

360 Panorama

In 360 Panorama, you tap the Record button at the bottom, and start moving either left or right. Pictures get taken automatically and get stitched together on the fly. You’ll hear a camera sound each time the app snaps a pic. With this app, it’s better to move the camera slowly so it can better calculate where to stitch the pictures together. If you’re in a low light condition you probably won’t get very good results, although the app will warn you to move the phone slower.

For the first type of panorama, this app performed badly, although its attempt at stitching the pictures was pretty good. The app blurs the “complex” parts of the picture so it looks better, but you can still tell that something’s off. For the second type, 360 Panorama left a lot of parts of the image a little blurry, which doesn’t look too good in the resulting image.

Price: $1.99
Developer: Occipital
Download: App Store

Taking a panorama in 360 Panorama, and the app's settings

Taking a panorama in 360 Panorama, and the app's settings

Photosynth

Photosynth’s method of taking pictures is just a little different. You tap the screen to start, and you move the phone around the area you want to capture. You’ll see a little dot in the middle of the screen, and when that dot reaches the dashed border of a previously snapped picture, the app will take another one. You can do this moving the phone up, down, left and right (just like 360 Panorama). It’s very easy to do after some practice.

For the first type of image, Photosynth performed kind of the same as 360 Panorama. It doesn’t blur the image where it stitches the pictures, so you can really see where the images were put together, but the final quality of the image is actually better (in terms of color and sharpness). For the second panorama type, it performed a lot better in terms of stitching and image color and quality. You can’t really tell where the joining points are.

Price: Free
Developer: Microsoft Corporation
Download: App Store

Taking a panorama with Photosynth, and its settings

Taking a panorama with Photosynth, and its settings

Dermandar

Dermandar uses a pretty cool method of taking pictures, and is (in my opinion) a little less error prone. You start taking a panorama by tapping Start at the bottom, then at the top of the screen you’ll see two yin-yang symbols. As you move your phone to the right, those two symbols will get closer and closer, and when they join, the app will take a picture and split them apart again. It’s a very visual way of taking the pictures. The good thing here is that the app trusts the gyroscope to know when to snap a picture, rather than also applying other (far too complex) algorithms.

For the first panorama type, Dermandar was the real winner here. It somehow stitched the pictures it took almost perfectly — at first glance, you can’t even tell where the joining points are. The bad part is that the quality of the image seems a little worse, with less color and sharpness. Unfortunately, in Dermandar you can’t take another type of panorama, since it only lets you take pictures moving left or right (if you point upwards the app will tell you to hold your phone horizontally, and if you point downwards the app actually starts to process the images).

Price: $1.99
Developer: Dermandar
Download: App Store

Taking a panorama with Dermandar and the app's gallery

Taking a panorama with Dermandar and the app's gallery

Which One Is The Best?

In most (normal) situations, panoramas will look great on all apps. It’s the tricky situations where you can really tell which app is the best.

Comparing panoramas

Comparing panoramas

You can really tell that Dermandar behaves a lot better than the other two in this situation. It stitches the pictures almost perfectly, and the final image is great. When we compare the large pictures that you can take with 360 Panorama and Photosynth, one can conclude that Photosynth does a slightly better job than its competitor.

Comparing Photosynth to 360 Panorama taking a "tall" panorama

Comparing Photosynth to 360 Panorama taking a "tall" panorama

Overall, I was more impressed with the results of Photosynth, it performed better on most situations, and the sharpness and color of the pictures was a lot better. Besides, it’s a free app, so that’s another point in favor, and it has a nice option called “auto-crop” when you save the panorama to the camera roll. I encourage you to try that app before the others and see how it fits your needs.

Securely Store Anything With 1Password

I’m not a big fan of applications that store passwords and information like that, and it’s for a very good reason: once you stop with the habit of remembering passwords yourself, you forget them, since you’re relying on an app to do it. Apart from that, there’s the security issue, since your passwords are being stored in a potentially insecure system.

That said, 1Password isn’t any password management software. Like its name doesn’t suggest, it can store almost any kind of information, not just passwords. This comes very handy in case you need to buy something online but don’t carry your credit card around. Plus, it boasts hardware accelerated AES encryption, so even if you lost your device, someone would have to go through a tough time to gain access to your passwords.

Getting Started

The first time you open 1Password, you’re asked to set an unlock code and a master password. The first one is a simple, four-digit passcode that’s asked every time you open the app, and it provides the first layer of security for your data.

Setting your unlock code

Setting your unlock code

The second password is a master password, and works as a second layer of security. This should be a fairly secure password, and you can use it to further secure your data. After setting both passwords, you’re ready to add some data to the app.

Adding A New Item

Adding data to 1Password is fairly simple. Simply tap Add at the bottom, and select what you’d like to add. Just as an example, let’s add a new login item. Tap on Login, and enter a service URL. For this example, let’s use Gmail. After entering a URL and a service name, you’ll be asked to enter your username and password.

Adding a New Login Item

Adding a New Login Item

Once that’s done, you’ll be able to see the entry for that login. You can add notes to it, and even secure it with the master password, which forces you to enter that password if you want to see that entry.

Seeing your login credentials

Setting the username and password and seeing your login credentials

Tapping on the domain name will open a browser within the app and take you to the login form. It should be already filled in, using the credentials you entered.

There are many other things you can add to the app, including credit cards, which is pretty useful since you don’t have to carry your cards with you in case you need to purchase something online. You can also store application licenses and even simple text notes.

Storing a credit card in 1Password

Storing a credit card in 1Password

Generating Secure Passwords

One very cool feature of 1Password is the ability to generate new and random passwords. Since the app’s main function is to store credentials, you can generate a random password on the fly and save it instantly.

Generating a secure password and storing it

Generating a secure password and storing it

To generate a new password, tap on Add at the bottom, and choose Generate Password. From there, move the slider to generate a random password to the desired security level (the longer the better). You can also choose to use numbers and special characters for added security. Once that’s done, tap on Save at the top right, and you’ll be prompted to write what site the password is for, and a title.

Settings

1Password let’s you sync the data to the desktop version of the same app, in two different ways: directly with Wi-Fi and through Dropbox. Both methods are pretty easy to setup.

Apart from that, you can change very few settings. You can choose to conceal passwords, so that the app doesn’t show them by default (and to avoid prying eyes from seeing them). When passwords are concealed, you can tap them and you’ll get a prompt to copy it to the clipboard.

Concealing passwords will hide them and let you copy them to the clipboard

Concealing passwords will hide them and let you copy them to the clipboard

You can also backup the app’s data, which is especially useful if you don’t sync the app with the desktop version. To do that, simply tap on Database and tap on Backup & Restore. You’ll be given an address so you can connect from your computer (through your browser) and download a backup of your data. There’s also the option to reset the database, which will destroy all the information stored in the app. Remember to backup first!

Backing up the app's data through Wi-Fi

Backing up the app's data through Wi-Fi

The last option relates to security. Tap on Security and you’ll be given some options like changing the password and auto-lock times. You can set the auto-lock time to anything between 1 and 30 minutes, or even never, which isn’t recommended. Apart from that, you can also choose to lock the app when it’s inactive, meaning that quitting the app, switching to another app or locking the device would lock 1Password instantly. Changing auto-lock times for the master password affects entries that have that protection level enabled. So if you enable master password protection for one of your credit cards for instance, after the given time has passed, you’ll have to enter the master password again to reveal the information.

Choosing auto-lock times

Choosing auto-lock times

Conclusions

1Password changed my impression of these kinds of apps. It’s incredibly versatile and offers a plethora of options. Plus, the fact that it encrypts everything using AES technology makes it that much better, since the kind of information one stores in this app requires a great level of security. The best feature in my opinion was the password generator. The ability to generate secure passwords and save them instantly is great, since one rarely chooses different passwords for different services.

In terms of interface, there are some minor things that could be improved, like the master-password prompt, which is kind of ugly in my opinion. Apart from that, the app’s great. It’s very stable and works like a charm. At $9.99, it might seem expensive, but considering the encryption technology it uses, it’s a price worth paying.

iPhone Game Friday: New Releases

There are few things as exciting as a flood of new games, and while the world of console gaming has been churning out blockbusters, the App Store has seen its own fair share of excellent game releases in the past couple of weeks.

We take a look at some of our favourites after the jump.

Oh! Edo Towns

Oh! Edo Towns

That distinctive pixel art, those adorable animations, the familiar interface … it’s a new Kairosoft game, folks! If you’ve finished with the Game Dev, Mega Mall and Grand Prix stories, then you’ll be thrilled to dive into their latest offering: Oh! Edo Towns.

Feudal Japan may seem like an odd setting for this kind of game, but the usual micro-management gameplay fits like a glove as you work your way up to become the most productive castle town in the Edo period. You’ll be building structures, training people and performing various financial manoeuvres to attract more visitors.

Go elsewhere if you’re seeking innovation, as Edo Towns is really little more than a new skin and a fresh layer of polish applied to a tested formula. But if you are a fan of city sims, the developers’ previous titles or Japanese history, then you’ll have a blast with this one.

Price: $3.99
Developer: Kairosoft Co., Ltd.
Download: App Store

Junk Jack

Junk Jack

It was only a matter of time before someone did a proper spiritual port of the Minecraft craze to the mobile platforms, and we’re happy to say that Junk Jack seems to be the game to do it.

At this point, it’s worth mentioning that Junk Jack is not so much a “game” as a sandbox environment. While you’ll find a similar set of goals as in Minecraft (collect & craft things, build with them, avoid night monsters), there is no real structure to it beyond what you care to establish yourself. That said, there is a lot for imaginative folks to keep busy with. The ground, even in its measly two dimensions, is overflowing with objects, materials and hidden environments to uncover.

The controls are a dead simple combination of swiping to move and tapping to dig, and you’ll want to upgrade your tools early because otherwise you’ll get very sore fingers before long. Junk Jack is one of the most ambitious sandbox games on the App Store and will captivate those who love to build and explore without a set direction.

Price: $2.99
Developer: Pixbits
Download: App Store

WELDER

W.E.L.D.E.R.

What do you get when you cross a sliding block puzzle with Scrabble? Something like W.E.L.D.E.R., of course. This compelling word game is madly addictive and much more fun than you might expect from a crossword puzzle.

Tapping adjacent letters will get them to swap positions, allowing you to shuffle things around to make words with more than four letters in them. Each level will require a certain number of words to be created, and although there’s no limit to how long it can take you, you start off with a limited number of swaps. Making more words, or incorporating special coloured tiles (much like Scrabble’s score multipliers) earns you more points and more swaps.

As you progress, you’ll not only encounter more types of special tiles, you’ll also unlock more swap methods including an incredibly useful distance one. Since the game is universal, you’ll be happy to know that it features iCloud progress saving so you can pick up right where you left off between all your devices. As much a game of puzzling skill as of vocabulary enhancement, W.E.L.D.E.R. is the perfect game for the wordsmith in all of us.

Price: $1.99
Developer: Ayopa Games LLC
Download: App Store

Mad Rush

Mad Rush

Sometimes all it takes is a small tweak to turn a tired formula into a fresh experience. Mad Rush accomplishes this by taking the well-worn mechanic of ascending levels (made popular by the likes of Doodle Jump) and adding in a competitive element — you’re no longer alone for the climb!

In fact, it’s not even a climb since you play as a jetpack-wearing rabbit. So instead of just calmly making your way up, collecting items, avoiding obstacles — you know, the usual — you get to do all of that while racing an opponent who’s bent on beating you to the finish! By earning stars, you can upgrade your skills and get a leg up on your opponents, who will challenge you across the game’s ten worlds.

The most obvious question is when this will go multiplayer, and while it’s not yet included, the developer has confirmed that it’s under development for an update. In the meantime, you can polish up your racing skills and master the responsive tilt controls in this enjoyable take on a popular genre.

Price: $0.99
Developer: Krivorukoff LLP
Download: App Store

Rail Maze Pro

Rail Maze Pro

Last up for this set is Rail Maze Pro, an incredibly rich update to a fun App Store puzzle game where you are all that stands in the way of train traffic chaos.

The biggest addition to Rail Maze Pro is that you now have to worry about multiple trains simultaneously, and the trains you’re directing can collect wagons as they go. Not only do you have to deal with long trains, but now you’ll find yourself building tracks, clearing obstacles in the way and even avoiding train pirates. It’s a lot of fun and the game features several new modes and a gigantic assortment of levels to keep you occupied.

With so much packed in, it makes for an excellent title to return to again and again, especially since the difficulty level is almost never frustrating. Go save some trains!

Price: $0.99
Developer: Spooky House Studios
Download: App Store

 

What Have You Been Playing?

There have been some great titles released in the past few weeks — did you catch more of them that we missed? Drop us a comment and let us know!

Making UITableViews look not so plain

As most of you probably know, UITableView’s are incredibly useful and versatile views to be using in your applications.
If you have ever tried to customize a UITableView though, you know that as soon as you start adding lots of UIViews, UILabels, and UImageViews to a cells ContentView, that these tableviews start to scroll slower and slower, and become choppier and choppier.

What we are going to explore today is how to remedy that situation.
To download the entire XCode project, you can find it at: http://github.com/elc/ICB_PrettyTableView

We are going to build a simple contact viewer, that will display the phones contacts. For each contact, if they have a first name, last name, email and phone number, they will be displayed within one cell, with different colors. The reason this is useful is because it provides the basics for customizing UITableViewCells that can really start to make your application look nice, and still scroll well.
If you don’t want to have simulated data inside the simulator, check out this post for copying data from your device to the simulator: How to import contacts into the iphone simulator

In this example, we have a standard UITableViewController. We are going to have a couple class variables defined in the header

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
 
@interface ICBTableViewController : UITableViewController
{
    ABAddressBookRef _addressBook;
}
 
@property (nonatomic, retain) NSArray *contacts;
 
@end

ABAddressBookRef _addressBook is defined in our header, so that we don’t have to release it until we dealloc. And the contacts is so that we can hold on to the data for our tableView.
In the main table view controller file we are going to override the – (void)viewDidLoad to provide some initial configuration of the tableView, as well as loading or generating our data. (We will generate fake data for devices or the simulator that don’t have address book data)

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.backgroundColor = UIColor.blackColor;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
 
    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *tempArray = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
    tempArray = [tempArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSString *name1 = (NSString *)ABRecordCopyCompositeName((ABRecordRef)obj1);
        NSString *name2 = (NSString *)ABRecordCopyCompositeName((ABRecordRef)obj2);
        return [name1 compare:name2];
    }];
 
    if ([tempArray count] > 0) {
        self.contacts = tempArray;
    } else {
        NSMutableArray *tempMutableArray = [NSMutableArray arrayWithCapacity:100];
        for (int i = 0; i < 100; ++i) {
            NSMutableDictionary *dict = [NSMutableDictionary dictionary];
            if ((i % 9) != 0) {
                [dict setObject:[NSString stringWithFormat:@"FirstName%d", i] forKey:@"firstName"];
            }
            if ((i % 3) == 0) {
                [dict setObject:[NSString stringWithFormat:@"LastName%d", i] forKey:@"lastName"];
            }
            if ((i % 3) == 0 && (i % 2) == 0) {
                [dict setObject:[NSString stringWithFormat:@"emailTest%d@test%d.com", i, i] forKey:@"email"];
            }
            if ((i % 7) == 0) {
                NSString *string = [NSString stringWithFormat:@"%d", i];
                while ([string length] < 10) {
                    string = [string stringByAppendingFormat:@"%@", string];
                }
                [dict setObject:string forKey:@"phone"];
            }
            [tempMutableArray addObject:dict];
        }
        self.contacts = tempMutableArray;
    }
}

As you can see here we have a couple of self.tableView methods we have called to setup the background color, and also the cell separator style.
If you are running this application on a device, or simulator that has contacts, this method will also make a copy of the address book as the data to display. If there is no data in the address book, we create some fake test data just for displaying.
Also don’t forget to include our – (void)dealloc method for releasing our _addressBook variable.

- (void)dealloc
{
    CFRelease(_addressBook);
    [_contacts release];
    _contacts = nil;
}

We have to supply the tableView with our number of rows

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.contacts count];
}

The next portion we have to override is the – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath so that we can supply the tableView with our cells.

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
 
    static NSString *CellIdentifier = @"ICBTableViewCellIdentifier";
 
    ICBTableViewCell *cell = (ICBTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[ICBTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.textColor = UIColor.whiteColor;
    }
    cell.tag = indexPath.row;
 
    NSObject *object = [self.contacts objectAtIndex:indexPath.row];
    if ([object isKindOfClass:NSDictionary.class]) {
        [cell setDictionary:(NSDictionary *)object];
    } else {
        [cell setRecord:(ABRecordRef)object];
    }
 
    return cell;
}

We are checking each object coming out of our array so that we can determine if we need to call the setDictionary, or setRecord method calls.

Now the meat of this tutorial, extending a UITableViewCell.

In our header we are going to define a bunch of strings that we want to display

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
 
@interface ICBTableViewCell : UITableViewCell
 
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *phone;
@property (nonatomic, retain) NSString *address;
 
- (void)setRecord:(ABRecordRef)record;
- (void)setDictionary:(NSDictionary *)dict;
 
@end

And then our two set methods:

- (void)setRecord:(ABRecordRef)record
{
    self.firstName = [(NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty) autorelease];
    self.lastName = [(NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty) autorelease];
    self.email = [self getFirstEmail:record];
    self.phone = [self getFirstPhone:record];
    [self setNeedsDisplay];
}
 
- (void)setDictionary:(NSDictionary *)dict
{
    self.firstName = [dict objectForKey:@"firstName"];
    self.lastName = [dict objectForKey:@"lastName"];
    self.email = [dict objectForKey:@"email"];
    self.phone = [dict objectForKey:@"phone"];
    [self setNeedsDisplay];
}

Some tutorials will have you put this next part into a separate UIView subclass, and add that class as the contentView of this UITableViewCell, but I prefer to override the drawRect of the UITableViewCell, and do all my drawing there.

The first thing I am doing is getting the current graphics context so that we can draw to the screen, clipping to the rect that is passed in drawRect:(CGRect)rect, and then depending on whether this cell is even, I am filling the entire rect with an almost black color, or slightly lighter.

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
 
    CGContextClipToRect(ctx, rect);
    //If even
    if (((self.tag % 2) == 0)) {
        CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:0.1f alpha:1.f].CGColor);
    } else {
        CGContextSetFillColorWithColor(ctx, [UIColor colorWithWhite:0.15f alpha:1.f].CGColor);
    }
 
    CGContextFillRect(ctx, rect);

The next thing I am going to figure out is whether I want this text to be centered in the cell, and I am determining this based off whether there is an email field or not.

    //Vertically center our text, if no email
    BOOL isCentered = (self.email == nil);

And now for the meat of the drawRect method. We calculate the size of firstName, draw it offset from the left by 5, and then draw lastName right after it. We also change the color we are drawing between those two.

    CGRect tempRect;
    CGFloat midY = CGRectGetMidY(rect);
    [[UIColor whiteColor] set];
    UIFont *defaultFont = [UIFont systemFontOfSize:16];
    CGSize size = [self.firstName sizeWithFont:defaultFont];
    if (isCentered == NO) {
        tempRect = CGRectMake(5, 0, size.width, size.height);
    } else {
        tempRect = CGRectMake(5, midY - size.height/2, size.width, size.height);
    }
    [self.firstName drawInRect:tempRect withFont:defaultFont];
 
    [[UIColor lightGrayColor] set];
    size = [self.lastName sizeWithFont:defaultFont];
    if (isCentered == NO) {
        tempRect = CGRectMake(CGRectGetMaxX(tempRect)+5, 0, size.width, size.height);
    } else {
        tempRect = CGRectMake(CGRectGetMaxX(tempRect)+5, midY - size.height/2, size.width, size.height);
    }
    [self.lastName drawInRect:tempRect withFont:defaultFont];

Next we find out if phone actually exists, and if so set the color to red, and draw it to the right of lastName. We also have to make sure we aren’t drawing this outside our boundaries, so we check to see where the end is, and if it is outside, we crop it to 5 pixels from the end.

    if (self.phone != nil) {
        [[UIColor redColor] set];
        size = [self.phone sizeWithFont:defaultFont];
        CGFloat end = CGRectGetMaxX(tempRect) + size.width;
        if (end > rect.size.width) {
            size.width = CGRectGetMaxX(rect) - CGRectGetMaxX(tempRect) - 10; //-10 so that we get 5 from the end of last name, and 5 from the end of rect
        }
        if (isCentered == NO) {
            tempRect = CGRectMake(CGRectGetMaxX(rect) - size.width - 5, 0, size.width, size.height);
        } else {
            tempRect = CGRectMake(CGRectGetMaxX(rect) - size.width - 5, midY - size.height/2, size.width, size.height);
        }
        [self.phone drawInRect:tempRect withFont:defaultFont lineBreakMode:UILineBreakModeTailTruncation];
    }

And finally if our email actually exists draw it on the bottom left.

    if (self.email != nil) {
        [[UIColor blueColor] set];
        size = [self.email sizeWithFont:defaultFont];
        tempRect = CGRectMake(5, midY, size.width, size.height);
        [self.email drawInRect:tempRect withFont:defaultFont];
    }

I hope this helps you in configuring UITableViewCells for your own project, and hopefully will let you start to think about the possibilities.

To download the entire XCode project, you can find it at: http://github.com/elc/ICB_PrettyTableView

For the holidays and beyond: INRIX Traffic

Think about the Thanksgiving holiday here in the US and you think of travel to see family and friends, and fighting congested highways and roads. It’s a holiday fact of life. Here’s a suggestion for a bit of relief: the Inrix Traffic app for iOS. It’s free (and no ads) and it provides real-time traffic maps, traffic forecasts, accident and incident reports for every interstate, highway and major arterial and city streets.

Reviews of INRIX traffic products are generally positive, because the data they collect is sourced from long-haul trucks, taxis, delivery vans and commercial fleets, along with the usual consumer input and traffic sensors. The app also has predictive technology that analyzes the hard data, and takes factors like day of the week, weather, accidents and road work, and holiday traffic to figure out what is coming, not just what the current situation is.

The company already predicts that there will be “up to a third less traffic over the Thanksgiving holiday this year compared to 2010,” but we’ll still see up to a 20% increase in travel times anyway, especially on the last afternoon communte on Wednesday. “Travelers leaving for their holiday weekend combined with commuters heading home from work will result in the evening rush hour peaking an hour earlier than normal with traffic congestion building on the nation’s worst traffic corridors starting at 2 p.m. with the average trip taking up to 20 percent longer than normal,” says Inrix.

I tried the app around southern Arizona and it worked well, although I’m not in a generally bad area for rush hour. Accidents were noted, and the information was current. The traffic flow maps seemed to reflect current conditions, and you can drag the map around on your iPhone and look at other areas besides your own. I saw the app update with new information several times.

You’ll note that the app offers to sell you an extended paid service with additional information and access to traffic cameras, but I thought the free version gave me plenty of what I needed for any trip or commute.

Version 3.5 is the latest planned release, and should appear very soon in the App Store. It has more traffic sources for more roads, and better details on accidents and delays.

Of course some of the Navigation apps have either free or extra-cost traffic information, but INRIX is free, it works, and for many users it is worth a spot on your iPhone. Have safe, and hopefully swift, travels next week during the holiday and don’t forget to check out Steve Sande’s 5 apps for Thanksgiving post to see other apps you might need on Turkey Day.

For the holidays and beyond: INRIX Traffic originally appeared on TUAW – The Unofficial Apple Weblog on Sat, 19 Nov 2011 14:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

Germanmade handmade wood and leather g.2 iPad-Case for iPad 2

Germanmade iPad case

Most premium iPad cases are pretty similar. Some are bags, some flips cases, some sleeves — Germanmade has done something a bit different with their book-style case.

Construction and design

Made from leather stretched over veneer, the case has a uniquely organic feel. From the outside it looks just like a leather-bound book. The sides resemble mottled pages, with the hardback cover completing the look.

Both the wood veneer and surface cover material are exquisitely finished, giving a genuinely luxury feel. The inside of the case is finished in natural wood and an inlay color of your choice, in this case white. It’s put together really well too, feeling pretty solid all round, yet reasonably light for the size and amount of material used. While I wouldn’t want to drop the iPad in the case, it’s likely to be held pretty well; although the case itself is likely to come off pretty knackered from a fall of any decent height.

Use

Germanmade iPad case open

The case fits the iPad 2 very well, holding it securely in place with small rubber friction pads in the corners. The front flap is held in place by a thin strip of black elastic that reminds me of those gorgeous moleskine notebooks. In the lid are the required magnets to shut off the iPad 2 upon closing — a nice touch.

The wood of the case is shaped to give you access to all that the iPad does without taking it out of the case. Cut outs allow access to the side switch and volume rocker, dock connector port, headphones and power button; there’s even a shaped cut out for the speaker on the back of the iPad 2, which projects the sound forward. There’s no access to the back camera, but taking the iPad in and out of the case is a breeze thanks to thumb-sized cutouts for leverage

The case also has two tricks up its sleeve. The first is that the front flap can be folded around the back to create a landscape support for typing. It provides just enough of an angle to make using the keyboard just that little bit easier on your wrists like Apple’s Smart Cover does.

The second trick is a vertical stand. Cut into the wood at the bottom left edge of the case are two grooves that you can place the naked iPad in, propping it up vertically in either landscape or portrait orientation. It’s extremely stable and makes a nice desktop stand as long as you’ve got enough room for it.

The case comes in two space variants. One of them just takes the iPad; the other is a little thicker and takes the iPad as well as an iPhone, a pen and a pad of paper, which are hidden behind the iPad in the case. It makes an excellent alternative to a small briefcase for light office duties and keeps everything nice and secure.

Verdict

If you’re looking for something a bit different, something sophisticated that doesn’t look out of place on a desk full of books, then the Germanmade series of iPad and iPad 2 cases are just the ticket. They’re not the most portable of protection for your tablet, but looking like a book you can just carry them on their own, without fear of them being pinched.

They’re available in both iPad and iPad 2 flavors, with and without the spaces for the iPhone and bits. They’re well finished, hand made, and available in a plethora of different finishes and colors. They command a price that’s well above average for iPad cases, but the unique styling and quality handmade fit and finish certainly set it apart from the rest. Be sure to check out the gallery above for some close-ups of the individual features.

Germanmade cases can be had for between US$100 and $160 plus shipping depending on model and cover material.

Germanmade handmade wood and leather g.2 iPad-Case for iPad 2 originally appeared on TUAW – The Unofficial Apple Weblog on Sat, 19 Nov 2011 14:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

Bob Iger picks up $55,000 in stock for joining Apple’s Board

We mentioned earlier this week that Disney CEO Bob Iger was invited to join up to Apple’s Board of Directors, and Fortune reports that as part of his deal, Iger got 142 restricted shares of AAPL, totalling a nice bonus of over $55,000 at current market value. Nice work, if you can get it!

We joke — Iger has been a key player at Disney for a while, overseeing both the recent purchase of Marvel Entertainment, as well as the acquisition of Pixar, which of course was headed up by none other than Steve Jobs. $55k is nothing for Iger, though — last year, he picked up more than $29 million in compensation from Disney, according to SEC filings.

And Iger has one other thing going for him that he and I share: He’s a Bachelor of Science alumni from the Roy H. Park School of Communications at Ithaca College in upstate New York. Go Bombers!

Bob Iger picks up $55,000 in stock for joining Apple’s Board originally appeared on TUAW – The Unofficial Apple Weblog on Sat, 19 Nov 2011 12:00:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments

How to use Siri for voice dictation on a Mac with Mobile Mouse

By now just about everyone knows that you can use Siri to take dictation on an iPhone 4S, but what you may not know is that you can also use it on a Mac. If you have an app on your iPhone that allows you to access your Mac’s keyboard functions remotely, you can use Siri’s dictation feature on the iPhone 4S to dictate text to your Mac.

One example of an iPhone app that you can use to dictate to your Mac is Mobile Mouse. The app already allows you to control your keyboard and mouse from your iPhone, but using the new dictation button on the keyboard, you can also dictate text to your Mac. (Reader Amalesh Panse pointed out, via Twitter, that Magic Mouse works fine with Windows too.) So long as you have a cursor inserted into a text field, you can use the dictation button on your iPhone’s keyboard to use Siri to dictate texts directly to your Mac using Mobile Mouse or a similar app. Conversion into text happens rather quickly, almost as quickly as it does on the iPhone’s native interface.

In practice the dictation is actually quite accurate; it does make mistakes, but I managed to dictate almost all of this post using Siri via Mobile Mouse with only a few adjustments. Apart from being an extremely cool trick, this feature could also allow you to bypass paying upwards of $50 for a product like Dragon Express, which does essentially the same thing (perhaps better).

The best part is, there are no settings that you need to tweak in order to get this to work. If you already have Mobile Mouse installed on your iPhone (and Mobile Mouse Server on your Mac), you’re already able to use Siri to dictate text to your computer. Seeing words I’ve spoken into my phone appear on my Mac’s screen as if by magic is one of those whiz-bang things that totally reminds me we’re living in the future.

Thanks for the tip Rohan!

How to use Siri for voice dictation on a Mac with Mobile Mouse originally appeared on TUAW – The Unofficial Apple Weblog on Sat, 19 Nov 2011 10:20:00 EST. Please see our terms for use of feeds.

Source | Permalink | Email this | Comments