iCalvin.org

Experiences And Thoughts On React Native

react native at airbnb

I don't have much experience with cross-platform tools in general, but in 2016 I took a job with a React Native shop. I had never worked with React or React Native before, but I had dipped my toe into ReactiveCocoa and was starting to wrap my mind around the reactive coding paradigm. The company explained to me that React Native is a cross platform layer that relies on a solid bridging code, explained to me like an API between the iOS SDK and their RN codebase. They needed someone to own the iOS layer, and I was enjoying API design at the time and looking for a change, I said yes.

The team had no iOS experience, outside of what the very talented JS engineers had pieced together enough to ship an iOS app, and the native bridging layer was suffering for it. Startup times were very slow, memory usage was excessive, transitions and animations were very janky, and much of the code that was living in the React Native layer was better suited for the native layer but the engineers had played to their strengths and written it in JS instead. I was excited. I had a lot of work to do and could make a big impact. I started outlining the work that would need to be done, teaching the mobile team about the unique aspects of the iOS SDK.

After a month I started learning, with the help of a great mentor who was very active in the React Native community, the front end layer, to support my work on the Native layer. I rebuilt an app of mine in React Native. It took about a week to get a quick and dirty UI/UX implementation. Animations weren't quite as smooth, and it was pretty awful doing my layouts in JSX, but I got past the learning curve and felt ready to really dive in on the iOS side. But our team got excited about having three engineers who knew RN, and started moving fast on the UI layer. Pretty soon all my work was in React Native.

I was building new screens, new components, new transitions. I wouldn't touch Objective-C or Swift, outside of a small bug fix here or there, for weeks. I spoke to the mobile lead about my list of work that would need to be done on the iOS side to get our app rolling smoothly. I was told we'd get to it when we have more engineers to handle the RN work, probably in a year or two. For a time they switched me from working on a 80% RN app to a 95% RN app. I brought up my desire to return to the iOS side once more, and outlined exactly what changes I was proposing, what priority order it would take, what the impact would be on the Android 'team' of one, and how it would benefit our app and create a solid foundation to grow on. I was again told, a week later once the lead had actually read my proposal, that we'd likely get around to it in a couple years. I quit after 9 months.

Reading Gabriel of the Airbnb team's Medium posts brought a lot of this back to me, and it was very validating to see a large team that had bet big on React Native and certainly included many, many engineers who are much smarter than I am, come to the same conclusions I had soon after starting work in RN. Plenty of people find a way to work in React Native efficiently and effectively, so why was it so hard for me?

For one, it seems like the period where I was deepest in RN, mid 2017, was a particularly rough time for the toolset. I remember spending far too much time and energy trying to get the upgrade to take, bouncing back and forth between npm versions, react-native versions, various versions of our large set of dependencies, just trying to get things to build so I could get back to struggling with whatever component view I was working on at the time.

Then there were the dependencies. I was in the foundational stages of my "All third party code is evil" mentality and every problem in a JS based toolset is solved with a dozen dependencies, each of which have a dozen dependencies on their own, and it's turtles all the way down. That just seems to be a function of the JS community and a lot of the reason why JavaScript libraries make the web so slow and awful to use today.

Xcode has its problems, but when I need to work on an iOS app it's the only app I need open. When I started React Native work I was, for the first time since college, writing my code in a text editor. I know thousands of developers do this and have convinced themselves that this is fine. They're wrong, and my time working on server side Swift, where you can build and run a server stack right from the editor complete with breakpoints, a debug area, and a console, all in the same window of the same app, has convinced me of that. With React Native I was working with Sublime and the Chrome Debugging Tools (I use Firefox as my secondary browser, I will go to any lengths not to have Chrome installed on my Mac). Eventually I discovered other debugger tools I could connect to, that only occasionally required fiddling with preferences and overrides to make work correctly. Eventually I was able to move to fiddling with my preferences to work in VSCode instead of Sublime, and gasp it included breakpoints that worked most of the time. What an amazing development in the toolset, that only required that I move my development environment into what was essentially a web browser. I still wasn't pleased.

Then, in the midst of this professional angst, came WWDC '17, an undeniably exciting time in any Apple Platform Developer's year. As with every year, I was quick to install betas, get the new Xcode, and start plugging away with the new SDKs and fixing any low hanging fruit that needs to be taken care of in my apps. Except now I wasn't limited only by the reliability of the betas, but also that fact that React Native itself needed to be patched so it could even build function correctly against the iOS 11 SDKs. Talking to my team to figure out how long this would take only got me confused looks. "Whenever it's ready," with no worry about the distinct possibility that Facebook's bottleneck wouldn't leave us enough time to actually properly support iOS 11 by the time it came out. So instead of actually getting to work on iOS 11 support I was identifying and reporting bugs in the RN layer. This is when I started working on personal apps on work time, justifying it to myself that otherwise I would fall behind on iOS.

The final straw for me was the dismissive attitude with which most people in the team treated my various concerns about us leaning too hard on React Native, one of only two issues with the job I blame on the people rather than the toolset. I was constantly told that React Native was a better way to work with designers (it wasn't, designers had to use unintuitive JSX), that it was a faster way to iterate (we spent more time tweaking with tools than we saved in build times), that web-style deploys made for faster releases (they bypassed useful security and reliability checks, and left users with unexpected 'updates' when they just wanted to check the app, not to mention we were constantly worried that Apple would rightfully decide to no longer allow it), and finally that focusing my professional development solely on Apple Platforms was a professional liability. A common metaphor was that a Formula 1 racing team wanted a driver who could drive a Toyota Camry just as well as a F1 car. That I would be a better developer if I stopped caring about the iOS best practices I was pushing and instead went all-in on cross platform Javascript tools and whatever the community decides is the hot shit this month. Now that UIKit is coming to macOS and I'm planning ways I can port my personal and work iOS apps onto this new platform, which will have none of the JS baggage that comes with web development, and as I watch many web based companies, including my previous (and current) employers struggle with GDPR compliance because their toolset encouraged them to throw ideas like user privacy to the wind in favor of invasive JS monitoring for abstract 'benefits' that often have nothing to do with the core business of the company, I couldn't be happier that I ignored this advice and removed myself from that situation.

I'm grateful for the experiences I had on this team. It really was a group of amazingly smart people working on interesting problems, who I got along with well and loved spending my days at work with. Also, it gave me the insights I have now to be informed while I watch the React-Native community develop (and dwindle). I firmly believe that there are teams for whom React Native was a great solution. These were teams who, between the years of 2016 and 2018, were made up of web developers who loved JavaScript and open source communities, who had small mobile engineering departments with little to no iOS or Android experience, who wanted to focus on cost-efficiency, needed to move very quickly to release an iOS and Android app, and were fine sacrificing the native experience to come to these solutions. For those who found themselves in this situation, I completely understand the appeal of React Native. If any of those things are not true of you or your team, I would encourage you to focus on native development. It's just better and more rewarding in the long term.

But now here we are, where one of the highest profile users and contributors to the React Native project outside of the creators, are leaving it behind. This is a serious blow to the future of the platform. No doubt many engineers will continue to use React Native, to build great components and open source tools that the entire community will adopt and contribute to, but the effects of Airbnb's abandonment will be felt for a long time. I believe this puts an expiration date on the lifetime of the toolset, and that two years from now React Native will be borderline unusable, especially if as it seems they perform a major re-architecting of the platform.

Finally, if you are a team looking for React-Native engineers, please, for the love of all that is decent in engineering principals, don't put out a requisition for iOS native engineers who are looking to make great iOS apps. There are plenty of web developers who would love to do this work and won't find themselves terribly depressed coming into the office everyday.

#ios #reactNative #employers

Auto-play Opt-in-required Messenger Ads

facebook messenger autoplay ads

So it sounds like they’re not learning their lesson, huh? This is why iMessage is such an important resource of Apple’s.

#facebook

Airbnb Is Breaking Up With React Native

react native at airbnb

I’ll have much more to say about this tomorrow, but good for the AirBnB team for trying it out, and shame it took them two years and a lot of sunk cost to get to this (obvious imo) conclusion.

#reactNative #native #iOS #android

WWDC In Review

Well here we are, I’m back home and getting rested and settled after a full week of WWDC activities. This was my second time out, first time in San Jose, and all in all it was a blast. Say what you will about Apple, but they sure know how to put on a great conference (although as usual the food was never quite appealing enough that I didn’t want to go out and grab a super burrito.)

One of the biggest highlights was actually the Birds! My friends and I were staying at an amazing AirBnB in Japantown a couple of miles away from the convention center. I was planning on just walking the distance, but once I realized just how prevalent these amazingly fun scooters were I just leaned into taking those back and forth. The trip usually took no more than fifteen minutes, and cost about $2, much cheaper than taking Lyfts back and forth and much faster than walking (especially since I got to the conference a few times and realized that my badge was back at the apartment.)

Another highlight of this year was that I decided after Tuesday that I didn’t really love waiting in big lines and sitting in crowds to watch the sessions that I could easily watch from my phone anywhere in the conference center, or even back at the apartment on the couch. Don't get me wrong, it was great to be able to sit right there and share my excitement with the Engineers on stage by being a part of the applause (I was particularly excited when they announced in What's New In watchOS that workout apps would auto-resume after a crash,) but I found the solution to my "I don't have any particular questions for the labs" issue. Turns out if you just wander around the labs the engineers are pretty good about reaching out to see if you want to learn anything, regardless on if you have questions, so I just started spending my days in the labs toying around with the new APIs and getting up to ask questions whenever I had one. At one point I was looking for a couch to work on and an engineer at the CarPlay asked if I was looking for any help on that, and even though I didn't have any intentions of building a mapping app for CarPlay I was able to talk through with an engineer how it works, what the limitations were, and got to ask some longstanding questions I've had about how CarPlay works under the hood, which was a lot of fun!

One quick gripe about the experience, T-Mobile, while perfectly fine here out east, was practically unusable in California. I was a lot more disconnected than I wish I had been from work and my wife back east, not to mention my friends in San Jose, because pretty much any event that didn't feature Wi-Fi I was completely unreachable. Next year I will be seriously thinking about getting a pre-paid SIM on a larger network so hopefully I don't run into those problems.

Lastly, I really enjoyed my hour in the Apple Podcast Studio. Apple provided a really beautiful place to record, with mics for up to four attendees, and really helpful engineers to answer any questions we had and balance all of our audio feeds. At the end of the session they provided us with a small USB (A 🙃) drive with a Logic project and the .wav files for each mic, as well as a studio mix. It was an experience I'm really glad I tried out, and thanks a lot to Steve Ciauri, César Pinto Castillo, and Andrew Sowers for helping me explore new things and for being great co-hosts. Still having some issues with Podcast Connect preventing me from getting the feed onto the directory, but for now you should be able to add the feed url directly to your Podcast player of choice. Introducing CastKit! https://icalvin.org/CastKit/CastKit.xml.rss

That's certainly not all of my feelings on this last, amazing week, but I need to switch gears and get back to thinking about my job-y-job and catching up on all the Slack threads I was ignoring all week. But all in all I had a great time, learned a lot, met some great people, geeked out over meeting Podcast hosts whose work I really love, and ultimately came to the decision that I will definitely want to make this pilgrimage on a yearly basis. Thanks again to the wonderful engineers and staff who had so much impact on making this week a success, and I'll see you next year! 👋📱⌚️💻🛴🍻

#wwdc18 #apple #iOS #createML #SanJose #scootscoot

QR Code Control Center Action

looks like there’s a new QR code Control Center action. From what I can tell it just opens the camera app and explains how QR reading works…

#wwdc #iOS12 #qr

Lines Lines Lines

Showed up at an only slightly unreasonable hour this year! Can’t wait!!

#wwdc #lines

Sunday

Enjoying a beer or five at the Public Marlet in San Jose. This town is a lot of fun

#wwdc #sanJose

New Projects Are Fun

Just in time for WWDC and iOS 12, I've started a new iOS project that I'm pretty excited about. Haven't quite gotten there on a name yet, but it's an iOS app that lets you design and custom Wallet Passes. I've got an MVP working and I'll be playing around with UX/UI during sessions at Dub Dub, so if you are curious let me know and I'll be happy to let you know how it's going!

Pass Maker Interface Compiled Pass

This was inspired by some frustration when I got a ticket to a WWDC party that only included a PDF with a QR code and no option to save it to my Wallet. I was able to hack together a pretty nicely designed pass, complete with the logo of the company hosting the party, using their colors and such. I decided to keep the work going and designed a UI to create new passes right on your phone, generate the passes on a server, and send the new pass back to the phone. I was able to get everything completed right in time for this trip so I'd have some work to do in downtime in San Jose.

I'm not entirely sure if this will ever actually launch, partially I don't really see any comparable apps when searching on the App Store, which makes me wonder if this is even allowed by Apple, but I'll keep working on it for now and deal with the realities of a release later! For now it's always fun to have a project to work on.

#projects #wwdc #pass

WWDC ‘18 Plans

Getting ready to fly out to San Jose and start the week! Really looking forward not only to the announcements, and sessions, and betas (oh my!), but also getting to hang out with the whole community of Apple nerds that'll be out there. If you're also in San Jose this week for WWDC or any related events, keep an eye out for me! I'll be at WWDC going to sessions by day, doing WWDC Run's during the mornings, and going to Podcasts and Parties in the evenings making the most of my time there! Looking forward to meeting some new people out there, and learning about what everyone is working on and excited about. And if you're so inclined, I can share with you some stuff about my new project I've been working on too!

See y'all out West!

#wwdc #sanJose #betas #pass

Summer Fridays

Amazing day to ride home. Boston is perfect this time of year.

#summer #skateboard

More Posts