BuySellAds.com

My book Barcodes with iOS 7 is nearing completion. Buy it now to get early access!
Our DNA is written in Objective-C
Jump

What's In a Name?

When I started this blog I was already drawing on multiple years of blogging experience. But this second blog of mine was supposed to be highly focussed on iOS development. More out of a gut feeling than anything else I chose Dr. Touch as a monicker and sort of a brand name. I figured that this would contain some geeky references:

  • “Dr” like “Drobnik”,
  • but also like “Doctor”. For  two reasons: 1) I am both studying to become a Doctor of Cocoanetics and 2) I am also learning a lot by fixing up other people’s code, like a Medicus.
  • Touch derives from Cocoa Touch, which you know is the set of frameworks that we use to program iOS

Now it just so happens that I am moving servers. From a virtual Windows box to a real Linux server. I’ve already transferred all my domain names to network solutions because NS got recommended to my by a friend whom I fully trust. Having the names on a different service than who’s hosting your domain gives you a great deal of flexibility.

But carrying out this move actually got me thinking: Currently all my iOS stuff is in a subdirectory of drobnik.com. That might be great for me ego to have my name as domain. But at the same time it dilutes my “brand” because “Drobnik” means so many other things on Google. I might hold the first few places there, BUT to convince people that “Drobnik” and “iOS development” are synonymous is an uphill battle.

So it’s clear for me at this stage that I have to find a new domain name. A name that’s independent from my personal name, but something catchy, something that will get people to know instantly what this site is about.

The usual combinations of Doctor and Touch are taken, and I don’t want to resort to DoctoreTouch.com, even though this has a bit of italian flair. And this name also carries the fatal flaw that it takes a bit of brain acrobatics to get from Dr. Touch to iOS Dev.

This I’m announcing the quest for my next name. Mail me your suggestion (or DM me on Twitter) and if it wins over all the other ones that are being sent in, then I will reward you handsomely with your choice of cash or components from my shop or personal development help.

I will announce the winner as soon as we get to transfer the blog to the new server and establish the domain.

Microsoft Continues to Fish in Apple's Pond

I previously reported about having gotten e-mail from a Microsoft representative. It turns out, that was only the US activities.

Today I got a phone call from a lovely lady (obviously native German speaker) from CBS, you know, those TV guys. CBS apparently also does telemarketing and they got hired by Microsoft to call all European iOS developers to try to see whom they might get on board of Windows Phone 7. CBS has received a list of developers from Microsoft who seem to have gotten it by scraping the app store.

Microsoft is offering the following trinkets to make the switch a bit more interesting:

  • 75 Euros Sign-Up Fee waived if you have at least one WinPhone7 compatible app released by December.
  • free tech support
  • they’ll even reservere your app name for you on their store
  • a slew of workshops
  • a free copy of Windows 7 for your development PC
  • a free mobile device

I interrogated the caller a bit about how their activities are working out so far in other countries and especially in Austria. She said that it’s going really well in Great Britain and Italy, and so-so in France and Germany. I was the third Austrian iOS developer she had called, but she just began. Well, having a name beginning with D got me on the third place of an alphabetical list it seems.

Hey, and you don’t have to totally switch. Just “make one app compatible” until December to not have to pay the sign up fee…

Being the solo-developer that I am I certainly don’t want to spread myself too thin. Also I don’t think that it would be wise to branch out to other platforms while I still have so much more to learn about iOS development. Some time ago I formulated my own credo to be “focussed on iOS, but diversified widely on one platform.” That’s my plan.

But you’re free to do whatever you like, if a free Windows 7 mobile phone is all it takes for you to turn your back on iOS then please DO leave.

DTChartView 2.0

I had originally begun development on my chart class for BabyBubbles, which required customizable charts to display various statistics on whatever babies you might have. At that time all of the view building and logic was contained in a view controller, DTChartViewController. This app was the first to launch with the 1.0 version and I’ve never had any complaints.

When I continued work on iWoman 2.0 I realized that it would make more sense to make the box with the chart a view of its own. Especially because I wanted to have the ability to show a small chart which would zoom to use the full screen when rotating your device. So I got to work on 2.0. Amongst other polishing I wanted to clean up the delegate/datasource interface to use method names that inform the developer that they belong to DTChartView.

That’s how the datasource protocol turned out. You can see that very little is required to get a chart to show, but there is a boatload of options to customize the appearance of the columns and lines.

@protocol DTChartDataSource
 
@required
- (NSUInteger)numberOfPointsInChartView:(DTChartView *)chartView;
- (CGFloat)maximumValueInChartView:(DTChartView *)chartView;
- (CGFloat)chartView:(DTChartView *)chartView valueForPointAtPosition:(DTChartDataPointPosition)position;
 
@optional
- (NSInteger)numberOfLinesInChartView:(DTChartView *)chartView; /* default 1 */
- (CGSize)unitSizeInChartView:(DTChartView *)chartView;; // default: automatically calculated
- (CGFloat)minimumValueInChartView:(DTChartView *)chartView; // default: 0
- (NSArray *)chartView:(DTChartView *)chartView arrayOfValuesForBarsAtPosition:(DTChartDataPointPosition)position;
 
// column grouping
- (NSUInteger)chartView:(DTChartView *)chartView groupForColumn:(NSUInteger)column;   /* column grouping */
 
// customizing look
- (UIColor *)chartView:(DTChartView *)chartView backgroundColorBehindPointAtColumn:(NSUInteger)column; /* no fill if not implemented */
- (UIColor *)chartView:(DTChartView *)chartView colorForLineAtIndex:(NSUInteger)index;  /* default colors are provided */
- (BOOL)chartView:(DTChartView *)chartView drawCustomBarInRect:(CGRect)barRect onContext:(CGContextRef)context forLineIndex:(NSUInteger)lineIndex; // custom drawing of bars
- (BOOL)chartView:(DTChartView *)chartView drawCustomBackgroundInRect:(CGRect)barRect onContext:(CGContextRef)context backgroundType:(DTChartBackgroundType)backgroundType;
- (BOOL)chartView:(DTChartView *)chartView drawCustomDataPointAtPoint:(CGPoint)point onContext:(CGContextRef)context position:(DTChartDataPointPosition)position;
 
// horizontal axis customization
- (NSString *)chartView:(DTChartView *)chartView textForLabelInColumn:(NSUInteger)column;
- (BOOL)chartView:(DTChartView *)chartView customizeColumnLabel:(UILabel *)label;
 
// vertical axis label formatting
- (NSString *)chartView:(DTChartView *)chartView titleForLabelAtValue:(CGFloat)value; // custom formatting for y-axis labels
 
// legend
- (NSString *)chartView:(DTChartView *)chartView titleForLineAtIndex:(NSUInteger)index; // name for legend
 
// display of placeholder for empty chart
- (UIView *)viewForEmptyChartView:(DTChartView *)chartView;
- (NSString *)titleForEmptyChartView:(DTChartView *)chartView;
 
@end

In the meantime another customer found DTChartView and purchased it. Every time this happens, this invigorates me and prompts me to to polish just a bit more. Helmut Neumann took it upon himself to take the 2.0 BETA and add it to the latest version of his successful cellphone usage tracking app.

Without any fear or reservation he pointed out all the shortcomings and drove me to iron out all those kinks. So finally, when he got the update approved it was at the same time the seal of approval that I wanted to get to allow myself to release version 2.0.

I’m always happy to hear when customers of the Dr. Touch’s Parts Store report on how happy my work made them.

“Two months ago i wanted to add Charts to HandyEtat, my well settled cost control app for T-Mobile Germany. I was already using My App Sales and liked the integrated charts. So I was quite happy to find DTChartView in Olivers parts store, espacially when noticing the unbeatable price and license conditions. DTChartView is feature rich, highly customizable and rock solid in execution. Integrating it into my App was “a piece of cake”. Oliver showed a great performance on taking over and implementing enhancement requests. The new version of HandyEtat got an overwhelming response from my customers, so I am very pleased with my decision to use DTChartView.”

DTChartView 2.0 is available on my Dr. Touch’s Parts Store. I’ve priced it so high because of the enormous amount of work that went into it, knowing well that this would limit the number of apps using it. But on the other hand it makes it a charting solution that can make your app stand apart from the competition.

Augmented Reality Plane Finder Trumps Charts

Pinkfroot is a small iOS dev shop in the UK who specializes on apps that show planes and ships on maps. I had the author Lee Armstrong on my podcast a while back explaining how they are getting the vehicle telemetry. Increasing numbers of airlines and ships are outfitting their vehicles with transponders that are transmitting data like current speed or destination and there are boatloads of volunteers worldwide who have receivers for these airwaves and share them with Pinkfroot.

They had already used my DTAugmentedRealityController part with a bit of success on a Shipfinder app Ships Ahoy!, but naturally this is only interesting for people who at least sometimes have water nearby to gaze at ships on. Most of us iPhone users are living inland and so for every ship we see, there are dozens of planes that pass over our heads.

Enter Plane Finder AR. For the first time there is an Augmented Reality app where it actually makes sense to point your iPhone at something and get augmented data for what you are looking at. Granted there are apps showing you names of mountain peaks, but – honestly – those don’t move so much and thus are way less interesting as something that happens to pass over you right now.

Plane Finder AR gives you a rotating mini map and labels for the individual planes. These tell you the designations of the planes, ground speed, altitude, origin and destination, and distance from you. It proves to be a great use case for my AR component. If you have the data (the more live the better) you can easily build an enticing app.

Just how enticing? Well, let’s check the charts (courtesy of Applyzer)

The audience is downloading this app more than the likes of Tom Tom or CoPilot who had been leading the Navigation Category. Which in my humble opinion makes perfect sense because while navigation is something that you might use every once in a while when driving somewhere, this app makes the air above your current location a more interesting place.

MyAppSales 1.0.17

With Apple totally revamping the “Sales & Trends” and “Financial Reports” they gave a shiny and wonderful AJAX Interface. But at the same time, because of the lack of a public API, this meant that we tool vendors had to burn some midnight oil to get our downloaders fixed up again.

This version of MyAppSales is a maintenance release with these goals:

  • navigate the AJAX pages to retrieve Daily, Weekly and Financial reports
  • adapt to the changes in the financial reports format (reports would be empty)
  • Minor tweaks, like use the smaller financial report description when displaying report sums

I am still working on migrating the database into CoreData to be able to make it 4.x compatible. Currently there are lots of caching mechanism that cannot handle when the app is being killed, like when you remove it from the recent apps list. Another problem is that settings will not be saved. So until further notice you have to keep building it against SDK 3.2, it will still run fine on your iPhone with iOS 4.x.

The update is in the trunk of the subversion repository.

Backwards Compatibility if Apple Starts Polishing

You can see that Apple is constantly polishing the APIs from version to version, but sometimes they make a more drastic change that breaks existing code. Well, not exactly “breaks”, but starts to show warnings about you daring to use deprecated methods.

One such change came out of their trying to adhere to their own naming conventions of methods. The second kind of late polishing is if there are new structures introduced without a matching Make macro for easy filling of said structures. I have an example for you, also in CoreLocation.

In this post I’m exploring two such changes and tell you how I dealt with them in a backwards compatible way.
Read more

Apple Music Event, Everything iOS!

The question that we developers are always asking ourselves after such an Apple event: “what was in it for us?” There are the highlights relevant to us:

  • iOS 4.1 release is imminent, if not today then this week. GameCenter being released, update your games! Ah and you don’t need any HDR app any more, the iPhone shots 3 images at the same time and combines them. Groovy!
  • iOS 4.2 coming in November, for all devices being able to run 4.x, but the main focus is to bring all the 4.0 niceties to iPad: Multitasking, Folders, etc. And the best new feature for productivity apps: Wireless Printing!
  • There are 230,000 iOS devices being activated every day, NOT including updates. Steve kind of hinted that the number that Google mentioned is not really honest in that regard.
  • The new iPod Nano is square indeed and clearly runs iOS. For the time being Apple does not give us ability to code apps for the small screen, but that might be coming eventually.
  • New iPod Touch is now an iPhone 4 without the phone. Retina display, Gyroscope, A4 Chip. Even more reason to update your artwork and add a 2x version for all images. And since the iPod Touch now has two cameras any apps making use of AV capture devices has a way bigger audience
  • New Apple TV is now at a price point reachable for everybody. The previous Apple TV was running an old OSX version, this new version clearly is iOS based, also because it has an A4 chip. But just like the Nano, no third party apps (yet?). It does not have storage though, so where would you store apps?
  • One of the new things in iOS 4.2 will be AirPlay which allows HD videos to be streamed from you iDevices straight to your AppleTV. Do we see a wireless UIScreen that we can do the same from our apps in 4.2?
  • New social music service directly in iTunes 10. You see which music your friends like. How about adding the same for apps?

So half of the news is great for us, more iOS devices that we can develop for with new tech. And more iOS devices that we WILL be able to develop for. Everything points to Apple wanting to keep enough news to themselves to not over-excite us iOS developers.

BUT! (one more thing) I foresee another Apple event happening at the beginning of 2011 filling all the above mentioned holes.

Building the Ultimate iOS Source Store

When I quit my employment as Windows system administrator in December 2009 I had already been developing iOS stuff for 2 years. At that stage I had to define what my business should be comprised of and I decided on a multi-pronged approach. I simply lack the design capabilities and ideas to sustain myself on apps alone.

The Past

One of the multiple streams of income that a holistic iOS business can generate are sales of software components. Often there’s a functionality that you wished Apple would provide or made simpler to use but you lack time and expertise to write such a component. And you lack funds to hire a professional at a rate of several hundred dollars per day. What if you could share the development cost with dozens of other fellow developers? The pro would still get payed, but you trade exclusivity for availability.

This is what I created my Dr. Touch’s Parts Store for.

Often I get asked, how this is going for me. Here’s my first go at answering that: pretty well! I’ve been doing that for 7 months now, which provides a bit of data that we can slice and dice. Also I’ll tell you about the present state of affairs as well as present to you my vision of the future: The Ultimate iOS Source Store.

Read more

Dr. Touch #020 – “Summer Pause”

Between Apple event’s it’s back to looking for interesting rumors out of Cupertino. And my guest on this show is Ken Seto who made $100000 in 4 months with iMockups for iPad.

Play

The Show Notes and script after the break.

Read more

Reachability

If your app requires an internet connection for certain tasks you will have to be able to deal with situations where connectivity drops out for some time. For many cases it might be sufficient to display an error when stringWithContentsOfURL returns nil, but it’s better customer service to inform the user beforehand. Apple thinks so too, they test all apps also in airplane mode and your app better not crash or confuse the user or else it will get rejected.

Fortunately there is a great sample on the Apple Website that you might have heard it’s name mentioned in many circles: Reachability. The first version of this was difficult to use but Apple staff keeps polishing their works and so we have reached version 2.2 already, recently updated for iOS 4. The major change that 2.x gave us is the ability to get continuous updates on connection availability. This enables us to have our apps work similar to the iTunes app which displays a message to this effect when there’s no connection and has the UI return as soon as the connection is back.

So, let’s explore how to add the source for Reachability to our project and have some live checks.

Read more