Monday, January 18, 2010

Stormy Productions will participate in Indie+Relief on January 20th

ir_500.rdoESnTVsrpS.jpg

A group of Mac and iPhone developers will all be donating all proceeds made on January 20th, 2010 to Haiti. You can read more about the endeavor at this link. I am happy to announce Stormy Productions will be participating in this fundraiser.

All proceeds from any of our apps (Artificial Life, Time Bomb, Piggy, or The Gavel) purchased on iTunes on January 20th will be donated to Partners in Health.

In addition to our iPhone apps, all proceeds from any purchase of a RadioKit SDK license made on January 20th will also be donated to Partners in Health.

If you aren’t interested in any iPhone apps or a RadioKit SDK license, please consider a direct donation to Partners in Health. They have been doing great work in Haiti for over 20 years and are strongly involved in the relief effort currently underway.


Thursday, January 14, 2010

Stormy Productions - a progress report

As of January, 2010, Stormy Productions has successfully developed over 65 iPhone apps. 45 of them are published under the Stormy Productions company name in iTunes. The remaining 20+ apps have been published under other company’s iTunes accounts.

In addition to these 65 apps, 80 other iPhone radio apps are licensing a portion of the radio client software developed by Stormy Productions.

Apps developed and published by Stormy Productions

mzl.tkfncbzi.e5xvYuCoQmKt.jpgAll Hits Wired 96.3
mzl.cpwjxyvl.100x100-75.V7eZ4h7JuKBY.jpgArtificial Life
293751886.0SwPIHOPivFk.jpgClassical Philippines Radio
mzl.enlpguqs.YRMTP8pTGvP2.jpgEstereosom
mzl.czmtfdcq.100x100-75.kuamAMt6edjv.jpg1Faith FM
mzl.tcffxpwo.100x100-75.nRXXa7mSPhM4.jpgFM 94/9 / San Diego/ KBZT
mzl.haidmloo.100x100-75.BDGIMeXVW8yr.jpgGay Dance Radio, GayInternetRadioLive.com (G.I.R.L.)
mzl.umnifwcd.100x100-75.ZvTBlElVwFY8.jpgGay-D-O Dance Internet Radio from www.gay-d-o.com
mzl.fuutppkp.100x100-75.ttF9VBDkLMyi.jpgHardRadio.com The Heavy Metal Supersite
mzl.kepwyiys.100x100-75.peBSk0WasNe3.jpgHeart FM Woodstock
mzl.wiooxvrs.100x100-75.5JtNhonncb0S.jpgHOT 107.9 WJFX
mzl.nsamjxwy.100x100-75.bv6aCxqOGLo4.jpgiRadioSuite powered by Big R Radio
mzl.ruqsmnyb.100x100-75.4NKvv4CMbqmY.jpg106.3 Joe FM WVBB
mzl.jvcsuwpk.D1RwE3SNJpw1.jpgKDRP 99.9fm and online at kdrplive.org
mzl.xtngyzzk.100x100-75.uTq0Qpbh4wBd.jpgKUJO 99 - kujo99.com
mzl.vatiflyw.100x100-75.26WXL3Zb5O3I.jpgKUT 90.5 Music, News, & NPR from Austin, Texas
mzl.riuqntaz.100x100-75.QquAxolHEtP6.jpgKZSC Santa Cruz - Non-Commercial Radio That Rocks!
mzl.vqgewnbc.100x100-75.ycQ9CU61gUwj.jpgMega Radio 97.1 FM KRTO
mzl.uliwlnam.100x100-75.FWUFnbNn29Sb.jpg102.9 MGK / Philadelphia's Classic Rock / WMGK
mzl.sgllqhuh.100x100-75.yx2Tm6PbUnyC.jpgMilwaukee's 102.9 The Hog (WHQG)
mzl.glchlhrj.100x100-75.RsYxlRx0ETD0.jpgNashville Rock Radio 102.9 The Buzz(WBUZ) - Everything That Rocks
mzl.spnwxgfk.100x100-75.uL6UytUCVIVY.jpgPhiladelphia’s 93.3 WMMR Rocks
mzl.aokdyipz.100x100-75.PbNo4ziXw0f7.jpgPiggy- The Pig Alarm Clock
294813449.brcDTzRAJnY4.jpgRadio Paradise
297603281.i0Kavy3jMwpj.jpgRadio 92.9 WBOS
mzl.jiyclvcw.EeVOEa7BKj92.jpgRegina's Rock Station 104.9 The Wolf
mzl.vmbtnxhr.100x100-75.HAhbHjvIxkPJ.jpgThe Coast 95.3/95.9 KOZT
mzl.aivokvsw.100x100-75.DuwWxKFzimes.jpgThe Gavel
mzl.ekdpbpqi.100x100-75.A2kSagGCwXXN.jpgThe Gavel Lite
mzl.ewimrrdl.100x100-75.4GJxC9LTKaK7.jpgThe Rock 106.9, WCCC
mzl.amjvmvlp.F2CF15opqitt.jpg"The Source" 620 CKRM
mzl.milhnhhv.100x100-75.mRJQD4Zmei0t.jpgThe Zephyr / 96.7 FM / WZPH
mzl.tohzuhlu.100x100-75.O8Dls2KL9lfp.jpgTime Bomb
mzl.totyjtmc.100x100-75.oX1iyDzxA0vQ.jpgTunemark Radio
mzl.qyykydqc.100x100-75.j2WmAjore9o1.jpg94.7 WCSX Detroit's Classic Rock Station
mzl.bezcevgn.100x100-75.uV6QR1jUrGMX.jpg96.5 WKLH Milwaukee
mzl.dswcwuko.100x100-75.gxzWjBDe6rr1.jpgWPRT /  Nashville’s Hit Music / 102.5 The Party
297614181.4Hp9s4aai1iY.jpgWRAT 95.9
296371212.9BlwXHq9aktM.jpg101 WRIF Radio
290959864.MV5zMpiE18eC.jpgWRNI Radio
mzl.hwazsyru.100x100-75.rY44Omiujg8g.jpg89.7 WTMD Radio For Music People
mzl.gjujyyjh.100x100-75.PVu0Wq2tU2fM.jpgWWJB - AM 1450 - The Voice of Hernando County
mzl.oxfmcrxo.100x100-75.8vNrMUY2RTqm.jpgX92.9 - Calgary's New Rock Alternative
mzl.rltugabw.100x100-75.z1H0aOWDXY9y.jpgZ104.5 The Edge, Tulsa's Rock Alternative


Apps developed by Stormy Productions published under other company iTunes accounts:


GLAD WORKS

.977 Music / The Internet’s #1 Online Radio Network / 977Music.com
B96 We r Hip Hop
Hawaiian Rainbow - Hawaiian Music Radio
MIX FM 106.3 / SÃO PAULO / BRASIL


WGBH Radio

A Celtic Sojourn on WGBH Radio
All-Classical WGBH Radio


Public Radio International

PRI Program Stream


JAZZ.FM91 - Ontario, Canada

JAZZ.FM91


bgApps

Text 2 Wallpaper


Jacobs Media

Oldies 101.9 / WKLU / The Greatest Hits of the 60’s & 70’s
US 93.3 / Real Country Variety / WBTU
Air 1 Radio The Positive Alternative
K-LOVE Positive & Encouraging
am1500 / KSTP-AM/ 1500 AM Minneapolis/St. Paul
FM107.1/ WFMP 107.1 / St. Paul / Minneapolis
KS95 / KSTP FM / 94.5
Y-Rock on XPN
WXPN 88.5 / XPN
K-WAVE / KWVE 107.9 / The Wave Of Living Water
Pulse 87.7 FM / New York’s NEW Dance Music Leader!
The House FM / Praise 88.7 / Christian Radio


Listener Interactive

Public Radio App - This was a joint development project with Cadile Systems


.

Thursday, January 7, 2010

Tunemark Radio 1.2 now available on iTunes

In what was the fastest approval for any of my iPhone app submissions (just 22 hours!) the Tunemark Radio 1.2 update is now available on iTunes.

Tunemark Radio is a FREE radio player supporting the full directory of SHOUTcast radio stations (over 30,000 of ‘em!) as well as providing support for listening to custom URLs via a pls, m3u or direct audio stream.

Unlike many other free apps, this app is also free of any banner ads.

The latest update includes support for selecting the initial pre-buffering time so you can have better control over how well the app performs in different wireless situations. If you know you have a good connection, shorten the pre-buffering so you can hear the music begin playing sooner. If you are in an area with only Edge data speeds, it might be helpful to increase the pre-buffering to 20 or 30 seconds to reduce the chance of any interruption in your listening experience.

In addition to the pre-buffering change, there is now a button on the “Now Playing” screen to allow you to view the web page for the station that is currently playing. This web page address is based on what the station advertises in their audio stream, so it may not always link to the stations home page. In some cases it will link to the station of the audio stream service-provider, or it might link to a SHOUTcast status page, but in the majority of cases, stations do provide a link to their home page.

There are a few other minor changes - the station name will now scroll like a marquee is the name is too long for the title bar area, while performing pre-buffering a small status message will display how many seconds of pre-buffering are needed before playback starts, and there are also a few bug fixes.

I hope you enjoy the app, and as always, feedback is encouraged. If there’s a new feature you’d like to see in the app, send along an email. I can’t promise it will be in the next update, but I do take every suggestion seriously and try to add what I can based on my available development time. You can reach Stormy Productions via the “Contact Us” link on the navigation bar at StormyProds.com or via the “Send Feedback” button on the “About” page within the Tunemark Radio app itself.

Cheers.


Sunday, January 3, 2010

Radio Paradise app listed as a "favorite of 2009" from TUAW

I just noticed that the Radio Paradise iPhone app was listed as one of The Unofficial Apple Weblog (TUAW) favorite apps for 2009:

http://www.tuaw.com/2009/12/29/our-favorite-apps-stuff-that-stayed-on-our-phones-in-2009/

It was listed several days ago and I hadn’t realized it until I was looking at download stats for my apps and noticed a large increase in downloads for the Radio Paradise app on December 29th and 30th. I figured someone must have mentioned it somewhere and a quick Google search led me to the TUAW article which was published on Dec 29th.

The Radio Paradise app is an app I wrote for free for RadioPardise.com as my way of lending support to that station. It’s a listener supported radio station and they do an awesome job of hand selecting an eclectic assortment of tracks of music that go well together.

If you haven’t tried the app, you can read more about it here. It’s free! And don’t forget, if you enjoy what you hear, try to send some support to the kind folks at RadioParadise.com.

Displaying Web Pages within an app via a custom WebViewController

I’m always perplexed why so many iPhone apps, when linking to a web site, choose to exit the app and launch Safari. It’s a very simple process to include a UIWebView and doing so makes for an easy way to keep someone within an app- leading to a smoother user experience.

About a year ago I made my own WebViewController for making the process of embedding a web page in an app even easier. I use this custom class in most of my apps and since I find it useful, I figured other developers might as well. As the name implies, it’s a UIViewController that contains a web view. It is designed to be used as a simple full-screen web browser, providing only a back, forward, and reload button, along with an option to relaunch the web page in Safari. This way, if the user really wants to leave your app while viewing the web page they can choose to, but it’s their choice.

The class also supports any view orientation, so once a web page is displayed, the user can rotate the device and the web view will also rotate.

You can download the complete WebViewController class file here.

Here’s an example of how it looks within the JAZZ.FM91 app in both portrait and landscape mode:

iPhoneSimulator.KcJeRT2AAV4j.jpg​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​iPhoneSimulator-landscape.ga5rNR5GeTFf.jpg

Since this class is a view controller, it’s pretty simple to use. You can either include it using all code, or can use it via Interface Builder. If you are comfortable including custom view controllers in your projects, you probably don’t need to read any further. But, if you are fairly new to XCode, Objective-C, and Cocoa, here are some more details for integrating this custom WebViewController class.

All in Code

Here’s an example without using InterfaceBuilder. First, download the class file, unzip it, and add the WebView folder and its contents to your project.

Then, add the necessary import line in whichever class file you choose to be using it in:

#import "WebViewController.h"

Then, add the following lines to be executed when you want the web view to be displayed:

        WebViewController *webViewController;
        webViewController = [[WebViewController] alloc] initWithNibName:@"WebViewController" bundle:nil];

        [self presentModalViewController:webViewController animated:YES];
        [webViewController release];        
        webViewController.delegate = self;
        [webViewController loadBrowser: [NSURL URLWithString: @“http://stormyprods.com”]];


In the above code, you may have noticed we registered the containing class as the delegate for this controller. This custom WebViewControllerview has a protocol (dismissWebView) for notifying its delegate when it should be dismissed. So, we should also implement that so we can dismiss the modal view at the proper time. In the class which contains the above added code, also add this new class method for handling the WebViewController’s protocol:

- (void) dismissWebView
{
        [self dismissModalViewControllerAnimated:YES];
}

And that’s it!

In the above example, we added the WebViewController as a modal view, but it could also have been added in any other way you would normally add a UIViewController. It could be one tab in a set of tabs, etc.


Using WebViewController via Interface Builder

If you were using Interface Builder (which I recommend whenever possible) you can do it as follows.

In whatever class you want to include this WebViewController, add the import for the .h file:

#import "WebViewController.h"

Then, add the webViewController to the class as an IBOutlet:

        IBOutlet WebViewController *webViewController;

Hook up this outlet in Interface Builder to a view controller object, and using the Inspector change the class identity to WebViewController. It should look something like this:

InterfaceBuilder1.3a5vQsW51hJm.pKiXSUCNcYOO.jpg

Then, when you want to have this WebViewController displayed, you would do it something like this:

        [self presentModalViewController:webViewController animated:YES];
        webViewController.delegate = self;
        [webViewController loadBrowser: [NSURL URLWithString: @“http://stormyprods.com]];

Note how this code is very similar to the earlier “code-based” method of displaying the WebViewController, but in this case we are not creating the class and we are not releasing the class either, since the creation or release is done behind the scenes by glue provided automatically by using Interface Builder.

And, finally, we’d still need to implement the protocol for dismissing the web view controller when it wants to go away:

- (void) dismissWebView
{
        [self dismissModalViewControllerAnimated:YES];
}

All content copyright © 2009  Brian Stormont, unless otherwise noted.   All rights reserved.