important » Dealing with bad tooling, architecture or boilerplate » Creates a disconnect between our work and the end result » Makes us inefficient, creates roadblocks in our way » Makes it easy for us to make simple mistakes
hard » Enables more efficient workflow » Easier to keep connected with our work » Keeps focus on what matters and not dealing with our technical stack shortcomings » Limits human mistakes
instances of class X should ever be alive? » Works in Swift and Objective-C » Surface new retain cycle as you create them, not after you've finished the feature
into many frameworks » + Improves modular architecture design » Each framework has its own test suite that can run fast » Enables use of playgrounds or small projects » - Longer launch times due to dylib loading » Leverage cocoapods-aminomo plugin or static libs » - Might be complicated to do in existing projects
up your project easily? » Free tool: InjectionForXcode » Code Injection for Objective-C and Swift » Its external app you install, no need to unsign your Xcode
Swift and Objective-C » Custom DSL for exposing control variables (sliders, image pickers, trigger buttons). » Easy to add Framework to existing code-base » Works great with InjectionForXcode
/ Codable » - Lack of control over the generated implementation » Not supportive of non-default cases » - Not a generic solution for Boilerplate maintenace, solves only a small subset of common algorithms
works like a pre-processor » Used in over 30 000 apps » Adds annotation support to Swift language » Allows fine-grained control over the generation » Sourcery can generate any boilerplate code if you can describe the algorithm once
templating languages: Swift, Stencil, and EJS » Bundled with: Equality, Hashing, Codable, Lenses, Mocks, Decorators, LinuxMain, Diffing » Powers up projects like ObjectBox and SwiftMocky » Enables real-time programming of templates » Can be used to generate so much more...
whole application reacts to specific data changes but the backend isn't ready? » Easily load external data to the application » Sim ? loading from mac file would be preferred » Device? we need to load from a network server » We need real-time updates
Swift and Objective-C » FileWatcher.Local useful for observing local file changes e.g. observe file on the developer desktop. » FileWatcher.Remote can be used to observe files on the web, both Etag headers and Last-Modified-Date are supported.
» Always save your data at Data Provider level to file » if the user decides to send a bug report, send those files to the cloud » You can use file watcher provider to load it on another device and re-execute almost all code paths you have » Need more power? leverage unidirectional architecture/view state to implement time travel
Build phase script that allows you to create #if branches per developer (e.g. http://goo.gl/cLc4ay) #if merowing showARExperience(StubARData(...)) #endif
core goals of architecture design » Investing time into improving your team developer experience can yield huge efficiency wins for your business and save the sanity of your developers » If a mythical 10x developer exists it would be the person that makes 10 team members more efficient