Steve Moser

iOS 7 Killed the App Icon Border

iOS 7 is here and one thing we can all agree on is that the new app icons are very divisive. Regardless the new app grid is helpful in creating harmony among app icons. Some people think all you need now to design an icon are a few circles that snap to the grid, sprinkle in a gradient or two and you’re done. However there is a lot more to it than that including omitting borders.

Superellipse

Some designers have been flustered by Apple’s new superellipse icon shape in iOS 7. Every icon size is slightly different thus throwing a wrench in efforts to create a simple border around an icon. Obviously for advertising purposes it is nice to get the correct corner shape but it isn’t all that important since if you don’t have you border you can just let Apple mask it for you. Most of Apple’s iOS 7 app icon details don’t extend to the border and most of those that do can easily be extended.

iOS Everywhere

iOS in the Car and Apple TV gives a glimpse into the future of what iOS in more places other than your phone could look like. What this means for icons is that your brand should be recognizable regardless of the shape that contains it. Most of the time this means extending gradients to fill the space however for some apps like maps it means extending the details of your app. In the iOS in the car maps app we can see more of 280 and a few more blocks.

You may think that this is no big deal since third party apps for iOS in the Car are a ways out and you’re probably right but while digging around iOS 7’s file system I found the image above of an iOS in the Car dock image for the clock app in MobileTimer.app. Which while not directly suggesting third party support it does suggest that first of all iOS in the Car apps source code and app bundle is tied to their iOS bundles meaning that an App Store app could potentially be shown on iOS in the Car and that the dock could be customizable since there are 5 dock icons across the iOS 7 file system but only 4 spots shown in the demo. Now third party support for iOS in the Car is probably a ways out but there is probably is an Apple TV announcement right around the corner and you’ll notice that most of the best third party app icons and the new Photos icon in v6.0 all extend their gradients to fill the rectangular icon.

The future of icons is borderless.

Hidden iTunes Radio Stations

iOS 7 was recently released by Apple and along with it came iTunes Radio. I have been enjoying iTunes Radio since the iOS 7 beta was released and noticed that it really shines over other radio services because of it’s integration into the OS. However the other day I went looking for one of the featured stations that was listed in iTunes Radio back in June but I couldn’t find it. You can tell a featured station from a user created station by trying to vote on a song playing on that station, if you can’t vote on it then it is a featured or DJ station. It turns out that some older featured stations don’t appear in any of the genre categories or search results when adding a stations to your ‘My Stations’ list. Luckily you can still listen to these stations and add them to your list of stations but only if you find a link to them. Thats where this post comes in. I’m trying to catalog all these hidden featured iTunes Radio Stations. I am also listening stations that can only be found through searching and are not present in the genre categories.

If you find more hidden stations please @reply me on twitter @SteveMoser and I’ll update this post. I know I’m currently missing at least the ‘Artists on Tour’ and ‘Decade of iTunes’ stations.


Hidden Stations


Hidden Stations only in Search Results Or Temporarily Featured

Instrument Essentials

Composer Essentials

3 of a Kind

Chill Out

Guest DJ

Showcase

Artist Radio


Genre Categories

Alternative

  • iTunes Top 100–Alternative
  • 3 of a Kind–The Killers, Imagine Dragons, Neon Trees
  • If You Like… Arcade Fire
  • 3 of a Kind–Mumford & Sons, Of Monsters and Men, The Lumineers
  • Alternative Radio
  • Alternative Rock
  • Alternative Singer/Songwriter
  • Electronic-Alternative
  • Indie Rock
  • Nu Gaze
  • Post-Punk Revival

Blues

  • Blues Radio
  • Contemporary Blues
  • Delta Blues
  • Electric Blues
  • Windy City Blues

Christian

  • Christian Radio
  • Christian Alt-Rock
  • Christian Hip-Hop
  • Christian Latin
  • Christian Metal
  • Christian Pop
  • Christian R&B
  • Praise & Worship
  • Southern Gospel

Classic Alternative

  • Classic Alternative Radio
  • 80’s Alternative
  • 90’s Alternative
  • Britpop
  • Classic Punk
  • Goth
  • Grunge
  • New Romantic
  • New Wave
  • Shoegaze

Classic Country

  • Classic Country Radio
  • 80’s & 90’s Country
  • Bakersfield Sound
  • Bluegrass
  • Countrypolitan
  • Cowboy Country
  • Honky Tonk
  • Outlaw Country
  • Traditional Folk
  • Western Swing

Classic R&B/Soul

  • Chill Out-R&B/Soul
  • Classic R&B/Soul Radio
  • ’80s R&B/Soul
  • Classic Jukebox R&B
  • Classic Motown
  • Doo Wop
  • Old School R&B/Soul
  • The Funk

Classic Rock

  • Retro FM-Rock
  • LA Rock Scene-60’s & 70’s
  • If You Like… Grateful Dead
  • Classic Rock Radio
  • Classic Arena Rock
  • Classic Hard Rock
  • Classic Jam Bands
  • Classic Prog Rock
  • Glam Rock
  • Hair Metal
  • Heartland Rock
  • Psychedelic Rock
  • Southern Rock

Classical

  • Ludwig van Beethoven Essentials
  • Johann Sebastian Bach Essentials
  • Wolfgang Amadeus Mozart Essentials
  • Chill Out-Classical
  • Classical Radio
  • Bach & The Baroque
  • Contemporary Classical
  • Lite Classical
  • Medieval & Renaissance
  • Mozart & More
  • Opera
  • The Romantics

Country Hits

  • iTunes Top 100-Country
  • DJ #iTunes-Country Hits
  • Country Hits Radio
  • Alternative Country
  • Americana
  • New Traditional
  • Progressive Bluegrass
  • Texas Country
  • Today’s Country

Dance

  • iTunes Top 100-Dance
  • Guest DJ-Diplo
  • Dance Discovery
  • 3 of a Kind-Calvin Harries, David Gue TODO
  • Dance Radio
  • Dance Hits
  • Disco
  • Dubstep
  • House
  • Trance

Decades

  • Retro FM-Rock
  • LA Rock Scene-’60s & ’70s
  • ’90s Dance Hits
  • ’80s Dance Party
  • Yacht Rock
  • Decades Radio
  • ’50s
  • ’60s
  • ’60s British Invasion
  • ’60s Garage & Surf Rock
  • ’70s
  • ’80s
  • ’90s
  • Disco
  • Doo Wop
  • New Millennium

Electronic

  • iTunes Top 100-Electronic
  • DJ @iTunes-Electronic
  • 3 of a Kind-James Blake, Ryhe,
  • Chill Out-Electronic
  • Electronic Radio
  • Ambient
  • Bass
  • Classic Electronic
  • Downtempo
  • Drum & Bass
  • Electronic-Alternative
  • Experimental Electronic
  • Techno

Gospel

  • Gospel Radio
  • Christian R&B
  • Gospel Choir
  • Gospel Groups
  • Today’s Gospel
  • Traditional Gospel

Hip-Hop

  • iTunes Top 100-Hip-Hop/Rap
  • DJ @iTunes-Hip-Hop
  • If You Like… Drake
  • Hip-Hop Radio
  • Dirty South
  • East Coast
  • Gangsta Rap
  • Hip-Hop & R&B
  • Old School Hip-Hop
  • West Coast

Hist of the ’80s

  • ’80s Dance Party
  • Hits of the ’80s Radio
  • ’80s Classic Goth
  • ’80s College Rock
  • ’80s Freestyle
  • ’80s Hair Metal
  • ’80s Hip-Hop/Rap
  • ’80s New Wave
  • ’80s Pop Hits
  • ’80s R&B/Soul
  • ’80s Rock

Indie Rock

  • If You Like… Arcade Fire
  • Indie Rock Radio
  • Dream Pop
  • Garage Rock Revival
  • Indie Pop
  • Indie Electronic
  • Indie Pop
  • Indie Singer/Songwriter

Jazz

  • Jazz Showcase
  • If You Like… Miles Davis
  • Chill Out-Jazz
  • Jazz Radio
  • Bop
  • Jazz Funk
  • Jazz Rock
  • Jazz Today
  • Jazz Vocals
  • Latin Jazz
  • Smooth Jazz

Kids & Family

  • Cool Kids Radio
  • Disney
  • Sesame Street
  • Kids & Family Radio
  • Kids TV Songs
  • Kindergarten Sing-Alongs
  • Tween Pop

Latin Hits

  • iTunes Top 100-Latin
  • Chill Out-Latin
  • Latin Hits Radio
  • Brazilian
  • Classic Latin Rock
  • Latin ALternative
  • Latin Jazz
  • Latin Pop
  • Latin Pop Gold
  • Latin Urban
  • Latin World Beat
  • Regional Mexicano
  • Salsa y Tropical

Metal

  • Metal Radio
  • Black Metal
  • Classic UK Metal
  • Death Metal
  • Doom Metal
  • Grindcore
  • Hardcore Metal
  • Progressive Metal
  • Thrash Metal

Modern Rock

  • Guest DJ-Jared Leto from Thirty Seconds to Mars
  • Modern Rock Radio
  • Garage Rock Revival
  • Hard Rock
  • Nu Metal
  • Post-Grunge
  • Rap-Rock

Pop Gold

  • DJ @iTunes-Pop Gold
  • Pop Gold Radio
  • ’00s Pop Hits
  • ’70s Pop Hits
  • ’80s Pop Hits
  • ’90s Pop Hits
  • Pop-Rock Gold
  • R&B Gold
  • Singer/Songwriter Gold

Pop Hits

  • iTunes Top 100-Pop
  • 3 of a Kind-Robin Thicke, Bruno Mars
  • Pop Hits Radio
  • Alternative Pop Hits
  • Boy Bands
  • Dance Pop
  • Girl Pop
  • Pop Idols
  • Pop-Rock Hits
  • Teen Crush
  • Teen Rock
  • Urban Pop Hits

R&B

  • iTunes Top 100-R&B/Soul
  • If You Like… Ciara
  • Chill Out-R&B/Soul
  • R&B Radio
  • Classic R&B/Soul
  • Grown-Up R&B
  • Hip-Hop & R&B
  • Old School R&B/Soul
  • Quite Storm
  • Slow Jams

Raggae

  • Chill Out-Dub
  • Reggae Radio
  • Classic Dancehall
  • Classic Ska
  • Dub
  • Modern Dancehall
  • Roots Reggae

Regional Mexicano

  • iTunes Top 100-Regional Mexicano
  • DJ @iTunes-Regional Mexicano
  • Regional Mexicano Radio
  • Banda
  • Duranguense
  • Grupera
  • Mexican Classics
  • Norteno
  • Ranchera y Mariachi
  • Tejano

Singer/Songwriter

  • Chill Out-Singer/Songwriter
  • Singer/Songwriter Radio
  • Alt-Folk
  • Alternative Singer/Songwriter
  • Americana
  • Folk Singer/Songwriter
  • Pop Singer/Songwriter

Smooth Jazz

  • Chill Out-Jazz
  • Smooth Jazz Radio
  • ’70s Soul Jazz
  • Grown-Up R&B
  • Jazz Funk
  • New Age
  • Pop Jazz
  • Quiet Storm

Smooth Pop

  • Smooth Pop Radio
  • Grown-Up R&B
  • Pop Singer/Songwriter
  • Pop Vocal
  • Pop-Rock Gold
  • Quiet Storm
  • Smooth ’00s Pop
  • Smooth ’70s Pop
  • Smooth ’80s Pop
  • Smooth ’90s Pop

World Hits

  • Spin the Globe
  • World Showcase
  • World Hits Radio
  • African
  • Bollywood
  • Brazilian
  • Celtic
  • Classic French Pop
  • Hawaiian
  • Indian Classical
  • J-Pop
  • K-Pop
  • New Age

Falsehoods Programmers Believe About Systems of Measurement

When starting UnitsKit I had many false assumptions about how irregular systems of measurement could be. Even after studying the subject and other existing libraries I was surprised by how many more irregularities I found. So inspired by Patrick McKenzie’s post about ‘Falsehoods Programmers Believe About Names’ I have set out to form a noncompelete list of irregulars when working with systems of measurement and converting between them.

  1. There is more than one variant of the metric system. (MKS vs CGS)
  2. All base SI units are prefix-less. (The kilogram is the base unit of mass)
  3. All derived metric units are derived of base SI units. (The liter is based off of decimeters)
  4. Heterogenous units are of no practical use. (Radar beam height formula uses a constant expressed in nautical miles per foot)
  5. Fractional dimensions are of no practical use. (Radar beam height formula uses a constant expressed in nautical miles per foot(1/2)) (http://www.boost.org/doc/libs/1_37_0/doc/html/boost_units/Units.html)
  6. Non-metric systems have base units as well.
  7. Just as liters has decimeters so that it doesn’t need a numerical proportionality constant, pints has BLANK. (I made up my own unit for this, a little more than 11 of them fit in a yard).
  8. A gallon is treated much like a liter in their respective systems of measure. (Liter is not an official SI unit but a gallon is an official Imperial unit).
  9. All base units are made of base dimensions. (The gallon ‘base’ unit made of the derived volume dimension)
  10. A gallon is a gallon is a gallon. (Did you mean a liquid or dry gallon, US or Imperial, or a ten-gallon hat?)
  11. Even written out unit names are case-sensitive (Calorie vs. calorie)
  12. Base units always reduce to the same derived units. (Did you mean a Joule or a Newton meter? You might know but then you have to keep track of plane and solid angle units.)
  13. Written out base units should always be presented in the same order (Are capital symbols, units with positive exponents, or length dimension units first?)
  14. There is no need to differentiate between absolute and relative measurements. (Kelvin and Fahrenheit)
  15. Derived unit symbols are represented the same way across systems of measure (mph vs km/h)
  16. All units accepted for use with the SI are base ten (the hour and minute are base 60,Sexagesimal , blame the moon)
  17. You will never have any namespace issues. (Is that h an hour or the Planck constant?

How to Create a Shared iAd Banner in a Tabbed Application With Storyboards

While looking at Apple’s iAd Suite sample code I noticed that the TabbedBanner example was the perfect use case for iOS 6’s new Container View Storyboard object. It allows a view controller to be placed inside another view controller which is exactly how we want our banner view controllers setup. No code. Actually it gets better, to get Apple’s example to work with container views we mostly remove code! Check out my example github project or follow below to see how.

To get started it’s easiest to start a new project based on Xcode’s Tabbed Application template while making sure that the Use Storyboards option is checked. Then download Apple’s iAd Suite sample code and copy the BannerViewController .h and .m files into your project (for extra fun you copy the TextViewController classes as well to show off the timer reacting to ads appearing).

Next open up the main storyboard and remove the relationship segue to the first and second view controller and move them to the right to make room for the container view controllers. Then drag out two view controllers and two container view and place each container view inside their respective view controllers. Open the Identity Inspector and select each new view controller and change the class to BannerViewController. The Banner View Controllers now need to be connected to the tab bar so ctrl drag from the Tab Bar Controller scene to each Banner View Controller and select a relationship segue.

Now we need to make sure that the container view is the root view of each Banner View Controller. Unless someone knows an easier way I’ve found it best to drag the container view above the default view in Interface Builder’s Document Outline. Finally we can connect each Banner View Controller’s container view to their repective first and second view controllers from the orignial template by ctrl dragging from each container view to each first or second view controller and selecting the embed segue. We are all done with storyboard though you can add a long text view to each first and second view controller so that you can test the banner view controller to make sure it doesn’t occlude it’s child view controller.

Open up BannerViewController.h and remove the old init method. We don’t need this anymore since we are creating the banner view controllers in the storyboard.

- (instancetype)initWithContentViewController:(UIViewController *)contentController;

Move on to BannerViewController.m and remove the implementation of the previous method. We are almost done but we still how to set the _contentController instance variable and add the banner view controller to the BannerViewManager’s shared instance since we are not overriding the init method anymore. Instead of implementing a custom init method we have to wait for the storyboard to setup the view controller and then let us finish the initilization by overriding initWithCoder: and adding the banner view controller to the BannerViewManager’s shared instance.

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [[BannerViewManager sharedInstance] addBannerViewController:self];
    }
    return self;
}

But what about the _contentController you may ask. At this point we haven’t loaded BannerViewController’s view and it’s subviews thus the container view isn’t loaded. Normally if we were creating this view controller programmatically we could create the view like in loadView but since it is created in the storyboard we can remove this method as well. After BannerViewController’s view is loaded it is still missing the contents of it’s container view so it invokes prepareForSegue: to retrieve the child view controllers from the storyboard. It is at this point we can set our _contentController to the segue’s destination view controller.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    _contentController = segue.destinationViewController;
}

And we’re done! Build and run to see that the banner view controller doesn’t occlude it’s child view controller when the ad pops up and the same ad is show across the view controllers. Now you can easily incorporate iAds into your Tabbed Application that uses Storyboards.

How to Pick an Apple Friendly TLD

Can’t find the .com or .net top-level domain (TLD) for your website? Thinking about a country code TLD for your site like .io or possibly a domain hack? Great, there are plenty of short url’s available for other TLD’s besides the traditional .com’s and .net’s. You can filter by price or how it looks with your particular URL but you should also consider data detectors.

Apple’s data detector NSDataDetector combs user text views such as notes and emails looking for anything from mailing addresses, to email addresses and even tracking numbers for packages. But most importantly for your website it looks for URL’s. Now normally it will pick just about any TLD as long as it is prepended with www. such as www.github.io. However it doesn’t pick up all non-prepended TLD’s. For example, if you email someone with the text github.io, it will not turn that nice shade of blue indicating that it is a tappable link. So which non-prepended TLD’s does it pick up? I asked stackoverflow but no one seemed interested so I ran the names myself with this text file from ICANN.

Uppercase:

example.COM
example.EDU
example.EU
example.GOV
example.LY
example.NET
example.ORG

Lowercase:

example.ar
example.at
example.au
example.be
example.br
example.ca
example.ch
example.cn
example.de
example.dk
example.edu
example.es
example.eu
example.fi
example.fr
example.gov
example.gr
example.hk
example.hu
example.il
example.is
example.it
example.jp
example.kr
example.lu
example.ly
example.ma
example.mx
example.net
example.nl
example.no
example.nz
example.org
example.pt
example.ru
example.se
example.sg
example.th
example.tn
example.tr
example.tw
example.ua
example.uk
example.us

Interestingly enough the data detector is case sensitive. So it looks like if you can’t find a traditional TLD you should try to go with .ly (the country code TLD for Libya) since NSDataDetector picks up both uppercase and lowercase URL’s. One more thing to consider is the TLD keyboard shortcut on iOS. A user can hold down the .com button to quickly fill in .net, .edu, .org, .us, or .com of course. Also remember that all this was tested on the US locale and ymmv on a different locale.