Be Tv in De Morgen

April 16th, 2009

On Tuesday the 14th of April the Belgian newspaper De Morgen listed Be Tv as one of the 5 essential iPhone applications. Here’s a scan of the article, they did spell Be Tv wrong though. It was published on page 8 next to a larger article dedicated to the the billionth download in the App Store.

It’s nice to see how good Be Tv is doing, more than 11.000 downloads in the first 2 weeks. In the mean time, development of version 1.1 has entered the final stages.

Be Tv De Morgen

Thanks to Jan Vantomme for letting me know.

Update: the full page can be found here.

Be Tv launch statistics

April 12th, 2009

Now that Be Tv has been launched more than a week ago, I thought it would be interesting to publish some statistics regarding Be Tv. I’ve taken the first 8 days as data for the statistics from the launch date (2 April 2009) to 9 April 2009. Be Tv was downloaded 7.836 times in this period and was launched a little over 24.000 times.

Be Tv ranked 11th after only 430 downloads, 7th after 759 downloads, 5th after 1057 downloads, this was in the first 24 hours after the iPhoneclub.nl article. The number 1 spot was reached by the 6th of April after a little over 4.000 downloads.

Downloads

Another interesting statistic was the ratio iPhones vs iPod Touches, I somehow anticipated more iPod Touches than iPhones, since they have been introduced a lot earlier than the iPhones. The firmware graph is pretty predictable, firmware versions older than 2.1 we’re negligible (44 devices in total) and to my surprise there are some developers who are already running 3.0 on their (main) devices.

Models
Firmware versions

Be Tv remained 6 days at the number 1 spot and is at the time of writing (12th of April) still the number 1 in the free entertainment list.

Be Tv version 1.1 roadmap

April 5th, 2009

Now that Be Tv has been in the App Store for 3 days, it’s time to stop dreaming and start working on the next version. Although I haven’t been doing nothing, there’s quite a lot of PR work involved and supporting tasks to keep everything up & running. I’ve received numerous requests for new features and thought I should make my short term plan of attack known. Two issues kept coming back in the requests and I think it’s best to tackle these first before starting on some bigger features.

Version 1.1:

  • Localized interface: users who have set the interface language of their iPhones to Dutch or French will see Be Tv in the corresponding language. I didn’t think the English interface would get so many complaints.
  • French speaking Belgian channels: lots of (french speaking) people pointed out these were missing and with reason I must admit. La Une, La Deux, RTL TVI & CLUB RTL will be added.
  • Highlight current program in today detail: when opening the today detail the table should scroll down to the current program. This one isn’t as major as the first 2 issues, but it will add a lot to the usability.

These issues shouldn’t take too long to implement and they’ll make a lot of people happy. I’ve added a dutch and french summary in the App Store in the mean time, which should show up any time now.

There you have it, I hope you like it!

Be Tv ranked at #49

April 3rd, 2009

Who would have thought, after almost 6 hours of exposure on iPhoneclub, Be Tv is ranked at position 49 in the “Top Free” list of the Belgian App Store. Be Tv has received some great comments via various channels ranging from regular e-mail, Twitter replies, comments on this blog, comments on iPhoneclub, to normal App Store reviews.

At the moment Be Tv is being downloaded at a rate of a little over 1 download per minute (75 per hour to be more precise) and Be Tv is being fired up at double that rate, slightly less than twice per minute. Totaling 350 downloads in less than 6 hours, landing us on spot number 49! The server providing the schedules is holding up quite nicely, despite being hammered a bit. The launch has been quite hectic (no crashes though), due to all sorts of PR-stuff, but it has been (& still is) great fun!

Be Tv ranked at #49

I’d like to thank everyone for their positive comments & I’ll try to review every feature-request and see if it’s feasible in an upcoming release.

Update: as of this morning (3rd of April) Be Tv is ranked at #11!

 

Be Tv version 1 released

April 2nd, 2009

Be Tv logoIt has finally happened, Be Tv has been approved and can be downloaded in the Belgian App Store. After being in development & testing for almost 2 months, it was time to submit version 1 to Apple. I still have lots of stuff I want to add or change, but otherwise it would never hit the App Store. It took Apple a week to approve it, but it was worth the wait. Depending on the reception of Be Tv I might make it available in the Dutch App Store too.

The new Emmer Inc website has been launched as well and for being a developer, I think it turned out ok. As for Be Tv, I’d love to hear what you guys think of it in the comments.

See you in the App Store.

Codesign failed with exit code 1

March 26th, 2009

While building the final 1.0 product of Be Tv, I encountered the following error: “Command /usr/bin/codesign failed with exit code 1″. Searching the internet resulted in some posts with tips like check your certificates & provisioning profiles, check your app id for typos, .. After going through the whole distribution process, I was pretty sure that the aforementioned things were ok.

Eventually I found what caused the error, I had flagged the Info.plist file as Target, thinking it was necessary. (The checkbox at the far right) Unchecking it (which is the default state) solved it. When faced with the dreadful codesign error, here’s something extra you can check.

New line in UILabel and UITextView

March 23rd, 2009

Somehow I never figured out how to insert a new line in a UILabel or UITextView, up until now. A new line is added with Alt + Enter. Using Enter only while editing the text will result in a new line in editing mode, but the new line is lost when editing mode is quit.

There you have it.

Reduce the XML WCF response size

March 23rd, 2009

I recently received a request for a post on how to reduce the XML response size of a WCF service easily. When developing for mobile devices (like the iPhone), it’s crucial to keep loading times as small as possible. Reducing the size of the XML response can be done in two ways: either the actual data or the encapsulating XML elements is/are treated. Changing the actual data probably has a severe impact on you’re applications inner workings, that’s why we’ll focus on the latter. Here’s how:

[DataContract(Name = "p")]
public class Product
{
   [DataMember(Name = "n")]
   public string Name { get; set; }
 
   [DataMember(Name = "a")]
   public int Amount { get; set; }
}

By adding the name attribute we can specify how the XML element will be called, by default it uses the name of the class or property. The original response is 64 characters long, while the tweaked is only 35 characters, a reduction in size of more than 40%. This also works when the response is or contains a list or products.

// Original response
<Product>
   <Name>MacBook</Name>
   <Amount>123</Amount>
</Product>
 
// Response after tweaking
<p>
   <n>MacBook</n>
   <a>123</a>
<p>

In the end it’s a trade-off between overall readability and performance, if you’re consuming the service in .NET with WCF, then you won’t even know that the response has been tampered with, since it’s all done in the background. If you’re calling the WCF service from for instance Objective-C and are parsing the result, you’ll have to adjust the parsing to use the new XML element names.

In the case of an application for a mobile device, the benefits (faster loading) outweigh the disadvantages. You even get an added bonus: less bandwidth consumption on the server.

Break on exception in Xcode

March 19th, 2009

One of the issues I encountered switching to Xcode, coming from Visual Studio, was related to exceptions. When an exception occurs in Visual Studio it breaks and shows the exact line that caused the exception, but by default Xcode has a different behaviour. When an exception occurs, some kind of general message is shown like “_objc_error”, “EXC_BAD_ACCESS” or “___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___” and no real indication is given where it happened. Stepping through your code to find the faulty line is time consuming and plain stupid.

Luckily you can configure Xcode to break on exception and here’s how. Let me first give you a little bit of background, when the compiler compiles your application in debug-mode, it adds extra information (called symbols) to the executable enabling Xcode to map the running statements to lines of code. This adds some overhead and is the reason (or one of the) why you shouldn’t deploy your application in debug-mode, but rather in release-mode (without the symbols).

That being said, let’s get to the interesting part, Xcode supports 2 kinds of breakpoints: (normal) breakpoints which are placed on a certain line and symbolic breakpoints. Chances are that you’ve worked with normal breakpoints hundreds of times, without knowing there was another type.

Symbolic breakpoints are breakpoints based on the method name instead of the line number of a file, the advantage of this is that the exact location of the method does not have to be known. Open the breakpoints window (Run – Show – Breakpoints) and add two symbolic breakpoints called “objc_exception_throw” and “[NSException raise]“. If you choose to make them in the Global group, they are available in all your projects while the Project group applies to the current project.

Symbolic Breakpoints

These two methods are used to throw an exception, the first one being the most recent style and the latter being the “old & traditional” style, for simplicity’s sake. If you run your code and a exception is raised your code will stop, just like it used to do without the extra symbolic breakpoints. But if you open the debugger (Run – Debugger) and browse the callstack, you should be able to locate the faulty line, which is displayed with a black font color, while the others are light gray. Click on it and your source code will be shown with the “exception throwing line” highlighted. While it’s not as fast/easy like Visual Studio which shows the baddie immediately, looking it up in the debugger works too, right?

Debugger

Important: while I’ve had great success with this, there have been times when the symbolic breakpoints did not work. The debugger would show the raw statements in the callstack when an exception occured, which is the behaviour without the symbolic breakpoints. I have been able to “fix” this by adding a normal breakpoint (I’ve put it in the method where the exception occured, but I think you can put the breakpoint anywhere) and running the code again, afterward the normal breakpoint could be deleted and the symbolic breakpoints would continue to work. I think it might have something to do with the normal breakpoint causing Xcode to load and/or process all the breakpoints or it’s just me doing something wrong. If anyone knows more about this issue, let me know in the comments.