I've been following Ray Wenderlich (www.raywenderlich.com) and Steven Lipton (in the iOS-Developers group in LinkedIn) for some time, and recently went through some tutorials by both of them for WatchKit, Apple's addition to XCode that allows creating Apple Watch apps (no, it's not an iWatch) that piggy back off of your main app.
I tried adding WatchKit to my Dose of Humor app, but because I originally made the app before WatchKit was available, XCode doesn't like it at all, and is fraught with errors.
So, what I think I'll have to do is create a new project and include WatchKit in it, and then either copy/paste my code over from my original project in Objective-C, or rewrite it in Swift.
The last couple of tutorials I went through with WatchKit used Swift, and I think I could definitely get used to that. It's more user-friendly in terms of language and syntax, which is good for me. Anything that helps me get my concepts and ideas transposed to an app is a good thing.
I think for the Watch app I'll go for super simple. Instead of having to get the joke of the day directly on the phone, I'll enable that to be done with the app. At least that's the plan. Without having done it yet I have no idea what parts are even possible. Ideally I would want the Watch app to force the phone to download todays joke, and then play it over the watch. With some simple animation maybe that mimics what is on the phone.
That's my mission today. Get started with a new project and get it functional for what the app has/does now, then maybe take a look at WatchKit and see what magic I can make happen there.
I’d been having trouble populating a UITableView with the entire contents parse data in my iOS application. Come to find out that when using Parse and referencing the objectId field, that you need to use dot notation and not by referencing the field like the other ones.
So, use this: parseData.objectId
Instead of: parseData[@”objectId”]
Who’d have thunk it.
Same when adding to the local data store. I download the records from Parse and iterate through them to search the local data store. If found it should do nothing, if not found add it to the db. Because of the dot notation on the objectId field it would never find it because it search on <nil>. So the same records got added over and over again. All the other fields get added using the parseData[@”dataField”] type of reference, which threw me.
Finally, once I figured out to use parseData.objectId instead, it added it correct and found it the next time I launched it so there is only a single entry for it in the local db.
(it was at this point I laid my finger between my lips and made googly noises)
Now just have to format the cells in the table view, make the appropriate actions once the cell is tapped, and I am all done.
It is still a little slow at launch as it searches all the files and tables to add locally. I’ll have revisit that, maybe only pull down the file name or some other reference to make it speedier. It’s not horribly slow, but I would like it to be faster.
After being painfully sick for almost a week, I was finally able to get back into the rewrite of my wife’s app.
I had previously changed it so it would pull down images and other files from a cloud database at Parse.com. Yesterday I was able to take those files and add them to a local datastore. This happens when the app is first launched. The files are iterated through and anything not found in the local datastore is added, so as we add photos later, these will be automatically downloaded.
I was also able to change the two UICollectionView pages to read from the local datastore instead of downloading the images every time the app is loaded. This makes for a much faster and smoother experience when scrolling through the photo collections on the two tabs that have photos.
Next steps: Do the same for the show list that connects to a UITableView to show upcoming shows that my wife will be at, or events of note where she will be.
I spent some more time revisiting the Susan’s Charming Trinkets app.
Previously I was able to read from the cloud database. This weekend I was able to take that data that I received, and add it to a local data store. Furthermore, I am able to read from that datastore.
Next steps: Read from the local datastore and use the image data from there to populate the UICollectionView..
I previously had used a “Lazy” loader, but with this new approach I should be able to use standard code to populate the collection view.
I’ll try both ways and see which I like better. The disadvantage I saw to using the Lazy Loader that I had implemented was that it would do a small reload (with spinning wheel) going both forward and backward through the collection.
I realize I've been completely slacking with the development of my upcoming app. A large reason is I was just not pleased with how it was functioning.
What is WAS set up to do was connect to a cloud database, download an audio file, and play that audio file for the user. I was finding that it was too slow to obtain the sound file, too slow to download it, creating sometimes 30 second waits for the customer before the audio played (depending on WiFi or cell reception). I found this to be unacceptable. This was causing me to ignore the problem, and not continue working on this project. Then I had that AHA moment where it all became clear on what I should do.
So NOW this is how it is set up:
- I created a local Core Data store to house the sound files.
- Whenever the app is initially launched, the app does connect to the cloud database, at which time it searches the local database for the audio name. If it finds it, the file has already been downloaded and nothing happens. If it does not find it, then the file is downloaded, added to the local database and then played.
- Subsequent button pushes will play a random sound file from the local database
The search is really fast as all it downloads initially is some text and does the search for the name. Now that I've got the functionality going the way I want it to I will focus on the aesthetics of the forms. Making them look all pretty and such.
Now I have to figure out how to create and populate the local version of the database with the sound files that I want to be included upon initial download.
I’m rewriting my first app that I wrote for my wife. The app is Susan’s Charming Trinkets.
I originally wrote this app using PList files as a poor man’s database. These PList files held the location and image names to download to the app for use in the Collection View and show list.
I am reconstructing the app to utilize the Parse database to do this as I feel it both more secure than a PList on a web site, but also gives me a chance to learn more about connecting to a cloud database.
What will happen is the app will connect to the Parse database and compare what is there to what is in a local version contained within the app. It will then download anything not found locally and from this local database will be populating the collection view and show listings.
I’m pretty excited about doing this change. I am also trying to utilize best practices and compartmentalizing the different functions so I can re-use the functionality in other apps I have in mind.
Now that I’ve got it successfully reading from the cloud database in its own class, I need to take what I pull and compare it to what is in the local db, and then add them if they are not found.
Good times.. good times.
I went rounds with how I wanted the face for my Dose of Humor app to look like and finally settled on “less is more”. He’s very similar to my first face, but is just a bit better looking.
Apple has approved my new app “A Dose of Humor” and it is now available on the app store for 99 cents. I chose a paid app as I personally don’t like all the ads that pop up in many of the free apps. It detracts from the fun you are supposed to get from the app itself.
They app comes pre-loaded with 35 jokes, and for every day that you launch or activate the app a new joke will be downloaded from a cloud database. I currently have 94 jokes in the cloud db, and am uploading new jokes all the time to add to them.
Plus, I will be taking submissions submitted to Facebook or Twitter to add to the joke pile, so anyone can submit to have their joke told. If a recorded joke is submitted and is deemed appropriate (this is a family friendly app), and the audio quality is decent, I’ll add the joke told by you to the pile as well.
Should be lots of fun! Link below to view in iTunes.
I’ve been looking at the face that I had put into A Dose of Humor, and wasn’t particularly keen on it. I like it as the app icon, but as the in-app face it was a little lacking. I’ve created a new one. I was able to layer the views to put the eyeballs behind the sockets for a more realistic look. I am currently working on making the eyebrows go up and down, and give a Spock-like look as well.
I’ve been working on an iPhone app for over a year. This app will tell you a new joke every day that you launch the app. Bundled with the app will be maybe 50 or 75 or 100 jokes already in the database. I haven’t decided how many to include initially.
What will happen is once you launch the app, or pull it from the background, it will query a database and if you have not downloaded a joke today, and there are newer jokes available for you, one will be downloaded and played for you.
I’m writing this app in such a way so that I can change up the theme with minimal programming changes. I plan on releasing one that will tell you a quote from the bible, or maybe an affirmation. I thought I would start with something silly, like telling jokes. All the jokes are intended for all audiences, all ages so will be fun for everyone. Some of them will be very cheesy, but hey, some of those are the best ones.
The main programming has been completed, now it is just a matter of sitting down and recording a few hundred jokes, so the app will be self sustaining for a year or so.
I’ve gone with a paid version, as opposed to a version that has advertisements. Or, maybe I should do a Freemium version. Free that might contain the intro of 50 jokes, but in order to download the daily dose of humor you’ll need to update to the .99 cent version.