Archive for the ‘iPhone’ Category

Elena Gorman

HipChat for iOS 2.1 released

By Elena Gorman | 4 months ago | 7 Comments

It’s our first app exclusively designed for iOS 7

Over the summer we released an all-new version of our iOS and Mac apps. We felt good about the speed and grace with which our native apps supported group chat. But then we noticed that our shiny new app wasn’t behaving the way we expected on iOS 7.

Throughout the fall we’ve been iterating to support Apple’s new iOS 7 operating system. And with good reason. Our friends at Mixpanel cite 80% of iOS web traffic is on iOS 7.

We strive for parity across our native apps. So the change shouldn’t feel too drastic.

Stay Connected on the go with HipChat 2.1 for iOS 7HipChat for iOS 2.1 offers persistent group chat rooms

Download HipChat 2.1 for iOS7

Now, after lots of internal dog-fooding (we’re big iOS7 fans), we’re ready to share our first-ever dedicated iOS 7 app.

In addition to the basic visual fixes we made, you’ll notice:

  • Room topics now properly updated in real-time
  • Support for @here notifications
  • Persistence of message drafts across sessions
  • Automatically sets your status to “idle” when HipChat runs in the background

Note: 2.1 only supports iOS 7. If you are still running on iOS6 then (sadpanda) the app store will not give you the option to upgrade.

Elena Gorman

Share Dropbox files in HipChat on iOS

By Elena Gorman | 9 months ago | 3 Comments

Updated iOS v.2.0.1 available now

We’re excited to release version 2.0.1 of our iOS app to the App Store today. This update allows iPhone and iPad users to easily share files from their Dropbox account into the HipChat app.

Easily share Dropbox files in your HipChat app on iOS

A few of the bugs we squashed:

  • Fixed chat history loading issue
  • Fixed truncating of multi-line messages
  • Angel emoticon renders properly

Got Feedback?

We welcome any bug reports or feature requests via our Help Center. Vote on the features you want most. We really do listen.

Matt Hodges

News for Mac and iOS users. Big news.

By Matt Hodges | 10 months ago | 31 Comments

Earlier this year we made a commitment to build native desktop apps for Mac, Windows, and Linux. Secretly, we also wanted to build better native mobile apps. Today, we’re proud to announce HipChat for Mac 2.0 AND HipChat for iOS 2.0. They’re leaner, faster, and, most importantly – they’re native.

HipChat for Mac 2.0: Less AIR, more Mac

Our native Mac app has come a long way since its initial beta release. Thirty-six releases later and it’s ready for prime time. If you’ve been holding out for the 2.0 release, here’s what you’ll find in the new native app for Mac OS X:

  • Improved performance: Everything is faster – signing in, loading conversations, sending messages, scrolling, and even typing.
  • Horizontal Vertical tabs: Open chats are now stacked vertically in a new left-sidebar so you can keep more than 3x as many chats open at once.
  • Native OS X features: Chat in full-screen and stay up-to-date with Mountain Lion’s notification center. Did we mention support for Retina displays too?

HipChat for Mac

If you’re using HipChat on Mac OS X 10.7 (Lion) or above, there’s never been a better time to make the switch and start using our new native Mac app.

Download HipChat for Mac

But, what about video?

We’re heads down working on a better solution for video chat than what was available in the legacy AIR app. Hang tight, we’ll get there.

HipChat for iOS 2.0: Redesigned and reengineered

The HipChat experience on iOS just got a whole lot better. Like, a thousand times better. This is more than just a fresh coat of paint. We rebuilt the app for speed and consistency in user experience between our new desktop apps. Highlights include:

  • New look: See for yourself (smile)
  • Quick switching: A new left-sidebar (just like our desktop app) displays your open open rooms, making it faster to switch between chats.
  • File, link, and chat history: A new right-sidebar in rooms provides quick access to view members, browse shared files and links, and search chat history.
  • Swipe gestures: Just swipe left or right to access the left and right sidebars.
  • In-app notifications: Never miss a new chat or @mention while you’re chatting in another room.
  • Faster picture sharing: Sharing the last photo taken on your iPhone or iPad is just a tap away.

HipChat for iOS 2.0

If you are using HipChat on your iPhone or iPad and haven’t updated yet, go ahead and do it now. Do it.

Get HipChat for iOS

There’s more to come

We’re not slowing down. Our team has grown from four to 15 since joining Atlassian just over 12 months ago. And there’s even bigger news on the horizon… Stay tuned.

And thanks to all our beta testers! You’re awesome.

P.S. Our native Windows app is coming will be in public beta soon. Sign up for more information (if you haven’t already).

Chris Rivers

iOS App Update – Version 1.8

By Chris Rivers | 1 year ago | 4 Comments

We’re excited to release version 1.8 of our iOS app to the App Store. Our focus this round was on performance improvements (especially for larger groups). The previous app was painfully slow for any group that had more than a hundred users or so and we hope this update helps bring it more on par with the performance enjoyed by much smaller groups. Release notes below:

  • Improvement: Support for iPhone 5
  • Improvement: Greatly enhanced performance during app load and reconnection
  • Improvement: Notifications will be triggered as soon as the app is put in the background
  • Improvement: The lobby will now show the search bar by default (like the Contact app now does)
  • Improvement: Display active chats tab by default
  • Improvement: Active chats list will now mimic the order show in the desktop and web clients
  • Bug fix: Correctly focus chats when opening the app from a push notification

Download it and let us know what you think! Comments and suggestions are welcome as always – just head on over to our help site.

If you’re interested in learning more about the details of how we went about making performance gains, check out our blog post about it.

Chris Rivers

Performance Tuning iOS – Making Mobile Fast

By Chris Rivers | 1 year ago | 0 Comments

Disclaimer: The following post is intended for a somewhat technical audience. If you come across any unfamiliar words or phrases, please refer to your local software developer.

The problem

Our iOS app has suffered from pretty abysmal performance issues for any groups with more than a couple dozen users and rooms. Since joining Atlassian, we’ve experienced the issue first hand even more acutely (the Atlassian HipChat group has hundreds of users and rooms). We had to do something about it.

The analysis

Before any good performance update comes the part where you close your eyes and get the raw numbers about how slow your current app is. Some of our findings:

  1. Avoid blocking HTTP requests. Before we could even try to connect to our chat servers, we had to hit an HTTP API to get user and server information. This request alone would take ~1.5 seconds to complete on WiFi and a whopping 3s on average for a 3G connection.
  2. Minimize round trips to the server. XMPP has a well-defined spec for securing the chat connection. Unfortunately, it involves no less than 3 back-and-forths between the client and server. Add authentication and session setup onto that and you end up with a good 6 back and forths.
  3. Avoid updating the UI when getting lots of data. Apart from basic network latency, the other thing that makes the app slow is doing the actual work of reading XMPP and setting up all the stuff you actually see. This turned out to be costing a ton of resources since each time we received a user’s presence (the data that tells us whether they’re available/away/dnd, etc), we would update the Lobby (assuming you were viewing the Lobby, which was quite likely since that’s where the app opens to). Calculated out, it turned out that we were spending 12-15 seconds just handling everyone’s presence for a big group like Atlassian. Definitely unacceptable.
  4. Stringprep Y U SO SLOW. Most XMPP libraries use a process called “stringprep” when creating JID objects (JIDs are the unique user identifying strings used in XMPP). Stringprep ensures that your JIDs are valid and conform to the spec. Unfortunately, we found that stringprep was responsible for nearly 50% of our CPU usage on the phone (we create lots of JIDs). Fortunately, we run a closed system where we can validate JIDs beforehand. This became the easiest fix of all: remove stringprep :)
  5. iOS offers a sophisticated local storage for a reason. Before this update, we made minimal use of local storage on the phone. The problem was that we were just clearing it out completely when you reconnected. Not exactly the best use of the Core Data framework

The changes

  1. Previously on connection, something like this happened (times are for a 3G connection in San Francisco):
    1. PHONE: HTTP Request to get info about which chat server to connect to (~1-3 seconds)
    2. WEB SERVER: “Here’s the information you requested – use it to connect to SERVER”
    3. PHONE: “Hey SERVER, I’m gonna start a session” *(0.3 seconds)
    4. SERVER: “Ok – but first we gotta make sure nobody can snoop on our conversation. Let’s use something called TLS”
    5. PHONE: “Oh, ok, I know TLS! I officially request we secure using TLS” (0.3 seconds)
    6. SERVER: “You may proceed” … <at this point, the TLS handshake happens and all data sent and received is encrypted> (0.4 – 0.6 seconds)
    7. PHONE: “Phew – ok, let’s start that connection again” (0.3 seconds)
    8. SERVER: “Connection started, but first, you need to authenticate”
    9. PHONE: “Got it – here’s the username/password info my user provided” (0.3 seconds)
    10. SERVER: “Glorious success! Your credentials were correct.”
    11. PHONE: “Great, let’s really start a chat session now” (0.3 seconds)
    12. SERVER: “Sure thing – but wait, I need an identifier for this session so I can tell it apart from that connection you made from your desktop”
    13. PHONE: “Oh, ok – how about we call it the ‘iphone’ session?” (0.3 seconds)
    14. SERVER: “That is acceptable – here is your full identifying string…”
    15. PHONE: “Cool, now I officially am starting a session…” <after this we actually start getting chat data> Total time: 3.2s – 5.4s - just to start getting actual chat data from the server
  2. On a 3G connection, when each request to the server can take up to several hundred milliseconds, this is pretty terrible. So we set out to reduce the number of required requests as much as possible. This is what we came up with:
    1. <we already know the server to hit, no need to ask WEB SERVER anymore> <the SSL handshake happens as soon as we open the connection to SERVER> (0.4 seconds) PHONE:  ”Hey SERVER, let’s start a session” (0.3 seconds)
    2. SERVER: “Sure thing – connection has been opened. Please choose an auth method: <includes a special HipChat-only auth>”
    3. PHONE: “Here’s the authentication data, including the identifier for my session” (0.3 seconds)
    4. SERVER: “Excellent – authentication validated. Here is your full identifying string. You may now request data” Total time: 1 second
  3. Finally, the other major app slowdown happened when we received the flood of initial presences right after logging in. These triggered a cascading update of displayed data in the Lobby. And as anyone who has done UI performance tuning before, having lots of display drawing to do can cripple a user experience. Our solution: have the server let us know when the flood of presences is done, then update the UI. The result: 80% fewer cycles spent during the connection process.

For the future…

Unfortunately, when we began writing the iOS app, it was on the cusp of the release of iOS 4 (which plagued some devices with performance problems), so we were hesitant to use any of the brand-new features. We still have work to do to move our app over to ARC. We still don’t make nearly enough use of Grand Central Dispatch (mostly because we don’t use the most current version of XMPPFramework). We also have some server improvements to make that will let us further speed up the app for really big teams. XMPP offers a spec for roster versioning which could replace the full roster refreshes we do now. This is just a first step to making the app more usable for larger teams (and part of how we’re making sure that our Native OSX App is going to be lightning fast). The update is available on the App Store today. Download it and let us know what you think!