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
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.
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.
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 #employersfacebook 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.
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
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
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
Showed up at an only slightly unreasonable hour this year! Can’t wait!!
Enjoying a beer or five at the Public Marlet in San Jose. This town is a lot of 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!
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
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
Amazing day to ride home. Boston is perfect this time of year.