• Is this inconvenient just for me? • Do other folks in my team run into the same kind of problems? • How o=en does it happen? • What's the total team @me per week wasted on this problem? by @merowing_ 7
• NYT project used internal / 3rd party tools with each build • The total on each build adds about 6s, only 6s, right? • I measured that I build between 200-400 Dmes daily, and 90% of the Dmes we don't need those tools to run again • We had ~30 iOS developers touching the main app • Lower threshold = 200 $mes * 6s * 30 devs * 90% => 9 hours wasted per day by @merowing_ 8
• This means we were was-ng 45 hours per week. • If we can improve that, it's almost like hiring a new full--me developer, except it's free. • Is it worth inves-ng -me to improve it? • ✔ Definitely • How to do it? Custom pre-process script on pre-commit / CI • Read more @ my blog h4ps:/ /bit.ly/3uwbqhL by @merowing_ 9
feature? • Build-phase script that allows you to create #if branches per developer (e.g., h;ps:/ /bit.ly/3mmfLRP) #if merowing showARExperience(StubARData(...)) #endif by @merowing_ 14
instances of class X should ever be alive? • Works in Swi< and Objec?ve-C • Surface new retain cycle as you create them, not a<er you've finished the feature by @merowing_ 17
how your whole applica3on reacts to specific data changes, but the backend isn't ready? • Easily load external data to the applica3on • In simulator ? loading from a local file would be preferred • On device? we need to load from a network server • We need real-3me updates by @merowing_ 23
Swi, and Objec4ve-C • FileWatcher.Local is useful for observing local file changes e.g., observing files on the developer desktop. • FileWatcher.Remote can be used to observe files on the web. Both Etag headers and Last-Modified-Date are supported. by @merowing_ 24
changes o3en? • Every app deals with raw NSData at some point in the pipeline • Pipe it through (Identifier, Data) -> Data • Use only returned data: • If the app is in recording mode, it persist data in cache • If you are in reproduc=on mode, it loads data from the cache • Read more @ my blog h/ps:/ /bit.ly/3mrna2i by @merowing_ 27
-> Either<Swift, Anything> • Used in over 40 000 apps. • In massive code-bases like Airbnb, Bumble, etc. • Adds annota?on support to SwiA language • Allows fine-grained control over the genera?on • Sourcery can generate any code if you can describe the algorithm by @merowing_ 33
command case nodesSetAutoFade(ids: [String], maxDistance: CGFloat) case nodesSetVisibility(showIds: [String]?, hideIds: [String]?) case materialSetProperties( id: String, material: String, properties: ARViewer.Model.MaterialProperties ) // automatically bridges JS <-> Swift and provided as fully typed enum switch (command) { case let .materialSetProperties(id, materialName, properties): by @merowing_ 37
project into many different modules. • Improves modular architecture design • Forces developers to think about public API and module boundaries • Each framework has its test suite that can run fast • Enables use of playgrounds or small projects • .dylib loading is no longer a significant concern, and we have staBc libs by @merowing_ 47
Swi* and Objec3ve-C • Custom DSL for exposing control variables (sliders, image pickers, trigger buEons). • It's easy to add the framework to exis3ng code-base • Works with Injec3onForXcode by @merowing_ 48
of two line change to hot- reloading your UIKit / AppKit / tvOS / Swi>UI project? UIKit/AppKit: // from let vc = MainViewController(...) // to let vc = Inject.ViewControllerHost(MainViewController(...)) by @merowing_ 50
of two line change to hot- reloading your UIKit / AppKit / tvOS / Swi>UI project? Swi$UI: @ObservedObject private var iO = Inject.observer variable var body: some View { ... .enableInjection() } by @merowing_ 52
up your project easily or it's s4ll too slow? • Open Source: Inject + Injec+onForXcode • Hot Reloading for Swi: and Objec+ve-C • No run+me involved, full Swi: support • Can be integrated as an SPM package by @merowing_ 54
of the main goals of your applica&on architecture design • Time invested into improving your team developer experience can yield huge ROI for your business • By enabling your developers to work on the features that maAer to the business • If a mythical 10x developer exists, it would be the person that makes ten team members more efficient. • Ask yourself if the problems you are facing are isolated or affect other devs? • Consider geHng Sourcery Pro to automate your workflows • Give Inject a try if you want to save hours of development :me per week by @merowing_ 55