├── .gitattributes ├── .gitignore ├── .travis.yml ├── HowTo ├── CONTENTSCREENSHOT.png ├── HOWTOCHECKBOX.md └── HOWTOPR.md ├── README.md ├── RoadmapProject ├── Roadmap.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Script │ ├── Content.yml │ ├── Generated │ │ ├── ESSENTIALROADMAP.png │ │ ├── ESSENTIALROADMAP.txt │ │ ├── ROADMAP.md │ │ ├── ROADMAP.png │ │ ├── ROADMAP.txt │ │ └── Resources │ │ │ └── iOS_Developer │ │ │ ├── Computer_Science_knowledge │ │ │ ├── Algorithms │ │ │ │ ├── Big-O_notation │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── RESOURCES.md │ │ │ │ └── Strings │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Programming_Paradigms │ │ │ │ └── Functional │ │ │ │ │ └── Functional_Reactive_Programming_Frameworks │ │ │ │ │ └── RxSwift │ │ │ │ │ └── RESOURCES.md │ │ │ └── System_design │ │ │ │ └── Problems │ │ │ │ └── RESOURCES.md │ │ │ ├── Practical_knowledge │ │ │ ├── Caching_and_Persistency │ │ │ │ ├── Core_Data │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Realm │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Cocoa_Touch │ │ │ │ ├── Core_Location │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Core_Motion │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Foundation │ │ │ │ │ ├── Collections │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Networking │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Notifications_vs_Delegation_vs_Observing │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ └── Serialization │ │ │ │ │ │ ├── Codable │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── JSON │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── NSCoding │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── Protobuf │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ └── XML │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── UIKit │ │ │ │ │ ├── Animations │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Layers │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Layout │ │ │ │ │ │ ├── Autolayout │ │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ │ └── UIStackView │ │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── Frame-based │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Navigation │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ ├── Transform │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── UIApplication │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ ├── States │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── UIApplicationDelegate │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── UIViewController │ │ │ │ │ │ ├── Lifecycle │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── UIViews │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ ├── UICollectionViews │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── UITableViews │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── UserNotifications │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Work_in_background_mode │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Debugging │ │ │ │ └── Instruments │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Dependencies_management │ │ │ │ ├── Carthage │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Cocoapods │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Swift_Package_Manager │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Getting_started │ │ │ │ ├── First_pet_project_ideas │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── RESOURCES.md │ │ │ ├── Languages │ │ │ │ ├── Objective-C │ │ │ │ │ ├── Blocks │ │ │ │ │ │ ├── Memory_Management │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── KVC │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── KVO │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ ├── Runtime │ │ │ │ │ │ ├── Method_messaging │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── NSZombies_and_KVO_implementation │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ └── Swizzling │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── Toll-free_bridging │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── RESOURCES.md │ │ │ │ └── Swift │ │ │ │ │ ├── Closures │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Enums │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Generics │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Initializers │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Protocols │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ ├── Runtime │ │ │ │ │ ├── Method_dispatch │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── Structs │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Memory_management │ │ │ │ ├── ARC │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ └── Weak_references │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Autorelease_pool │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Garbage_collection │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── MRC │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Memory_leaks │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── RESOURCES.md │ │ │ │ ├── Retain_cycles │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Shallow_and_deep_copying │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Stack_and_Heap │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Value_vs_Reference_type │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Multithreading_and_concurrency │ │ │ │ ├── GCD │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── NSOperation(Queue) │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── POSIX_and_NSThreads │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Perform_selector_family │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── Problems │ │ │ │ │ ├── Deadlock │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ ├── Race_condition │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── Readers–writers_problem │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── RESOURCES.md │ │ │ │ ├── Runloop │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Synchronization │ │ │ │ │ └── RESOURCES.md │ │ │ ├── RESOURCES.md │ │ │ ├── Security │ │ │ │ └── Keychain │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Software_Architecture │ │ │ │ ├── Design_Patterns │ │ │ │ │ ├── Architectural │ │ │ │ │ │ ├── Clean_architecture │ │ │ │ │ │ │ ├── RESOURCES.md │ │ │ │ │ │ │ ├── RIBs │ │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ │ └── VIPER │ │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── Coordinators │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── MVC │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ ├── MVVM │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Cocoa │ │ │ │ │ │ ├── Abstract_Factory │ │ │ │ │ │ │ └── Class_cluster │ │ │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── Creational │ │ │ │ │ │ └── Singleton │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Design_Principles │ │ │ │ │ ├── Inversion_of_Control │ │ │ │ │ └── Dependency_Injection │ │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ ├── Protocol-Oriented_Programming │ │ │ │ │ └── RESOURCES.md │ │ │ │ │ └── SOLID │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Testing │ │ │ │ ├── BDD │ │ │ │ │ └── RESOURCES.md │ │ │ │ ├── TDD │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── Unit_Tests │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Tools │ │ │ │ ├── Fastlane │ │ │ │ │ └── RESOURCES.md │ │ │ │ └── IDE │ │ │ │ │ └── Xcode │ │ │ │ │ └── Interface_Builder │ │ │ │ │ └── RESOURCES.md │ │ │ ├── Version_Control_Systems │ │ │ │ └── Git │ │ │ │ │ └── RESOURCES.md │ │ │ └── tvOS │ │ │ │ └── Focus_interactions │ │ │ │ └── RESOURCES.md │ │ │ └── RESOURCES.md │ ├── main.swift │ └── plantuml.jar └── cocoapods-rome │ ├── Podfile │ ├── Podfile.lock │ ├── Pods │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Target Support Files │ │ ├── Pods-caesar │ │ │ ├── Info.plist │ │ │ ├── Pods-caesar-acknowledgements.markdown │ │ │ ├── Pods-caesar-acknowledgements.plist │ │ │ ├── Pods-caesar-dummy.m │ │ │ ├── Pods-caesar-frameworks.sh │ │ │ ├── Pods-caesar-resources.sh │ │ │ ├── Pods-caesar-umbrella.h │ │ │ ├── Pods-caesar.debug.xcconfig │ │ │ ├── Pods-caesar.modulemap │ │ │ └── Pods-caesar.release.xcconfig │ │ └── Yaml │ │ │ ├── Info.plist │ │ │ ├── Yaml-dummy.m │ │ │ ├── Yaml-prefix.pch │ │ │ ├── Yaml-umbrella.h │ │ │ ├── Yaml.modulemap │ │ │ └── Yaml.xcconfig │ └── Yaml │ │ ├── LICENSE │ │ ├── Readme.md │ │ └── Sources │ │ └── Yaml │ │ ├── YAMLOperators.swift │ │ ├── YAMLParser.swift │ │ ├── YAMLRegex.swift │ │ ├── YAMLResult.swift │ │ ├── YAMLTokenizer.swift │ │ └── Yaml.swift │ └── Rome │ └── Yaml.framework │ ├── Headers │ ├── Modules │ ├── Resources │ ├── Versions │ ├── A │ │ ├── Headers │ │ │ ├── Yaml-Swift.h │ │ │ └── Yaml-umbrella.h │ │ ├── Modules │ │ │ ├── Yaml.swiftmodule │ │ │ │ ├── x86_64.swiftdoc │ │ │ │ └── x86_64.swiftmodule │ │ │ └── module.modulemap │ │ ├── Resources │ │ │ └── Info.plist │ │ └── Yaml │ └── Current │ └── Yaml ├── generateAll.sh └── headerImage.png /.gitattributes: -------------------------------------------------------------------------------- 1 | RoadmapProject/Script/plantuml.jar linguist-vendored 2 | RoadmapProject/cocoapods-rome/* linguist-vendored 3 | 4 | RoadmapProject/Script/Generated/* linguist-generated -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ######################### 2 | # .gitignore file for Xcode4 and Xcode5 Source projects 3 | # 4 | # Apple bugs, waiting for Apple to fix/respond: 5 | # 6 | # 15564624 - what does the xccheckout file in Xcode5 do? Where's the documentation? 7 | # 8 | # Version 2.6 9 | # For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects 10 | # 11 | # 2015 updates: 12 | # - Fixed typo in "xccheckout" line - thanks to @lyck for pointing it out! 13 | # - Fixed the .idea optional ignore. Thanks to @hashier for pointing this out 14 | # - Finally added "xccheckout" to the ignore. Apple still refuses to answer support requests about this, but in practice it seems you should ignore it. 15 | # - minor tweaks from Jona and Coeur (slightly more precise xc* filtering/names) 16 | # 2014 updates: 17 | # - appended non-standard items DISABLED by default (uncomment if you use those tools) 18 | # - removed the edit that an SO.com moderator made without bothering to ask me 19 | # - researched CocoaPods .lock more carefully, thanks to Gokhan Celiker 20 | # 2013 updates: 21 | # - fixed the broken "save personal Schemes" 22 | # - added line-by-line explanations for EVERYTHING (some were missing) 23 | # 24 | # NB: if you are storing "built" products, this WILL NOT WORK, 25 | # and you should use a different .gitignore (or none at all) 26 | # This file is for SOURCE projects, where there are many extra 27 | # files that we want to exclude 28 | # 29 | ######################### 30 | 31 | ##### 32 | # OS X temporary files that should never be committed 33 | # 34 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html 35 | 36 | .DS_Store 37 | 38 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html 39 | 40 | .Trashes 41 | 42 | # c.f. http://www.westwind.com/reference/os-x/invisibles.html 43 | 44 | *.swp 45 | 46 | # 47 | # *.lock - this is used and abused by many editors for many different things. 48 | # For the main ones I use (e.g. Eclipse), it should be excluded 49 | # from source-control, but YMMV. 50 | # (lock files are usually local-only file-synchronization on the local FS that should NOT go in git) 51 | # c.f. the "OPTIONAL" section at bottom though, for tool-specific variations! 52 | # 53 | # In particular, if you're using CocoaPods, you'll want to comment-out this line: 54 | #*.lock 55 | 56 | 57 | # 58 | # profile - REMOVED temporarily (on double-checking, I can't find it in OS X docs?) 59 | #profile 60 | 61 | 62 | #### 63 | # Xcode temporary files that should never be committed 64 | # 65 | # NB: NIB/XIB files still exist even on Storyboard projects, so we want this... 66 | 67 | *~.nib 68 | 69 | 70 | #### 71 | # Xcode build files - 72 | # 73 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData" 74 | 75 | DerivedData/ 76 | 77 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build" 78 | 79 | build/ 80 | 81 | 82 | ##### 83 | # Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups) 84 | # 85 | # This is complicated: 86 | # 87 | # SOMETIMES you need to put this file in version control. 88 | # Apple designed it poorly - if you use "custom executables", they are 89 | # saved in this file. 90 | # 99% of projects do NOT use those, so they do NOT want to version control this file. 91 | # ..but if you're in the 1%, comment out the line "*.pbxuser" 92 | 93 | # .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html 94 | 95 | *.pbxuser 96 | 97 | # .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html 98 | 99 | *.mode1v3 100 | 101 | # .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html 102 | 103 | *.mode2v3 104 | 105 | # .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file 106 | 107 | *.perspectivev3 108 | 109 | # NB: also, whitelist the default ones, some projects need to use these 110 | !default.pbxuser 111 | !default.mode1v3 112 | !default.mode2v3 113 | !default.perspectivev3 114 | 115 | 116 | #### 117 | # Xcode 4 - semi-personal settings 118 | # 119 | # Apple Shared data that Apple put in the wrong folder 120 | # c.f. http://stackoverflow.com/a/19260712/153422 121 | # FROM ANSWER: Apple says "don't ignore it" 122 | # FROM COMMENTS: Apple is wrong; Apple code is too buggy to trust; there are no known negative side-effects to ignoring Apple's unofficial advice and instead doing the thing that actively fixes bugs in Xcode 123 | # Up to you, but ... current advice: ignore it. 124 | *.xccheckout 125 | 126 | # 127 | # 128 | # OPTION 1: --------------------------------- 129 | # throw away ALL personal settings (including custom schemes! 130 | # - unless they are "shared") 131 | # As per build/ and DerivedData/, this ought to have a trailing slash 132 | # 133 | # NB: this is exclusive with OPTION 2 below 134 | xcuserdata/ 135 | 136 | # OPTION 2: --------------------------------- 137 | # get rid of ALL personal settings, but KEEP SOME OF THEM 138 | # - NB: you must manually uncomment the bits you want to keep 139 | # 140 | # NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X, 141 | # or manually install git over the top of the OS X version 142 | # NB: this is exclusive with OPTION 1 above 143 | # 144 | #xcuserdata/**/* 145 | 146 | # (requires option 2 above): Personal Schemes 147 | # 148 | #!xcuserdata/**/xcschemes/* 149 | 150 | #### 151 | # XCode 4 workspaces - more detailed 152 | # 153 | # Workspaces are important! They are a core feature of Xcode - don't exclude them :) 154 | # 155 | # Workspace layout is quite spammy. For reference: 156 | # 157 | # /(root)/ 158 | # /(project-name).xcodeproj/ 159 | # project.pbxproj 160 | # /project.xcworkspace/ 161 | # contents.xcworkspacedata 162 | # /xcuserdata/ 163 | # /(your name)/xcuserdatad/ 164 | # UserInterfaceState.xcuserstate 165 | # /xcshareddata/ 166 | # /xcschemes/ 167 | # (shared scheme name).xcscheme 168 | # /xcuserdata/ 169 | # /(your name)/xcuserdatad/ 170 | # (private scheme).xcscheme 171 | # xcschememanagement.plist 172 | # 173 | # 174 | 175 | #### 176 | # Xcode 4 - Deprecated classes 177 | # 178 | # Allegedly, if you manually "deprecate" your classes, they get moved here. 179 | # 180 | # We're using source-control, so this is a "feature" that we do not want! 181 | 182 | *.moved-aside 183 | 184 | #### 185 | # OPTIONAL: Some well-known tools that people use side-by-side with Xcode / iOS development 186 | # 187 | # NB: I'd rather not include these here, but gitignore's design is weak and doesn't allow 188 | # modular gitignore: you have to put EVERYTHING in one file. 189 | # 190 | # COCOAPODS: 191 | # 192 | # c.f. http://guides.cocoapods.org/using/using-cocoapods.html#what-is-a-podfilelock 193 | # c.f. http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 194 | # 195 | #!Podfile.lock 196 | # 197 | # RUBY: 198 | # 199 | # c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/ 200 | # 201 | #!Gemfile.lock 202 | # 203 | # IDEA: 204 | # 205 | # c.f. https://www.jetbrains.com/objc/help/managing-projects-under-version-control.html?search=workspace.xml 206 | # 207 | #.idea/workspace.xml 208 | # 209 | # TEXTMATE: 210 | # 211 | # -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422 212 | # 213 | #tm_build_errors 214 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: swift 2 | osx_image: xcode10 3 | 4 | install: 5 | - brew install libtool 6 | - brew link libtool 7 | - brew install graphviz 8 | - brew link --overwrite graphviz 9 | 10 | script: ./generateAll.sh 11 | 12 | deploy: 13 | provider: pages 14 | edge: 15 | branch: v1.8.47 16 | skip-cleanup: true 17 | github-token: $GITHUB_TOKEN # Set in travis-ci.org dashboard, marked secure 18 | keep-history: true 19 | on: 20 | branch: master 21 | target-branch: master 22 | 23 | notifications: 24 | email: 25 | on_success: never # default: change 26 | on_failure: always # default: always -------------------------------------------------------------------------------- /HowTo/CONTENTSCREENSHOT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/HowTo/CONTENTSCREENSHOT.png -------------------------------------------------------------------------------- /HowTo/HOWTOCHECKBOX.md: -------------------------------------------------------------------------------- 1 | # How to tick a checkbox 2 | 3 | Markdown checkboxes are readonly, this meas if you want to tick a checkbox you have to make own copy of the repository (fork it) and then edit a particular checkbox. 4 | 5 | # Prerequisites 6 | You must undesrstand basics of Git to be able to follow the instruction below. 7 | 8 | # Instruction 9 | 10 | 1. Fork the repository on Github (once) 11 | 1. Checkout your repository (once) 12 | 1. Change checkbox from `[ ]` to `[x]` next to the topic you've finished. 13 | - [ ] before 14 | - [x] after 15 | 1. Commit and push changes. 16 | 1. Periodicaly pull changes from original repository to get new topics and materials. -------------------------------------------------------------------------------- /HowTo/HOWTOPR.md: -------------------------------------------------------------------------------- 1 | ## How to add new topics or materials 2 | 3 | #### One file to rule them all 4 | 5 | 6 | ### How to add topics and materials 7 | 8 | 1. Open `RoadmapProject/Script/Content.yml` in your fork repository 9 | 1. Add topics and/or links to materials 10 | 1. Commit and push `Content.yml` changes to Github 11 | 2. Submit a pull request 12 | 13 | #### When your changes will be applied 14 | 15 | 1. Wait for your pull request to be merged 16 | 1. Wait up to 5 minutes for Travis CI to regenerate roadmap images and text version 17 | 18 | 19 | #### Prerequisites for adding topics and materials 20 | 21 | 1. Git 22 | 1. Fork of the repository 23 | 2. YAML editor, e.g. [Sublime Text](https://www.sublimetext.com/). 24 | 25 | ### How to run generation script locally (Optional) 26 | The generation script will generate images and the text version of the roadmap. 27 | 28 | 1. run `./generateAll.sh` 29 | 30 | **or** 31 | 32 | 1. Go to `RoadmapProject/Script` 33 | 2. Run `./main.swift` 34 | 35 | ##### Prerequisites for running the script locally 36 | 37 | 1. Latest Swift/Xcode 38 | 1. Prepare PlantUML: 39 | 1. Install [JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html) 40 | 1. Install Homebrew: 41 | - `/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"` 42 | 1. Install GraphViz: 43 | - `brew install libtool` 44 | - `brew link libtool` 45 | - `brew install graphviz` 46 | - `brew link --overwrite graphviz` 47 | 1. Go to `Roadmap Project/Script/` 48 | 1. Run `java -jar plantuml.jar -testdot` to check if installed correctly. 49 | 50 | ##### How to debug script (Optional) 51 | Use `Roadmap Project/Roadmap.xcodeproj` to run and debug script. 52 | 53 | Xcode runs and debugs an executable binary, thus generated output will be put next to the binary. 54 | 55 | Always run script via terminal before submitting a PR. 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Header image](headerImage.png) 2 | # 🚀 iOS Developer Roadmap 3 | Roadmap to becoming an iOS developer in 2018. 4 | 5 | ## ☝️ What is it? 6 | This is a tree-like compilation of topics highly relevant to iOS development. Both image and text version are generated from human readable content file. 7 | 8 | ## ✌️ Who is it for? 9 | The roadmap will be helpul for: 10 | 11 | - anyone who wants to become an iOS developer 12 | - iOS developers who desire to become experts 13 | - iOS developers who are preparing for interviews and need to brush up knowledge 14 | - iOS developers who need to compile own set of interview questions 15 | 16 | 17 | ## 👌 Why these topics? 18 | See [this article](https://medium.com/@borlov/c9a24f413457) explaining selection of topics. 19 | 20 | ## 👨‍🎓 How to use this roadmap 21 | 1. Find a topic you want to study. 22 | 2. Go to corresponding resources section. 23 | 3. Study until you can confidently explain the topic to your cat. 24 | 4. (Optional) tick the checkbox next to the topic. [How to tick a checkbox](HowTo/HOWTOCHECKBOX.md). 25 | 4. Go to step 1. 26 | 27 | `Essential topics` are topics which significantly contribute to understanding of iOS development. Consequently, it is a good idea to study them first as they are often encountered on interviews. 28 | 29 | Start from `Getting started` section if you haven't done any iOS development yet. 30 | 31 | ## 🗺 Image version 32 | Roadmap of essential topics. Roadmap for all topics is [here.](RoadmapProject/Script/Generated/ROADMAP.png) 33 | ![Header image](RoadmapProject/Script/Generated/ESSENTIALROADMAP.png) 34 | 35 | ## 📝 Text version 36 | [Text version with materials to study.](RoadmapProject/Script/Generated/ROADMAP.md) 37 | 38 | ## 🤝 How to contribute 39 | 40 | - add new topics to `Content.yml` 41 | - add missing study materials to `Content.yml` 42 | - throw ideas at me on [![Twitter: @Bohdan_Orlov](https://img.shields.io/badge/twitter-@Bohdan_Orlov-4d66b3.svg?style=flat)](https://twitter.com/bohdan_orlov) 43 | 44 | 45 | [The complete contribution guide.](HowTo/HOWTOPR.md) 46 | 47 | 48 | ## ☑️ TODO 49 | - [x] content file with topics and materials 50 | - [x] ability to generate README.md from the content file 51 | - [x] ability to generate Roadmap tree image from the content file 52 | - [ ] make generation script less miserable: 53 | - [x] make it readable 🤦 54 | - [ ] output Yaml format violation errors 55 | - [ ] handle errors of parsing Yaml into Topics and Resources 56 | - [ ] handle file read/write errors 57 | - [ ] handle image generation errors 58 | - [x] automatic regeneration of roadmap after every commit 59 | - [ ] automatic validation of content format on PR 60 | - [ ] make sure Travis doesn't deploy if generation script fails 61 | 62 | ## ⚙️ Generation status 63 | [![Travis](https://travis-ci.org/BohdanOrlov/iOS-Developer-Roadmap.svg?branch=master)](https://travis-ci.org/BohdanOrlov/iOS-Developer-Roadmap) 64 | 65 | ## 📃 License 66 | 67 | [![License: CC BY 4.0](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) 68 | 69 | ## 📊 Skills Matrix 70 | You might also like the [iOS Developer Skills Matrix](https://github.com/BohdanOrlov/ios-skills-matrix). 71 | ![Skills matrix](https://github.com/BohdanOrlov/ios-skills-matrix/raw/master/matrix.png) 72 | 73 | ## 📚 iOS and Swift Tutorials and Courses 74 | 75 | Learn iOS development & Swift online from the best iOS Swift tutorials and courses recommended by the programming community. 76 | https://hackr.io/tutorials/learn-ios-swift 77 | -------------------------------------------------------------------------------- /RoadmapProject/Roadmap.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | CB4D061D203C5CC400520BD2 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4D061C203C5CC400520BD2 /* main.swift */; }; 11 | CB4D0625203C638500520BD2 /* Yaml.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4D0624203C638500520BD2 /* Yaml.framework */; }; 12 | CB4D0626203C645300520BD2 /* Yaml.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = CB4D0624203C638500520BD2 /* Yaml.framework */; }; 13 | CB4D0630203C6A6000520BD2 /* Content.yml in Copy Files */ = {isa = PBXBuildFile; fileRef = CB4D062F203C6A4B00520BD2 /* Content.yml */; }; 14 | CB4D0632203DBC9900520BD2 /* plantuml.jar in Copy Files */ = {isa = PBXBuildFile; fileRef = CB4D0631203DBC9900520BD2 /* plantuml.jar */; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXCopyFilesBuildPhase section */ 18 | CB4D0617203C5CC400520BD2 /* Copy Files */ = { 19 | isa = PBXCopyFilesBuildPhase; 20 | buildActionMask = 12; 21 | dstPath = ""; 22 | dstSubfolderSpec = 10; 23 | files = ( 24 | CB4D0632203DBC9900520BD2 /* plantuml.jar in Copy Files */, 25 | CB4D0630203C6A6000520BD2 /* Content.yml in Copy Files */, 26 | CB4D0626203C645300520BD2 /* Yaml.framework in Copy Files */, 27 | ); 28 | name = "Copy Files"; 29 | runOnlyForDeploymentPostprocessing = 0; 30 | }; 31 | /* End PBXCopyFilesBuildPhase section */ 32 | 33 | /* Begin PBXFileReference section */ 34 | CB4D0619203C5CC400520BD2 /* Roadmap */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Roadmap; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | CB4D061C203C5CC400520BD2 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 36 | CB4D0624203C638500520BD2 /* Yaml.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Yaml.framework; path = "cocoapods-rome/Rome/Yaml.framework"; sourceTree = ""; }; 37 | CB4D062D203C694500520BD2 /* cocoapods-rome */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "cocoapods-rome"; sourceTree = ""; }; 38 | CB4D062F203C6A4B00520BD2 /* Content.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = Content.yml; sourceTree = ""; }; 39 | CB4D0631203DBC9900520BD2 /* plantuml.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = plantuml.jar; sourceTree = ""; }; 40 | /* End PBXFileReference section */ 41 | 42 | /* Begin PBXFrameworksBuildPhase section */ 43 | CB4D0616203C5CC400520BD2 /* Frameworks */ = { 44 | isa = PBXFrameworksBuildPhase; 45 | buildActionMask = 2147483647; 46 | files = ( 47 | CB4D0625203C638500520BD2 /* Yaml.framework in Frameworks */, 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | /* End PBXFrameworksBuildPhase section */ 52 | 53 | /* Begin PBXGroup section */ 54 | CB4D0610203C5CC400520BD2 = { 55 | isa = PBXGroup; 56 | children = ( 57 | CB4D061B203C5CC400520BD2 /* Script */, 58 | CB4D062D203C694500520BD2 /* cocoapods-rome */, 59 | CB4D061A203C5CC400520BD2 /* Products */, 60 | CB4D0623203C638500520BD2 /* Frameworks */, 61 | ); 62 | sourceTree = ""; 63 | }; 64 | CB4D061A203C5CC400520BD2 /* Products */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | CB4D0619203C5CC400520BD2 /* Roadmap */, 68 | ); 69 | name = Products; 70 | sourceTree = ""; 71 | }; 72 | CB4D061B203C5CC400520BD2 /* Script */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | CB4D0631203DBC9900520BD2 /* plantuml.jar */, 76 | CB4D061C203C5CC400520BD2 /* main.swift */, 77 | CB4D062F203C6A4B00520BD2 /* Content.yml */, 78 | ); 79 | path = Script; 80 | sourceTree = ""; 81 | }; 82 | CB4D0623203C638500520BD2 /* Frameworks */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | CB4D0624203C638500520BD2 /* Yaml.framework */, 86 | ); 87 | name = Frameworks; 88 | sourceTree = ""; 89 | }; 90 | /* End PBXGroup section */ 91 | 92 | /* Begin PBXNativeTarget section */ 93 | CB4D0618203C5CC400520BD2 /* Roadmap */ = { 94 | isa = PBXNativeTarget; 95 | buildConfigurationList = CB4D0620203C5CC400520BD2 /* Build configuration list for PBXNativeTarget "Roadmap" */; 96 | buildPhases = ( 97 | CB4D0615203C5CC400520BD2 /* Sources */, 98 | CB4D0616203C5CC400520BD2 /* Frameworks */, 99 | CB4D0617203C5CC400520BD2 /* Copy Files */, 100 | ); 101 | buildRules = ( 102 | ); 103 | dependencies = ( 104 | ); 105 | name = Roadmap; 106 | productName = Roadmap; 107 | productReference = CB4D0619203C5CC400520BD2 /* Roadmap */; 108 | productType = "com.apple.product-type.tool"; 109 | }; 110 | /* End PBXNativeTarget section */ 111 | 112 | /* Begin PBXProject section */ 113 | CB4D0611203C5CC400520BD2 /* Project object */ = { 114 | isa = PBXProject; 115 | attributes = { 116 | LastSwiftUpdateCheck = 0920; 117 | LastUpgradeCheck = 0920; 118 | ORGANIZATIONNAME = "Bohdan Orlov"; 119 | TargetAttributes = { 120 | CB4D0618203C5CC400520BD2 = { 121 | CreatedOnToolsVersion = 9.2; 122 | ProvisioningStyle = Automatic; 123 | }; 124 | }; 125 | }; 126 | buildConfigurationList = CB4D0614203C5CC400520BD2 /* Build configuration list for PBXProject "Roadmap" */; 127 | compatibilityVersion = "Xcode 8.0"; 128 | developmentRegion = en; 129 | hasScannedForEncodings = 0; 130 | knownRegions = ( 131 | en, 132 | ); 133 | mainGroup = CB4D0610203C5CC400520BD2; 134 | productRefGroup = CB4D061A203C5CC400520BD2 /* Products */; 135 | projectDirPath = ""; 136 | projectRoot = ""; 137 | targets = ( 138 | CB4D0618203C5CC400520BD2 /* Roadmap */, 139 | ); 140 | }; 141 | /* End PBXProject section */ 142 | 143 | /* Begin PBXSourcesBuildPhase section */ 144 | CB4D0615203C5CC400520BD2 /* Sources */ = { 145 | isa = PBXSourcesBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | CB4D061D203C5CC400520BD2 /* main.swift in Sources */, 149 | ); 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | /* End PBXSourcesBuildPhase section */ 153 | 154 | /* Begin XCBuildConfiguration section */ 155 | CB4D061E203C5CC400520BD2 /* Debug */ = { 156 | isa = XCBuildConfiguration; 157 | buildSettings = { 158 | ALWAYS_SEARCH_USER_PATHS = NO; 159 | CLANG_ANALYZER_NONNULL = YES; 160 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 161 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 162 | CLANG_CXX_LIBRARY = "libc++"; 163 | CLANG_ENABLE_MODULES = YES; 164 | CLANG_ENABLE_OBJC_ARC = YES; 165 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 166 | CLANG_WARN_BOOL_CONVERSION = YES; 167 | CLANG_WARN_COMMA = YES; 168 | CLANG_WARN_CONSTANT_CONVERSION = YES; 169 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 170 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 171 | CLANG_WARN_EMPTY_BODY = YES; 172 | CLANG_WARN_ENUM_CONVERSION = YES; 173 | CLANG_WARN_INFINITE_RECURSION = YES; 174 | CLANG_WARN_INT_CONVERSION = YES; 175 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 176 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 177 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 178 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 179 | CLANG_WARN_STRICT_PROTOTYPES = YES; 180 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 181 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 182 | CLANG_WARN_UNREACHABLE_CODE = YES; 183 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 184 | CODE_SIGN_IDENTITY = "-"; 185 | COPY_PHASE_STRIP = NO; 186 | DEBUG_INFORMATION_FORMAT = dwarf; 187 | ENABLE_STRICT_OBJC_MSGSEND = YES; 188 | ENABLE_TESTABILITY = YES; 189 | GCC_C_LANGUAGE_STANDARD = gnu11; 190 | GCC_DYNAMIC_NO_PIC = NO; 191 | GCC_NO_COMMON_BLOCKS = YES; 192 | GCC_OPTIMIZATION_LEVEL = 0; 193 | GCC_PREPROCESSOR_DEFINITIONS = ( 194 | "DEBUG=1", 195 | "$(inherited)", 196 | ); 197 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 198 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 199 | GCC_WARN_UNDECLARED_SELECTOR = YES; 200 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 201 | GCC_WARN_UNUSED_FUNCTION = YES; 202 | GCC_WARN_UNUSED_VARIABLE = YES; 203 | MACOSX_DEPLOYMENT_TARGET = 10.12; 204 | MTL_ENABLE_DEBUG_INFO = YES; 205 | ONLY_ACTIVE_ARCH = YES; 206 | SDKROOT = macosx; 207 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 208 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 209 | }; 210 | name = Debug; 211 | }; 212 | CB4D061F203C5CC400520BD2 /* Release */ = { 213 | isa = XCBuildConfiguration; 214 | buildSettings = { 215 | ALWAYS_SEARCH_USER_PATHS = NO; 216 | CLANG_ANALYZER_NONNULL = YES; 217 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 218 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 219 | CLANG_CXX_LIBRARY = "libc++"; 220 | CLANG_ENABLE_MODULES = YES; 221 | CLANG_ENABLE_OBJC_ARC = YES; 222 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 223 | CLANG_WARN_BOOL_CONVERSION = YES; 224 | CLANG_WARN_COMMA = YES; 225 | CLANG_WARN_CONSTANT_CONVERSION = YES; 226 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 227 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 228 | CLANG_WARN_EMPTY_BODY = YES; 229 | CLANG_WARN_ENUM_CONVERSION = YES; 230 | CLANG_WARN_INFINITE_RECURSION = YES; 231 | CLANG_WARN_INT_CONVERSION = YES; 232 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 233 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 234 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 235 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 236 | CLANG_WARN_STRICT_PROTOTYPES = YES; 237 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 238 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 239 | CLANG_WARN_UNREACHABLE_CODE = YES; 240 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 241 | CODE_SIGN_IDENTITY = "-"; 242 | COPY_PHASE_STRIP = NO; 243 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 244 | ENABLE_NS_ASSERTIONS = NO; 245 | ENABLE_STRICT_OBJC_MSGSEND = YES; 246 | GCC_C_LANGUAGE_STANDARD = gnu11; 247 | GCC_NO_COMMON_BLOCKS = YES; 248 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 249 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 250 | GCC_WARN_UNDECLARED_SELECTOR = YES; 251 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 252 | GCC_WARN_UNUSED_FUNCTION = YES; 253 | GCC_WARN_UNUSED_VARIABLE = YES; 254 | MACOSX_DEPLOYMENT_TARGET = 10.12; 255 | MTL_ENABLE_DEBUG_INFO = NO; 256 | SDKROOT = macosx; 257 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 258 | }; 259 | name = Release; 260 | }; 261 | CB4D0621203C5CC400520BD2 /* Debug */ = { 262 | isa = XCBuildConfiguration; 263 | buildSettings = { 264 | CODE_SIGN_STYLE = Automatic; 265 | FRAMEWORK_SEARCH_PATHS = ( 266 | "$(inherited)", 267 | "$(PROJECT_DIR)/cocoapods-rome/Rome", 268 | ); 269 | LD_RUNPATH_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | SWIFT_VERSION = 4.0; 272 | }; 273 | name = Debug; 274 | }; 275 | CB4D0622203C5CC400520BD2 /* Release */ = { 276 | isa = XCBuildConfiguration; 277 | buildSettings = { 278 | CODE_SIGN_STYLE = Automatic; 279 | FRAMEWORK_SEARCH_PATHS = ( 280 | "$(inherited)", 281 | "$(PROJECT_DIR)/cocoapods-rome/Rome", 282 | ); 283 | LD_RUNPATH_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; 284 | PRODUCT_NAME = "$(TARGET_NAME)"; 285 | SWIFT_VERSION = 4.0; 286 | }; 287 | name = Release; 288 | }; 289 | /* End XCBuildConfiguration section */ 290 | 291 | /* Begin XCConfigurationList section */ 292 | CB4D0614203C5CC400520BD2 /* Build configuration list for PBXProject "Roadmap" */ = { 293 | isa = XCConfigurationList; 294 | buildConfigurations = ( 295 | CB4D061E203C5CC400520BD2 /* Debug */, 296 | CB4D061F203C5CC400520BD2 /* Release */, 297 | ); 298 | defaultConfigurationIsVisible = 0; 299 | defaultConfigurationName = Release; 300 | }; 301 | CB4D0620203C5CC400520BD2 /* Build configuration list for PBXNativeTarget "Roadmap" */ = { 302 | isa = XCConfigurationList; 303 | buildConfigurations = ( 304 | CB4D0621203C5CC400520BD2 /* Debug */, 305 | CB4D0622203C5CC400520BD2 /* Release */, 306 | ); 307 | defaultConfigurationIsVisible = 0; 308 | defaultConfigurationName = Release; 309 | }; 310 | /* End XCConfigurationList section */ 311 | }; 312 | rootObject = CB4D0611203C5CC400520BD2 /* Project object */; 313 | } 314 | -------------------------------------------------------------------------------- /RoadmapProject/Roadmap.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/ESSENTIALROADMAP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/Script/Generated/ESSENTIALROADMAP.png -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/ESSENTIALROADMAP.txt: -------------------------------------------------------------------------------- 1 | @startuml 2 | left to right direction 3 | (iOS Developer) as (iOS Developer) 4 | (Practical knowledge) as (iOS Developer->Practical knowledge) 5 | (Languages) as (iOS Developer->Practical knowledge->Languages) 6 | (Objective-C) as (iOS Developer->Practical knowledge->Languages->Objective-C) 7 | (Blocks) as (iOS Developer->Practical knowledge->Languages->Objective-C->Blocks) 8 | (Runtime) as (iOS Developer->Practical knowledge->Languages->Objective-C->Runtime) 9 | (Swift) as (iOS Developer->Practical knowledge->Languages->Swift) 10 | (Initializers) as (iOS Developer->Practical knowledge->Languages->Swift->Initializers) 11 | (Protocols) as (iOS Developer->Practical knowledge->Languages->Swift->Protocols) 12 | (Structs) as (iOS Developer->Practical knowledge->Languages->Swift->Structs) 13 | (Enums) as (iOS Developer->Practical knowledge->Languages->Swift->Enums) 14 | (Memory management) as (iOS Developer->Practical knowledge->Memory management) 15 | (Stack and Heap) as (iOS Developer->Practical knowledge->Memory management->Stack and Heap) 16 | (Value vs Reference type) as (iOS Developer->Practical knowledge->Memory management->Value vs Reference type) 17 | (ARC) as (iOS Developer->Practical knowledge->Memory management->ARC) 18 | (Retain cycles) as (iOS Developer->Practical knowledge->Memory management->Retain cycles) 19 | (Memory leaks) as (iOS Developer->Practical knowledge->Memory management->Memory leaks) 20 | (Multithreading and concurrency) as (iOS Developer->Practical knowledge->Multithreading and concurrency) 21 | (GCD) as (iOS Developer->Practical knowledge->Multithreading and concurrency->GCD) 22 | (NSOperation[Queue]) as (iOS Developer->Practical knowledge->Multithreading and concurrency->NSOperation[Queue]) 23 | (Runloop) as (iOS Developer->Practical knowledge->Multithreading and concurrency->Runloop) 24 | (Synchronization) as (iOS Developer->Practical knowledge->Multithreading and concurrency->Synchronization) 25 | (Cocoa Touch) as (iOS Developer->Practical knowledge->Cocoa Touch) 26 | (UIKit) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) 27 | (UIApplication) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIApplication) 28 | (States) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIApplication->States) 29 | (UIViews) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews) 30 | (UITableViews) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews->UITableViews) 31 | (UICollectionViews) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews->UICollectionViews) 32 | (Layout) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout) 33 | (Frame-based) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout->Frame-based) 34 | (Autolayout) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout->Autolayout) 35 | (Navigation) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Navigation) 36 | (UIViewController) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViewController) 37 | (Lifecycle) as (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViewController->Lifecycle) 38 | (Foundation) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation) 39 | (Notifications vs Delegation vs Observing) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Notifications vs Delegation vs Observing) 40 | (Networking) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Networking) 41 | (Serialization) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization) 42 | (Codable) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization->Codable) 43 | (JSON) as (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization->JSON) 44 | (Work in background mode) as (iOS Developer->Practical knowledge->Cocoa Touch->Work in background mode) 45 | (Software Architecture) as (iOS Developer->Practical knowledge->Software Architecture) 46 | (Design Patterns) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) 47 | (Cocoa) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Cocoa) 48 | (Architectural) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) 49 | (MVC) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVC) 50 | (MVVM) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVVM) 51 | (MVP) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVP) 52 | (Clean architecture) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->Clean architecture) 53 | (Creational) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Creational) 54 | (Structural) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Structural) 55 | (Behavioural) as (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Behavioural) 56 | (Design Principles) as (iOS Developer->Practical knowledge->Software Architecture->Design Principles) 57 | (SOLID) as (iOS Developer->Practical knowledge->Software Architecture->Design Principles->SOLID) 58 | (Inversion of Control) as (iOS Developer->Practical knowledge->Software Architecture->Design Principles->Inversion of Control) 59 | (Dependency Injection) as (iOS Developer->Practical knowledge->Software Architecture->Design Principles->Inversion of Control->Dependency Injection) 60 | (Dependencies management) as (iOS Developer->Practical knowledge->Dependencies management) 61 | (Version Control Systems) as (iOS Developer->Practical knowledge->Version Control Systems) 62 | (Git) as (iOS Developer->Practical knowledge->Version Control Systems->Git) 63 | (Caching and Persistency) as (iOS Developer->Practical knowledge->Caching and Persistency) 64 | (Testing) as (iOS Developer->Practical knowledge->Testing) 65 | (Unit Tests) as (iOS Developer->Practical knowledge->Testing->Unit Tests) 66 | (Computer Science knowledge) as (iOS Developer->Computer Science knowledge) 67 | (Algorithms) as (iOS Developer->Computer Science knowledge->Algorithms) 68 | (Sorting) as (iOS Developer->Computer Science knowledge->Algorithms->Sorting) 69 | (Graph Theory) as (iOS Developer->Computer Science knowledge->Algorithms->Graph Theory) 70 | (Strings) as (iOS Developer->Computer Science knowledge->Algorithms->Strings) 71 | (Recursion) as (iOS Developer->Computer Science knowledge->Algorithms->Recursion) 72 | (Big-O notation) as (iOS Developer->Computer Science knowledge->Algorithms->Big-O notation) 73 | (Abstract Data Types) as (iOS Developer->Computer Science knowledge->Abstract Data Types) 74 | (Stack) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Stack) 75 | (Array) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Array) 76 | (List) as (iOS Developer->Computer Science knowledge->Abstract Data Types->List) 77 | (Map) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Map) 78 | (Set) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Set) 79 | (Graph) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Graph) 80 | (Queue) as (iOS Developer->Computer Science knowledge->Abstract Data Types->Queue) 81 | (System design) as (iOS Developer->Computer Science knowledge->System design) 82 | 83 | You -|> (iOS Developer) 84 | (iOS Developer) -down-> (iOS Developer->Practical knowledge) 85 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Languages) 86 | (iOS Developer->Practical knowledge->Languages) -down-> (iOS Developer->Practical knowledge->Languages->Objective-C) 87 | (iOS Developer->Practical knowledge->Languages->Objective-C) -down-> (iOS Developer->Practical knowledge->Languages->Objective-C->Blocks) 88 | (iOS Developer->Practical knowledge->Languages->Objective-C) -down-> (iOS Developer->Practical knowledge->Languages->Objective-C->Runtime) 89 | (iOS Developer->Practical knowledge->Languages) -down-> (iOS Developer->Practical knowledge->Languages->Swift) 90 | (iOS Developer->Practical knowledge->Languages->Swift) -down-> (iOS Developer->Practical knowledge->Languages->Swift->Initializers) 91 | (iOS Developer->Practical knowledge->Languages->Swift) -down-> (iOS Developer->Practical knowledge->Languages->Swift->Protocols) 92 | (iOS Developer->Practical knowledge->Languages->Swift) -down-> (iOS Developer->Practical knowledge->Languages->Swift->Structs) 93 | (iOS Developer->Practical knowledge->Languages->Swift) -down-> (iOS Developer->Practical knowledge->Languages->Swift->Enums) 94 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Memory management) 95 | (iOS Developer->Practical knowledge->Memory management) -down-> (iOS Developer->Practical knowledge->Memory management->Stack and Heap) 96 | (iOS Developer->Practical knowledge->Memory management) -down-> (iOS Developer->Practical knowledge->Memory management->Value vs Reference type) 97 | (iOS Developer->Practical knowledge->Memory management) -down-> (iOS Developer->Practical knowledge->Memory management->ARC) 98 | (iOS Developer->Practical knowledge->Memory management) -down-> (iOS Developer->Practical knowledge->Memory management->Retain cycles) 99 | (iOS Developer->Practical knowledge->Memory management) -down-> (iOS Developer->Practical knowledge->Memory management->Memory leaks) 100 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Multithreading and concurrency) 101 | (iOS Developer->Practical knowledge->Multithreading and concurrency) -down-> (iOS Developer->Practical knowledge->Multithreading and concurrency->GCD) 102 | (iOS Developer->Practical knowledge->Multithreading and concurrency) -down-> (iOS Developer->Practical knowledge->Multithreading and concurrency->NSOperation[Queue]) 103 | (iOS Developer->Practical knowledge->Multithreading and concurrency) -down-> (iOS Developer->Practical knowledge->Multithreading and concurrency->Runloop) 104 | (iOS Developer->Practical knowledge->Multithreading and concurrency) -down-> (iOS Developer->Practical knowledge->Multithreading and concurrency->Synchronization) 105 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Cocoa Touch) 106 | (iOS Developer->Practical knowledge->Cocoa Touch) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) 107 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIApplication) 108 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIApplication) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIApplication->States) 109 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews) 110 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews->UITableViews) 111 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViews->UICollectionViews) 112 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout) 113 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout->Frame-based) 114 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Layout->Autolayout) 115 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->Navigation) 116 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViewController) 117 | (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViewController) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->UIKit->UIViewController->Lifecycle) 118 | (iOS Developer->Practical knowledge->Cocoa Touch) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation) 119 | (iOS Developer->Practical knowledge->Cocoa Touch->Foundation) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Notifications vs Delegation vs Observing) 120 | (iOS Developer->Practical knowledge->Cocoa Touch->Foundation) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Networking) 121 | (iOS Developer->Practical knowledge->Cocoa Touch->Foundation) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization) 122 | (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization->Codable) 123 | (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Foundation->Serialization->JSON) 124 | (iOS Developer->Practical knowledge->Cocoa Touch) -down-> (iOS Developer->Practical knowledge->Cocoa Touch->Work in background mode) 125 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Software Architecture) 126 | (iOS Developer->Practical knowledge->Software Architecture) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) 127 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Cocoa) 128 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) 129 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVC) 130 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVVM) 131 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->MVP) 132 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Architectural->Clean architecture) 133 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Creational) 134 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Structural) 135 | (iOS Developer->Practical knowledge->Software Architecture->Design Patterns) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Patterns->Behavioural) 136 | (iOS Developer->Practical knowledge->Software Architecture) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Principles) 137 | (iOS Developer->Practical knowledge->Software Architecture->Design Principles) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Principles->SOLID) 138 | (iOS Developer->Practical knowledge->Software Architecture->Design Principles) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Principles->Inversion of Control) 139 | (iOS Developer->Practical knowledge->Software Architecture->Design Principles->Inversion of Control) -down-> (iOS Developer->Practical knowledge->Software Architecture->Design Principles->Inversion of Control->Dependency Injection) 140 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Dependencies management) 141 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Version Control Systems) 142 | (iOS Developer->Practical knowledge->Version Control Systems) -down-> (iOS Developer->Practical knowledge->Version Control Systems->Git) 143 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Caching and Persistency) 144 | (iOS Developer->Practical knowledge) -down-> (iOS Developer->Practical knowledge->Testing) 145 | (iOS Developer->Practical knowledge->Testing) -down-> (iOS Developer->Practical knowledge->Testing->Unit Tests) 146 | (iOS Developer) -up-> (iOS Developer->Computer Science knowledge) 147 | (iOS Developer->Computer Science knowledge) -up-> (iOS Developer->Computer Science knowledge->Algorithms) 148 | (iOS Developer->Computer Science knowledge->Algorithms) -up-> (iOS Developer->Computer Science knowledge->Algorithms->Sorting) 149 | (iOS Developer->Computer Science knowledge->Algorithms) -up-> (iOS Developer->Computer Science knowledge->Algorithms->Graph Theory) 150 | (iOS Developer->Computer Science knowledge->Algorithms) -up-> (iOS Developer->Computer Science knowledge->Algorithms->Strings) 151 | (iOS Developer->Computer Science knowledge->Algorithms) -up-> (iOS Developer->Computer Science knowledge->Algorithms->Recursion) 152 | (iOS Developer->Computer Science knowledge->Algorithms) -up-> (iOS Developer->Computer Science knowledge->Algorithms->Big-O notation) 153 | (iOS Developer->Computer Science knowledge) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types) 154 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Stack) 155 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Array) 156 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->List) 157 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Map) 158 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Set) 159 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Graph) 160 | (iOS Developer->Computer Science knowledge->Abstract Data Types) -up-> (iOS Developer->Computer Science knowledge->Abstract Data Types->Queue) 161 | (iOS Developer->Computer Science knowledge) -up-> (iOS Developer->Computer Science knowledge->System design) 162 | 163 | skinparam Shadowing false 164 | skinparam Padding 0 165 | skinparam BackgroundColor White 166 | 167 | skinparam Actor { 168 | BackgroundColor #F5F0F2 169 | BorderColor #17468A 170 | FontColor #E12D53 171 | FontName Helvetica 172 | FontSize 30 173 | FontStyle Bold 174 | } 175 | 176 | skinparam Arrow { 177 | Thickness 3 178 | Color #17468A 179 | } 180 | 181 | skinparam usecase { 182 | BorderThickness 3 183 | BackgroundColor #F5F0F2 184 | BorderColor #17468A 185 | FontColor #E12D53 186 | FontName Helvetica 187 | FontStyle Bold 188 | FontSize 20 189 | } 190 | 191 | @enduml -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/ROADMAP.md: -------------------------------------------------------------------------------- 1 | # iOS Developer Roadmap 2 | ## Text version 3 | Tapping on a link will take you to relevant materials. 4 | 5 | - [ ] [`iOS Developer`](Resources/iOS_Developer/RESOURCES.md) 6 | - [ ] [`Practical knowledge`](Resources/iOS_Developer/Practical_knowledge/RESOURCES.md) 7 | - [ ] [Getting started](Resources/iOS_Developer/Practical_knowledge/Getting_started/RESOURCES.md) 8 | - [ ] [First pet project ideas](Resources/iOS_Developer/Practical_knowledge/Getting_started/First_pet_project_ideas/RESOURCES.md) 9 | - [ ] [`Languages`](Resources/iOS_Developer/Practical_knowledge/Languages/RESOURCES.md) 10 | - [ ] [`Objective-C`](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/RESOURCES.md) 11 | - [ ] [`Blocks`](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Blocks/RESOURCES.md) 12 | - [ ] [Memory Management](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Blocks/Memory_Management/RESOURCES.md) 13 | - [ ] [KVC](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/KVC/RESOURCES.md) 14 | - [ ] [KVO](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/KVO/RESOURCES.md) 15 | - [ ] [Toll-free bridging](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Toll-free_bridging/RESOURCES.md) 16 | - [ ] [`Runtime`](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/RESOURCES.md) 17 | - [ ] [Method messaging](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/Method_messaging/RESOURCES.md) 18 | - [ ] [NSZombies and KVO implementation](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/NSZombies_and_KVO_implementation/RESOURCES.md) 19 | - [ ] [Swizzling](Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/Swizzling/RESOURCES.md) 20 | - [ ] [`Swift`](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/RESOURCES.md) 21 | - [ ] [Closures](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Closures/RESOURCES.md) 22 | - [ ] [`Initializers`](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Initializers/RESOURCES.md) 23 | - [ ] [Generics](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Generics/RESOURCES.md) 24 | - [ ] [`Protocols`](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Protocols/RESOURCES.md) 25 | - [ ] [`Structs`](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Structs/RESOURCES.md) 26 | - [ ] [`Enums`](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Enums/RESOURCES.md) 27 | - [ ] [Runtime](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Runtime/RESOURCES.md) 28 | - [ ] [Method dispatch](Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Runtime/Method_dispatch/RESOURCES.md) 29 | - [ ] [`Memory management`](Resources/iOS_Developer/Practical_knowledge/Memory_management/RESOURCES.md) 30 | - [ ] [`Stack and Heap`](Resources/iOS_Developer/Practical_knowledge/Memory_management/Stack_and_Heap/RESOURCES.md) 31 | - [ ] [`Value vs Reference type`](Resources/iOS_Developer/Practical_knowledge/Memory_management/Value_vs_Reference_type/RESOURCES.md) 32 | - [ ] [MRC](Resources/iOS_Developer/Practical_knowledge/Memory_management/MRC/RESOURCES.md) 33 | - [ ] [`ARC`](Resources/iOS_Developer/Practical_knowledge/Memory_management/ARC/RESOURCES.md) 34 | - [ ] [Weak references](Resources/iOS_Developer/Practical_knowledge/Memory_management/ARC/Weak_references/RESOURCES.md) 35 | - [ ] [`Retain cycles`](Resources/iOS_Developer/Practical_knowledge/Memory_management/Retain_cycles/RESOURCES.md) 36 | - [ ] [Garbage collection](Resources/iOS_Developer/Practical_knowledge/Memory_management/Garbage_collection/RESOURCES.md) 37 | - [ ] [`Memory leaks`](Resources/iOS_Developer/Practical_knowledge/Memory_management/Memory_leaks/RESOURCES.md) 38 | - [ ] [Shallow and deep copying](Resources/iOS_Developer/Practical_knowledge/Memory_management/Shallow_and_deep_copying/RESOURCES.md) 39 | - [ ] [Autorelease pool](Resources/iOS_Developer/Practical_knowledge/Memory_management/Autorelease_pool/RESOURCES.md) 40 | - [ ] [`Multithreading and concurrency`](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/RESOURCES.md) 41 | - [ ] [POSIX and NSThreads](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/POSIX_and_NSThreads/RESOURCES.md) 42 | - [ ] [Perform selector family](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Perform_selector_family/RESOURCES.md) 43 | - [ ] [`GCD`](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/GCD/RESOURCES.md) 44 | - [ ] [`NSOperation(Queue)`](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/NSOperation(Queue)/RESOURCES.md) 45 | - [ ] [`Runloop`](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Runloop/RESOURCES.md) 46 | - [ ] [`Synchronization`](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Synchronization/RESOURCES.md) 47 | - [ ] [Problems](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/RESOURCES.md) 48 | - [ ] [Race condition](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Race_condition/RESOURCES.md) 49 | - [ ] [Deadlock](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Deadlock/RESOURCES.md) 50 | - [ ] [Readers–writers problem](Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Readers–writers_problem/RESOURCES.md) 51 | - [ ] `Cocoa Touch` 52 | - [ ] [`UIKit`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/RESOURCES.md) 53 | - [ ] [`UIApplication`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/RESOURCES.md) 54 | - [ ] [`States`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/States/RESOURCES.md) 55 | - [ ] [UIApplicationDelegate](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/UIApplicationDelegate/RESOURCES.md) 56 | - [ ] [`UIViews`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/RESOURCES.md) 57 | - [ ] [`UITableViews`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/UITableViews/RESOURCES.md) 58 | - [ ] [`UICollectionViews`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/UICollectionViews/RESOURCES.md) 59 | - [ ] [Layers](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layers/RESOURCES.md) 60 | - [ ] [`Layout`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/RESOURCES.md) 61 | - [ ] [`Frame-based`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Frame-based/RESOURCES.md) 62 | - [ ] [`Autolayout`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Autolayout/RESOURCES.md) 63 | - [ ] [UIStackView](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Autolayout/UIStackView/RESOURCES.md) 64 | - [ ] [Animations](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Animations/RESOURCES.md) 65 | - [ ] [Transform](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Transform/RESOURCES.md) 66 | - [ ] [`Navigation`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Navigation/RESOURCES.md) 67 | - [ ] [`UIViewController`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViewController/RESOURCES.md) 68 | - [ ] [`Lifecycle`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViewController/Lifecycle/RESOURCES.md) 69 | - [ ] [`Foundation`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/RESOURCES.md) 70 | - [ ] [`Notifications vs Delegation vs Observing`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Notifications_vs_Delegation_vs_Observing/RESOURCES.md) 71 | - [ ] [Collections](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Collections/RESOURCES.md) 72 | - [ ] [`Networking`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Networking/RESOURCES.md) 73 | - [ ] [`Serialization`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/RESOURCES.md) 74 | - [ ] [NSCoding](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/NSCoding/RESOURCES.md) 75 | - [ ] [`Codable`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/Codable/RESOURCES.md) 76 | - [ ] [`JSON`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/JSON/RESOURCES.md) 77 | - [ ] [XML](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/XML/RESOURCES.md) 78 | - [ ] [Protobuf](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/Protobuf/RESOURCES.md) 79 | - [ ] [UserNotifications](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UserNotifications/RESOURCES.md) 80 | - [ ] [Core Location](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Core_Location/RESOURCES.md) 81 | - [ ] [Core Motion](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Core_Motion/RESOURCES.md) 82 | - [ ] [`Work in background mode`](Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Work_in_background_mode/RESOURCES.md) 83 | - [ ] `Software Architecture` 84 | - [ ] `Design Patterns` 85 | - [ ] [`Cocoa`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Cocoa/RESOURCES.md) 86 | - [ ] Abstract Factory 87 | - [ ] [Class cluster](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Cocoa/Abstract_Factory/Class_cluster/RESOURCES.md) 88 | - [ ] Adapter 89 | - [ ] Command Pattern 90 | - [ ] Chain of Responsibility 91 | - [ ] Decorator 92 | - [ ] Delegation 93 | - [ ] Categories 94 | - [ ] Facade 95 | - [ ] Memento 96 | - [ ] Observer 97 | - [ ] Proxy 98 | - [ ] Receptionist 99 | - [ ] Singleton 100 | - [ ] Template Method 101 | - [ ] MVC 102 | - [ ] [`Architectural`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/RESOURCES.md) 103 | - [ ] [`MVC`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/MVC/RESOURCES.md) 104 | - [ ] [`MVVM`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/MVVM/RESOURCES.md) 105 | - [ ] `MVP` 106 | - [ ] [`Clean architecture`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/RESOURCES.md) 107 | - [ ] [VIPER](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/VIPER/RESOURCES.md) 108 | - [ ] [RIBs](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/RIBs/RESOURCES.md) 109 | - [ ] [Coordinators](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Coordinators/RESOURCES.md) 110 | - [ ] `Creational` 111 | - [ ] Factory 112 | - [ ] Abstract Factory 113 | - [ ] Builder 114 | - [ ] Factory Method 115 | - [ ] Object Pool 116 | - [ ] Prototype 117 | - [ ] [Singleton](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Creational/Singleton/RESOURCES.md) 118 | - [ ] `Structural` 119 | - [ ] Adapter 120 | - [ ] Bridge 121 | - [ ] Composite 122 | - [ ] Decorator 123 | - [ ] Facade 124 | - [ ] Flyweight 125 | - [ ] Proxy 126 | - [ ] `Behavioural` 127 | - [ ] Command 128 | - [ ] Chain of responsibility 129 | - [ ] Interpreter 130 | - [ ] Iterator 131 | - [ ] Mediator 132 | - [ ] Memento 133 | - [ ] Observer 134 | - [ ] State 135 | - [ ] Strategy 136 | - [ ] Visitor 137 | - [ ] Concurrency 138 | - [ ] Anti-pattern 139 | - [ ] `Design Principles` 140 | - [ ] [`SOLID`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/SOLID/RESOURCES.md) 141 | - [ ] `Inversion of Control` 142 | - [ ] [`Dependency Injection`](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/Inversion_of_Control/Dependency_Injection/RESOURCES.md) 143 | - [ ] Service Locator 144 | - [ ] [Protocol-Oriented Programming](Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/Protocol-Oriented_Programming/RESOURCES.md) 145 | - [ ] `Dependencies management` 146 | - [ ] [Cocoapods](Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Cocoapods/RESOURCES.md) 147 | - [ ] [Carthage](Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Carthage/RESOURCES.md) 148 | - [ ] [Swift Package Manager](Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Swift_Package_Manager/RESOURCES.md) 149 | - [ ] Project structure and File/Group organisation 150 | - [ ] `Version Control Systems` 151 | - [ ] [`Git`](Resources/iOS_Developer/Practical_knowledge/Version_Control_Systems/Git/RESOURCES.md) 152 | - [ ] Debugging 153 | - [ ] [Instruments](Resources/iOS_Developer/Practical_knowledge/Debugging/Instruments/RESOURCES.md) 154 | - [ ] Best practices 155 | - [ ] Checklists 156 | - [ ] UX 157 | - [ ] `Caching and Persistency` 158 | - [ ] [Core Data](Resources/iOS_Developer/Practical_knowledge/Caching_and_Persistency/Core_Data/RESOURCES.md) 159 | - [ ] [Realm](Resources/iOS_Developer/Practical_knowledge/Caching_and_Persistency/Realm/RESOURCES.md) 160 | - [ ] YAPDatabase 161 | - [ ] `Testing` 162 | - [ ] [`Unit Tests`](Resources/iOS_Developer/Practical_knowledge/Testing/Unit_Tests/RESOURCES.md) 163 | - [ ] Snapshot Tests 164 | - [ ] Functional test 165 | - [ ] [TDD](Resources/iOS_Developer/Practical_knowledge/Testing/TDD/RESOURCES.md) 166 | - [ ] [BDD](Resources/iOS_Developer/Practical_knowledge/Testing/BDD/RESOURCES.md) 167 | - [ ] Performance optimization 168 | - [ ] Increase FPS 169 | - [ ] Decrease memory footprint 170 | - [ ] Code signing 171 | - [ ] Tools 172 | - [ ] IDE 173 | - [ ] Xcode 174 | - [ ] [Interface Builder](Resources/iOS_Developer/Practical_knowledge/Tools/IDE/Xcode/Interface_Builder/RESOURCES.md) 175 | - [ ] Swiftlint 176 | - [ ] Sourcery 177 | - [ ] [Fastlane](Resources/iOS_Developer/Practical_knowledge/Tools/Fastlane/RESOURCES.md) 178 | - [ ] Continuous Integration 179 | - [ ] Jenkins 180 | - [ ] Xcode server 181 | - [ ] Security 182 | - [ ] [Keychain](Resources/iOS_Developer/Practical_knowledge/Security/Keychain/RESOURCES.md) 183 | - [ ] Security Transforms API 184 | - [ ] tvOS 185 | - [ ] [Focus interactions](Resources/iOS_Developer/Practical_knowledge/tvOS/Focus_interactions/RESOURCES.md) 186 | - [ ] WatchKit 187 | - [ ] `Computer Science knowledge` 188 | - [ ] [`Algorithms`](Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/RESOURCES.md) 189 | - [ ] `Sorting` 190 | - [ ] `Graph Theory` 191 | - [ ] Trees 192 | - [ ] [`Strings`](Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/Strings/RESOURCES.md) 193 | - [ ] Greedy 194 | - [ ] Dynamic Programming 195 | - [ ] Bit Manipulation 196 | - [ ] `Recursion` 197 | - [ ] Game Theory 198 | - [ ] NP Complete 199 | - [ ] [`Big-O notation`](Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/Big-O_notation/RESOURCES.md) 200 | - [ ] `Abstract Data Types` 201 | - [ ] `Stack` 202 | - [ ] `Array` 203 | - [ ] `List` 204 | - [ ] `Map` 205 | - [ ] Multimap 206 | - [ ] `Set` 207 | - [ ] Multiset (Bag) 208 | - [ ] `Graph` 209 | - [ ] Tree 210 | - [ ] `Queue` 211 | - [ ] Priority Queue 212 | - [ ] Double-ended priority queue 213 | - [ ] Double-ended queue 214 | - [ ] `System design` 215 | - [ ] [Problems](Resources/iOS_Developer/Computer_Science_knowledge/System_design/Problems/RESOURCES.md) 216 | - [ ] Programming Paradigms 217 | - [ ] Object-Oriented 218 | - [ ] Functional 219 | - [ ] Functional Reactive Programming Frameworks 220 | - [ ] React Native 221 | - [ ] [RxSwift](Resources/iOS_Developer/Computer_Science_knowledge/Programming_Paradigms/Functional/Functional_Reactive_Programming_Frameworks/RxSwift/RESOURCES.md) 222 | - [ ] RxRealm, RxDataSources 223 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/ROADMAP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/Script/Generated/ROADMAP.png -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/Big-O_notation/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Computer Science knowledge > Algorithms > Big-O notation 2 | 3 | ### Articles 4 | - [ ] [Big O notation](https://en.wikipedia.org/wiki/Big_O_notation) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Computer Science knowledge > Algorithms 2 | 3 | ### Websites 4 | - [ ] [Swift Algorithm Club](https://github.com/raywenderlich/swift-algorithm-club) 5 | 6 | ### Courses 7 | - [ ] [Algorithms Specialization](https://www.coursera.org/specializations/algorithms) 8 | 9 | ### Practice 10 | - [ ] [HackerRank](https://www.hackerrank.com/dashboard) 11 | - [ ] [LeetCode](https://leetcode.com/explore/) 12 | - [ ] [topcoder](https://www.topcoder.com/member-onboarding/learning-practicing-skills/) 13 | 14 | 15 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Computer_Science_knowledge/Algorithms/Strings/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Computer Science knowledge > Algorithms > Strings 2 | 3 | ### Articles 4 | - [ ] [Swift Algorithm Club: Boyer Moore String Search Algorithm](https://www.raywenderlich.com/163964/swift-algorithm-club-booyer-moore-string-search-algorithm) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Computer_Science_knowledge/Programming_Paradigms/Functional/Functional_Reactive_Programming_Frameworks/RxSwift/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Computer Science knowledge > Programming Paradigms > Functional > Functional Reactive Programming Frameworks > RxSwift 2 | 3 | ### Articles 4 | - [ ] [Interactive diagrams of Rx Observables](http://rxmarbles.com) 5 | 6 | ### Videos 7 | - [ ] [Learning Path: RxSwift from Start to Finish](https://academy.realm.io/posts/learning-path-rxswift-from-start-to-finish/) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Computer_Science_knowledge/System_design/Problems/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Computer Science knowledge > System design > Problems 2 | 3 | ### Articles 4 | - [ ] [Top 10 System Design Interview Questions for Software Engineers](https://hackernoon.com/top-10-system-design-interview-questions-for-software-engineers-8561290f0444) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Caching_and_Persistency/Core_Data/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Caching and Persistency > Core Data 2 | 3 | ### Articles 4 | - [ ] [Core Data Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/index.html) 5 | - [ ] [Core Data from Scratch: Concurrency](https://code.tutsplus.com/tutorials/core-data-from-scratch-concurrency--cms-22131) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Caching_and_Persistency/Realm/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Caching and Persistency > Realm 2 | 3 | ### Websites 4 | - [ ] [Realm](https://realm.io/docs/swift/latest) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Core_Location/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Core Location 2 | 3 | ### Articles 4 | - [ ] [iOS Location Tracking](https://badootech.badoo.com/ios-location-tracking-aac4e2323629) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Core_Motion/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Core Motion 2 | 3 | ### Documentation 4 | - [ ] [Core Motion](https://developer.apple.com/documentation/coremotion) 5 | 6 | ### WWDC 7 | - [ ] [Health and Fitness with Core Motion](https://developer.apple.com/videos/play/wwdc2016/713/) 8 | - [ ] [Creating Immersive Apps with Core Motion](https://developer.apple.com/videos/play/wwdc2017/704/) 9 | 10 | 11 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Collections/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Collections 2 | 3 | ### Articles 4 | - [ ] [The Foundation Collection Classes](https://www.objc.io/issues/7-foundation/collections/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Networking/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Networking 2 | 3 | ### Articles 4 | - [ ] [A Crash Course on Networking in iOS](https://www.sitepoint.com/a-crash-course-on-networking-in-ios/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Notifications_vs_Delegation_vs_Observing/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Notifications vs Delegation vs Observing 2 | 3 | ### Articles 4 | - [ ] [WHEN TO USE DELEGATION, NOTIFICATION, OR OBSERVATION IN IOS](https://shinesolutions.com/2011/06/14/delegation-notification-and-observation/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation 2 | 3 | ### Articles 4 | - [ ] [Foundation Framework](https://developer.apple.com/documentation/foundation) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/Codable/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization > Codable 2 | 3 | ### Articles 4 | - [ ] [Swift Codability](https://medium.com/@ravi.aggarwal61/swift-codability-d0d232065cad) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/JSON/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization > JSON 2 | 3 | ### Articles 4 | - [ ] [Swift Blog: Working with JSON in Swift](https://developer.apple.com/swift/blog/?id=37) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/NSCoding/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization > NSCoding 2 | 3 | ### Articles 4 | - [ ] [NSCoding / NSKeyed​Archiver](http://nshipster.com/nscoding/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/Protobuf/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization > Protobuf 2 | 3 | ### Articles 4 | - [ ] [Introduction to Protocol Buffers on iOS](https://www.raywenderlich.com/149335/introduction-protocol-buffers-ios) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization 2 | 3 | ### Articles 4 | - [ ] [Encoding, Decoding and Serialization in Swift 4](https://www.raywenderlich.com/172145/encoding-decoding-and-serialization-in-swift-4) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Foundation/Serialization/XML/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Foundation > Serialization > XML 2 | 3 | ### Articles 4 | - [ ] [A Beginner’s Guide to XML Parsing in Swift](http://leaks.wanari.com/2016/08/24/xml-parsing-swift/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Animations/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Animations 2 | 3 | ### Articles 4 | - [ ] [objc.io Animations](https://www.objc.io/issues/12-animations/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layers/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Layers 2 | 3 | ### Articles 4 | - [ ] [CALayer Tutorial for iOS: Getting Started](https://www.raywenderlich.com/169004/calayer-tutorial-ios-getting-started) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Autolayout/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Layout > Autolayout 2 | 3 | ### Articles 4 | - [ ] [The Ultimate Guide To IOS AutoLayout](https://digitalleaves.com/ultimate-guide-autolayout/) 5 | - [ ] [Understanding Autolayout Constraints In Depth](https://medium.com/@ravi.aggarwal61/understanding-auto-layout-constraints-part-1-844474e81d1e) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Autolayout/UIStackView/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Layout > Autolayout > UIStackView 2 | 3 | ### Articles 4 | - [ ] [Introduction To UIStackView](https://www.raywenderlich.com/160646/uistackview-tutorial-introducing-stack-views-2) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/Frame-based/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Layout > Frame-based 2 | 3 | ### Articles 4 | - [ ] [CGGeometry](http://nshipster.com/cggeometry/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Layout/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Layout 2 | 3 | ### Articles 4 | - [ ] [Demystifying iOS Layout](http://tech.gc.com/demystifying-ios-layout/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Navigation/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Navigation 2 | 3 | ### Articles 4 | - [ ] [Improve your iOS Architecture with FlowControllers](http://merowing.info/2016/01/improve-your-ios-architecture-with-flowcontrollers/) 5 | - [ ] [Screen navigation in iOS](https://badootech.badoo.com/screen-navigation-in-ios-dd99b09228b2) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit 2 | 3 | ### Articles 4 | - [ ] [UIKit Framework](https://developer.apple.com/documentation/uikit) 5 | - [ ] [How to make friends with UIKit](https://badootech.badoo.com/how-to-make-friends-with-uikit-934ea431ffef) 6 | 7 | ### Courses 8 | - [ ] [UIKit fundamentals](https://eg.udacity.com/course/uikit-fundamentals--ud788) 9 | 10 | 11 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/Transform/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > Transform 2 | 3 | ### Articles 4 | - [ ] [Understanding UIView’s transform property (part 1)](https://ninjapro.wordpress.com/2016/08/23/understanding-uiviews-transform-property-part-1/) 5 | - [ ] [Understanding UIView’s transform property (final)](https://ninjapro.wordpress.com/2016/08/27/understanding-uiviews-transform-property-final-part/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIApplication 2 | 3 | ### Articles 4 | - [ ] [Managing Your App's Life Cycle](https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle) 5 | - [ ] [UIApplication](https://developer.apple.com/documentation/uikit/uiapplication) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/States/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIApplication > States 2 | 3 | ### Articles 4 | - [ ] [The App Life Cycle](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIApplication/UIApplicationDelegate/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIApplication > UIApplicationDelegate 2 | 3 | ### Articles 4 | - [ ] [UIApplicationDelegate](https://developer.apple.com/documentation/uikit/uiapplicationdelegate) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViewController/Lifecycle/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIViewController > Lifecycle 2 | 3 | ### Articles 4 | - [ ] [Understand the View Controller Lifecycle](https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViewController/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIViewController 2 | 3 | ### Articles 4 | - [ ] [The Role of View Controllers](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIViews 2 | 3 | ### Articles 4 | - [ ] [UIView Fundamentals](https://www.weheartswift.com/uiview-fundamentals/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/UICollectionViews/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIViews > UICollectionViews 2 | 3 | ### Articles 4 | - [ ] [Custom Collection View Layouts](https://www.objc.io/issues/3-views/collection-view-layouts/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UIKit/UIViews/UITableViews/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UIKit > UIViews > UITableViews 2 | 3 | ### Articles 4 | - [ ] [Clean Table View Code](https://www.objc.io/issues/1-view-controllers/table-views/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/UserNotifications/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > UserNotifications 2 | 3 | ### Articles 4 | - [ ] [UserNotifications in Swift 3 (Part 1)](https://medium.com/yay-its-erica/usernotifications-in-swift-3-part-1-d250e54440c1) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Cocoa_Touch/Work_in_background_mode/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Cocoa Touch > Work in background mode 2 | 3 | ### Articles 4 | - [ ] [Background Modes Tutorial: Getting Started](https://www.raywenderlich.com/143128/background-modes-tutorial-getting-started) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Debugging/Instruments/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Debugging > Instruments 2 | 3 | ### Articles 4 | - [ ] [Instruments Tutorial with Swift: Getting Started](https://www.raywenderlich.com/166125/instruments-tutorial-swift-getting-started) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Carthage/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Dependencies management > Carthage 2 | 3 | ### Articles 4 | - [ ] [Carthage Tutorial: Getting Started](https://www.raywenderlich.com/165660/carthage-tutorial-getting-started-2) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Cocoapods/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Dependencies management > Cocoapods 2 | 3 | ### Articles 4 | - [ ] [CocoaPods Tutorial for Swift: Getting Started](https://www.raywenderlich.com/156971/cocoapods-tutorial-swift-getting-started) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Dependencies_management/Swift_Package_Manager/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Dependencies management > Swift Package Manager 2 | 3 | ### Websites 4 | - [ ] [Swift Package Manager](https://swift.org/package-manager/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Getting_started/First_pet_project_ideas/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Getting started > First pet project ideas 2 | 3 | ### Articles 4 | - [ ] [So You Want To Make iPhone Apps? 10 Projects For Beginners](https://www.makeuseof.com/tag/want-make-iphone-apps-6-projects-beginners/) 5 | 6 | ### Github 7 | - [ ] [awesome-app-ideas](https://github.com/tastejs/awesome-app-ideas) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Getting_started/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Getting started 2 | 3 | ### Tutorials 4 | - [ ] [Jump Right In](https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/) 5 | - [ ] [Raywenderlich.com](https://www.raywenderlich.com/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Blocks/Memory_Management/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Blocks > Memory Management 2 | 3 | ### Articles 4 | - [ ] [How blocks are implemented (and the consequences)](https://www.cocoawithlove.com/2009/10/how-blocks-are-implemented-and.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Blocks/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Blocks 2 | 3 | ### Articles 4 | - [ ] [Friday Q&A 2009-08-14: Practical Blocks](https://www.mikeash.com/pyblog/friday-qa-2009-08-14-practical-blocks.html) 5 | 6 | ### Cheat sheet 7 | - [ ] [How Do I Declare A Block in Objective-C?](http://fuckingblocksyntax.com/) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/KVC/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > KVC 2 | 3 | ### Articles 4 | - [ ] [About Key-Value Coding](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueCoding/index.html) 5 | - [ ] [Friday Q&A 2013-02-08: Let's Build Key-Value Coding](https://www.mikeash.com/pyblog/friday-qa-2013-02-08-lets-build-key-value-coding.html) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/KVO/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > KVO 2 | 3 | ### Articles 4 | - [ ] [Introduction to Key-Value Observing Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html) 5 | - [ ] [Key-Value Observing](http://nshipster.com/key-value-observing/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C 2 | 3 | ### Books 4 | - [ ] [Effective Objective-C 2.0: 52 Specific Ways to Improve Your IOS and OS X Programs](https://www.amazon.co.uk/Effective-Objective-C-2-0-Specific-Development/dp/0321917014) 5 | 6 | ### Blogs 7 | - [ ] [NSBlog](https://www.mikeash.com/pyblog/) 8 | - [ ] [objc.io](https://www.objc.io/) 9 | 10 | 11 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/Method_messaging/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Runtime > Method messaging 2 | 3 | ### Articles 4 | - [ ] [How Objective-C messaging works](http://dantoml.com/how-objective-c-messaging-works/) 5 | - [ ] [Friday Q&A 2009-03-20: Objective-C Messaging](https://www.mikeash.com/pyblog/friday-qa-2009-03-20-objective-c-messaging.html) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/NSZombies_and_KVO_implementation/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Runtime > NSZombies and KVO implementation 2 | 3 | ### Articles 4 | - [ ] [KVO Implementation Official Documentation](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOImplementation.html) 5 | - [ ] [KVO Implementation Analysis By MikeAsh](https://www.mikeash.com/pyblog/friday-qa-2009-01-23.html) 6 | - [ ] [KVO Implementation Demo](https://github.com/okcomp/ImplementKVO) 7 | 8 | 9 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Runtime 2 | 3 | ### Articles 4 | - [ ] [Objective-C Runtime Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Runtime/Swizzling/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Runtime > Swizzling 2 | 3 | ### Articles 4 | - [ ] [Method Swizzling](http://nshipster.com/method-swizzling/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Objective-C/Toll-free_bridging/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Objective-C > Toll-free bridging 2 | 3 | ### Articles 4 | - [ ] [Friday Q&A 2010-01-22: Toll Free Bridging Internals](https://www.mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html) 5 | - [ ] [TOLL-FREE BRIDGING AND UNMANAGED](http://en.swifter.tips/toll-free/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages 2 | 3 | ### Articles 4 | - [ ] [Should You Learn Swift or Objective-C?](http://blog.teamtreehouse.com/learn-swift-or-objective-c) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Closures/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Closures 2 | 3 | ### Articles 4 | - [ ] [The Swift Programming Language: Closures](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) 5 | 6 | ### Cheat sheet 7 | - [ ] [How Do I Declare a Closure in Swift?](http://fuckingclosuresyntax.com/) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Enums/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Enums 2 | 3 | ### Articles 4 | - [ ] [The Swift Programming Language: Enumerations](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Generics/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Generics 2 | 3 | ### Articles 4 | - [ ] [Generics in Swift 4](https://medium.com/developermind/generics-in-swift-4-4f802cd6f53c) 5 | - [ ] [Swift Generics Tutorial: Getting Started](https://www.raywenderlich.com/154371/swift-generics-tutorial-getting-started) 6 | - [ ] [The Swift Programming Language: Generics](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html) 7 | 8 | 9 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Initializers/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Initializers 2 | 3 | ### Articles 4 | - [ ] [Initialization In Depth, Part 1/2](https://www.raywenderlich.com/119922/swift-tutorial-initialization-part-1) 5 | - [ ] [Initialization In Depth, Part 2/2](https://www.raywenderlich.com/121603/swift-tutorial-initialization-part-2) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Protocols/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Protocols 2 | 3 | ### Articles 4 | - [ ] [Separation of concerns using protocols in Swift](https://www.swiftbysundell.com/posts/separation-of-concerns-using-protocols-in-swift) 5 | - [ ] [Replacing legacy code using Swift protocols](https://www.swiftbysundell.com/posts/replacing-legacy-code-using-swift-protocols) 6 | - [ ] [Swift Optional Protocol Methods](https://useyourloaf.com/blog/swift-optional-protocol-methods/) 7 | - [ ] [The Swift Programming Language: Protocols](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift 2 | 3 | ### Books 4 | - [ ] [The Swift Programming Language](https://geo.itunes.apple.com/us/book/the-swift-programming-language-swift-4-1/id881256329?mt=11) 5 | - [ ] [Advanced Swift](https://www.objc.io/books/advanced-swift/) 6 | - [ ] [Swift Apprentice](https://store.raywenderlich.com/products/swift-apprentice?_ga=2.74566868.712179774.1519384552-896491817.1510924963) 7 | 8 | ### Blogs 9 | - [ ] [SWIFT BY SUNDELL](https://www.swiftbysundell.com/) 10 | - [ ] [SWIFTER](http://en.swifter.tips) 11 | 12 | 13 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Runtime/Method_dispatch/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Runtime > Method dispatch 2 | 3 | ### Articles 4 | - [ ] [Method Dispatch in Swift](https://www.raizlabs.com/dev/2016/12/swift-method-dispatch/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Runtime/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Runtime 2 | 3 | ### Articles 4 | - [ ] [How does iOS Swift Runtime work](https://stackoverflow.com/questions/37315295/how-does-ios-swift-runtime-work) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Languages/Swift/Structs/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Languages > Swift > Structs 2 | 3 | ### Articles 4 | - [ ] [The Swift Programming Language: Classes and Structures](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/ARC/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > ARC 2 | 3 | ### Articles 4 | - [ ] [Beginning ARC in iOS 5 Tutorial Part 1](https://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/ARC/Weak_references/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > ARC > Weak references 2 | 3 | ### Articles 4 | - [ ] [Friday Q&A 2015-12-11: Swift Weak References](https://www.mikeash.com/pyblog/friday-qa-2015-12-11-swift-weak-references.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Autorelease_pool/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Autorelease pool 2 | 3 | ### Articles 4 | - [ ] [@AUTORELEASEPOOL](http://en.swifter.tips/autoreleasepool/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Garbage_collection/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Garbage collection 2 | 3 | ### Quora 4 | - [ ] [How does garbage collection happen in iOS?](https://www.quora.com/How-does-garbage-collection-happen-in-iOS) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/MRC/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > MRC 2 | 3 | ### Articles 4 | - [ ] [Memory Management Tutorial for iOS](https://www.raywenderlich.com/2657/memory-management-tutorial-for-ios) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Memory_leaks/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Memory leaks 2 | 3 | ### Articles 4 | - [ ] [Swift’s ARC and Memory Leaks](https://medium.com/ios-seminar/swifts-arc-and-memory-leaks-1a227cae55da) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management 2 | 3 | ### Articles 4 | - [ ] [About Memory Management](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html) 5 | 6 | ### Quora 7 | - [ ] [How do reference counting and garbage collection compare?](https://www.quora.com/How-do-reference-counting-and-garbage-collection-compare) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Retain_cycles/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Retain cycles 2 | 3 | ### Articles 4 | - [ ] [Retain Cycles, Weak and Unowned in Swift](http://www.thomashanning.com/retain-cycles-weak-unowned-swift/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Shallow_and_deep_copying/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Shallow and deep copying 2 | 3 | ### Articles 4 | - [ ] [Object copying](https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/CopyFunctions.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Stack_and_Heap/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Stack and Heap 2 | 3 | ### Articles 4 | - [ ] [Stack and Heap Objects in Objective-C](https://www.mikeash.com/pyblog/friday-qa-2010-01-15-stack-and-heap-objects-in-objective-c.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Memory_management/Value_vs_Reference_type/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Memory management > Value vs Reference type 2 | 3 | ### Articles 4 | - [ ] [Swift Blog: Value and Reference Types](https://developer.apple.com/swift/blog/?id=10) 5 | - [ ] [Value and Reference Types](https://thatthinginswift.com/value-and-reference-types/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/GCD/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > GCD 2 | 3 | ### Articles 4 | - [ ] [Grand Central Dispatch In-Depth: Part 1/2](https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1) 5 | 6 | ### Courses 7 | - [ ] [Grand Central Dispatch GCD](https://eg.udacity.com/course/grand-central-dispatch-gcd--ud576) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/NSOperation(Queue)/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > NSOperation(Queue) 2 | 3 | ### Articles 4 | - [ ] [NSOperation](http://nshipster.com/nsoperation/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/POSIX_and_NSThreads/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > POSIX and NSThreads 2 | 3 | ### Articles 4 | - [ ] [Multithreading: CreatingThreads](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Perform_selector_family/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Perform selector family 2 | 3 | ### Articles 4 | - [ ] [performSelector may cause a leak because its selector is unknown](https://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown) 5 | - [ ] [Alternatives to performSelector](http://codeshaker.blogspot.co.uk/2012/05/alternatives-to-performselector.html) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Deadlock/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Problems > Deadlock 2 | 3 | ### Articles 4 | - [ ] [Avoiding deadlocks and latency in libdispatch](https://www.cocoawithlove.com/2010/06/avoiding-deadlocks-and-latency-in.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Problems 2 | 3 | ### Articles 4 | - [ ] [Multithreading: Common Pitfalls](https://austingwalters.com/multithreading-common-pitfalls/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Race_condition/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Problems > Race condition 2 | 3 | ### Articles 4 | - [ ] [Avoiding Race Conditions](https://developer.apple.com/library/content/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Problems/Readers–writers_problem/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Problems > Readers–writers problem 2 | 3 | ### Articles 4 | - [ ] [Wiki: Readers–writers problem](https://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem) 5 | - [ ] [Dispatch Barriers in Swift 3](https://medium.com/@oyalhi/dispatch-barriers-in-swift-3-6c4a295215d6) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency 2 | 3 | ### Articles 4 | - [ ] [Parallel programming with Swift: Basics](https://medium.com/flawless-app-stories/basics-of-parallel-programming-with-swift-93fee8425287) 5 | - [ ] [Concurrent Programming](https://www.objc.io/issues/2-concurrency/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Runloop/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Runloop 2 | 3 | ### Articles 4 | - [ ] [Run Loops](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Multithreading_and_concurrency/Synchronization/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Multithreading and concurrency > Synchronization 2 | 3 | ### Articles 4 | - [ ] [Synchronization](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge 2 | 3 | ### Articles 4 | - [ ] [How to become a professional iOS developer](http://roadfiresoftware.com/2014/04/how-to-become-a-professional-ios-developer/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Security/Keychain/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Security > Keychain 2 | 3 | ### Articles 4 | - [ ] [Basic iOS Security: Keychain and Hashing](https://www.raywenderlich.com/185370/basic-ios-security-keychain-hashing) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > Clean architecture 2 | 3 | ### Examples 4 | - [ ] [Clean architecture with RxSwift](https://github.com/sergdort/CleanArchitectureRxSwift) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/RIBs/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > Clean architecture > RIBs 2 | 3 | ### Articles 4 | - [ ] [RIBs](https://eng.uber.com/new-rider-app/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Clean_architecture/VIPER/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > Clean architecture > VIPER 2 | 3 | ### Articles 4 | - [ ] [Architecting iOS Apps with VIPER](https://www.objc.io/issues/13-architecture/viper/) 5 | 6 | ### Books 7 | - [ ] [The Book of VIPER](https://github.com/strongself/The-Book-of-VIPER) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/Coordinators/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > Coordinators 2 | 3 | ### Articles 4 | - [ ] [Coordinators Redux](http://khanlou.com/2015/10/coordinators-redux/) 5 | - [ ] [Advanced Coordinators](http://khanlou.com/tag/advanced-coordinators/) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/MVC/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > MVC 2 | 3 | ### Slides 4 | - [ ] [Stanford MVC](https://web.stanford.edu/class/cs75n/1_MVC.pdf) 5 | 6 | ### Articles 7 | - [ ] [Do MVC like it’s 1979](https://badootech.badoo.com/do-mvc-like-its-1979-da62304f6568) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/MVVM/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural > MVVM 2 | 3 | ### Articles 4 | - [ ] [Introduction to MVVM](https://www.objc.io/issues/13-architecture/mvvm/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Architectural/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Architectural 2 | 3 | ### Articles 4 | - [ ] [iOS Architecture Patterns](https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52) 5 | - [ ] [Designing iOS architecture: Motivation](https://medium.com/@borlov/e984e4ebba4a) 6 | - [ ] [Designing iOS architecture: Checklist](https://github.com/BohdanOrlov/architecture-checklist) 7 | 8 | 9 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Cocoa/Abstract_Factory/Class_cluster/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Cocoa > Abstract Factory > Class cluster 2 | 3 | ### Articles 4 | - [ ] [Class Clusters](https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Cocoa/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Cocoa 2 | 3 | ### Articles 4 | - [ ] [Cocoa Design Patterns](https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html) 5 | - [ ] [Collection for Design Patterns in Swift](https://medium.com/swiftworld/collection-for-design-patterns-in-swift-67265359aa47) 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Patterns/Creational/Singleton/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Patterns > Creational > Singleton 2 | 3 | ### Articles 4 | - [ ] [Singletons](https://thatthinginswift.com/singletons/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/Inversion_of_Control/Dependency_Injection/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Principles > Inversion of Control > Dependency Injection 2 | 3 | ### Articles 4 | - [ ] [Dependency Injection](https://www.objc.io/issues/15-testing/dependency-injection/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/Protocol-Oriented_Programming/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Principles > Protocol-Oriented Programming 2 | 3 | ### Articles 4 | - [ ] [Protocol Oriented Programming in Swift: An Introduction](https://www.appcoda.com/protocol-oriented-programming/) 5 | 6 | ### WWDC 7 | - [ ] [Protocol-Oriented Programming in Swift](https://developer.apple.com/videos/play/wwdc2015/408/) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Software_Architecture/Design_Principles/SOLID/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Software Architecture > Design Principles > SOLID 2 | 3 | ### Articles 4 | - [ ] [SOLID (object-oriented design)](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Testing/BDD/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Testing > BDD 2 | 3 | ### Articles 4 | - [ ] [Behavior-Driven Testing Tutorial for iOS with Quick & Nimble](https://www.raywenderlich.com/182118/behavior-driven-testing-tutorial-ios-quick-nimble) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Testing/TDD/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Testing > TDD 2 | 3 | ### Articles 4 | - [ ] [The Three Laws of TDD](http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Testing/Unit_Tests/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Testing > Unit Tests 2 | 3 | ### Articles 4 | - [ ] [iOS Unit Testing and UI Testing Tutorial](https://www.raywenderlich.com/150073/ios-unit-testing-and-ui-testing-tutorial) 5 | - [ ] [Singleton, Service Locator and tests in iOS](https://badootech.badoo.com/singleton-service-locator-and-tests-in-ios-d69484e88944) 6 | - [ ] [Unit testing asynchronous Swift code](https://www.swiftbysundell.com/posts/unit-testing-asynchronous-swift-code) 7 | 8 | 9 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Tools/Fastlane/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Tools > Fastlane 2 | 3 | ### Articles 4 | - [ ] [fastlane Tutorial: Getting Started](https://www.raywenderlich.com/136168/fastlane-tutorial-getting-started-2) 5 | 6 | ### Websites 7 | - [ ] [Fastlane](https://fastlane.tools) 8 | 9 | 10 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Tools/IDE/Xcode/Interface_Builder/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Tools > IDE > Xcode > Interface Builder 2 | 3 | ### Articles 4 | - [ ] [iOS User Interfaces: Storyboards vs. NIBs vs. Custom Code](https://www.toptal.com/ios/ios-user-interfaces-storyboards-vs-nibs-vs-custom-code) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/Version_Control_Systems/Git/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > Version Control Systems > Git 2 | 3 | ### Websites 4 | - [ ] [git - the simple guide](http://rogerdudler.github.io/git-guide/) 5 | - [ ] [git](https://git-scm.com) 6 | 7 | ### Books 8 | - [ ] [Pro Git](https://git-scm.com/book/en/v2) 9 | 10 | 11 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/Practical_knowledge/tvOS/Focus_interactions/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer > Practical knowledge > tvOS > Focus interactions 2 | 3 | ### Articles 4 | - [ ] [Focus-Driven Interfaces with UIKit](https://developer.apple.com/videos/play/techtalks-apple-tv/3/) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/Generated/Resources/iOS_Developer/RESOURCES.md: -------------------------------------------------------------------------------- 1 | ## iOS Developer 2 | 3 | ### Articles 4 | - [ ] [How to become an iOS developer](https://badootech.badoo.com/how-to-become-an-ios-developer-91aaa4719a91) 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/Script/main.swift: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env swift -F ../cocoapods-rome/Rome 2 | // 3 | // main.swift 4 | // Roadmap 5 | // 6 | // Created by Bohdan Orlov on 20/02/2018. 7 | // Copyright © 2018 Bohdan Orlov. All rights reserved. 8 | // 9 | 10 | import Foundation 11 | import Yaml 12 | 13 | 14 | // Domain 15 | 16 | struct Resource { 17 | let name: String 18 | let urlString: String 19 | } 20 | 21 | typealias ResourceType = String 22 | struct ResourceGroup { 23 | let type: ResourceType 24 | let resources: [Resource] 25 | } 26 | 27 | class Topic { 28 | let name: String 29 | let isEssential: Bool 30 | let resourses: [ResourceGroup] 31 | private(set) weak var superTopic: Topic? 32 | init(name: String, resourses: [ResourceGroup], superTopic: Topic?) { 33 | let essentialSuffix = "^" 34 | self.superTopic = superTopic 35 | self.resourses = resourses 36 | self.isEssential = name.hasSuffix(essentialSuffix) 37 | self.name = name.trimmingCharacters(in: CharacterSet(charactersIn: essentialSuffix)) 38 | } 39 | } 40 | 41 | // YAML parsing 42 | 43 | func parce(resourses: Yaml) -> [ResourceGroup] { 44 | let resourseGroupsMap = resourses.dictionary! 45 | let resourceGroups: [ResourceGroup] = resourseGroupsMap.values.first!.array!.map { 46 | let resourceGroupMap = $0.dictionary! 47 | let type = resourceGroupMap.keys.first!.string! 48 | let resources: [Resource] = resourceGroupMap.values.first!.array!.map { 49 | let resourceMap = $0.dictionary! 50 | let name = resourceMap.keys.first!.string! 51 | let urlString = resourceMap.values.first!.string! 52 | return Resource(name: name, urlString: urlString) 53 | } 54 | return ResourceGroup(type: type, resources: resources) 55 | } 56 | return resourceGroups 57 | } 58 | 59 | func parce(children: [Yaml]) -> ([ResourceGroup], [Yaml]) { 60 | let resourcesKeyword = "RESOURCES" 61 | let resources: [ResourceGroup] 62 | if let resourcesEntry = children.first(where: { $0.dictionary!.keys.first!.string! == resourcesKeyword}) { 63 | resources = parce(resourses: resourcesEntry) 64 | } else { 65 | resources = [] 66 | } 67 | let subtopicsYaml = children.filter { $0.dictionary!.keys.first!.string! != resourcesKeyword } 68 | return (resources, subtopicsYaml) 69 | } 70 | 71 | func parceTopics(from content: Yaml) -> [Topic] { // Topics parced by non-recursive DFS 72 | 73 | var resultTopics = [Topic]() 74 | var superTopicsByYamlTopic = [Yaml: Topic]() 75 | var stack: [Yaml] = content.array! 76 | while let topicYaml = stack.first { 77 | stack.removeFirst() 78 | let topicMap = topicYaml.dictionary! 79 | let topicName = topicMap.keys.first!.string! 80 | let childrenYaml = topicMap.values.first?.array ?? [] 81 | let (resources, subtopicsYaml) = parce(children: childrenYaml) 82 | let topic = Topic(name: topicName, resourses: resources, superTopic: superTopicsByYamlTopic[topicYaml]) 83 | resultTopics.append(topic) 84 | subtopicsYaml.forEach { superTopicsByYamlTopic[$0] = topic } 85 | stack.insert(contentsOf: subtopicsYaml, at: 0) 86 | } 87 | return resultTopics 88 | } 89 | 90 | // Markdown Rendering 91 | 92 | let generatedDir = "Generated" 93 | let resourcesDir = "Resources" 94 | let roadmapMD = "ROADMAP.md" 95 | let roadmapMDPath = generatedDir + "/" + roadmapMD 96 | 97 | extension Topic { 98 | var superTopics: [Topic] { 99 | var superTopics = [Topic]() 100 | var currentTopic = self 101 | while let superTopic = currentTopic.superTopic { 102 | superTopics.append(superTopic) 103 | currentTopic = superTopic 104 | } 105 | return superTopics 106 | } 107 | 108 | var superTopicNamesFromRoot: [String] { 109 | let reversedParents: [Topic] = superTopics.reversed() 110 | let pathComponents = (reversedParents + [self]).map { $0.name } 111 | return pathComponents 112 | } 113 | 114 | var resourceDirPathInGeneratedDir: String { 115 | return resourcesDir + "/" + superTopicNamesFromRoot.joined(separator: "/").replacingOccurrences(of: " ", with: "_") 116 | } 117 | 118 | var resourcesPathInGeneratedDir: String { 119 | return resourceDirPathInGeneratedDir + "/" + resourcesFileName 120 | } 121 | 122 | var resourcesDirPath: String { 123 | let path = generatedDir + "/" + resourceDirPathInGeneratedDir 124 | return path 125 | } 126 | 127 | var resourcesPath: String { 128 | return resourcesDirPath + "/" + resourcesFileName 129 | } 130 | 131 | var resourcesFileName: String { 132 | return "RESOURCES.md" 133 | } 134 | } 135 | 136 | func generateRoadmapMarkdown(from topics: [Topic]) { 137 | var roadmapMarkdown = "# iOS Developer Roadmap\n## Text version\nTapping on a link will take you to relevant materials.\n\n" 138 | for topic in topics { 139 | var topicName = topic.name 140 | if topic.isEssential { 141 | topicName = "`\(topicName)`" 142 | } 143 | if !topic.resourses.isEmpty { 144 | topicName = "[\(topicName)](\(topic.resourcesPathInGeneratedDir))" // Adding link to resources if any 145 | } 146 | let identation = String(repeating: " ", count: topic.superTopics.count) 147 | roadmapMarkdown.append(identation + "- [ ] " + topicName + "\n") 148 | } 149 | try! FileManager.default.createDirectory(atPath: generatedDir, withIntermediateDirectories: true, attributes: [:]) 150 | try! roadmapMarkdown.write(toFile: roadmapMDPath, atomically: false, encoding: .utf8) 151 | } 152 | 153 | func generateResourcesMarkdown(from topics: [Topic]) { 154 | for topic in topics { 155 | if topic.resourses.isEmpty { continue } 156 | let pathComponents = topic.superTopicNamesFromRoot 157 | var resourcesMarkdown = "## " + pathComponents.joined(separator: " > ") + "\n\n" 158 | for resourceGroup in topic.resourses { 159 | resourcesMarkdown.append("### " + resourceGroup.type + "\n") 160 | for resource in resourceGroup.resources { 161 | resourcesMarkdown.append("- [ ] [\(resource.name)](\(resource.urlString))\n") 162 | } 163 | resourcesMarkdown.append("\n") 164 | } 165 | resourcesMarkdown.append("\n") 166 | try! FileManager.default.createDirectory(atPath: topic.resourcesDirPath, withIntermediateDirectories: true, attributes: [:]) 167 | try! resourcesMarkdown.write(toFile: topic.resourcesPath, atomically: false, encoding: .utf8) 168 | } 169 | } 170 | 171 | // Image generation (PlantUML) 172 | 173 | extension Topic: Hashable { 174 | var hashValue: Int { 175 | return name.hashValue 176 | } 177 | 178 | static func ==(lhs: Topic, rhs: Topic) -> Bool { 179 | return lhs === rhs 180 | } 181 | } 182 | 183 | extension Topic { 184 | var plantUMLName: String { 185 | return name.sanitizedForPlantUML 186 | } 187 | var plantUMLAlias: String { 188 | return superTopicNamesFromRoot.joined(separator: "->").sanitizedForPlantUML 189 | } 190 | } 191 | 192 | extension String { 193 | var sanitizedForPlantUML: String { 194 | var result = self.replacingOccurrences(of: "(", with: "[") 195 | result = result.replacingOccurrences(of: ")", with: "]") 196 | return result 197 | } 198 | } 199 | 200 | @discardableResult 201 | func shell(_ args: String...) -> Int32 { 202 | let task = Process() 203 | task.launchPath = "/usr/bin/env" 204 | task.arguments = args 205 | task.launch() 206 | task.waitUntilExit() 207 | return task.terminationStatus 208 | } 209 | 210 | func generateImages(from topics: [Topic]) { 211 | generateImage(from: topics, essentialOnly: true) 212 | generateImage(from: topics, essentialOnly: false) 213 | } 214 | 215 | func usecaseWithAllias(from topic: Topic, skipAddingEssentialMark: Bool) -> String { 216 | let alias = topic.plantUMLAlias 217 | var essential = "" 218 | if !skipAddingEssentialMark && topic.isEssential { 219 | essential = " <<^>> " 220 | } 221 | return "(\(topic.plantUMLName)) as (\(alias))\(essential)\n" 222 | } 223 | 224 | func skinparam() -> String { 225 | let pallete = ["White", "#F5F0F2", "#17468A", "#E12D53", "#17468A"] 226 | return """ 227 | skinparam Shadowing false 228 | skinparam Padding 0 229 | skinparam BackgroundColor \(pallete[0]) 230 | 231 | skinparam Actor { 232 | BackgroundColor \(pallete[1]) 233 | BorderColor \(pallete[2]) 234 | FontColor \(pallete[3]) 235 | FontName Helvetica 236 | FontSize 30 237 | FontStyle Bold 238 | } 239 | 240 | skinparam Arrow { 241 | Thickness 3 242 | Color \(pallete[4]) 243 | } 244 | 245 | skinparam usecase { 246 | BorderThickness 3 247 | BackgroundColor \(pallete[1]) 248 | BorderColor \(pallete[2]) 249 | FontColor \(pallete[3]) 250 | FontName Helvetica 251 | FontStyle Bold 252 | FontSize 20 253 | } 254 | """ 255 | } 256 | 257 | func content(from topics: [Topic], essentialOnly: Bool) -> String { 258 | var availableArrows = ["-down->", "-up->", "-left->", "-right->"] 259 | var arrowsByParrent = [Topic: String]() 260 | var usecasesWithAliases = "" 261 | var topicRelationships = "You -|> (\(topics.first!.plantUMLAlias))\n" 262 | for topic in topics { 263 | if essentialOnly && !topic.isEssential { 264 | continue 265 | } 266 | usecasesWithAliases.append(usecaseWithAllias(from: topic, skipAddingEssentialMark: essentialOnly)) 267 | guard let superTopic = topic.superTopic else { 268 | continue 269 | } 270 | let arrow = arrowsByParrent[superTopic] ?? availableArrows.removeFirst() 271 | arrowsByParrent[topic] = arrow 272 | topicRelationships.append("(\(superTopic.plantUMLAlias)) \(arrow) (\(topic.plantUMLAlias))\n") 273 | } 274 | let content = usecasesWithAliases + "\n" + topicRelationships 275 | return content 276 | } 277 | 278 | func generateImage(from topics: [Topic], essentialOnly: Bool) { 279 | 280 | let legend = essentialOnly ? "" : """ 281 | legend right 282 | <<^>> - for essential topics 283 | endlegend 284 | """ 285 | 286 | let plantUMLText = """ 287 | @startuml 288 | left to right direction 289 | \(content(from: topics, essentialOnly: essentialOnly)) 290 | \(skinparam()) 291 | \(legend) 292 | @enduml 293 | """ 294 | 295 | let imageName = essentialOnly ? "ESSENTIALROADMAP" : "ROADMAP" 296 | 297 | let path = generatedDir + "/" + imageName + ".txt" 298 | let excistingRoadmapText = try? String(contentsOfFile: path) 299 | guard plantUMLText != excistingRoadmapText else { 300 | return 301 | } 302 | try! plantUMLText.write(toFile: path, atomically: false, encoding: .utf8) 303 | shell("java", "-DPLANTUML_LIMIT_SIZE=8192", "-jar", "plantuml.jar", path) 304 | } 305 | 306 | // Main 307 | 308 | print("Note. This script relies on hope instead of proper error handling. It will explode if you violate implicit expectations from Content.yml. Now pray...") 309 | 310 | let content = try! String(contentsOfFile: "Content.yml") 311 | let parsedContent = try! Yaml.load(content) 312 | let topics = parceTopics(from: parsedContent) 313 | try? FileManager.default.removeItem(atPath: generatedDir + "/" + resourcesDir) 314 | generateRoadmapMarkdown(from: topics) 315 | generateResourcesMarkdown(from: topics) 316 | generateImages(from: topics) 317 | 318 | print("Done! Check 'Generated' folder for output. Don't forget to check the diff before submitting a PR.") 319 | -------------------------------------------------------------------------------- /RoadmapProject/Script/plantuml.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/Script/plantuml.jar -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Podfile: -------------------------------------------------------------------------------- 1 | # Podfile used by cocoapods-rome 2 | 3 | platform :osx, '10.12' 4 | 5 | # remove everithing in { } after new release of cocoapods-rome 6 | 7 | plugin 'cocoapods-rome', { :pre_compile => Proc.new { |installer| 8 | installer.pods_project.targets.each do |target| 9 | target.build_configurations.each do |config| 10 | config.build_settings['SWIFT_VERSION'] = '4.2' 11 | end 12 | end 13 | 14 | installer.pods_project.save 15 | }, 16 | 17 | dsym: false, 18 | configuration: 'Release' 19 | } 20 | 21 | target 'caesar' do 22 | pod 'Yaml', '3.4.3' 23 | end 24 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Yaml (3.4.3) 3 | 4 | DEPENDENCIES: 5 | - Yaml (= 3.4.3) 6 | 7 | SPEC CHECKSUMS: 8 | Yaml: 9f32854890c54304772f02380c3899c8db739800 9 | 10 | PODFILE CHECKSUM: f8e060a293b5fe5f6cced4ba1c4b7b96ac9e42e3 11 | 12 | COCOAPODS: 1.4.0 13 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Yaml (3.4.3) 3 | 4 | DEPENDENCIES: 5 | - Yaml (= 3.4.3) 6 | 7 | SPEC CHECKSUMS: 8 | Yaml: 9f32854890c54304772f02380c3899c8db739800 9 | 10 | PODFILE CHECKSUM: f8e060a293b5fe5f6cced4ba1c4b7b96ac9e42e3 11 | 12 | COCOAPODS: 1.4.0 13 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Yaml 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2015 Behrang Noruzi Niya 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2015 Behrang Noruzi Niya 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | Yaml 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_caesar : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_caesar 5 | @end 6 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | # Used as a return value for each invocation of `strip_invalid_archs` function. 10 | STRIP_BINARY_RETVAL=0 11 | 12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 15 | 16 | # Copies and strips a vendored framework 17 | install_framework() 18 | { 19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 20 | local source="${BUILT_PRODUCTS_DIR}/$1" 21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 23 | elif [ -r "$1" ]; then 24 | local source="$1" 25 | fi 26 | 27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 28 | 29 | if [ -L "${source}" ]; then 30 | echo "Symlinked..." 31 | source="$(readlink "${source}")" 32 | fi 33 | 34 | # Use filter instead of exclude so missing patterns don't throw errors. 35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 37 | 38 | local basename 39 | basename="$(basename -s .framework "$1")" 40 | binary="${destination}/${basename}.framework/${basename}" 41 | if ! [ -r "$binary" ]; then 42 | binary="${destination}/${basename}" 43 | fi 44 | 45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 47 | strip_invalid_archs "$binary" 48 | fi 49 | 50 | # Resign the code if required by the build settings to avoid unstable apps 51 | code_sign_if_enabled "${destination}/$(basename "$1")" 52 | 53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 55 | local swift_runtime_libs 56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 57 | for lib in $swift_runtime_libs; do 58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 60 | code_sign_if_enabled "${destination}/${lib}" 61 | done 62 | fi 63 | } 64 | 65 | # Copies and strips a vendored dSYM 66 | install_dsym() { 67 | local source="$1" 68 | if [ -r "$source" ]; then 69 | # Copy the dSYM into a the targets temp dir. 70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 72 | 73 | local basename 74 | basename="$(basename -s .framework.dSYM "$source")" 75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 76 | 77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 79 | strip_invalid_archs "$binary" 80 | fi 81 | 82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 83 | # Move the stripped file into its final destination. 84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 86 | else 87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 89 | fi 90 | fi 91 | } 92 | 93 | # Signs a framework with the provided identity 94 | code_sign_if_enabled() { 95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 96 | # Use the current code_sign_identitiy 97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 99 | 100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 101 | code_sign_cmd="$code_sign_cmd &" 102 | fi 103 | echo "$code_sign_cmd" 104 | eval "$code_sign_cmd" 105 | fi 106 | } 107 | 108 | # Strip invalid architectures 109 | strip_invalid_archs() { 110 | binary="$1" 111 | # Get architectures for current target binary 112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 113 | # Intersect them with the architectures we are building for 114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 115 | # If there are no archs supported by this binary then warn the user 116 | if [[ -z "$intersected_archs" ]]; then 117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 118 | STRIP_BINARY_RETVAL=0 119 | return 120 | fi 121 | stripped="" 122 | for arch in $binary_archs; do 123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 124 | # Strip non-valid architectures in-place 125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 126 | stripped="$stripped $arch" 127 | fi 128 | done 129 | if [[ "$stripped" ]]; then 130 | echo "Stripped $binary of architectures:$stripped" 131 | fi 132 | STRIP_BINARY_RETVAL=1 133 | } 134 | 135 | 136 | if [[ "$CONFIGURATION" == "Release" ]]; then 137 | install_framework "${BUILT_PRODUCTS_DIR}/Yaml/Yaml.framework" 138 | fi 139 | if [[ "$CONFIGURATION" == "Debug" ]]; then 140 | install_framework "${BUILT_PRODUCTS_DIR}/Yaml/Yaml.framework" 141 | fi 142 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 143 | wait 144 | fi 145 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.xib) 55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 106 | fi 107 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_caesarVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_caesarVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Yaml" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Yaml/Yaml.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "Yaml" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_caesar { 2 | umbrella header "Pods-caesar-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Pods-caesar/Pods-caesar.release.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Yaml" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Yaml/Yaml.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "Yaml" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.4.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Yaml-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Yaml : NSObject 3 | @end 4 | @implementation PodsDummy_Yaml 5 | @end 6 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Yaml-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Yaml-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double YamlVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char YamlVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Yaml.modulemap: -------------------------------------------------------------------------------- 1 | framework module Yaml { 2 | umbrella header "Yaml-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Target Support Files/Yaml/Yaml.xcconfig: -------------------------------------------------------------------------------- 1 | APPLICATION_EXTENSION_API_ONLY = YES 2 | CODE_SIGN_IDENTITY = 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Yaml 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Yaml 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | SWIFT_VERSION = 4.1 14 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Behrang Noruzi Niya 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Readme.md: -------------------------------------------------------------------------------- 1 | # YamlSwift 2 | 3 | Load [YAML](http://yaml.org) and [JSON](http://json.org) documents using [Swift](http://www.apple.com/swift/). 4 | 5 | `YamlSwift` parses a string of YAML document(s) (or a JSON document) and returns a `Yaml` enum value representing that string. 6 | 7 | 8 | 9 | 10 | 11 | ## Install 12 | 13 | Use [Carthage](https://github.com/Carthage/Carthage) to build and install. 14 | 15 | Or use [CocoaPods](https://cocoapods.org/) : 16 | Add `pod 'Yaml'` to your `Podfile` and run `pod install`. 17 | 18 | It supports Swift Package Manager. 19 | 20 | ``` 21 | .package( 22 | url: "https://github.com/behrang/YamlSwift.git", 23 | from: " 24 | 25 | ``` 26 | 27 | And: 28 | 29 | ``` 30 | .target( 31 | name: "YourProject", 32 | dependencies: ["Yaml"]), 33 | ``` 34 | 35 | ## API 36 | 37 | 38 | 39 | 40 | 41 | ### import 42 | 43 | To use it, you should import it using the following statement: 44 | 45 | ```swift 46 | import Yaml 47 | ``` 48 | 49 | 50 | 51 | 52 | 53 | ### Yaml 54 | 55 | A Yaml value can be any of these cases: 56 | 57 | ```swift 58 | enum Yaml { 59 | case null 60 | case bool(Bool) 61 | case int(Int) 62 | case double(Double) 63 | case string(String) 64 | case array([Yaml]) 65 | case dictionary([Yaml: Yaml]) 66 | } 67 | ``` 68 | 69 | 70 | 71 | 72 | 73 | ### Yaml.load 74 | 75 | ```swift 76 | Yaml.load (String) throws -> Yaml 77 | ``` 78 | 79 | Takes a string of a YAML document and returns a `Yaml` enum. 80 | 81 | ```swift 82 | let value = try! Yaml.load("a: 1\nb: 2") 83 | print(value["a"]) // Int(1) 84 | print(value["b"]) // Int(2) 85 | print(value["c"]) // Null 86 | ``` 87 | 88 | If the input document is invalid or contains more than one YAML document, an error is thrown. 89 | 90 | ```swift 91 | do { 92 | let value = try Yaml.load("a\nb: 2") 93 | } 94 | catch { 95 | print(error) // expected end, near "b: 2" 96 | } 97 | 98 | ``` 99 | 100 | 101 | 102 | 103 | 104 | ### Yaml.loadMultiple 105 | 106 | ```swift 107 | Yaml.loadMultiple (String) throws -> [Yaml] 108 | ``` 109 | 110 | Takes a string of one or more YAML documents and returns `[Yaml]`. 111 | 112 | ```swift 113 | let value = try! Yaml.loadMultiple("---\na: 1\nb: 2\n---\na: 3\nb: 4") 114 | print(value[0]["a"]) // Int(1) 115 | print(value[1]["a"]) // Int(3) 116 | ``` 117 | 118 | It will throw an error if an error is encountered in any of the documents. 119 | 120 | 121 | 122 | 123 | 124 | ### Yaml#[Int] -> Yaml 125 | 126 | ```swift 127 | value[Int] -> Yaml 128 | value[Int] = Yaml 129 | ``` 130 | 131 | If used on a `Yaml.array` value, it will return the value at the specified index. If the index is invalid or the value is not a `Yaml.array`, `Yaml.null` is returned. You can also set a value at a specific index. Enough elements will be added to the wrapped array to set the specified index. If the value is not a `Yaml.array`, it will change to it after set. 132 | 133 | ```swift 134 | var value = try! Yaml.load("- Behrang\n- Maryam") 135 | print(value[0]) // String(Behrang) 136 | print(value[1]) // String(Maryam) 137 | print(value[2]) // Null 138 | value[2] = "Radin" 139 | print(value[2]) // String(Radin) 140 | ``` 141 | 142 | 143 | 144 | 145 | 146 | ### Yaml#[Yaml] -> Yaml 147 | 148 | ```swift 149 | value[Yaml] -> Yaml 150 | value[Yaml] = Yaml 151 | ``` 152 | 153 | If used on a `Yaml.dictionary` value, it will return the value for the specified key. If a value for the specified key does not exist, or value is not a `Yaml.dictionary`, `Yaml.null` is returned. You can also set a value for a specific key. If the value is not a `Yaml.dictionary`, it will change to it after set. 154 | 155 | Since `Yaml` is a literal convertible type, you can pass simple values to this method. 156 | 157 | ```swift 158 | var value = try! Yaml.load("first name: Behrang\nlast name: Noruzi Niya") 159 | print(value["first name"]) // String(Behrang) 160 | print(value["last name"]) // String(Noruzi Niya) 161 | print(value["age"]) // Null 162 | value["first name"] = "Radin" 163 | value["age"] = 1 164 | print(value["first name"]) // String(Radin) 165 | print(value["last name"]) // String(Noruzi Niya) 166 | print(value["age"]) // Int(1) 167 | ``` 168 | 169 | 170 | 171 | 172 | 173 | ### Yaml#bool 174 | 175 | ```swift 176 | value.bool -> Bool? 177 | ``` 178 | 179 | Returns an `Optional` value. If the value is a `Yaml.bool` value, the wrapped value is returned. Otherwise `nil` is returned. 180 | 181 | ```swift 182 | let value = try! Yaml.load("animate: true\nshow tip: false\nusage: 25") 183 | print(value["animate"].bool) // Optional(true) 184 | print(value["show tip"].bool) // Optional(false) 185 | print(value["usage"].bool) // nil 186 | ``` 187 | 188 | 189 | 190 | 191 | 192 | ### Yaml#int 193 | 194 | ```swift 195 | value.int -> Int? 196 | ``` 197 | 198 | Returns an `Optional` value. If the value is a `Yaml.int` value, the wrapped value is returned. Otherwise `nil` is returned. 199 | 200 | ```swift 201 | let value = try! Yaml.load("a: 1\nb: 2.0\nc: 2.5") 202 | print(value["a"].int) // Optional(1) 203 | print(value["b"].int) // Optional(2) 204 | print(value["c"].int) // nil 205 | ``` 206 | 207 | 208 | 209 | 210 | 211 | ### Yaml#double 212 | 213 | ```swift 214 | value.double -> Double? 215 | ``` 216 | 217 | Returns an `Optional` value. If the value is a `Yaml.double` value, the wrapped value is returned. Otherwise `nil` is returned. 218 | 219 | ```swift 220 | let value = try! Yaml.load("a: 1\nb: 2.0\nc: 2.5\nd: true") 221 | print(value["a"].double) // Optional(1.0) 222 | print(value["b"].double) // Optional(2.0) 223 | print(value["c"].double) // Optional(2.5) 224 | print(value["d"].double) // nil 225 | ``` 226 | 227 | 228 | 229 | 230 | 231 | ### Yaml#string 232 | 233 | ```swift 234 | value.string -> String? 235 | ``` 236 | 237 | Returns an `Optional` value. If the value is a `Yaml.string` value, the wrapped value is returned. Otherwise `nil` is returned. 238 | 239 | ```swift 240 | let value = try! Yaml.load("first name: Behrang\nlast name: Noruzi Niya\nage: 33") 241 | print(value["first name"].string) // Optional("Behrang") 242 | print(value["last name"].string) // Optional("Noruzi Niya") 243 | print(value["age"].string) // nil 244 | ``` 245 | 246 | 247 | 248 | 249 | 250 | ### Yaml#array 251 | 252 | ```swift 253 | value.array -> [Yaml]? 254 | ``` 255 | 256 | Returns an `Optional>` value. If the value is a `Yaml.array` value, the wrapped value is returned. Otherwise `nil` is returned. 257 | 258 | ```swift 259 | let value = try! Yaml.load("languages:\n - Swift: true\n - Objective C: false") 260 | print(value.array) // nil 261 | print(value["languages"].array) // Optional([Dictionary([String(Swift): Bool(true)]), Dictionary([String(Objective C): Bool(false)])]) 262 | ``` 263 | 264 | 265 | 266 | 267 | 268 | ### Yaml#dictionary 269 | 270 | ```swift 271 | value.dictionary -> [Yaml: Yaml]? 272 | ``` 273 | 274 | Returns an `Optional>` value. If the value is a `Yaml.dictionary` value, the wrapped value is returned. Otherwise `nil` is returned. 275 | 276 | ```swift 277 | let value = try! Yaml.load("- Swift: true\n- Objective C: false") 278 | print(value.dictionary) // nil 279 | print(value[0].dictionary) // Optional([String(Swift): Bool(true)]) 280 | ``` 281 | 282 | 283 | 284 | 285 | 286 | ### Yaml#count 287 | 288 | ```swift 289 | value.count -> Int? 290 | ``` 291 | 292 | Returns an `Optional` value. If the value is either a `Yaml.array` or a `Yaml.dictionary` value, the count of elements is returned. Otherwise `nil` is returned. 293 | 294 | ```swift 295 | let value = try! Yaml.load("- Swift: true\n- Objective C: false") 296 | print(value.count) // Optional(2) 297 | print(value[0].count) // Optional(1) 298 | print(value[0]["Swift"].count) // nil 299 | ``` 300 | 301 | 302 | 303 | 304 | 305 | ## License 306 | 307 | MIT 308 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Sources/Yaml/YAMLOperators.swift: -------------------------------------------------------------------------------- 1 | infix operator |>: Functional 2 | func |> (x: T, f: (T) -> U) -> U { 3 | return f(x) 4 | } 5 | 6 | 7 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Sources/Yaml/YAMLRegex.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | 4 | private let invalidOptionsPattern = 5 | try! NSRegularExpression(pattern: "[^ixsm]", options: []) 6 | 7 | private let regexOptions: [Character: NSRegularExpression.Options] = [ 8 | "i": .caseInsensitive, 9 | "x": .allowCommentsAndWhitespace, 10 | "s": .dotMatchesLineSeparators, 11 | "m": .anchorsMatchLines 12 | ] 13 | 14 | extension Yaml { 15 | struct Regex { 16 | 17 | static func matchRange (_ string: String, regex: NSRegularExpression) -> NSRange { 18 | let sr = NSMakeRange(0, string.utf16.count) 19 | return regex.rangeOfFirstMatch(in: string, options: [], range: sr) 20 | } 21 | 22 | static func matches (_ string: String, regex: NSRegularExpression) -> Bool { 23 | return matchRange(string, regex: regex).location != NSNotFound 24 | } 25 | 26 | static func regex (_ pattern: String, options: String = "") -> NSRegularExpression! { 27 | if matches(options, regex: invalidOptionsPattern) { 28 | return nil 29 | } 30 | 31 | let opts = options.reduce(NSRegularExpression.Options()) { (acc, opt) -> NSRegularExpression.Options in 32 | return NSRegularExpression.Options(rawValue:acc.rawValue | (regexOptions[opt] ?? NSRegularExpression.Options()).rawValue) 33 | } 34 | return try? NSRegularExpression(pattern: pattern, options: opts) 35 | } 36 | 37 | 38 | 39 | 40 | 41 | static func replace (_ regex: NSRegularExpression, template: String) -> (String) 42 | -> String { 43 | return { string in 44 | let s = NSMutableString(string: string) 45 | let range = NSMakeRange(0, string.utf16.count) 46 | _ = regex.replaceMatches(in: s, options: [], range: range, 47 | withTemplate: template) 48 | #if os(Linux) 49 | return s._bridgeToSwift() 50 | #else 51 | return s as String 52 | #endif 53 | } 54 | } 55 | 56 | static func replace (_ regex: NSRegularExpression, block: @escaping ([String]) -> String) 57 | -> (String) -> String { 58 | return { string in 59 | let s = NSMutableString(string: string) 60 | let range = NSMakeRange(0, string.utf16.count) 61 | var offset = 0 62 | regex.enumerateMatches(in: string, options: [], range: range) { 63 | result, _, _ in 64 | if let result = result { 65 | var captures = [String](repeating: "", count: result.numberOfRanges) 66 | for i in 0.. (String) 87 | -> (String, String) { 88 | return { string in 89 | let r = matchRange(string, regex: regex) 90 | if r.location == NSNotFound { 91 | return ("", string) 92 | } else { 93 | let s = NSString(string: string) 94 | let i = r.location + r.length 95 | return (s.substring(to: i), s.substring(from: i)) 96 | } 97 | } 98 | } 99 | 100 | static func splitTrail (_ regex: NSRegularExpression) -> (String) 101 | -> (String, String) { 102 | return { string in 103 | let r = matchRange(string, regex: regex) 104 | if r.location == NSNotFound { 105 | return (string, "") 106 | } else { 107 | let s = NSString(string: string) 108 | let i = r.location 109 | return (s.substring(to: i), s.substring(from: i)) 110 | } 111 | } 112 | } 113 | 114 | static func substring (_ range: NSRange, _ string : String ) -> String { 115 | return NSString(string: string).substring(with: range) 116 | } 117 | 118 | static func substring (_ index: Int, _ string: String ) -> String { 119 | return NSString(string: string).substring(from: index) 120 | } 121 | } 122 | 123 | } 124 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Sources/Yaml/YAMLResult.swift: -------------------------------------------------------------------------------- 1 | internal enum YAMLResult { 2 | case error(String) 3 | case value(T) 4 | 5 | public var error: String? { 6 | switch self { 7 | case .error(let e): return e 8 | case .value: return nil 9 | } 10 | } 11 | 12 | public var value: T? { 13 | switch self { 14 | case .error: return nil 15 | case .value(let v): return v 16 | } 17 | } 18 | 19 | public func map (f: (T) -> U) -> YAMLResult { 20 | switch self { 21 | case .error(let e): return .error(e) 22 | case .value(let v): return .value(f(v)) 23 | } 24 | } 25 | 26 | public func flatMap (f: (T) -> YAMLResult) -> YAMLResult { 27 | switch self { 28 | case .error(let e): return .error(e) 29 | case .value(let v): return f(v) 30 | } 31 | } 32 | } 33 | 34 | 35 | precedencegroup Functional { 36 | associativity: left 37 | higherThan: DefaultPrecedence 38 | } 39 | 40 | infix operator <*>: Functional 41 | func <*> (f: YAMLResult<(T) -> U>, x: YAMLResult) -> YAMLResult { 42 | switch (x, f) { 43 | case (.error(let e), _): return .error(e) 44 | case (.value, .error(let e)): return .error(e) 45 | case (.value(let x), .value(let f)): return . value(f(x)) 46 | } 47 | } 48 | 49 | infix operator <^>: Functional 50 | func <^> (f: (T) -> U, x: YAMLResult) -> YAMLResult { 51 | return x.map(f: f) 52 | } 53 | 54 | infix operator >>-: Functional 55 | func >>- (x: YAMLResult, f: (T) -> U) -> YAMLResult { 56 | return x.map(f: f) 57 | } 58 | 59 | infix operator >>=-: Functional 60 | func >>=- (x: YAMLResult, f: (T) -> YAMLResult) -> YAMLResult { 61 | return x.flatMap(f: f) 62 | } 63 | 64 | infix operator >>|: Functional 65 | func >>| (x: YAMLResult, y: YAMLResult) -> YAMLResult { 66 | return x.flatMap { _ in y } 67 | } 68 | 69 | extension Yaml { 70 | static func lift (_ v: V) -> YAMLResult { 71 | return .value(v) 72 | } 73 | 74 | static func fail (_ e: String) -> YAMLResult { 75 | return .error(e) 76 | } 77 | 78 | static func join (_ x: YAMLResult>) -> YAMLResult { 79 | return x >>=- { i in i } 80 | } 81 | 82 | static func `guard` (_ error: @autoclosure() -> String, check: Bool) -> YAMLResult<()> { 83 | return check ? lift(()) : .error(error()) 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Sources/Yaml/YAMLTokenizer.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | 4 | extension Yaml { 5 | enum TokenType: String { 6 | case yamlDirective = "%YAML" 7 | case docStart = "doc-start" 8 | case docend = "doc-end" 9 | case comment = "comment" 10 | case space = "space" 11 | case newLine = "newline" 12 | case indent = "indent" 13 | case dedent = "dedent" 14 | case null = "null" 15 | case _true = "true" 16 | case _false = "false" 17 | case infinityP = "+infinity" 18 | case infinityN = "-infinity" 19 | case nan = "nan" 20 | case double = "double" 21 | case int = "int" 22 | case intOct = "int-oct" 23 | case intHex = "int-hex" 24 | case intSex = "int-sex" 25 | case anchor = "&" 26 | case alias = "*" 27 | case comma = "," 28 | case openSB = "[" 29 | case closeSB = "]" 30 | case dash = "-" 31 | case openCB = "{" 32 | case closeCB = "}" 33 | case key = "key" 34 | case keyDQ = "key-dq" 35 | case keySQ = "key-sq" 36 | case questionMark = "?" 37 | case colonFO = ":-flow-out" 38 | case colonFI = ":-flow-in" 39 | case colon = ":" 40 | case literal = "|" 41 | case folded = ">" 42 | case reserved = "reserved" 43 | case stringDQ = "string-dq" 44 | case stringSQ = "string-sq" 45 | case stringFI = "string-flow-in" 46 | case stringFO = "string-flow-out" 47 | case string = "string" 48 | case end = "end" 49 | } 50 | } 51 | 52 | private typealias TokenPattern = (type: Yaml.TokenType, pattern: NSRegularExpression) 53 | 54 | extension Yaml { 55 | typealias TokenMatch = (type: Yaml.TokenType, match: String) 56 | } 57 | 58 | private let bBreak = "(?:\\r\\n|\\r|\\n)" 59 | 60 | // printable non-space chars, 61 | // except `:`(3a), `#`(23), `,`(2c), `[`(5b), `]`(5d), `{`(7b), `}`(7d) 62 | private let safeIn = "\\x21\\x22\\x24-\\x2b\\x2d-\\x39\\x3b-\\x5a\\x5c\\x5e-\\x7a" + 63 | "\\x7c\\x7e\\x85\\xa0-\\ud7ff\\ue000-\\ufefe\\uff00\\ufffd" + 64 | "\\U00010000-\\U0010ffff" 65 | // with flow indicators: `,`, `[`, `]`, `{`, `}` 66 | private let safeOut = "\\x2c\\x5b\\x5d\\x7b\\x7d" + safeIn 67 | private let plainOutPattern = 68 | "([\(safeOut)]#|:(?![ \\t]|\(bBreak))|[\(safeOut)]|[ \\t])+" 69 | private let plainInPattern = 70 | "([\(safeIn)]#|:(?![ \\t]|\(bBreak))|[\(safeIn)]|[ \\t]|\(bBreak))+" 71 | private let dashPattern = Yaml.Regex.regex("^-([ \\t]+(?!#|\(bBreak))|(?=[ \\t\\n]))") 72 | private let finish = "(?= *(,|\\]|\\}|( #.*)?(\(bBreak)|$)))" 73 | 74 | private let tokenPatterns: [TokenPattern] = [ 75 | (.yamlDirective, Yaml.Regex.regex("^%YAML(?= )")), 76 | (.docStart, Yaml.Regex.regex("^---")), 77 | (.docend, Yaml.Regex.regex("^\\.\\.\\.")), 78 | (.comment, Yaml.Regex.regex("^#.*|^\(bBreak) *(#.*)?(?=\(bBreak)|$)")), 79 | (.space, Yaml.Regex.regex("^ +")), 80 | (.newLine, Yaml.Regex.regex("^\(bBreak) *")), 81 | (.dash, dashPattern!), 82 | (.null, Yaml.Regex.regex("^(null|Null|NULL|~)\(finish)")), 83 | (._true, Yaml.Regex.regex("^(true|True|TRUE)\(finish)")), 84 | (._false, Yaml.Regex.regex("^(false|False|FALSE)\(finish)")), 85 | (.infinityP, Yaml.Regex.regex("^\\+?\\.(inf|Inf|INF)\(finish)")), 86 | (.infinityN, Yaml.Regex.regex("^-\\.(inf|Inf|INF)\(finish)")), 87 | (.nan, Yaml.Regex.regex("^\\.(nan|NaN|NAN)\(finish)")), 88 | (.int, Yaml.Regex.regex("^[-+]?[0-9]+\(finish)")), 89 | (.intOct, Yaml.Regex.regex("^0o[0-7]+\(finish)")), 90 | (.intHex, Yaml.Regex.regex("^0x[0-9a-fA-F]+\(finish)")), 91 | (.intSex, Yaml.Regex.regex("^[0-9]{2}(:[0-9]{2})+\(finish)")), 92 | (.double, Yaml.Regex.regex("^[-+]?(\\.[0-9]+|[0-9]+(\\.[0-9]*)?)([eE][-+]?[0-9]+)?\(finish)")), 93 | (.anchor, Yaml.Regex.regex("^&\\w+")), 94 | (.alias, Yaml.Regex.regex("^\\*\\w+")), 95 | (.comma, Yaml.Regex.regex("^,")), 96 | (.openSB, Yaml.Regex.regex("^\\[")), 97 | (.closeSB, Yaml.Regex.regex("^\\]")), 98 | (.openCB, Yaml.Regex.regex("^\\{")), 99 | (.closeCB, Yaml.Regex.regex("^\\}")), 100 | (.questionMark, Yaml.Regex.regex("^\\?( +|(?=\(bBreak)))")), 101 | (.colonFO, Yaml.Regex.regex("^:(?!:)")), 102 | (.colonFI, Yaml.Regex.regex("^:(?!:)")), 103 | (.literal, Yaml.Regex.regex("^\\|.*")), 104 | (.folded, Yaml.Regex.regex("^>.*")), 105 | (.reserved, Yaml.Regex.regex("^[@`]")), 106 | (.stringDQ, Yaml.Regex.regex("^\"([^\\\\\"]|\\\\(.|\(bBreak)))*\"")), 107 | (.stringSQ, Yaml.Regex.regex("^'([^']|'')*'")), 108 | (.stringFO, Yaml.Regex.regex("^\(plainOutPattern)(?=:([ \\t]|\(bBreak))|\(bBreak)|$)")), 109 | (.stringFI, Yaml.Regex.regex("^\(plainInPattern)")), 110 | ] 111 | 112 | extension Yaml { 113 | static func escapeErrorContext (_ text: String) -> String { 114 | let endIndex = text.index(text.startIndex, offsetBy: 50, limitedBy: text.endIndex) ?? text.endIndex 115 | let escaped = String(text[.. Yaml.Regex.replace(Yaml.Regex.regex("\\r"), template: "\\\\r") 117 | |> Yaml.Regex.replace(Yaml.Regex.regex("\\n"), template: "\\\\n") 118 | |> Yaml.Regex.replace(Yaml.Regex.regex("\""), template: "\\\\\"") 119 | return "near \"\(escaped)\"" 120 | } 121 | 122 | 123 | static func tokenize (_ text: String) -> YAMLResult<[TokenMatch]> { 124 | var text = text 125 | var matchList: [TokenMatch] = [] 126 | var indents = [0] 127 | var insideFlow = 0 128 | next: 129 | while text.endIndex > text.startIndex { 130 | for tokenPattern in tokenPatterns { 131 | let range = Yaml.Regex.matchRange(text, regex: tokenPattern.pattern) 132 | if range.location != NSNotFound { 133 | let rangeEnd = range.location + range.length 134 | switch tokenPattern.type { 135 | 136 | case .newLine: 137 | let match = (range, text) |> Yaml.Regex.substring 138 | let lastindent = indents.last ?? 0 139 | let rest = match[match.index(after: match.startIndex)...] 140 | let spaces = rest.count 141 | let nestedBlockSequence = 142 | Yaml.Regex.matches((rangeEnd, text) |> Yaml.Regex.substring, regex: dashPattern!) 143 | if spaces == lastindent { 144 | matchList.append(TokenMatch(.newLine, match)) 145 | } else if spaces > lastindent { 146 | if insideFlow == 0 { 147 | if matchList.last != nil && 148 | matchList[matchList.endIndex - 1].type == .indent { 149 | indents[indents.endIndex - 1] = spaces 150 | matchList[matchList.endIndex - 1] = TokenMatch(.indent, match) 151 | } else { 152 | indents.append(spaces) 153 | matchList.append(TokenMatch(.indent, match)) 154 | } 155 | } 156 | } else if nestedBlockSequence && spaces == lastindent - 1 { 157 | matchList.append(TokenMatch(.newLine, match)) 158 | } else { 159 | while nestedBlockSequence && spaces < (indents.last ?? 0) - 1 160 | || !nestedBlockSequence && spaces < indents.last ?? 0 { 161 | indents.removeLast() 162 | matchList.append(TokenMatch(.dedent, "")) 163 | } 164 | matchList.append(TokenMatch(.newLine, match)) 165 | } 166 | 167 | case .dash, .questionMark: 168 | let match = (range, text) |> Yaml.Regex.substring 169 | let index = match.index(after: match.startIndex) 170 | let indent = match.count 171 | indents.append((indents.last ?? 0) + indent) 172 | matchList.append( 173 | TokenMatch(tokenPattern.type, String(match[.. 0 { 178 | continue 179 | } 180 | fallthrough 181 | 182 | case .colonFI: 183 | let match = (range, text) |> Yaml.Regex.substring 184 | matchList.append(TokenMatch(.colon, match)) 185 | if insideFlow == 0 { 186 | indents.append((indents.last ?? 0) + 1) 187 | matchList.append(TokenMatch(.indent, "")) 188 | } 189 | 190 | case .openSB, .openCB: 191 | insideFlow += 1 192 | matchList.append(TokenMatch(tokenPattern.type, (range, text) |> Yaml.Regex.substring)) 193 | 194 | case .closeSB, .closeCB: 195 | insideFlow -= 1 196 | matchList.append(TokenMatch(tokenPattern.type, (range, text) |> Yaml.Regex.substring)) 197 | 198 | case .literal, .folded: 199 | matchList.append(TokenMatch(tokenPattern.type, (range, text) |> Yaml.Regex.substring)) 200 | text = (rangeEnd, text) |> Yaml.Regex.substring 201 | let lastindent = indents.last ?? 0 202 | let minindent = 1 + lastindent 203 | let blockPattern = Yaml.Regex.regex(("^(\(bBreak) *)*(\(bBreak)" + 204 | "( {\(minindent),})[^ ].*(\(bBreak)( *|\\3.*))*)(?=\(bBreak)|$)")) 205 | let (lead, rest) = text |> Yaml.Regex.splitLead(blockPattern!) 206 | text = rest 207 | let block = (lead 208 | |> Yaml.Regex.replace(Yaml.Regex.regex("^\(bBreak)"), template: "") 209 | |> Yaml.Regex.replace(Yaml.Regex.regex("^ {0,\(lastindent)}"), template: "") 210 | |> Yaml.Regex.replace(Yaml.Regex.regex("\(bBreak) {0,\(lastindent)}"), template: "\n") 211 | ) + (Yaml.Regex.matches(text, regex: Yaml.Regex.regex("^\(bBreak)")) && lead.endIndex > lead.startIndex 212 | ? "\n" : "") 213 | matchList.append(TokenMatch(.string, block)) 214 | continue next 215 | 216 | case .stringFO: 217 | if insideFlow > 0 { 218 | continue 219 | } 220 | let indent = (indents.last ?? 0) 221 | let blockPattern = Yaml.Regex.regex(("^\(bBreak)( *| {\(indent),}" + 222 | "\(plainOutPattern))(?=\(bBreak)|$)")) 223 | var block = (range, text) 224 | |> Yaml.Regex.substring 225 | |> Yaml.Regex.replace(Yaml.Regex.regex("^[ \\t]+|[ \\t]+$"), template: "") 226 | text = (rangeEnd, text) |> Yaml.Regex.substring 227 | while true { 228 | let range = Yaml.Regex.matchRange(text, regex: blockPattern!) 229 | if range.location == NSNotFound { 230 | break 231 | } 232 | let s = (range, text) |> Yaml.Regex.substring 233 | block += "\n" + 234 | Yaml.Regex.replace(Yaml.Regex.regex("^\(bBreak)[ \\t]*|[ \\t]+$"), template: "")(s) 235 | text = (range.location + range.length, text) |> Yaml.Regex.substring 236 | } 237 | matchList.append(TokenMatch(.string, block)) 238 | continue next 239 | 240 | case .stringFI: 241 | let match = (range, text) 242 | |> Yaml.Regex.substring 243 | |> Yaml.Regex.replace(Yaml.Regex.regex("^[ \\t]|[ \\t]$"), template: "") 244 | matchList.append(TokenMatch(.string, match)) 245 | 246 | case .reserved: 247 | return fail(escapeErrorContext(text)) 248 | 249 | default: 250 | matchList.append(TokenMatch(tokenPattern.type, (range, text) |> Yaml.Regex.substring)) 251 | } 252 | text = (rangeEnd, text) |> Yaml.Regex.substring 253 | continue next 254 | } 255 | } 256 | return fail(escapeErrorContext(text)) 257 | } 258 | while indents.count > 1 { 259 | indents.removeLast() 260 | matchList.append((.dedent, "")) 261 | } 262 | matchList.append((.end, "")) 263 | return lift(matchList) 264 | } 265 | } 266 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Pods/Yaml/Sources/Yaml/Yaml.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public enum Yaml { 4 | case null 5 | case bool(Bool) 6 | case int(Int) 7 | case double(Double) 8 | case string(String) 9 | case array([Yaml]) 10 | case dictionary([Yaml: Yaml]) 11 | 12 | static public func == (lhs: Yaml, rhs: Yaml) -> Bool { 13 | switch (lhs, rhs) { 14 | case (.null, .null): 15 | return true 16 | case (.bool(let lv), .bool(let rv)): 17 | return lv == rv 18 | case (.int(let lv), .int(let rv)): 19 | return lv == rv 20 | case (.int(let lv), .double(let rv)): 21 | return Double(lv) == rv 22 | case (.double(let lv), .double(let rv)): 23 | return lv == rv 24 | case (.double(let lv), .int(let rv)): 25 | return lv == Double(rv) 26 | case (.string(let lv), .string(let rv)): 27 | return lv == rv 28 | case (.array(let lv), .array(let rv)): 29 | return lv == rv 30 | case (.dictionary(let lv), .dictionary(let rv)): 31 | return lv == rv 32 | default: 33 | return false 34 | } 35 | } 36 | 37 | // unary `-` operator 38 | static public prefix func - (value: Yaml) -> Yaml { 39 | switch value { 40 | case .int(let v): 41 | return .int(-v) 42 | case .double(let v): 43 | return .double(-v) 44 | default: 45 | fatalError("`-` operator may only be used on .int or .double Yaml values") 46 | } 47 | } 48 | } 49 | 50 | extension Yaml { 51 | public enum ResultError: Error { 52 | case message(String?) 53 | } 54 | } 55 | 56 | extension Yaml: ExpressibleByNilLiteral { 57 | public init(nilLiteral: ()) { 58 | self = .null 59 | } 60 | } 61 | 62 | extension Yaml: ExpressibleByBooleanLiteral { 63 | public init(booleanLiteral: BooleanLiteralType) { 64 | self = .bool(booleanLiteral) 65 | } 66 | } 67 | 68 | extension Yaml: ExpressibleByIntegerLiteral { 69 | public init(integerLiteral: IntegerLiteralType) { 70 | self = .int(integerLiteral) 71 | } 72 | } 73 | 74 | extension Yaml: ExpressibleByFloatLiteral { 75 | public init(floatLiteral: FloatLiteralType) { 76 | self = .double(floatLiteral) 77 | } 78 | } 79 | 80 | extension Yaml: ExpressibleByStringLiteral { 81 | public init(stringLiteral: StringLiteralType) { 82 | self = .string(stringLiteral) 83 | } 84 | 85 | public init(extendedGraphemeClusterLiteral: StringLiteralType) { 86 | self = .string(extendedGraphemeClusterLiteral) 87 | } 88 | 89 | public init(unicodeScalarLiteral: StringLiteralType) { 90 | self = .string(unicodeScalarLiteral) 91 | } 92 | } 93 | 94 | extension Yaml: ExpressibleByArrayLiteral { 95 | public init(arrayLiteral elements: Yaml...) { 96 | self = .array(elements) 97 | } 98 | } 99 | 100 | extension Yaml: ExpressibleByDictionaryLiteral { 101 | public init(dictionaryLiteral elements: (Yaml, Yaml)...) { 102 | var dictionary = [Yaml: Yaml]() 103 | for (k, v) in elements { 104 | dictionary[k] = v 105 | } 106 | self = .dictionary(dictionary) 107 | } 108 | } 109 | 110 | extension Yaml: CustomStringConvertible { 111 | public var description: String { 112 | switch self { 113 | case .null: 114 | return "Null" 115 | case .bool(let b): 116 | return "Bool(\(b))" 117 | case .int(let i): 118 | return "Int(\(i))" 119 | case .double(let f): 120 | return "Double(\(f))" 121 | case .string(let s): 122 | return "String(\(s))" 123 | case .array(let s): 124 | return "Array(\(s))" 125 | case .dictionary(let m): 126 | return "Dictionary(\(m))" 127 | } 128 | } 129 | } 130 | 131 | extension Yaml: Hashable { 132 | public var hashValue: Int { 133 | return description.hashValue 134 | } 135 | } 136 | 137 | 138 | 139 | extension Yaml { 140 | 141 | public static func load (_ text: String) throws -> Yaml { 142 | let result = tokenize(text) >>=- Context.parseDoc 143 | if let value = result.value { return value } else { throw ResultError.message(result.error) } 144 | } 145 | 146 | public static func loadMultiple (_ text: String) throws -> [Yaml] { 147 | let result = tokenize(text) >>=- Context.parseDocs 148 | if let value = result.value { return value } else { throw ResultError.message(result.error) } 149 | 150 | } 151 | 152 | public static func debug (_ text: String) -> Yaml? { 153 | let result = tokenize(text) 154 | >>- { tokens in print("\n====== Tokens:\n\(tokens)"); return tokens } 155 | >>=- Context.parseDoc 156 | >>- { value -> Yaml in print("------ Doc:\n\(value)"); return value } 157 | if let error = result.error { 158 | print("~~~~~~\n\(error)") 159 | } 160 | return result.value 161 | } 162 | 163 | public static func debugMultiple (_ text: String) -> [Yaml]? { 164 | let result = tokenize(text) 165 | >>- { tokens in print("\n====== Tokens:\n\(tokens)"); return tokens } 166 | >>=- Context.parseDocs 167 | >>- { values -> [Yaml] in values.forEach { 168 | v in print("------ Doc:\n\(v)") 169 | }; return values } 170 | if let error = result.error { 171 | print("~~~~~~\n\(error)") 172 | } 173 | return result.value 174 | } 175 | } 176 | 177 | extension Yaml { 178 | public subscript(index: Int) -> Yaml { 179 | get { 180 | assert(index >= 0) 181 | switch self { 182 | case .array(let array): 183 | if array.indices.contains(index) { 184 | return array[index] 185 | } else { 186 | return .null 187 | } 188 | default: 189 | return .null 190 | } 191 | } 192 | set { 193 | assert(index >= 0) 194 | switch self { 195 | case .array(let array): 196 | let emptyCount = max(0, index + 1 - array.count) 197 | let empty = [Yaml](repeating: .null, count: emptyCount) 198 | var new = array 199 | new.append(contentsOf: empty) 200 | new[index] = newValue 201 | self = .array(new) 202 | default: 203 | var array = [Yaml](repeating: .null, count: index + 1) 204 | array[index] = newValue 205 | self = .array(array) 206 | } 207 | } 208 | } 209 | 210 | public subscript(key: Yaml) -> Yaml { 211 | get { 212 | switch self { 213 | case .dictionary(let dictionary): 214 | return dictionary[key] ?? .null 215 | default: 216 | return .null 217 | } 218 | } 219 | set { 220 | switch self { 221 | case .dictionary(let dictionary): 222 | var new = dictionary 223 | new[key] = newValue 224 | self = .dictionary(new) 225 | default: 226 | var dictionary = [Yaml: Yaml]() 227 | dictionary[key] = newValue 228 | self = .dictionary(dictionary) 229 | } 230 | } 231 | } 232 | } 233 | 234 | extension Yaml { 235 | public var bool: Bool? { 236 | switch self { 237 | case .bool(let b): 238 | return b 239 | default: 240 | return nil 241 | } 242 | } 243 | 244 | public var int: Int? { 245 | switch self { 246 | case .int(let i): 247 | return i 248 | case .double(let f): 249 | if Double(Int(f)) == f { 250 | return Int(f) 251 | } else { 252 | return nil 253 | } 254 | default: 255 | return nil 256 | } 257 | } 258 | 259 | public var double: Double? { 260 | switch self { 261 | case .double(let f): 262 | return f 263 | case .int(let i): 264 | return Double(i) 265 | default: 266 | return nil 267 | } 268 | } 269 | 270 | public var string: String? { 271 | switch self { 272 | case .string(let s): 273 | return s 274 | default: 275 | return nil 276 | } 277 | } 278 | 279 | public var array: [Yaml]? { 280 | switch self { 281 | case .array(let array): 282 | return array 283 | default: 284 | return nil 285 | } 286 | } 287 | 288 | public var dictionary: [Yaml: Yaml]? { 289 | switch self { 290 | case .dictionary(let dictionary): 291 | return dictionary 292 | default: 293 | return nil 294 | } 295 | } 296 | 297 | public var count: Int? { 298 | switch self { 299 | case .array(let array): 300 | return array.count 301 | case .dictionary(let dictionary): 302 | return dictionary.count 303 | default: 304 | return nil 305 | } 306 | } 307 | } 308 | 309 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Headers/Yaml-Swift.h: -------------------------------------------------------------------------------- 1 | // Generated by Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1) 2 | #pragma clang diagnostic push 3 | #pragma clang diagnostic ignored "-Wgcc-compat" 4 | 5 | #if !defined(__has_include) 6 | # define __has_include(x) 0 7 | #endif 8 | #if !defined(__has_attribute) 9 | # define __has_attribute(x) 0 10 | #endif 11 | #if !defined(__has_feature) 12 | # define __has_feature(x) 0 13 | #endif 14 | #if !defined(__has_warning) 15 | # define __has_warning(x) 0 16 | #endif 17 | 18 | #if __has_include() 19 | # include 20 | #endif 21 | 22 | #pragma clang diagnostic ignored "-Wauto-import" 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | #if !defined(SWIFT_TYPEDEFS) 29 | # define SWIFT_TYPEDEFS 1 30 | # if __has_include() 31 | # include 32 | # elif !defined(__cplusplus) 33 | typedef uint_least16_t char16_t; 34 | typedef uint_least32_t char32_t; 35 | # endif 36 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 37 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 38 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 39 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 40 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 41 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 42 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 43 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 44 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 45 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 46 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 47 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 48 | #endif 49 | 50 | #if !defined(SWIFT_PASTE) 51 | # define SWIFT_PASTE_HELPER(x, y) x##y 52 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 53 | #endif 54 | #if !defined(SWIFT_METATYPE) 55 | # define SWIFT_METATYPE(X) Class 56 | #endif 57 | #if !defined(SWIFT_CLASS_PROPERTY) 58 | # if __has_feature(objc_class_property) 59 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 60 | # else 61 | # define SWIFT_CLASS_PROPERTY(...) 62 | # endif 63 | #endif 64 | 65 | #if __has_attribute(objc_runtime_name) 66 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 67 | #else 68 | # define SWIFT_RUNTIME_NAME(X) 69 | #endif 70 | #if __has_attribute(swift_name) 71 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 72 | #else 73 | # define SWIFT_COMPILE_NAME(X) 74 | #endif 75 | #if __has_attribute(objc_method_family) 76 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 77 | #else 78 | # define SWIFT_METHOD_FAMILY(X) 79 | #endif 80 | #if __has_attribute(noescape) 81 | # define SWIFT_NOESCAPE __attribute__((noescape)) 82 | #else 83 | # define SWIFT_NOESCAPE 84 | #endif 85 | #if __has_attribute(warn_unused_result) 86 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 87 | #else 88 | # define SWIFT_WARN_UNUSED_RESULT 89 | #endif 90 | #if __has_attribute(noreturn) 91 | # define SWIFT_NORETURN __attribute__((noreturn)) 92 | #else 93 | # define SWIFT_NORETURN 94 | #endif 95 | #if !defined(SWIFT_CLASS_EXTRA) 96 | # define SWIFT_CLASS_EXTRA 97 | #endif 98 | #if !defined(SWIFT_PROTOCOL_EXTRA) 99 | # define SWIFT_PROTOCOL_EXTRA 100 | #endif 101 | #if !defined(SWIFT_ENUM_EXTRA) 102 | # define SWIFT_ENUM_EXTRA 103 | #endif 104 | #if !defined(SWIFT_CLASS) 105 | # if __has_attribute(objc_subclassing_restricted) 106 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 107 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 108 | # else 109 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 110 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 111 | # endif 112 | #endif 113 | 114 | #if !defined(SWIFT_PROTOCOL) 115 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 116 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 117 | #endif 118 | 119 | #if !defined(SWIFT_EXTENSION) 120 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 121 | #endif 122 | 123 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 124 | # if __has_attribute(objc_designated_initializer) 125 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 126 | # else 127 | # define OBJC_DESIGNATED_INITIALIZER 128 | # endif 129 | #endif 130 | #if !defined(SWIFT_ENUM_ATTR) 131 | # if defined(__has_attribute) && __has_attribute(enum_extensibility) 132 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 133 | # else 134 | # define SWIFT_ENUM_ATTR(_extensibility) 135 | # endif 136 | #endif 137 | #if !defined(SWIFT_ENUM) 138 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 139 | # if __has_feature(generalized_swift_name) 140 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 141 | # else 142 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 143 | # endif 144 | #endif 145 | #if !defined(SWIFT_UNAVAILABLE) 146 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 147 | #endif 148 | #if !defined(SWIFT_UNAVAILABLE_MSG) 149 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 150 | #endif 151 | #if !defined(SWIFT_AVAILABILITY) 152 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 153 | #endif 154 | #if !defined(SWIFT_DEPRECATED) 155 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 156 | #endif 157 | #if !defined(SWIFT_DEPRECATED_MSG) 158 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 159 | #endif 160 | #if __has_feature(attribute_diagnose_if_objc) 161 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 162 | #else 163 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 164 | #endif 165 | #if __has_feature(modules) 166 | #endif 167 | 168 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 169 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 170 | #if __has_warning("-Wpragma-clang-attribute") 171 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 172 | #endif 173 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 174 | #pragma clang diagnostic ignored "-Wnullability" 175 | 176 | #if __has_attribute(external_source_symbol) 177 | # pragma push_macro("any") 178 | # undef any 179 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="Yaml",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 180 | # pragma pop_macro("any") 181 | #endif 182 | 183 | #if __has_attribute(external_source_symbol) 184 | # pragma clang attribute pop 185 | #endif 186 | #pragma clang diagnostic pop 187 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Headers/Yaml-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double YamlVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char YamlVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Modules/Yaml.swiftmodule/x86_64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Modules/Yaml.swiftmodule/x86_64.swiftdoc -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Modules/Yaml.swiftmodule/x86_64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Modules/Yaml.swiftmodule/x86_64.swiftmodule -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Yaml { 2 | umbrella header "Yaml-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module Yaml.Swift { 9 | header "Yaml-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 18A391 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Yaml 11 | CFBundleIdentifier 12 | org.cocoapods.Yaml 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Yaml 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 3.4.3 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 10A255 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 18A384 37 | DTSDKName 38 | macosx10.14 39 | DTXcode 40 | 1000 41 | DTXcodeBuild 42 | 10A255 43 | 44 | 45 | -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/A/Yaml -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /RoadmapProject/cocoapods-rome/Rome/Yaml.framework/Yaml: -------------------------------------------------------------------------------- 1 | Versions/Current/Yaml -------------------------------------------------------------------------------- /generateAll.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ( cd RoadmapProject/Script && ./main.swift ) -------------------------------------------------------------------------------- /headerImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/suleturp/iOS-Developer-Roadmap/050fbdbd0539ad667c083f0c2a1c46193ebfc4a2/headerImage.png --------------------------------------------------------------------------------