Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Injection, or Controlling your Tools

Orta
August 08, 2016

Injection, or Controlling your Tools

The largest OSS projects in the iOS ecosystem comes from people who have said “the tools we have are insufficient” and were unwilling to wait for Apple to fix them. There are still a lot of holes to be filled and as individuals we should be devoting time to helping ourselves and each other.

This talk is about the my struggles with accepting that sometimes it’s up to you to be the change you want in the world.

Orta

August 08, 2016
Tweet

More Decks by Orta

Other Decks in Programming

Transcript

  1. INJECTION

    View Slide

  2. OR

    View Slide

  3. CONTROLLING
    YOUR TOOLS

    View Slide

  4. View Slide

  5. ORTA

    View Slide

  6. 10 years ago

    View Slide

  7. CRUD

    View Slide

  8. CRUD

    View Slide

  9. DRAG & DROP
    PLAYING MEDIA
    LOADING NIBS

    View Slide

  10. The original brief had no concept
    of Unconventional Instruments,
    which came in by user requests
    and eventually grew to be roughly
    half the project.

    View Slide

  11. I had to read 4 books before I
    was close to being even slightly
    competent in writing software for
    Mac OS X.


    View Slide

  12. View Slide

  13. 4 years ago

    View Slide

  14. View Slide

  15. View Slide

  16. 2 years ago

    View Slide

  17. 2 years ago

    View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. 3 months ago

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. Listen
    id nc = [NSNotificationCenter defaultCenter];
    SEL injected = @selector(appHasBeenInjected:);
    NSString *key = @“INJECTION_BUNDLE_NOTIFICATION”;
    [nc addObserver:self selector:injected name:key object:nil];

    View Slide

  28. - (void)appHasBeenInjected:(NSNotification *)notification
    {
    [self.rootNav popViewControllerAnimated:NO];
    [self runDeveloperExtras];
    }
    in
    jected

    View Slide

  29. - (void)runDeveloperExtras
    {
    NSString *path = @“/artwork/glenn-brown”;
    id switchboard = [ARSwitchBoard sharedInstance];
    id viewController = [switchboard loadPath:path];
    [self pushViewController:viewController animated:YES];
    }
    Recreate

    View Slide

  30. View Slide

  31. - Xcode Plugin
    - Keeps track of all changed files
    - Compiles the changed files via terminal to bundle
    - Bundle is passed to an Injection server in your app
    - Server receives bundle, and loads it
    - Server replaces methods in old classes with new ones
    - Server sweeps though all app memory for instances
    - Server notifies all objects they’ve been changed
    HOW

    View Slide

  32. CAVEATS
    - Won’t work for Swift purists
    - Works fine for pragmatic programmers
    - Requires un-signing Xcode 8

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. REACT
    WEB
    IOS

    View Slide

  41. REACT
    Share Ideas
    Hot Reloading
    Open Toolchain

    View Slide

  42. REACT

    View Slide

  43. HOPE

    View Slide

  44. HOPE

    View Slide

  45. HOPE

    View Slide

  46. YOU

    View Slide