├── .DS_Store ├── .gitignore ├── FlamingPants.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── FlamingPants.xcworkspace └── contents.xcworkspacedata ├── FlamingPants ├── AppDelegate.swift ├── Base.lproj │ └── LaunchScreen.xib ├── Images.xcassets │ └── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-Small-40@2x.png │ │ ├── Icon-Small-40@3x.png │ │ ├── Icon-Small@2x.png │ │ └── Icon-Small@3x.png ├── Info.plist ├── MessageModel.swift ├── MessageTableViewCell.swift ├── ViewController.swift └── flamingpants_logo.png ├── FlamingPantsTests ├── FlamingPantsTests.swift └── Info.plist ├── Podfile ├── Podfile.lock └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 35 | # 36 | Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | -------------------------------------------------------------------------------- /FlamingPants.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C2ABC1B9C7B637320CA622A1 /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F004DABFA76AED2270507AA3 /* Pods.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 11 | E3DA0F7F1B62811F00B025B5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3DA0F7E1B62811F00B025B5 /* AppDelegate.swift */; }; 12 | E3DA0F811B62811F00B025B5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3DA0F801B62811F00B025B5 /* ViewController.swift */; }; 13 | E3DA0F861B62811F00B025B5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E3DA0F851B62811F00B025B5 /* Images.xcassets */; }; 14 | E3DA0F891B62811F00B025B5 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3DA0F871B62811F00B025B5 /* LaunchScreen.xib */; }; 15 | E3DA0F951B62811F00B025B5 /* FlamingPantsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3DA0F941B62811F00B025B5 /* FlamingPantsTests.swift */; }; 16 | E3DA0F9F1B6290F900B025B5 /* MessageTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3DA0F9E1B6290F900B025B5 /* MessageTableViewCell.swift */; }; 17 | E3DA0FA11B6293DA00B025B5 /* MessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3DA0FA01B6293DA00B025B5 /* MessageModel.swift */; }; 18 | E3DA0FA31B637B0C00B025B5 /* flamingpants_logo.png in Resources */ = {isa = PBXBuildFile; fileRef = E3DA0FA21B637B0C00B025B5 /* flamingpants_logo.png */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | E3DA0F8F1B62811F00B025B5 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = E3DA0F711B62811F00B025B5 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = E3DA0F781B62811F00B025B5; 27 | remoteInfo = FlamingPants; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 5ABB63B6DA649C6A1AC9A67C /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 33 | E3DA0F791B62811F00B025B5 /* FlamingPants.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlamingPants.app; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | E3DA0F7D1B62811F00B025B5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 35 | E3DA0F7E1B62811F00B025B5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 36 | E3DA0F801B62811F00B025B5 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 37 | E3DA0F851B62811F00B025B5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 38 | E3DA0F881B62811F00B025B5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 39 | E3DA0F8E1B62811F00B025B5 /* FlamingPantsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlamingPantsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | E3DA0F931B62811F00B025B5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 41 | E3DA0F941B62811F00B025B5 /* FlamingPantsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlamingPantsTests.swift; sourceTree = ""; }; 42 | E3DA0F9E1B6290F900B025B5 /* MessageTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageTableViewCell.swift; sourceTree = ""; }; 43 | E3DA0FA01B6293DA00B025B5 /* MessageModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageModel.swift; sourceTree = ""; }; 44 | E3DA0FA21B637B0C00B025B5 /* flamingpants_logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = flamingpants_logo.png; sourceTree = ""; }; 45 | F004DABFA76AED2270507AA3 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | FE85CDE0B7433874B25D35B2 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 47 | /* End PBXFileReference section */ 48 | 49 | /* Begin PBXFrameworksBuildPhase section */ 50 | E3DA0F761B62811F00B025B5 /* Frameworks */ = { 51 | isa = PBXFrameworksBuildPhase; 52 | buildActionMask = 2147483647; 53 | files = ( 54 | C2ABC1B9C7B637320CA622A1 /* Pods.framework in Frameworks */, 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | E3DA0F8B1B62811F00B025B5 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 12F8CDA34FA4B9BF6C476B56 /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | F004DABFA76AED2270507AA3 /* Pods.framework */, 72 | ); 73 | name = Frameworks; 74 | sourceTree = ""; 75 | }; 76 | 25F978ED7562003E66AE4C2A /* Pods */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | FE85CDE0B7433874B25D35B2 /* Pods.debug.xcconfig */, 80 | 5ABB63B6DA649C6A1AC9A67C /* Pods.release.xcconfig */, 81 | ); 82 | name = Pods; 83 | sourceTree = ""; 84 | }; 85 | E3DA0F701B62811F00B025B5 = { 86 | isa = PBXGroup; 87 | children = ( 88 | E3DA0F7B1B62811F00B025B5 /* FlamingPants */, 89 | E3DA0F911B62811F00B025B5 /* FlamingPantsTests */, 90 | E3DA0F7A1B62811F00B025B5 /* Products */, 91 | 25F978ED7562003E66AE4C2A /* Pods */, 92 | 12F8CDA34FA4B9BF6C476B56 /* Frameworks */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | E3DA0F7A1B62811F00B025B5 /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | E3DA0F791B62811F00B025B5 /* FlamingPants.app */, 100 | E3DA0F8E1B62811F00B025B5 /* FlamingPantsTests.xctest */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | E3DA0F7B1B62811F00B025B5 /* FlamingPants */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | E3DA0F7E1B62811F00B025B5 /* AppDelegate.swift */, 109 | E3DA0F801B62811F00B025B5 /* ViewController.swift */, 110 | E3DA0F851B62811F00B025B5 /* Images.xcassets */, 111 | E3DA0FA21B637B0C00B025B5 /* flamingpants_logo.png */, 112 | E3DA0F871B62811F00B025B5 /* LaunchScreen.xib */, 113 | E3DA0F7C1B62811F00B025B5 /* Supporting Files */, 114 | E3DA0F9E1B6290F900B025B5 /* MessageTableViewCell.swift */, 115 | E3DA0FA01B6293DA00B025B5 /* MessageModel.swift */, 116 | ); 117 | path = FlamingPants; 118 | sourceTree = ""; 119 | }; 120 | E3DA0F7C1B62811F00B025B5 /* Supporting Files */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | E3DA0F7D1B62811F00B025B5 /* Info.plist */, 124 | ); 125 | name = "Supporting Files"; 126 | sourceTree = ""; 127 | }; 128 | E3DA0F911B62811F00B025B5 /* FlamingPantsTests */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | E3DA0F941B62811F00B025B5 /* FlamingPantsTests.swift */, 132 | E3DA0F921B62811F00B025B5 /* Supporting Files */, 133 | ); 134 | path = FlamingPantsTests; 135 | sourceTree = ""; 136 | }; 137 | E3DA0F921B62811F00B025B5 /* Supporting Files */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | E3DA0F931B62811F00B025B5 /* Info.plist */, 141 | ); 142 | name = "Supporting Files"; 143 | sourceTree = ""; 144 | }; 145 | /* End PBXGroup section */ 146 | 147 | /* Begin PBXNativeTarget section */ 148 | E3DA0F781B62811F00B025B5 /* FlamingPants */ = { 149 | isa = PBXNativeTarget; 150 | buildConfigurationList = E3DA0F981B62811F00B025B5 /* Build configuration list for PBXNativeTarget "FlamingPants" */; 151 | buildPhases = ( 152 | 321114ADFB1D4945B7C4AE76 /* Check Pods Manifest.lock */, 153 | E3DA0F751B62811F00B025B5 /* Sources */, 154 | E3DA0F761B62811F00B025B5 /* Frameworks */, 155 | E3DA0F771B62811F00B025B5 /* Resources */, 156 | 4D25E3C45254DDCB92869592 /* Embed Pods Frameworks */, 157 | 358A533E39F8FE293444FCAA /* Copy Pods Resources */, 158 | ); 159 | buildRules = ( 160 | ); 161 | dependencies = ( 162 | ); 163 | name = FlamingPants; 164 | productName = FlamingPants; 165 | productReference = E3DA0F791B62811F00B025B5 /* FlamingPants.app */; 166 | productType = "com.apple.product-type.application"; 167 | }; 168 | E3DA0F8D1B62811F00B025B5 /* FlamingPantsTests */ = { 169 | isa = PBXNativeTarget; 170 | buildConfigurationList = E3DA0F9B1B62811F00B025B5 /* Build configuration list for PBXNativeTarget "FlamingPantsTests" */; 171 | buildPhases = ( 172 | E3DA0F8A1B62811F00B025B5 /* Sources */, 173 | E3DA0F8B1B62811F00B025B5 /* Frameworks */, 174 | E3DA0F8C1B62811F00B025B5 /* Resources */, 175 | ); 176 | buildRules = ( 177 | ); 178 | dependencies = ( 179 | E3DA0F901B62811F00B025B5 /* PBXTargetDependency */, 180 | ); 181 | name = FlamingPantsTests; 182 | productName = FlamingPantsTests; 183 | productReference = E3DA0F8E1B62811F00B025B5 /* FlamingPantsTests.xctest */; 184 | productType = "com.apple.product-type.bundle.unit-test"; 185 | }; 186 | /* End PBXNativeTarget section */ 187 | 188 | /* Begin PBXProject section */ 189 | E3DA0F711B62811F00B025B5 /* Project object */ = { 190 | isa = PBXProject; 191 | attributes = { 192 | LastUpgradeCheck = 0640; 193 | ORGANIZATIONNAME = Epoque; 194 | TargetAttributes = { 195 | E3DA0F781B62811F00B025B5 = { 196 | CreatedOnToolsVersion = 6.4; 197 | }; 198 | E3DA0F8D1B62811F00B025B5 = { 199 | CreatedOnToolsVersion = 6.4; 200 | TestTargetID = E3DA0F781B62811F00B025B5; 201 | }; 202 | }; 203 | }; 204 | buildConfigurationList = E3DA0F741B62811F00B025B5 /* Build configuration list for PBXProject "FlamingPants" */; 205 | compatibilityVersion = "Xcode 3.2"; 206 | developmentRegion = English; 207 | hasScannedForEncodings = 0; 208 | knownRegions = ( 209 | en, 210 | Base, 211 | ); 212 | mainGroup = E3DA0F701B62811F00B025B5; 213 | productRefGroup = E3DA0F7A1B62811F00B025B5 /* Products */; 214 | projectDirPath = ""; 215 | projectRoot = ""; 216 | targets = ( 217 | E3DA0F781B62811F00B025B5 /* FlamingPants */, 218 | E3DA0F8D1B62811F00B025B5 /* FlamingPantsTests */, 219 | ); 220 | }; 221 | /* End PBXProject section */ 222 | 223 | /* Begin PBXResourcesBuildPhase section */ 224 | E3DA0F771B62811F00B025B5 /* Resources */ = { 225 | isa = PBXResourcesBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | E3DA0FA31B637B0C00B025B5 /* flamingpants_logo.png in Resources */, 229 | E3DA0F891B62811F00B025B5 /* LaunchScreen.xib in Resources */, 230 | E3DA0F861B62811F00B025B5 /* Images.xcassets in Resources */, 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | }; 234 | E3DA0F8C1B62811F00B025B5 /* Resources */ = { 235 | isa = PBXResourcesBuildPhase; 236 | buildActionMask = 2147483647; 237 | files = ( 238 | ); 239 | runOnlyForDeploymentPostprocessing = 0; 240 | }; 241 | /* End PBXResourcesBuildPhase section */ 242 | 243 | /* Begin PBXShellScriptBuildPhase section */ 244 | 321114ADFB1D4945B7C4AE76 /* Check Pods Manifest.lock */ = { 245 | isa = PBXShellScriptBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | ); 249 | inputPaths = ( 250 | ); 251 | name = "Check Pods Manifest.lock"; 252 | outputPaths = ( 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | shellPath = /bin/sh; 256 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 257 | showEnvVarsInLog = 0; 258 | }; 259 | 358A533E39F8FE293444FCAA /* Copy Pods Resources */ = { 260 | isa = PBXShellScriptBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | ); 264 | inputPaths = ( 265 | ); 266 | name = "Copy Pods Resources"; 267 | outputPaths = ( 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | shellPath = /bin/sh; 271 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 272 | showEnvVarsInLog = 0; 273 | }; 274 | 4D25E3C45254DDCB92869592 /* Embed Pods Frameworks */ = { 275 | isa = PBXShellScriptBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | ); 279 | inputPaths = ( 280 | ); 281 | name = "Embed Pods Frameworks"; 282 | outputPaths = ( 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | shellPath = /bin/sh; 286 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; 287 | showEnvVarsInLog = 0; 288 | }; 289 | /* End PBXShellScriptBuildPhase section */ 290 | 291 | /* Begin PBXSourcesBuildPhase section */ 292 | E3DA0F751B62811F00B025B5 /* Sources */ = { 293 | isa = PBXSourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | E3DA0F811B62811F00B025B5 /* ViewController.swift in Sources */, 297 | E3DA0FA11B6293DA00B025B5 /* MessageModel.swift in Sources */, 298 | E3DA0F7F1B62811F00B025B5 /* AppDelegate.swift in Sources */, 299 | E3DA0F9F1B6290F900B025B5 /* MessageTableViewCell.swift in Sources */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | E3DA0F8A1B62811F00B025B5 /* Sources */ = { 304 | isa = PBXSourcesBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | E3DA0F951B62811F00B025B5 /* FlamingPantsTests.swift in Sources */, 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | }; 311 | /* End PBXSourcesBuildPhase section */ 312 | 313 | /* Begin PBXTargetDependency section */ 314 | E3DA0F901B62811F00B025B5 /* PBXTargetDependency */ = { 315 | isa = PBXTargetDependency; 316 | target = E3DA0F781B62811F00B025B5 /* FlamingPants */; 317 | targetProxy = E3DA0F8F1B62811F00B025B5 /* PBXContainerItemProxy */; 318 | }; 319 | /* End PBXTargetDependency section */ 320 | 321 | /* Begin PBXVariantGroup section */ 322 | E3DA0F871B62811F00B025B5 /* LaunchScreen.xib */ = { 323 | isa = PBXVariantGroup; 324 | children = ( 325 | E3DA0F881B62811F00B025B5 /* Base */, 326 | ); 327 | name = LaunchScreen.xib; 328 | sourceTree = ""; 329 | }; 330 | /* End PBXVariantGroup section */ 331 | 332 | /* Begin XCBuildConfiguration section */ 333 | E3DA0F961B62811F00B025B5 /* Debug */ = { 334 | isa = XCBuildConfiguration; 335 | buildSettings = { 336 | ALWAYS_SEARCH_USER_PATHS = NO; 337 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 338 | CLANG_CXX_LIBRARY = "libc++"; 339 | CLANG_ENABLE_MODULES = YES; 340 | CLANG_ENABLE_OBJC_ARC = YES; 341 | CLANG_WARN_BOOL_CONVERSION = YES; 342 | CLANG_WARN_CONSTANT_CONVERSION = YES; 343 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 344 | CLANG_WARN_EMPTY_BODY = YES; 345 | CLANG_WARN_ENUM_CONVERSION = YES; 346 | CLANG_WARN_INT_CONVERSION = YES; 347 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 348 | CLANG_WARN_UNREACHABLE_CODE = YES; 349 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 350 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 351 | COPY_PHASE_STRIP = NO; 352 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 353 | ENABLE_STRICT_OBJC_MSGSEND = YES; 354 | GCC_C_LANGUAGE_STANDARD = gnu99; 355 | GCC_DYNAMIC_NO_PIC = NO; 356 | GCC_NO_COMMON_BLOCKS = YES; 357 | GCC_OPTIMIZATION_LEVEL = 0; 358 | GCC_PREPROCESSOR_DEFINITIONS = ( 359 | "DEBUG=1", 360 | "$(inherited)", 361 | ); 362 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 363 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 364 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 365 | GCC_WARN_UNDECLARED_SELECTOR = YES; 366 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 367 | GCC_WARN_UNUSED_FUNCTION = YES; 368 | GCC_WARN_UNUSED_VARIABLE = YES; 369 | IPHONEOS_DEPLOYMENT_TARGET = 8.4; 370 | MTL_ENABLE_DEBUG_INFO = YES; 371 | ONLY_ACTIVE_ARCH = YES; 372 | SDKROOT = iphoneos; 373 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 374 | }; 375 | name = Debug; 376 | }; 377 | E3DA0F971B62811F00B025B5 /* Release */ = { 378 | isa = XCBuildConfiguration; 379 | buildSettings = { 380 | ALWAYS_SEARCH_USER_PATHS = NO; 381 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 382 | CLANG_CXX_LIBRARY = "libc++"; 383 | CLANG_ENABLE_MODULES = YES; 384 | CLANG_ENABLE_OBJC_ARC = YES; 385 | CLANG_WARN_BOOL_CONVERSION = YES; 386 | CLANG_WARN_CONSTANT_CONVERSION = YES; 387 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 388 | CLANG_WARN_EMPTY_BODY = YES; 389 | CLANG_WARN_ENUM_CONVERSION = YES; 390 | CLANG_WARN_INT_CONVERSION = YES; 391 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 392 | CLANG_WARN_UNREACHABLE_CODE = YES; 393 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 394 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 395 | COPY_PHASE_STRIP = NO; 396 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 397 | ENABLE_NS_ASSERTIONS = NO; 398 | ENABLE_STRICT_OBJC_MSGSEND = YES; 399 | GCC_C_LANGUAGE_STANDARD = gnu99; 400 | GCC_NO_COMMON_BLOCKS = YES; 401 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 402 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 403 | GCC_WARN_UNDECLARED_SELECTOR = YES; 404 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 405 | GCC_WARN_UNUSED_FUNCTION = YES; 406 | GCC_WARN_UNUSED_VARIABLE = YES; 407 | IPHONEOS_DEPLOYMENT_TARGET = 8.4; 408 | MTL_ENABLE_DEBUG_INFO = NO; 409 | SDKROOT = iphoneos; 410 | VALIDATE_PRODUCT = YES; 411 | }; 412 | name = Release; 413 | }; 414 | E3DA0F991B62811F00B025B5 /* Debug */ = { 415 | isa = XCBuildConfiguration; 416 | baseConfigurationReference = FE85CDE0B7433874B25D35B2 /* Pods.debug.xcconfig */; 417 | buildSettings = { 418 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 419 | INFOPLIST_FILE = FlamingPants/Info.plist; 420 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 421 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 422 | PRODUCT_NAME = "$(TARGET_NAME)"; 423 | }; 424 | name = Debug; 425 | }; 426 | E3DA0F9A1B62811F00B025B5 /* Release */ = { 427 | isa = XCBuildConfiguration; 428 | baseConfigurationReference = 5ABB63B6DA649C6A1AC9A67C /* Pods.release.xcconfig */; 429 | buildSettings = { 430 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 431 | INFOPLIST_FILE = FlamingPants/Info.plist; 432 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 433 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 434 | PRODUCT_NAME = "$(TARGET_NAME)"; 435 | }; 436 | name = Release; 437 | }; 438 | E3DA0F9C1B62811F00B025B5 /* Debug */ = { 439 | isa = XCBuildConfiguration; 440 | buildSettings = { 441 | BUNDLE_LOADER = "$(TEST_HOST)"; 442 | FRAMEWORK_SEARCH_PATHS = ( 443 | "$(SDKROOT)/Developer/Library/Frameworks", 444 | "$(inherited)", 445 | ); 446 | GCC_PREPROCESSOR_DEFINITIONS = ( 447 | "DEBUG=1", 448 | "$(inherited)", 449 | ); 450 | INFOPLIST_FILE = FlamingPantsTests/Info.plist; 451 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FlamingPants.app/FlamingPants"; 454 | }; 455 | name = Debug; 456 | }; 457 | E3DA0F9D1B62811F00B025B5 /* Release */ = { 458 | isa = XCBuildConfiguration; 459 | buildSettings = { 460 | BUNDLE_LOADER = "$(TEST_HOST)"; 461 | FRAMEWORK_SEARCH_PATHS = ( 462 | "$(SDKROOT)/Developer/Library/Frameworks", 463 | "$(inherited)", 464 | ); 465 | INFOPLIST_FILE = FlamingPantsTests/Info.plist; 466 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 467 | PRODUCT_NAME = "$(TARGET_NAME)"; 468 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FlamingPants.app/FlamingPants"; 469 | }; 470 | name = Release; 471 | }; 472 | /* End XCBuildConfiguration section */ 473 | 474 | /* Begin XCConfigurationList section */ 475 | E3DA0F741B62811F00B025B5 /* Build configuration list for PBXProject "FlamingPants" */ = { 476 | isa = XCConfigurationList; 477 | buildConfigurations = ( 478 | E3DA0F961B62811F00B025B5 /* Debug */, 479 | E3DA0F971B62811F00B025B5 /* Release */, 480 | ); 481 | defaultConfigurationIsVisible = 0; 482 | defaultConfigurationName = Release; 483 | }; 484 | E3DA0F981B62811F00B025B5 /* Build configuration list for PBXNativeTarget "FlamingPants" */ = { 485 | isa = XCConfigurationList; 486 | buildConfigurations = ( 487 | E3DA0F991B62811F00B025B5 /* Debug */, 488 | E3DA0F9A1B62811F00B025B5 /* Release */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | E3DA0F9B1B62811F00B025B5 /* Build configuration list for PBXNativeTarget "FlamingPantsTests" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | E3DA0F9C1B62811F00B025B5 /* Debug */, 497 | E3DA0F9D1B62811F00B025B5 /* Release */, 498 | ); 499 | defaultConfigurationIsVisible = 0; 500 | defaultConfigurationName = Release; 501 | }; 502 | /* End XCConfigurationList section */ 503 | }; 504 | rootObject = E3DA0F711B62811F00B025B5 /* Project object */; 505 | } 506 | -------------------------------------------------------------------------------- /FlamingPants.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FlamingPants.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /FlamingPants/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // FlamingPants 4 | // 5 | // Created by Maximilian Alexander on 7/24/15. 6 | // Copyright (c) 2015 Epoque. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | 20 | window = UIWindow(frame: UIScreen.mainScreen().bounds) 21 | 22 | var startingViewController = ViewController() 23 | 24 | window?.rootViewController = startingViewController 25 | window?.makeKeyAndVisible() 26 | return true 27 | } 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /FlamingPants/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-Small@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-Small@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "40x40", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small-40@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small-40@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "60x60", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-60@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-60@3x.png", 37 | "scale" : "3x" 38 | } 39 | ], 40 | "info" : { 41 | "version" : 1, 42 | "author" : "xcode" 43 | } 44 | } -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /FlamingPants/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | Epoque.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /FlamingPants/MessageModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // FlamingPants 4 | // 5 | // Created by Maximilian Alexander on 7/24/15. 6 | // Copyright (c) 2015 Epoque. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Firebase 11 | 12 | struct MessageModel { 13 | var messageId: String? 14 | var name: String 15 | var body: String 16 | 17 | init(snapshot: FDataSnapshot){ 18 | messageId = snapshot.key 19 | name = snapshot.value["name"] as! String 20 | body = snapshot.value["body"] as! String 21 | } 22 | 23 | init(name: String, body: String){ 24 | self.name = name 25 | self.body = body 26 | } 27 | } -------------------------------------------------------------------------------- /FlamingPants/MessageTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageTableViewCell.swift 3 | // FlamingPants 4 | // 5 | // Created by Maximilian Alexander on 7/24/15. 6 | // Copyright (c) 2015 Epoque. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessageTableViewCell: UITableViewCell { 12 | 13 | static let REUSE_ID = "MessageTableViewCell" 14 | 15 | let nameLabel : UILabel = UILabel() 16 | let bodyLabel: UILabel = UILabel() 17 | 18 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 19 | super.init(style: style, reuseIdentifier: reuseIdentifier) 20 | 21 | nameLabel.font = UIFont.boldSystemFontOfSize(14.0) 22 | nameLabel.setTranslatesAutoresizingMaskIntoConstraints(false) 23 | bodyLabel.setTranslatesAutoresizingMaskIntoConstraints(false) 24 | bodyLabel.numberOfLines = 0 25 | 26 | self.addSubview(nameLabel) 27 | self.addSubview(bodyLabel) 28 | 29 | let views = ["nameLabel": nameLabel, "bodyLabel": bodyLabel] 30 | 31 | //Horizontal constraints 32 | let nameLabelHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[nameLabel]-10-|", options: nil, metrics: nil, views: views) 33 | let bodyLabelHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[bodyLabel]-10-|", options: nil, metrics: nil, views: views) 34 | self.addConstraints(nameLabelHorizontalConstraints) 35 | self.addConstraints(bodyLabelHorizontalConstraints) 36 | 37 | //Vertical constraints 38 | let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[nameLabel]-5-[bodyLabel]-10-|", options: nil, metrics: nil, views: views) 39 | self.addConstraints(verticalConstraints) 40 | 41 | 42 | 43 | 44 | } 45 | 46 | required init(coder aDecoder: NSCoder) { 47 | fatalError("init(coder:) has not been implemented") 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /FlamingPants/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // FlamingPants 4 | // 5 | // Created by Maximilian Alexander on 7/24/15. 6 | // Copyright (c) 2015 Epoque. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import RxCocoa 11 | import RxSwift 12 | import Firebase 13 | import SlackTextViewController 14 | import FirebaseRxSwiftExtensions 15 | 16 | class ViewController: SLKTextViewController { 17 | 18 | var messageModels : [MessageModel] = [MessageModel]() 19 | var messagesRef : Firebase 20 | var disposeBag = DisposeBag() 21 | var isInitialLoad = true; 22 | var name = "Max" 23 | 24 | var pressedRightButtonSubject : PublishSubject = PublishSubject() 25 | 26 | init(){ 27 | messagesRef = Firebase(url: "https://flamingpants-demo.firebaseio.com/").childByAppendingPath("messages"); 28 | super.init(tableViewStyle: UITableViewStyle.Plain) 29 | } 30 | 31 | required init!(coder decoder: NSCoder!) { 32 | fatalError("init(coder:) has not been implemented") 33 | } 34 | 35 | 36 | override func viewDidLoad() { 37 | super.viewDidLoad() 38 | // Do any additional setup after loading the view, typically from a nib. 39 | 40 | tableView.registerClass(MessageTableViewCell.self, forCellReuseIdentifier: MessageTableViewCell.REUSE_ID) 41 | tableView.rowHeight = UITableViewAutomaticDimension //needed for autolayout 42 | tableView.estimatedRowHeight = 50.0 //needed for autolayout 43 | inverted = true 44 | 45 | messagesRef.rx_firebaseObserveEvent(FEventType.ChildAdded) 46 | >- filter { snapshot in 47 | return !(snapshot.value is NSNull) 48 | } 49 | >- map {snapshot in 50 | return MessageModel(snapshot: snapshot) 51 | } 52 | >- subscribeNext({ (messageModel: MessageModel) -> Void in 53 | self.messageModels.insert(messageModel, atIndex: 0); 54 | if(self.isInitialLoad == false){ 55 | self.tableView.beginUpdates() 56 | self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: UITableViewRowAnimation.Automatic) 57 | self.tableView.endUpdates() 58 | //you can do everything else here! 59 | } 60 | }) 61 | >- disposeBag.addDisposable 62 | 63 | messagesRef.rx_firebaseObserveSingleEvent(FEventType.Value) 64 | >- subscribeNext({ (snapshot: FDataSnapshot) -> Void in 65 | self.tableView.reloadData() 66 | self.isInitialLoad = false; 67 | }) 68 | >- disposeBag.addDisposable 69 | 70 | 71 | pressedRightButtonSubject 72 | >- flatMap({ (bodyText: String) -> Observable in 73 | var name = self.name 74 | return self.messagesRef.childByAutoId().rx_firebaseSetValue(["name" : name, "body": bodyText]) 75 | }) 76 | >- subscribeNext({ (newMessageReference:Firebase) -> Void in 77 | println("A new message was successfully committed to firebase") 78 | }) 79 | >- disposeBag.addDisposable 80 | } 81 | 82 | override func didPressRightButton(sender: AnyObject!) { 83 | sendNext(pressedRightButtonSubject, self.textView.text) 84 | super.didPressRightButton(sender) // this important. calling the super.didPressRightButton will clear the method. We cannot use rx_tap due to inheritance 85 | } 86 | 87 | 88 | override func viewDidAppear(animated: Bool) { 89 | super.viewDidAppear(animated) 90 | let alertController = UIAlertController(title: "Need your name!", message: nil, preferredStyle: UIAlertControllerStyle.Alert) 91 | 92 | alertController.addTextFieldWithConfigurationHandler { (textField) in 93 | textField.placeholder = "Your Name" 94 | } 95 | 96 | alertController.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: { (action) -> Void in 97 | let nameTextField = alertController.textFields?[0] as! UITextField 98 | self.name = nameTextField.text 99 | })) 100 | self.presentViewController(alertController, animated: true, completion: nil) 101 | } 102 | 103 | override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 104 | return messageModels.count 105 | } 106 | 107 | override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 108 | let cell = tableView.dequeueReusableCellWithIdentifier(MessageTableViewCell.REUSE_ID, forIndexPath: indexPath) as! MessageTableViewCell 109 | 110 | var messageModelAtIndexPath = messageModels[indexPath.row] 111 | 112 | cell.nameLabel.text = messageModelAtIndexPath.name 113 | cell.bodyLabel.text = messageModelAtIndexPath.body 114 | 115 | cell.transform = self.tableView.transform //very important don't forget this 116 | return cell 117 | } 118 | 119 | override func didReceiveMemoryWarning() { 120 | super.didReceiveMemoryWarning() 121 | // Dispose of any resources that can be recreated. 122 | } 123 | 124 | } 125 | 126 | -------------------------------------------------------------------------------- /FlamingPants/flamingpants_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mbalex99/flamingpants/3d28330f0a0c158ebf671a8221ae147da1ba8c78/FlamingPants/flamingpants_logo.png -------------------------------------------------------------------------------- /FlamingPantsTests/FlamingPantsTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FlamingPantsTests.swift 3 | // FlamingPantsTests 4 | // 5 | // Created by Maximilian Alexander on 7/24/15. 6 | // Copyright (c) 2015 Epoque. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | 12 | class FlamingPantsTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | XCTAssert(true, "Pass") 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measureBlock() { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /FlamingPantsTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | Epoque.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '8.0' 3 | use_frameworks! 4 | 5 | pod 'Firebase', '~> 2.3.3' 6 | pod 'SlackTextViewController', '~> 1.5.2' 7 | pod 'RxSwift' 8 | pod 'RxCocoa' 9 | pod 'FirebaseRxSwiftExtensions' 10 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Firebase (2.3.3) 3 | - FirebaseRxSwiftExtensions (0.6): 4 | - Firebase (~> 2.3.3) 5 | - RxSwift (~> 1.8.1) 6 | - RxCocoa (1.9): 7 | - RxSwift 8 | - RxSwift (1.8.1) 9 | - SlackTextViewController (1.5.2) 10 | 11 | DEPENDENCIES: 12 | - Firebase (~> 2.3.3) 13 | - FirebaseRxSwiftExtensions 14 | - RxCocoa 15 | - RxSwift 16 | - SlackTextViewController (~> 1.5.2) 17 | 18 | SPEC CHECKSUMS: 19 | Firebase: 2db60272f68ce40c7d47e5ae6eddc16977c65d4c 20 | FirebaseRxSwiftExtensions: 8c2b59cd16f65577a60f936fa8c226c80bcffa18 21 | RxCocoa: 6ef9cc14418d5bbda067550e46f5949a3eeca37d 22 | RxSwift: 7f3af11a6923f772d21a1e2723f7be660c6ee24f 23 | SlackTextViewController: ab240cda4c7fe1f70f6c6cf64578f3fea495ce99 24 | 25 | COCOAPODS: 0.38.2 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FlamingPants - 2 | #### Firebase powered chat with SlackTextViewController and RxSwift 3 | 4 | FlamingPants is a Slack/Chat inspired example project that uses Firebase(http://firebase.com) and RxSwift 5 | 6 | This project will require 7 | 8 | - iOS 8 or higher 9 | - XCode 6.3 or higher 10 | - Swift 1.2 11 | - Cocoapods 12 | 13 | To get started clone this project and then run `pod install` 14 | Then open up the `flamingpants.xcworkspace` file and run it in your favorite simulator or device. 15 | --------------------------------------------------------------------------------