Android vs. iOS: Comparing the Development Process of the GQueues Mobile Apps
blog.gqueues.com
blog.gqueues.com
Doing the same with iOS development is painful. Apps for the simulator end up in arbitrarily named directories so you can at least inspect their sandbox and can be invoked via extremely long command lines. But forget about apps on the device itself. libimobiledevice has reverse engineered some of it, but for example there is no way to start or stop an app from the command line.
I was doing some FTUE[2] work on both Android and iOS with a third party app, and needed to stop it, clear the data and start it again. For Android I just had to press up arrow and return. For iOS I had to do multiple gestures on the device, then use an app named iFunBox (really) to manually clear out the sandbox, and then launch the app again via touch.
[1] http://developer.android.com/tools/help/adb.html
[2] First Time User Experience
The Xcode also only shows a subset of applications. My particular use case is that other developers have written apps using a library that I have authored. I then update the behaviour of the library for their needs based on interactions between the app and configuration for the library.
Every iOS developer has to go through that learning curve. It is part of the initiation process, unless you want to stick with straight SQLite. CoreData becomes a merit badge of honor. Every developer has their war stories about NSPersistentStoreCoordinator, PSCs on multiple threads, threading, performance, sorting, etc.
Quick note on performance in CoreData. If you need to cache objects that you use frequently, make your own in-memory cache. CoreData is not optimized for caching objects.
But really, CoreData, is something most people who move from iOS dearly miss. Not everyone wants fine grained SQL-level control over persisting data. There is no equivalent in Android. Nada. OrmLite and some other libraries have tried. Where most of the Android OR persistence libraries break down is either m:n relationships or performance or both.
However, times may be a'changing - maybe CoreData and some of its pain can be abstracted itself - if I were to advise a new iOS developer - assuming their requirements for persistence weren't too complicated - I'd tell them to go with Parse for managing backend persistence or http://helios.io from Matt Thompson (of AFNetworking).
I was building the iOS and Android versions side by side, so a solution that was similar in both platforms was important.
This is what we did, but then we ran into growing pains of stale objects etc... with SQLite and moved to CD. CD is so much nicer to use and it's something I miss when working on the Android version of our app.
I'm in the process of writing the same repetitive database code for an Android app at the moment and would love a (high quality, I've tried a few bad 3rd party libraries) Core Data equivalent to use.
For those who don't know Magical Record, here's basic a tutorial:
http://ablfx.com/blog/article/2
It's worth checking mogenerator as well:
https://github.com/rentzsch/mogenerator
http://raptureinvenice.com/getting-started-with-mogenerator/
I would prefer to just use the helpers and setup my MOCs and persistent store myself.
This post by Mattt Thompson (of course) on NSHipster has links to wrappers, adapters, synchronizers and utilities for working with CoreData: http://nshipster.com/core-data-libraries-and-utilities/
I highly recommend reading that before starting any CoreData project, and reading over that whole site in general to add new tools/concepts to the Objective-C and iOS Framework toolbelt.
>if I were to advise a new iOS developer - assuming their requirements for persistence weren't too complicated - I'd tell them to go with Parse for managing backend persistence or http://helios.io
As I start to get into mobile development I've been trying to figure out using backend services like Parse or Azure Mobile Services are feasible for about 99.9% of the apps out there over the long term.Skipping native storage in favor of a cloud provider ties you to a recurring cost (albeit probably small) and if your app fails to monetize, assume free with in app purchases, at the level required in which to sustain the costs of the overall cloud costs incurred by the apps' users then at some point down the road everybody may get cut off if the developer decides to stop paying for the cloud infrastructure.
This has made me feel like single purchase apps with a cloud based back end data piece are ultimately a ponzi scheme as the recurring costs for the early adopters are consuming the revenue from later purchasers.
Could there be a possible Parse-pocalypse in the not too distant future?
I'm still working on my first app so my concerns maybe totally off base, I'd love to hear from more experienced developers.
Might not be as fast as CoreData, but is sure a lot easier to code and it's fast enough that the user never even notices.
I must admit I haven't found it a big deal to use real devices. I also use Wifi ADB so I don't actually need to mess with cables.
Compared to those long intel instructions, switching simulators on iOS is trivial. I also found them mostly bug compatible with the devices - ie the same bug would appear on both. The Android emulators have historically diverged (I remember the 2.3 days when javascriptinterface on the webview would crash in the emulator but not the real device).
However, if you want to do something a little more interesting, particularly with any kind of interactive multimedia, then Android makes things harder or downright impossible.
> Neither Android or iOS support this "Flow Layout" natively
I don't know about Android, but iOS has just that : UICollectionViewFlowLayout. It would be trivial to implement a tag list as he did.
It's much better in Xcode 5.
Furthermore, you will be responsible for resizing the collection view and its sibling views or getting auto-layout working correctly to do part of this for you.
In the tag layout, it would be about as easy to just write line-wrapping code by hand, than to use a UICollectionView.
Possibly but the code you would be writing for UICollectionView would be mostly boiler plate. All the layout would be handled for you. Updating a few parameters would be quite easy and you could do it via IB or via code. Once you wrote this once it would also be quite portable.
No it won't. The tags are variable width, you have to implement something like sizeForItemAtIndexPath. You also must monitor the height of scrollable content region, so you have to monkey patch the collectionViewContent size (or KVO a non-public property), so you can resize the collection view and have the outer controller layout the subviews.
Collection Views don't really make sense when the collection view shouldn't scroll.
This is changing though - android studio (and soon ADT in eclipse, IIRC) are using a totally new build system based on Gradle, which is awesome.
The biggest issue and something that has gotten me into a state of white-hot rage has been Apples certificate/provisioning profile nonsense. I don't think I've ever gotten a profile to work from the get go, even just for development(a requirement thats positively ludicrous). That's why I generally develop/test on Android first.
Seriously, I've managed to require a whole week just because of some certificate snafu.
1. Is your certificate expired? Yes - renew it obviously.
2. Is your provisioning profile a wildcard (com.company.*) or specific to an identifier (com.company.id)? If it's specific to an id, and your app isn't using that id change it to use it or use the wildcard provisioning profile (really just do this anyways).
3. Does the provisioning profile list your Certificate under Teams? If not, make a new provisioning profile that is wildcard and lists the dev certificate under Teams.
4. Does your provisioning profile have the device you're trying to build to listed under it? If no move on.
4a. Is your device added to the Portal? Do this through Xcode's Organizer, there's a little plus button to add to the provisioning portal. If yes, move on.
4b. Edit the provisioning profile to also account for your device (use the checkboxes), download the new version of the profile and add it back to Xcode.
Voila! You should be free to build to your device.
Yes the Android emulator can be very slow but testing on a real device is very quick without the hassle of certificates.
[1] Windows and Blackberry as well
On a previous stable version I had to suffer a month without code completion (well broken code completion) and there were many complaints online about it, but no fix (at least none that worked for me). This did teach me to memorise more and type faster.
Also half-baked things like Storyboards & IB which you cannot really use for actual apps because you need code to add images, custom fonts etc to controls and the often buggy code generation for Coredata makes me think that this has no priority for Apple. It feels outsourced (as in, thrown over the fence with a vague spec) and more neglected with every new version, making me think it's some kind of arrogance; let developers do everything the hard way, they cannot do without us anyway. Every story and tutorial I read seems to back this up; working around the quirks in the toolchain instead of the tools helping you. I keep wanting to believe i'm doing it wrong, but I haven't met anyone yet with a better experience.
It's not like game dev is one of the most complex kind of development and requires game design as well as low-level graphics programming skills.
Depending on the game that you are making the developing is not necessarily complex nor require low-level graphics programming skills, especially now that you can find high quality open sourced game engines out there.
The bluetooth card game is actually a tutorial level kind of thing. Ray Wenderlich and Apple's own docs have a version of it.
You can't find documentation or do with easy most things without the IDE. and the IDE often assumes things that get you by surprise, such as saving the project files when you change something in a preference dialog, and not providing a Undo for that, and not telling you all the files modified by such action.
Although still IDE I think you will find it better than Eclipse.
1. download version 1.0
2. create hellow world
3. close it.
4. open, get notification for 1.1. install it.
5. IDE complain that my hellow world program is bogus.
6. i can't open or import it.
so, yeah, bad first impression.disclaimer, i have some rather complexes projects with android, none using Eclipse or IDE. vim and the android cli stuff. So, not a clueles beginer clicking away on the IDE, but maybe the oposite, maybe i tried to mess up with the details more than the IDE was confortable with
What did you install?
(only hobbyist android development here)
Now they just need to add NDK support and I'll be able to switch to it full-time :)
Mother of god. Simply using layout constraints instead of auto layout would have saved > 1000 lines of code I would estimate.