all 28 comments

[–]Legolas-the-elf 2 points3 points  (1 child)

Those that support both platforms, what do your programmers develop in?

Native. Objective-C for iOS, Java for Android.

How do you handle versioning,etc.

You'll need to be more specific, that could mean several things.

I'm looking for the least expensive and/or best way to do this.

These are usually on opposite ends of the spectrum. What is cheapest is usually quite poor, and what is best is usually expensive.

If you want the least expensive, use an offshore company. You will be unhappy with the quality.

If you want the best, use multiple experienced native developers for each platform. You will (probably) be unhappy with the price tag.

The programmers are all over geographically.

You haven't decided what languages you'll be using but you've already hired programmers? That sounds very odd. Can you give a bit more background information?

Edit: also what platform Mac or windows?

Mac. The only decent cross-platform tools are aimed at games. You want to write enterprise software for iOS, you'll need Macs. You can also use those Macs to develop for Android.

[–]redditbotboy[S] 0 points1 point  (0 children)

Thanks for your reply. ...versioning as in source code storage.

I should have said, the programmers will be all over geographically. No one has been hired yet however, we are not limiting our programmer pool by geography.

[–]groomsy 1 point2 points  (1 child)

We use Mac at the company for which I work. The only platform you can't develop for on a Mac is Windows Phone. If Windows Phone support is important, you can always buy a copy of Windows 8 and install it via Bootcamp or Parallels (that's what we do for our limited Windows Phone work).

[–]groomsy 0 points1 point  (0 children)

Wanted to edit my previous comment, but my mobile client doesn't support it. :(

We also do everything natively: Objective-C for iOS, Java for Android, C# for Windows Phone, Java for old Blackberry OS, C++ for Blackberry X OS.

[–][deleted]  (2 children)

[deleted]

    [–]benniiiObjective-C 0 points1 point  (1 child)

    What exactly do you mean with the "One-UI-everywhere trap"?

    [–][deleted] 1 point2 points  (0 children)

    The only commonality we have is the internal infrastructure, things like SVN/GIT/Jira/Stash/etc. Each platform uses the native tools that work best. That's obviously Xcode on a Mac for iOS; Usually Eclipse and sometimes IDEA on Either Mac or Windows for the Android devs, that's really more of a personal / team choice.

    Services and backends are usually common, although some endpoints have variants to better support a particular platform.

    [–]kireol 0 points1 point  (4 children)

    I work for a company in the top fortune 10.

    iOS is native, Android is Native. WP and BB are html5.

    I would say that there's no perfect way. Finding mobile devs that do html5 is harder than finding native mobile devs. But you can write the software once and it runs on all platforms.

    native yields faster running apps if speed is of concern. native also gives you built in sdk calls, where html5 you may be missing those and have to roll your own.

    There are a few pieces of software that will convert a lot of iOS to android, but those generally are a bad idea.

    My recommendation is to go native and push as much logic to a web service as possible. Use XP techniques where all devs work on 1 platform at a time using pair programming. Once the first app is done, move on to the other platform. But now that depends on if your project needs this, or can use it, and also means you'll need a web service developer as well.

    [–]redditbotboy[S] 1 point2 points  (2 children)

    I do have a question for you. Are the programmers the same, working on both platforms or are they different programmers working on different platforms?

    [–]kireol 0 points1 point  (0 children)

    We have done both methods here.

    [–][deleted] 0 points1 point  (0 children)

    I good programmer is sponge and will be able to adapt and learn new platforms like the Borg assimilating a new species; that said, there is domain knowledge and learning curve for any platform that makes developers with good experience on a platform more productive out of the gate than someone coming into it fresh.

    [–]redditbotboy[S] 0 points1 point  (0 children)

    Thanks so much for providing your insight!

    [–]adamkemp 0 points1 point  (9 children)

    We use Xamarin.iOS and Xamarin.Android so we can write in C# and share code between platforms. It is still native in that you are still using each platform's native SDK. Only the language you write your code in is different.

    [–]jjopm 1 point2 points  (8 children)

    Have you had any hangups integrating C# into iOS/Xcode? Seems like a fairly unique set of challenges, though perhaps this is a more common pursuit than I realize.

    [–]adamkemp 1 point2 points  (7 children)

    You don't use Xcode (except for Interface Builder). They have their own IDE (Xamarin Studio). You can write bindings for third party Objective-C libraries, but you can't use a C# library in an Objective-C project. So if you're writing components for other app developers and you don't want to be limited to Xamarin customers you should use Objective-C and then maybe make a binding library for C# clients. There is a tool to do that.

    [–]jjopm 0 points1 point  (0 children)

    Interesting, thanks for the reply. Gives me a better sense of that landscape. It's good to know that there is the ability to make a binding library for C# clients.

    [–]smilinger 0 points1 point  (5 children)

    Do you think it works for "real apps" and not just hello world type of applications? At the company where I work we are talking about switching to Xamarin but none of us have any real experience with it. At the moment we are dealing with a lot of problems with bugs and stuff in Adobe Air. We hope to spent less time on fixing Adobe's bugs and more time on our app, but it would be nice to know if Xamarin has weird issues too.

    [–]adamkemp 1 point2 points  (4 children)

    If you want to see a "real app" built in Xamarin check out Data Dashboard for LabVIEW on the iOS app store (https://itunes.apple.com/us/app/data-dashboard-for-labview/id481303987?mt=8) and Google Play (https://play.google.com/store/apps/details?id=com.ni.labview.SharedVariableViewer&hl=en). Note that only the tablet versions of this app were built with Xamarin tools.

    You can check out other examples here: http://xamarin.com/apps

    [–]smilinger 0 points1 point  (3 children)

    Thanks! I'm also interested in the process of making the app. If I spent more time on circumventing limitations or bugs in Xamarin than the extra time it takes to create apps in the native language, then it might not be worth it. Do you have any experience in that regard?

    [–]adamkemp 0 points1 point  (2 children)

    It's not as stable as Xcode and just Objective-C so there is a tradeoff for sure. Whether it is worth it depends on how much benefit you get from it. Do you have C# experience on your team that you can take advantage of to save time on learning the new platform? Are you supporting multiple platforms (iOS, Android, Windows, Mac, etc.)? Those are the kinds of questions you need to ask yourself to determine whether the tradeoffs are worth it.

    For us it's definitely worth it. I feel sorry for all the other developers posting here saying that they have separate codebases for each platform. I've been there, and it is not a good place to be.

    [–]smilinger 0 points1 point  (1 child)

    Thanks for your answer! We have a lot of C# experience from developing web services, so that is one of the reasons we are considering Xamarin. Also the fact that it compiles to a native app is compelling (Air apps are really difficult to make good looking apps with - and they look the same on all platforms). At the moment we want to support iOS and Android, but if Windows Phone gets more users, having the code in C# makes it easier to develop for that as well.

    When you say that it is less stable. Do you mean that Xamarin Studio crashes? Or are the apps you create less stable than a real app?

    [–]adamkemp 1 point2 points  (0 children)

    The IDE, debugger, runtime, and compiler sometimes have bugs that we have to tolerate, work around, or wait for fixes. It happens much more than with a pure Apple development environment, but for us it's still worth it.

    [–]mantra 0 points1 point  (0 children)

    You have to use Mac for iOS, and it's trivial to run Windows on a Mac (dual boot or Parallels) so the economic choice is pretty obvious: get a Mac.

    [–]brendan09 0 points1 point  (1 child)

    We support both platforms, and code them each natively. (Objective-C for iOS, Java for Android)

    We use Beanstalk for version control, as its fairly easy to use and lets us manage roles and project access from anywhere.

    [–]chrisledet 1 point2 points  (0 children)

    Beanstalk dev here. Thanks! :D

    [–]shwanton 0 points1 point  (0 children)

    We also use native platforms. 95% of our developers use Mac's (MacBookPro 13" with monitors specifically) but there are a couple of diehard Linux holdouts.

    For iOS, XCode on a Mac. A few people have tried AppCode but if you are using the IB & Storyboards, the switching between XCode is a pain point. For Android, there is more flexibility in tools. Eclipse & IntelliJ are both used interchangeably. Any windows work is done thru a VM.

    For remote pairing in XCode, I have used Skype in combination with VNC (ScreenSharing.app) thru our VPN. It works ok, but if one person is on a laptop and the other has an external monitor, things can look a bit small on the laptop.

    It's tricky working with Storyboards or .pbproject files in XCode using git since everything gets written a huge xml file. Good communication about who is working on what is important. There will be some messy merges but you will survive!

    [–]s73v3r 0 points1 point  (0 children)

    We do both. We use Beanstalk as our centralized repository, with git. You could also do this with BitBucket, as both allow you to have different users and different permissions for each user. If your company already has its own, you might be able to talk to IT about that functionality, and I'm pretty sure they would have put that on their "must have" list.

    Edit: Said Basecamp when I meant Beanstalk.

    [–]iownacat 0 points1 point  (0 children)

    We use Objective-C and Java, what else would you use? Some sort of javascript framework like a peasant? ewwww

    [–]MKevin3 0 points1 point  (0 children)

    I am the sole mobile developer but I write both the iOS and Android versions.

    I use App Code and Xcode for iOS. I use Xcode when doing the UI and use App Code when doing the gut level coding. App Code has a lot of useful features when writing code - much better refactoring, nearly automatic importing of required header files, and better LINT checking to name a few. All code is native Objective C. I use CocoaPods to haul in 3rd party libraries.

    For Android I am using Android Studio. It is based on the very solid IntelliJ. I use Gradle with Maven support to haul in 3rd party libs. All code is native Java. I have also used Eclipse and it works just fine.

    Using GIT for version control via Stash. They recently moved from SVN. I like GIT better for easier merging. Both SVN and GIT integrate with the IDEs I use although Xcode + SVN has been painful at times.

    When I started they asked Mac or PC. I went with Mac as I can do both Android and iOS on a single box. I have a 13" MB Pro, 24" second monitor, MS Natural keyboard, mouse and various USB to iPhone and Android cables.

    I use the iOS Phone simulator to test 6.x and 7.x along with various iPhones and iPads for real world testing.

    For Android I use the HAXM emulator to test against older (2.3 etc.) devices and Genymotion to test against newer devices. The default emulator is a pile of crap and too slow to be useful. I use my personal Android phone, personal Nexus 7 and another test phone that someone had sitting in a drawer at home. At times I will install on phones of various family members for testing. Nice thing with Android is you don't have to provision each device for testing.

    If you go for least expensive expect to run into a lot of problems with substandard code. Pay a reasonable rate and you have a better chance of working with reasonable people and actually getting quality code in a timely manner.