Slide 1

Slide 1 text

Mobile Developer Conference N Y C 8 26 15 Practical iOS application modularity Bryan Irace

Slide 2

Slide 2 text

M D C N Y C

Slide 3

Slide 3 text

M D C N Y C

Slide 4

Slide 4 text

M D C N Y C

Slide 5

Slide 5 text

M D C N Y C + (UIApplication *)sharedApplication NS_EXTENSION_UNAVAILABLE_IOS

Slide 6

Slide 6 text

M D C N Y C Limit which parts of the codebase know about which other parts.

Slide 7

Slide 7 text

M D C N Y C When concerns are well-separated, individual sections can be reused, as well as developed and updated independently. -Wikipedia

Slide 8

Slide 8 text

M D C N Y C One big codebase Small Isolated Knowable Components Many Easily or

Slide 9

Slide 9 text

M D C N Y C Modularity = • Easier to build separate applications • New products • iOS or OS X • iOS extensions • watchOS applications

Slide 10

Slide 10 text

M D C N Y C Modularity = • Additional overhead • More repositories, READMEs to update, version numbers to increment • Tooling complexity • CocoaPods, Carthage, Gradle, etc.

Slide 11

Slide 11 text

M D C N Y C { "name": "ComposeUI", "summary": “Tumblr’s composition UI for iOS.", "platforms": { "ios": "8.0" }, "requires_arc": true, "frameworks": [ "Foundation", "UIKit", ], "source_files": "Classes/**/*.{h,m}", "resources": "Resources/*", "dependencies": { "SharedUI": [], } } { "name": "SharedUI", "summary": "UI components shared across Tumblr’s apps and extension", "platforms": { "ios": "8.0" }, "requires_arc": true, "frameworks": [ "Foundation", "UIKit" ], "source_files": "Classes/**/*.{h,m}", "resources": "Resources/*" }

Slide 12

Slide 12 text

M D C N Y C pod 'Reachability', '3.2' pod 'MTMigration', '0.0.3' pod 'HockeySDK', '3.7.1' pod '1PasswordExtension', '1.1.0'

Slide 13

Slide 13 text

M D C N Y C Development pods

Slide 14

Slide 14 text

M D C N Y C Development pods • No need to version • Can be anywhere on disk, e.g. in the app’s repository • Easy to make one pull request against multiple modules

Slide 15

Slide 15 text

M D C N Y C pod 'ComposeUI', :path => ‘Components/ComposeUI' pod 'ExploreUI', :path => 'Components/ExploreUI' pod 'SharedUI', :path => 'Components/SharedUI' pod 'CoreTumblr', :path => 'Components/CoreTumblr' pod 'CoreExplore', :path => 'Components/CoreExplore' pod 'Logger', :path => 'Components/Logger'

Slide 16

Slide 16 text

M D C N Y C Compose UI Core Tumblr Tumblr SDK Explore UI Core Explore Network Abstractions Shared UI Logger Video Player Audio Share extension Today widget App

Slide 17

Slide 17 text

M D C N Y C Compose UI Core Tumblr Tumblr SDK Explore UI Core Explore Network Abstractions Shared UI Logger Video Player Audio

Slide 18

Slide 18 text

M D C N Y C Flexibility • Can always turn dev. pods into “real pods” • Xcode project only knows about .framework files • Could always move away from CocoaPods

Slide 19

Slide 19 text

M D C N Y C Summary • Modular codebases facilitate rapid product development • “Development pods” provide many benefits of modularity without too much overhead

Slide 20

Slide 20 text

M D C N Y C : bryan : irace Thank you! [email protected]