[This episode is sponsored by Hired.com. Every week on Hired, they run an auction where over a thousand tech companies in San Francisco, New York and L.A. bid on iOS developers, providing them with salary and equity upfront. The average iOS developer gets an average of 5-15 introductory offers and an average salary offer of $130,000/year. Users can either accept an offer and go right into interviewing with a company or deny them without any continuing obligations. It’s totally free for users, and when you're hired they also give you a $2,000 signing bonus as a thank you for using them. But if you use the iPhreaks link, you’ll get a $4,000 bonus instead. Finally, if you're not looking for a job but know someone who is, you can refer them on Hired and get a $1,337 bonus as thanks after the job. Go sign up at Hired.com/iphreaks]
CHUCK:
Hey everybody and welcome to episode 123 of the iPhreaks Show. This week on our panel we have Jaim Zuber.
JAIM:
Hello, from Minneapolis.
CHUCK:
Andrew Madsen.
ANDREW:
Hello, from Salt Lake City.
CHUCK:
I’m Charles Max Wood from Devchat.tv and this is week we are going to be –.
JAIM:
Where is Devchat TV?
CHUCK:
Devchat.tv? It’s in the middle of the ocean. It’s on the internet.
JAIM:
Okay. In the tube somewhere.
CHUCK:
Yeah. So this week I have a different idea. I’ve been looking at building in iOS app for a while for devchat.tv which is the podcast network that this show’s a part of. So if you go to iphreaksshow.com you’ll notice that it had a lot of definition about iPhreaks but at the top on the left, it says ‘Devchat.tv’ and if you click on Shows then there are a bunch more shows that we put on as part of the network.
So I’ve been thinking that it would be nice to build an application that would allow people to get the episodes other than just a podcaster, but beyond that provide ways for people to interact with the show, with the brand. I’d like to get feedback on the individual episodes; people can go in and maybe rate them and say ‘this one’s my favorite’ or maybe ‘these ones are five star episodes and these ones are four star episodes. And these couple that I didn’t really like are one or two star episodes’. That can aggregate feedback.
The other thing is that I’d like to provide some extras and I’m not sure what they would be. And I think an app would be a good avenue for either providing those or for making people aware of them. Then the other thing that I need is I have a video series on Ruby on Rails as a subscription video series. And so I would like to be able to provide that to people as part of the app so they can watch the videos, but I need some kind of method for checking that they have subscription.
So I only really played with iOS development; I haven’t actually published any apps on the iTunes app store, which would probably shock people who have been listening to this show for the past two and a half years. Or maybe not; maybe you know that I spend most of my time writing web applications. But I’d like to jump in and dig in. so I’m wondering how would you approach an application like this that provide some of these features?
ANDREW:
Hire one of us to do it? [Laughter]
JAIM:
If only I knew people who could develop iOS software.
CHUCK:
Yeah, it is really tempting. I am looking at this as a larger move in my programming career though.
ANDREW:
I was just teasing. I think the whole idea of iPhreaks is to talk about different iOS development topics, doing this whole app approach. I’m talking kind of through a whole app is an interesting idea and especially if it helps you.
I know you just describe what the app is going to do but let’s figure out where you want to start with version 1.0 because I think when you're developing an app, it’s really important to figure out what is really the bare minimum that is necessary for the app and what can be left until later because if you bite off more than you can chew, at first you end up getting bogged down and never finishing.
CHUCK:
Oh, absolutely. So the basic functionality is I basically want to provide the content including the subscription content, so I do need to be able to authenticate users against the web application.
ANDREW:
Okay, and how does the web application work now? How does authentication work now on the web?
CHUCK:
So currently, it just has a regular form field that you fill in the email address and the password and it submits through the website.
I could setup an OAuth point and I can also enable HTTP basic authentication and I don’t know if either of those are really great options for this particular application.
JAIM:
Yes, the main thing to do is to make things easy for the user because if it’s difficult, they're just not going to do it so you have different sign ups and things like that. If it’s complex, they're more likely to just be, “Well, I don’t really need this. I’m just going to go back to doing whatever [crosstalk].
CHUCK:
Yeah, absolutely. On the iOS app, I just want them to be able to enter their email and password and have it authenticate them. I can also build some kind of custom end point but I don’t know what the prevailing way to do this is from iOS to some web service that had authentication information in it.
ANDREW:
I think OAuth is quite common. I also think that especially, historically it’s been kind of a pain to actually implement and sometimes it’s had a pretty bad user flow but I’m not sure that that has to be true. I think that’s probably what most apps are using now.
CHUCK:
Yeah. The other concern that I have there is that by adding OAuth, I complicate the authentication on Devchat.tv itself.
ANDREW:
Oh right. Well, I have to admit that this is not an area of app development that I’ve had to deal with very much. The apps I work on are typically not heavily backed by an existing web service so I don’t – maybe Jaim does more than I do.
JAIM:
Yeah, there’s definitely different approaches. I would just say start simple; if you can do the basic authentication right now, wire it up and start doing things, see if people actually want to use this before we think through things. For a lot – they’re thinking with Facebook, their twitter – do you have a login like that?
CHUCK:
No, I haven’t. It’s all internal to the web application.
JAIM:
I’d say it’s on your call whether you can wire it up pretty efficiently or not.
CHUCK:
Yeah. Basic auth – HTTP basic auth is like five lines of code in Rails.
JAIM:
Right and five lines of code on iOS [inaudible], too.
CHUCK:
Yeah, it’s one line of code if you just turn it on and supply it with usernames and passwords to get it to use the database. It’s like five or six lines of code; it’s not that big a deal.
JAIM:
Yeah, as long as your info that you are projecting is not really that valuable –.
CHUCK:
Yeah.
JAIM:
You’re not going to be terribly [inaudible] in getting on to your data.
CHUCK:
And I can send it over HTTP and encrypt it anyway and do some smart things to make it so that it’s not sniffable, at least.
JAIM:
Use basic caution but don’t think and overdo it at the first step because as Andrew said earlier, it’s like – start simple and let people use it, see if they like it. If they don’t like it then you're wasting your time regardless and your wasting more time than you have to.
CHUCK:
Yeah, that makes sense.
ANDREW:
Regarding HTTP basic authentication, iOS actually has the newer – I’m not sure about the older one but the newer networking API and iOS which is NSURLsession has built in support for doing basic authenticaton so it’s a pretty simple thing to implement.
I don’t think that’s true of OAuth still; I think you end up using a third party library if you don’t want to do it all yourself.
CHUCK:
Yup.
ANDREW:
One thing that may be different in iOS versus Web is that third party libraries are – they're a thing on iOS but they're not as much off a thing as they are in Ruby or Node or something like that where you use third party libraries everywhere. I mean Node is a third party library itself, right? So is Rails but in iOS that is a little less common.
Personally, I try to shy away from them so that would be a vote in favor of HTTP basic authentication.
CHUCK:
Right, because it’s just built into the HTTP libraries provided by Apple.
ANDREW:
Yup.
CHUCK:
Now, the other question I have is I would eventually like this to run on iPhones and iPads; should I start out with just an iPhone app or should I do a universal app?
ANDREW:
Well, that’s up to you. Of course, the only thing that changes – that has to change is the UI because in iOS all the APIs are the same. Apple, especially in recent releases, Apple has included some good tools for making – even making your UI just scale on iPhone and iPad. Personally, it’s probably easier to start with the plan that your supporting both and just make that work from the beginning instead of going back and trying to add it later. You can certainly add it later but I don’t think it’s that much work to just make it work on both and it probably actually saves you hassle down the line.
The things you want to look at there are – definitely use [inaudible] complicated UI, you want to use auto-layout for your UI and there’s a new API that goes hand in hand with auto-layout called Size Classes that let you design your UI so that will work on different classes of device. That’s even more important than just iPad versus iPhone; Size Classes are also used, for example, for the new split-screen multi-tasking on iPad. So you definitely want to adopt those technologies either way and that they enable you to make an app that’s universal without a whole lot of extra hassle.
CHUCK:
That makes sense. How do I decide on a starting point? I know this is kind of a more fundamental question, but when you go in to create an iOS app, you have the master detail application, the page-based application, single view application which I don’t think is what I want, and a tab application.
ANDREW:
Maybe the most important thing to know as a beginner is that those are just templates. You could start with any one of those and get to any of the others just by editing the project. There’s nothing magic about any of them; they're just different starting points.
That said, I think with any app that you're developing, it’s kind of a valuable thing to wire a frame, sketch it out and figure out what you want the UI to look at and that can inform not only which of those templates you use but the overall structure of the app in which UI elements you are going to use and how the navigation flow is going to work.
It’s easier to know that in advance than to try to cobble it together and make the changes after you’ve gone down the wrong road.
I’m not sure that’s much different than any kind of software development web, iOS, whatever, but definitely doing wire frames and sketches is valuable.
CHUCK:
Yeah, if you have some kind of interface tool like you have in XCode. Do they still call it interface builder? I hear most people call it interface builder. But basically, the story boards, you drag and drop and you style things and rename things. Yeah, that makes a whole lot more sense to me because that’s pretty low cost stuff. I just make it look how I want to look and make sure it transitions the way I want it to transition when I click on stuff, and then I can work on the underlying programming later.
ANDREW:
Yeah, although keep in mind it’s always a little more complex than that but it sounds about right. I personally just like to use paper and sketch things out. I’m not really sure why, maybe it’s physical and I touch it and I can rearrange things with my hands but even before I start on the story board I’ll sketch something out or paper or use something like Balsamiq or other wireframe mock up tool.
CHUCK:
Yeah.
ANDREW:
But getting into a little more detail in your app, what screens do you think it needs to have?
CHUCK:
Well, so I want it to have a list of shows and then if you tap on the show then it should show a list of episodes.
ANDREW:
So you think maybe the fundamental UI where you just launch the app the first thing you see – assuming you’ve already logged in and everything like that but the first thing you see is a list of shows.
CHUCK:
Yeah.
ANDREW:
That’s the table view.
CHUCK:
Yup.
ANDREW:
In iOS. And if you click – if you tap on a row in the table and it shows you the detail or another table with a list of episodes, or an episode detail about that episode, that where you're pushing, where you're going further down in the hierarchy, that is usually done using UI navigation controller. That story boards have really nice support for setting up navigation controllers and the flow between different levels of hierarchy in them.
But knowing that in advance will definitely help you structure the application.
CHUCK:
Yeah. And then the other thing that I’m trying to figure out is I would like, for example, for people to be able to interact with the show in other ways so they can see the informational details like the description in the RSS feed and stuff for the show or be able to leave feedback on the show with something I eventually would like to be able manage all that.
Right now, it’s just show the content but as things go along there are other options that I would like to explore so I’m trying to figure out do I put buttons on the table view in each cell or when they tap it does it have those options along the top and then scrollable lists of episodes as you go down and when you tap an episode then it shows those options for the episodes along with the show notes?
JAIM:
Watch out – developer is going to start doing UI now.
CHUCK:
I know right?
JAIM:
It’s going to look bad.
ANDREW:
These are some of the questions that often a designer can answer better than a developer. Personally, I think having – just on this specific issue – having buttons on a table view row is kind of weird.
CHUCK:
Yeah, I haven’t seen it on other apps.
ANDREW:
There are a few apps I can think of that do something like that but usually the buttons are hidden until you long press on the row, like I think Twitter [crosstalk] does something like that.
JAIM:
Absolutely scarred. It’s probably not the right approach as Andrew said.
CHUCK:
Yeah.
JAIM:
Press the button on the table view, go to another view which might usually be a list of the episodes. As you get more functionality, if you change that view controller to something else that has more metadata and a list of that episode, something like that, that would be even – had to extend as you move forward.
CHUCK:
Yup.
ANDREW:
Do you know any designers that you can get involved? Because this is just, for me, it’s something I really try to recommend is that unless you are one of those very rare people that is truly a designer and a developer and I think that there are a lot more that started out as designers and became developers than the other way around, unless you're one of those people. Designers are usually going to [inaudible] and always going to do a better job than you.
Sometimes, not in the budget. You're not trying to make an app that’s really widely used or whatever but if you want users to receive your app well, probably more so on iOS than most other platforms. Design is just really important and that goes beyond the styling, the theming. It’s about how the application works.
CHUCK:
Yeah, I haven’t really thought much about that but definitely something worth looking into.
ANDREW:
I would say ‘well, just hire one of us’ but no, definitely don’t hire me for that. I’m not a designer and I’m lucky to get to work with some that are really good and our apps are way better for it.
CHUCK:
Yup. So how do you o about finding a designer? Maybe that’s a good question to ask.
ANDREW:
Well, I’m not sure that’s too different from finding a developer anybody else. You have to look into the places where designers hangout. One pretty standard popular place is Dribbble. People post on people so you can find people that specialize in iOS UI design. You can look at apps that you like and see who designed them and find people that way. I’ve done that before. I’m not sure there’s just one single answer.
CHUCK:
Yeah, I know that for certain applications I’ve talked to people and they actually – they recommend that you go on Dribbble and you find somebody that doesn’t have a ton of stars or hearts or whatever they get on there, but has done design work that looks like what you want or looks like the things that you're trying to build.
So since they can do the look that you want you can ask them to do the look that you want for your app.
ANDREW:
Yeah, I think the good thing is – I hope I don’t offend any designers out there – but the good thing is that usually the design part of an app doesn’t take as long as the development part and so hopefully designers can have more clients than the average developer. But that said, good designers are like good developers. You email them and say you want some work and they say ‘I’m booked for the next six months’.
CHUCK:
Yup.
JAIM:
So I’m not familiar with Dribbble. How does that work? Do you put on a bid for that? Is it just a listing of people and they have their rates up; they have by projects? Or can you choose all three of those things? How do you go about using Dribbble?
CHUCK:
So it’s a place for designers to show off their work. I usually don’t see them listing prices or anything but they’ll say ‘I designed this thing for this app’ so maybe ‘I design this app or I design this icon’. [Crosstalk]
JAIM:
It’s like this online portfolio? Something like that.
CHUCK:
Then there are ways to reach out to them through Dribbble.
JAIM:
Okay so it’s not like the fancy Odesk; it’s just a way to see who’s out there, what they’ve done.
ANDREW:
Right. The tagline is ‘Dribbble is show and tell for designers’. I think there’s a hire me link on somebody’s profile if they’ve said that they're available for contract work; they’ll have a hire me link. But it’s not really fundamentally a marketplace for designers to show and tell but it’s the most popular one so you can find a lot of people. And you can search by category as some people do print design, some people do web design, some people do iOS, some people do icon design and all kinds of specialties that you can narrow down to find people.
And it’s Dribbble, or those who are listening –.
CHUCK:
It has three b’s, yeah.
ANDREW:
Yeah, it’s three b’s. Dribble with three b’s in the middle.
CHUCK:
There’s some pretty awesome work on there. I’ve looked more in the web world than I have for iOS but –.
ANDREW:
So that’s actually an interesting thing. I don’t think this is universally true. I certainly wouldn’t want to make a blanket statement but I think that in general, somebody who’s only done web design coming over to iOS doesn’t necessarily work that well because web and iOS are really different platforms and I think it’s best if you can actually find somebody who’s actually done iOS UI design.
Of course, people start somewhere and web developers could certainly get good at iOS design but you probably don’t want to be somebody’s very first iOS project.
CHUCK:
Yeah, but it does occur to me that a well thought out design maybe with some stuff that I wouldn’t have thought of ion my own would definitely be good because there maybe ways to slide in or slide out, touch it in a specific way or interact with it in a specific way that makes it more than just a list of media.
ANDREW:
Yup. Okay, so what else is there in this app that you want to implement and don’t really know how?
CHUCK:
So one of the things – I want an audio player in there and I know that there are APIs that make that reasonably simple.
ANDREW:
So if you're just playing local audio it’s just simple. Like it’s like two lines of code; that’s the simplest to just load up a file and start playing it. Streaming gets a little possibly more difficult but if you can download a file first before you start playing it which is probably a valid option there – full on podcasts apps that do that and don’t support streaming. Anyways, you can do that. Playback is usually not a hugely difficult thing to implement at least nowadays; that was different five years ago.
CHUCK:
The other part of that though is when do I stream versus when do I download? Because obviously I don’t want to download all of the episodes of all of the shows because that would fill up somebody’s phone.
JAIM:
I would say you're probably not streaming a whole lot. You might want to sample something but if I
get my podcast app that I use, I download it because I’m leaving somewhere where I probably don’t have WiFi and I probably don’t want to put it on my cell bill. O you're probably creating some way to download the pp or maybe preview it by stream; stream a little bit but probably downloading it and get a list of what you’ve download and be able to play it.
ANDREW:
Yeah, same with me. I actually use Overcast, Marco Arment’s podcast app which is a really popular podcast app on iOS now.
CHUCK:
It is.
ANDREW:
And it does not support streaming but you have to download an episode. Of course there are smart features like when you finish listening to an episode, it will delete it and things like that so you don’t fill up the space on your device but I don’t think streaming is a vital feature even for a real form general purpose podcast app. And it certainly makes implementing the whole thing easier which I’m sure why he hasn’t done that. I think it’s coming – he said it’s coming in an upcoming release but he left it out for a reason. I think you probably should, too, at least in 1.0.
CHUCK:
Yeah. The other question I have then is can I start downloading and then after a few minutes start playing while it’s still downloading the rest of the episode?
ANDREW:
Well that is a very good question. I don’t really know the answer to that. Fundamentally, that’s really what streaming is right – download it a little bit, playing it while you continue to download more. So I would say that my guess is that that’s harder than it sound but I wouldn’t swear to it.
JAIM:
It’s possible. If it’s tipping on a format, I think it’s something you can do if you want to do it. It doesn’t take that long to download a podcast on a reasonable WiFi connection.
CHUCK:
Yup. Here’s another one that I’m thinking about and that is that I would like to be able to have people, for example, tap the episode and then tap some button that allows them to record feedback during or after the show. So is it tricky to really be able to get something recorded to the device and then from there put it into an audio format that I can upload somewhere else?
ANDREW:
No, I don’t think that’s difficult. Recording is just about as easy as playback and uploading files to web services, obviously quite doable and not particularly difficult. I mean you have some difficulty if files are really big because you have to deal with – as with any networking you got to be with uploads getting interrupted or the app going under the background, things like that. But it’s all very well studied and lots of people have done it and you can find lots of resources.
CHUCK:
So what you're telling me is that my only impediment to this is knowing what I want it to look like and then understanding the APIs that make it really simple to do this stuff.
ANDREW:
Yeah, but that’s true of all development. Right now, I’m just getting – I think that’s basically true. Of course it’s like any programming – you’ll get into it and there’ll be some paying up that you didn’t expect and you spend longer than you thought you would implementing something, but that’s the way it goes, right?
CHUCK:
Yup. Is there a standard RSS library for iOS?
ANDREW:
Not built in, I don’t think, but I’m sure there’s people out there doing that. Of course, RSS is pretty easy to parse yourself.
CHUCK:
Yes, that’s true.
JAIM:
I’m going to make a bold statement and say yes, there is something out there. [Crosstalk]
ANDREW:
I’m sure there’s something out there, but built in to the system I don’t think there is but I’m sure there are [crosstalk].
CHUCK:
Something like CocoaPods or something that I can drop in and make it simple.
ANDREW:
In fact, I just searched on CocoaPods in there. It’s a whole list of RSS this and that.
CHUCK:
Is this too ambitious for my first real intent iOS project?
ANDREW:
I don’t think so. I think it’s a pretty good – pretty standard [inaudible], like the UI is pretty normal for an iOS app. It’s got some pretty normal kinds of things in it so it shouldn’t be some overwhelming thing.
JAIM:
Yeah, even like the first task login and seeing a list of podcasts. Pretty doable and nothing that we talked about in this episode is beyond Stack Overflow. It’s pretty well covered, so if you Google a question, you’ll probably get three or four questions, it’s Stack Overfllow that give you the answer.
ANDREW:
ii think that table view with a list of things that have been fetched from a web service after logging in is quite possibly the most common paradigm for an iOS app out there. It’s like the cliché, right?
CHUCK:
Right, and the thing is is that if for – at least for content producers, that’s mostly what you're going to be providing people with is a list of the stuff that you made.
ANDREW:
Yup.
CHUCK:
If you're looking at other applications where you actually managing munching or otherwise modifying data that may or may not originate on the web, then your algorithms may get a little more involved but them you're moving away from content creation and more toward functionality.
Now, does iOS – I know that it provides some transitions that are animated? Is there a good list of those?
ANDREW:
Yeah, that’s actually a good question. There are animations that are provided by the system that are sort of the built in default ones. Generally, I want to stick with those but things like when you tap on a table item and it goes to a detail view and you see it slide from right to left, that’s just built in, you get it for free. There are things like you present a view and it slides up from the bottom.
There’s also support for programmatically doing your own transition animation that’s quite powerful. Sometimes – you see an app that’s really heavily customized and has lots of custom animation, it takes some work to do those custom animations but most of the stuff that you see really commonly is all just built in.
CHUCK:
One other thing that I’m wondering about is as I pull information from the API and put it on to the device, am I going to need something like Core Data to do that or are there simpler ways of doing it?
ANDREW:
Oh, this is the age old question. So if you need to store stuff locally that you’ve pulled down from the API instead of just fetching it at launch every single time, you probably don’t want to fetch it from launch. I mean, from one app launch – one thing that means your app won't work offline. Anyway, if you want to store it at this point there are a million options. Core Data is – that’s the Apple way.
There are ways to do that that are simpler than Core Data but they tend to not scale that well. Things like saving the data out to a PLIST file. That will get sow fairly fast and it has some other limitations.
Core Data though has a reputation as being pretty complex and lots of sharp edges, and not exactly beginner friendly. I tend to roll my eyes at some of that, maybe it’s just because I’ve been using it for so long but we’ve talked about some of these on the show.
CHUCK:
Yeah.
ANDREW:
Realm is another option, fmbs is an option if you just want to use SQlite database to store your stuff. Fmdb is just an Objective-C wrapper for SQlite basically. It makes using it pretty nice and pretty easy. If you already got SQL experience, that’s not a bad way to go.
It depends on the feature set you need for your persistence because Core Data does some sophisticated stuff that you don’t necessarily need like relationship management, automatic undo/redo, that kind of thing.
It may be that when you're really just basically storing a fairly simple set of tables, SQlite is the easier way to go particularly if you already got that experience in your background which I assume you do.
CHUCK:
Yeah. and then as far as synchronizing things, just make sure that it has the same identifier on multi-server and the device so that you can say, “Okay, this is the new version of this show or this episode,” so that anything has to be changed, corrected or whatever.
ANDREW:
Yeah, so you have to work that out no matter what you do for persistence, right? None of that is just done for you unless you're using one of the backend as a service kind of systems like Parse or –.
CHUCK:
That’s true, I guess those will do that for you when they –.
ANDREW:
But you already got an existing database, right?
CHUCK:
Yup.
JAIM:
So if a resource changes an existing system, how do you flag an update?
CHUCK:
Well, in the existing system on the web, you just refresh the page.
JAIM:
Okay, so just load it down, load everything from scratch. Okay.
CHUCK:
Yeah.
JAIM:
So you have to any pulling?
CHUCK:
No.
JAIM:
Maybe you could set a date updated.
CHUCK:
Yes, I can set all of that stuff.
JAIM:
[Inaudible] stuff so it’s up to you. This probably would be on Stack Overflow as far as getting good advice.
CHUCK:
Yeah, but I can set up the API end points so that it changes the last update or stuff like that and then I can make the back end service just smart enough to do that fast.
ANDREW:
Some of this gets tricky quickly though if you're doing some of the stuff that you talk about like allowing user comments and ratings and that kind of thing. Then you're going beyond just a canonical master list of content on the server and you're having to actually send stuff up from clients so that syncs that back down to other clients.
That’s all completely doable; obviously people do it but it may require some adjustment of your backend and the more sophisticated system on the client.
CHUCK:
That’s fair. Those are 2.0 features though.
ANDREW:
Yeah, good choice.
CHUCK:
The other feature I think might be fun as a social thing that I could build into the site itself is that people could take a picture of themselves. So it’s a selfie but it’s ‘where I’m listening now’ or something. So they can take a picture in the gym or on the trail, or if they're listening while walking down the street in some – in Paris or something, they can take a picture with the Eiffel Tower in the background or something.
I don’t want any toilet pictures. [Laughter]
JAIM:
That’s a separate topic, how to keep the toilet pictures out of there.
CHUCK:
That’s true, but I can have that sent down to a backend service and them have some approval and hope that people are nice.
JAIM:
At the beginning, everyone’s nice.
CHUCK:
But make that kind of a social thing, push it to Instagram, something like that. But I would also like to use this as a mechanism to provide more subscription content. And I think the authentication stuff is pretty much all I need there. And I’m not even that concerned with people stealing, so if somebody gets somebody’s email and password, that’s all the information that’s on there. There’s a stripe token that’s on there but unless you're getting into the system where you can actually see the public and private key, you can’t really do anything with that. And there’s not any other personally identifying information that I collect. Nobody’s privacy’s going to get violated and nobody’s credit card is going to be compromised by that.
Now if I need to modify the table view, let’s say on the show list I want to put an image from the show in the cell, I could just stick that in there with interface builder, right?
ANDREW:
Yeah, that’s true. And actually though the default table itself, like unconfigured table cells have an image in a text label. Those are the two things that you just automatically get free, an image over on the left and some text. But if you want to change the way that’s laid out or additional lines of text or more images or whatever, you can do that in interface builder. It’s all quite supported.
CHUCK:
Yup. So I guess the past part of this is, I’ve started a couple of tutorials but haven’t ever finished them so I have the Ray Wenderlich essentials –iOS essentials, I think it’s what it’s called. And then I’ve watched some others.
I’m kind of tempted to just take a class but I’m trying to decide if that’s worth it or if I can just watch them videos; I have a Lynda subscription that I could watch on – watch their course on. The books from Ray Wenderlich, like I said. Are there any sort of iOS tutorials that people tag as “the one” to do?
ANDREW:
Well, I certainly think Ray Wenderlich’s stuff is really popular. Personally, I would learn best from books and I learn these stuff before there were a million online courses and video tutorials and tutorials sites and camps and blah, blah, blah. I just learn from books and screwing around until I got things right but I think the Stanford courses on iTunes U are well regarded.
So Stanford University has an iOS programming class that they’ve done for quite a few years now and they put the content up on iTunes U and they’ve kept it updated every year. So I think all that’s up there now is all in Swift, and using the latest API. So that’s a good one.
I actually – I probably have never mentioned it on the show, but I actually teach once a week part time a boot camp here in Salt Lake called DevMountain for iOS development. It’s not a free thing by any means but it’s a 12-week intensive course.
CHUCK:
Yeah, I’m not up for it.
ANDREW:
That’s an option for people.
CHUCK:
Boot camp? [Chuckles]
ANDREW:
For you, probably not but that’s certainly a way people learn.
CHUCK:
Yah.
ANDREW:
I think the very most important thing when you're learning no matter what way you're learning – whether it’s books or tutorials or boot camps or class or whatever – is you have to have something you care about that you want to build and then dive in and build it. You learn the most by actually trying, making mistakes and having to figure out and struggle how to do something that you care about.
That’s my own feeling anyway.
CHUCK:
Yup.
JAIM:
I definitely recommend jumping in if that’s your learning style. For me it’s like I have this project – just something I want to do, I don’t spend a lot of time watching this online video for now. I do some of that but if I want to learn something I kind of get in there and just start tacking away, try and solve the problem and figure out what I don’t know right away.
CHUCK:
Yup.
JAIM:
As the experienced iOS people are, Objective-C, Mac type people, what is it missing? What [inaudible] is it not asking?
ANDREW:
Yeah, that’s a good question. He won't know until he actually gets into it but that’s actually a little bit hard to say because he – we talk in high level terms and there are all these specifics, the nittygritty on how to use these APIs and how Objective-C and Swift works and all that. That’s a little hard to just sit back and say, “Well, here’s everything you need to know,” right, because there’s too much of it.
JAIM:
But one thing I was thinking, how do you do networking? You go with the old stand-by, AFNetworking. Now apple’s got the newer one so you make a call with that and both are fine options. I tend to go with Apple. It’s not Apple’s version now, the NSURLSession.
ANDREW:
Yeah, I mentioned that a little at the beginning but NSURLSession is what I would use. I never used AFNetworking because I was already using the old APIs that pre-dated AFNetworking well a long time but either one would be a decent choice. I’m not sure AFNetworking provides a whole lot benefit for Chuck in this situation because some of the stuff that it still does that’s nice on top of NSURLSession is not really anything that he’s worried about; things like caching, images and all that stuff it can do.
JAIM:
Yeah, I think AFNetworking is mainly inertia because it was so much better than the Apple libraries for a long time – not a long time, a couple of years maybe, which is a long time. But I think that’s probably most people’s default approach but it gets changing a little bit now. So if you try something else it’s like, “Oh yeah, just using AFNetworking,” or I use the stock libraries if at all possible.
ANDREW:
That certainly brings up a point that we could have an entire show on which is third party libraries versus just using Apple’s libraries and writing stuff yourself and I sort of fall probably too far on the ‘don’t use third party libraries’ side.
Another thing that actually changed my mind is the thing that I forgot when I said that I have something is that you already have paid subscriptions and you probably know that Apple offers an in-app purchase subscription.
CHUCK:
Yeah, I don’t want to do that. I don’t want to give up 30% to Apple.
ANDREW:
Well, you give up 30% and the other thing is – but the thing to know is unless you use that, you cannot offer subscriptions in the app so they have to sign up on your website.
CHUCK:
I’m completely okay with that.
JAIM:
Yeah, there is a tight rope you have to walk where you can tell people that you have a website but you can’t say ‘Subscribe Here’. You have to log in.
ANDREW:
It works fine especially for services that are already well established that’s having a subscription.
People already know, of course that they can subscribe that’s why they're downloading your apps probably because they're a subscriber but you don’t quickly get rejected by Apple if you have a big ‘Subscribe Here’ button that just links to your website.
CHUCK:
Yeah, I know that the ‘subscribe here’ stuff is at least frowned upon if not completely off limits. But at the same time I can – if they get to an episode that’s a subscription only episode, and I hate the term ‘subscribe now’ because you can subscribe to a podcast and that’s free or you can subscribe to a server and you have to pay.
So if they're subscribed to the video series, or if they're not subscribed to the video series I can just say this requires a RailsClips subscription. And then if they reject it because I say ‘you can subscribe at this website’ then I’ll just take that off and hopefully people are smart enough to Google RailsClips.
ANDREW:
It’s pretty much what you have to do.
CHUCK:
I guess the other thing to consider there, too is I’m considering some possibilities with streaming and I’m trying to figure out the details on how to make HTTP live stream work because it doesn’t seem like you can just point it at the file on the internet and say ‘livestream that!’ or stream that or stream this.
JAIM:
Yeah, I don’t know the process exactly but you slice the files up some way and there’s a one standard format you could put the null on to the website. The system understands where to get it and how to upload it.
I’ve never done it so that’s about my extent of knowledge on that but definitely doable.
CHUCK:
Yeah.
ANDREW:
There are multiple ways to do streaming and even HTTP live streaming but I think HTTP live streaming is basically an Apple technology. I think – I’m not going to swear to this; somebody listening probably knows I’m wrong but I sort of think that AV Foundation has pretty easy built-in support for HTTP live streaming.
CHUCK:
Yeah, and it looks like just googling, there’s an NGINX module for it so you put your files behind NGINX and then setup HTTP live streaming or HSL on that. Any other gotchas that I’m going to run into with this?
JAIM:
Oh yeah, but we’re not going to tell you. That’s part of the fun, right?
ANDREW:
I actually just looked it up and AV Foundation does let you do streaming of HTTP live streaming based content and it’s pretty easy. You basically just give it your URL and then create an AV player just like you would if it was a local file and tell it to start playing.
CHUCK:
Cool. Well, shall we get to some picks?
JAIM:
Let’s pick!
ANDREW:
Sounds good.
CHUCK:
Alright Jaim, what are your picks?
JAIM:
Okay, I got one pick today. I setup a DVD on my Netflix cue – I still do DVDs which is kind of odd in this day and age. But I got a DVD that’s been on cue for a while and I finally watched it. And I enjoyed it quite a bit; pretty entertaining. Not too long but 90 minutes. It’s a documentary about the street arts. It’s done by Banksy or [inaudible] Banksy somehow but it’s the story of this person who just goes and starts filming various street artists in the early 2000’s and the [inaudible] was actually about the person doing the filming, which is kind of weird true events.
So the movie itself is Exit Through the Gift Shop. I enjoyed it. I wouldn’t read too much of the people involved in it which might account spoils and surprise a little bit because I don’t know that much about the street arts so I was host watching the movie not knowing that much about the people involved but very entertaining. Yeah, Exit Through the Gift Shop.
ANDREW:
Plus one; I really like that. That actually premiered at Sundance a few years ago and Banksy came to town for the premier and it’s an art around Salt Lake and Park City and some of it is gone now because it got removed by anti-graffiti. In fact I have interesting story about a friend in countering the people who are scrubbing his art off on the walls and trying to stop them. We have a job to do, we don’t care what this is even though it’s a hundred thousand dollars or something. But that was an interesting and surprising and entertaining movie. I liked it.
CHUCK:
Alright. Andrew, what are your picks?
ANDREW:
I just have one pick today and it’s kind of an abstract pick and it is just learning something new. I have felt the itch to learn something new for a while and I decided about a week ago that I wanted to figure out what Node.js is all about and of course you, Chuck, already know a fair amount about it but I have never looked at it before in my life, I dabbled with JavaScript now and then and kind of hated it.
So I played around and I was able to do some pretty cool stuff just in a few hours of learning and playing around and I’m pretty impressed. It makes me want to learn more and it just expanded my horizons and I think that happens anytime you try something new whether it’s a new technology or a new skill or a new hobby or something – there’s a lot of value there even beyond the thing itself.
So go out and learn something new.
CHUCK:
Yup. JavaScript is permeating everything, really.
ANDREW:
I’m still not impressed with the language; I think it’s kind of junky but [chuckles] the fact that there is such an ecosystem around it is pretty cool.
JAIM:
You know Andrew, no one’s a friend to the cockroach either. [Laughter]
ANDREW:
Yeah, right.
JAIM:
But it will be here longer than us.
CHUCK:
Alright, well I got a couple of picks here. The first one is, I don’t know if you guys have read the Michael Vey’s book by Richard Paul Evans. I’ve been enjoying them, they're not the most sophisticated books ever but they're entertaining and fun to read. And the fifth book just came out so I’m going to pick that because I’ve just – sometime I just need some downtime and I get out some fiction and then there we go.
The next pick that I have is just getting outside and moving. So it’s another one of those like go learn something, but at the same time I went golfing with my father in law on Monday; it was his birthday and it was a lot of fun.
I just felt so good after being outside for a few hours and then chase a little ball with a big stick. It was just nice so I’m going to pick that as well.
JAIM:
Vitamin D to think.
CHUCK:
Yeah.
JAIM:
It’s good for you.
CHUCK:
Alright, well I don’t think there’s anything else we need to talk about so we’ll go ahead and wrap up the show and we’ll catch you all next week.
[Hosting and bandwidth provided by the Blue Box Group. Check them out at BlueBox.net.]
[Bandwidth for this segment is provided by CacheFly, the world’s fastest CDN. Deliver your content fast with CacheFly. Visit cachefly.com to learn more]
[Would you like to join a conversation with the iPhreaks and their guests? Want to support the show? We have a forum that allows you to join the conversation and support the show at the same time. You can sign up at iphreaksshow.com/forum]