[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n#\n# Pods/\n.DS_Store"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Rafael Machado\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "README.md",
    "content": "# Star Button\n## Article\n[Creating Custom Animated Buttons](https://swift.unicorn.tv/articles/creating-custom-animated-buttons)\n\n## Demo\nSource of inspiration\n![alt tag](https://d13yacurqjgara.cloudfront.net/users/100791/screenshots/1555501/driblle_star.gif)\n\n## Code result\n![alt tag](http://ramosmachado.net/wp-content/uploads/2015/02/starbounce.gif)\n\n## A Swift bounce animation :)\n![alt tag](http://ramosmachado.net/wp-content/uploads/2015/02/swift.gif)\n\n\n## License\nReleased under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "StarBounce/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  StarBounce\n//\n//  Created by Rafael Machado on 2/10/15.\n//  Copyright (c) 2015 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication,\n                     didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n\n        return true\n    }\n}\n"
  },
  {
    "path": "StarBounce/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2015 Rafael Machado. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"StarBounce\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "StarBounce/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14C109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"StarBounce\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Ois-ef-f1f\" customClass=\"StarButton\" customModule=\"StarBounce\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"250\" y=\"250\" width=\"100\" height=\"100\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"100\" id=\"CoI-Xk-aOa\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"100\" id=\"apZ-gS-R0k\"/>\n                                </constraints>\n                                <state key=\"normal\">\n                                    <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                </state>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"lineWidth\">\n                                        <real key=\"value\" value=\"3\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"favoriteColor\">\n                                        <color key=\"value\" red=\"0.94509803920000002\" green=\"0.76862745099999996\" blue=\"0.058823529409999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"notFavoriteColor\">\n                                        <color key=\"value\" red=\"0.58431372550000005\" green=\"0.64705882349999999\" blue=\"0.65098039220000004\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"starFavoriteColor\">\n                                        <color key=\"value\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <action selector=\"favorite:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"fct-j6-UcT\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"centerY\" secondItem=\"Ois-ef-f1f\" secondAttribute=\"centerY\" id=\"LT6-y1-wrH\"/>\n                            <constraint firstAttribute=\"centerX\" secondItem=\"Ois-ef-f1f\" secondAttribute=\"centerX\" id=\"bAT-8T-uJt\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "StarBounce/Extensions.swift",
    "content": "//\n//  Extensions.swift\n//  FavoriteStart\n//\n//  Created by Rafael Machado on 2/9/15.\n//  Copyright (c) 2015 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\n\nextension UIColor {\n    convenience init (hex: String) {\n        var cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()\n\n        if cString.hasPrefix(\"#\") {\n            cString = (cString as NSString).substring(from: 1)\n        }\n\n        if cString.characters.count != 6 {\n            self.init()\n            return\n        }\n\n        let rString = (cString as NSString).substring(to: 2)\n        let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)\n        let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)\n\n        var r: CUnsignedInt = 0, g: CUnsignedInt = 0, b: CUnsignedInt = 0\n        Scanner(string: rString).scanHexInt32(&r)\n        Scanner(string: gString).scanHexInt32(&g)\n        Scanner(string: bString).scanHexInt32(&b)\n\n        self.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))\n    }\n}\n\nextension CALayer {\n    func applyAnimation(_ animation: CABasicAnimation) {\n        guard let copy = animation.copy() as? CABasicAnimation,\n        let presentationLayer = self.presentation(),\n        let keyPath = copy.keyPath else {\n                return\n        }\n\n        if copy.fromValue == nil {\n            copy.fromValue = presentationLayer.value(forKeyPath: keyPath)\n        }\n        self.add(copy, forKey: copy.keyPath)\n        CATransaction.begin()\n        CATransaction.setDisableActions(true)\n        self.setValue(copy.toValue, forKeyPath:keyPath)\n        CATransaction.commit()\n    }\n}\n\nextension CGPath {\n    class func rescaleForFrame(path: CGPath, frame: CGRect) -> CGPath {\n        let boundingBox = path.boundingBoxOfPath\n        let boundingBoxAspectRatio = boundingBox.width/boundingBox.height\n        let viewAspectRatio = frame.width/frame.height\n\n        var scaleFactor: CGFloat = 1\n        if boundingBoxAspectRatio > viewAspectRatio {\n            scaleFactor = frame.width/boundingBox.width\n        } else {\n            scaleFactor = frame.height/boundingBox.height\n        }\n\n        var scaleTransform = CGAffineTransform.identity\n        scaleTransform = scaleTransform.scaledBy(x: scaleFactor, y: scaleFactor)\n        scaleTransform = scaleTransform.translatedBy(x: -boundingBox.minX, y: -boundingBox.minY)\n        let scaledSize = boundingBox.size.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))\n        let centerOffset = CGSize(width: (frame.width - scaledSize.width) / (scaleFactor * 2.0),\n                                  height: (frame.height - scaledSize.height) / (scaleFactor * 2.0))\n        scaleTransform = scaleTransform.translatedBy(x: centerOffset.width, y: centerOffset.height)\n\n        if let scaleTransform = path.copy(using: &scaleTransform) {\n            return scaleTransform\n        } else {\n            return path\n        }\n    }\n}\n"
  },
  {
    "path": "StarBounce/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "StarBounce/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "StarBounce/Paths.swift",
    "content": "//\n//  Paths.swift\n//  FavoriteStart\n//\n//  Created by Rafael Machado on 2/9/15.\n//  Copyright (c) 2015 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\n\nstruct Paths {\n\n    static var star: CGPath {\n        let star = UIBezierPath()\n        star.move(to: CGPoint(x: 112.79, y: 119))\n        star.addCurve(to: CGPoint(x: 107.75, y: 122.6),\n                      controlPoint1: CGPoint(x: 113.41, y: 122.8),\n                      controlPoint2: CGPoint(x: 111.14, y: 124.42))\n        star.addLine(to: CGPoint(x: 96.53, y: 116.58))\n        star.addCurve(to: CGPoint(x: 84.14, y: 116.47),\n                      controlPoint1: CGPoint(x: 93.14, y: 114.76),\n                      controlPoint2: CGPoint(x: 87.56, y: 114.71))\n        star.addLine(to: CGPoint(x: 72.82, y: 122.3))\n        star.addCurve(to: CGPoint(x: 67.84, y: 118.62),\n                      controlPoint1: CGPoint(x: 69.4, y: 124.06),\n                      controlPoint2: CGPoint(x: 67.15, y: 122.41))\n        star.addLine(to: CGPoint(x: 70.1, y: 106.09))\n        star.addCurve(to: CGPoint(x: 66.37, y: 94.27),\n                      controlPoint1: CGPoint(x: 70.78, y: 102.3),\n                      controlPoint2: CGPoint(x: 69.1, y: 96.98))\n        star.addLine(to: CGPoint(x: 57.33, y: 85.31))\n        star.addCurve(to: CGPoint(x: 59.29, y: 79.43),\n                      controlPoint1: CGPoint(x: 54.6, y: 82.6),\n                      controlPoint2: CGPoint(x: 55.48, y: 79.95))\n        star.addLine(to: CGPoint(x: 71.91, y: 77.71))\n        star.addCurve(to: CGPoint(x: 81.99, y: 70.51),\n                      controlPoint1: CGPoint(x: 75.72, y: 77.19),\n                      controlPoint2: CGPoint(x: 80.26, y: 73.95))\n        star.addLine(to: CGPoint(x: 87.72, y: 59.14))\n        star.addCurve(to: CGPoint(x: 93.92, y: 59.2),\n                      controlPoint1: CGPoint(x: 89.46, y: 55.71),\n                      controlPoint2: CGPoint(x: 92.25, y: 55.73))\n        star.addLine(to: CGPoint(x: 99.46, y: 70.66))\n        star.addCurve(to: CGPoint(x: 109.42, y: 78.03),\n                      controlPoint1: CGPoint(x: 101.13, y: 74.13),\n                      controlPoint2: CGPoint(x: 105.62, y: 77.44))\n        star.addLine(to: CGPoint(x: 122, y: 79.96))\n        star.addCurve(to: CGPoint(x: 123.87, y: 85.87),\n                      controlPoint1: CGPoint(x: 125.81, y: 80.55),\n                      controlPoint2: CGPoint(x: 126.64, y: 83.21))\n        star.addLine(to: CGPoint(x: 114.67, y: 94.68))\n        star.addCurve(to: CGPoint(x: 110.75, y: 106.43),\n                      controlPoint1: CGPoint(x: 111.89, y: 97.34),\n                      controlPoint2: CGPoint(x: 110.13, y: 102.63))\n        star.addLine(to: CGPoint(x: 112.79, y: 119))\n        return star.cgPath\n    }\n\n    static var swift: CGPath {\n        let swiftPath = UIBezierPath()\n        swiftPath.move(to: CGPoint(x: 376.2, y: 283.2))\n        swiftPath.addCurve(to: CGPoint(x: 349.8, y: 238.4),\n                           controlPoint1: CGPoint(x: 367.4, y: 258.4),\n                           controlPoint2: CGPoint(x: 349.8, y: 238.4))\n        swiftPath.addCurve(to: CGPoint(x: 236.5, y: 0),\n                           controlPoint1: CGPoint(x: 349.8, y: 238.4),\n                           controlPoint2: CGPoint(x: 399.7, y: 105.6))\n        swiftPath.addCurve(to: CGPoint(x: 269, y: 180.8),\n                           controlPoint1: CGPoint(x: 303.7, y: 101.6),\n                           controlPoint2: CGPoint(x: 269, y: 180.8))\n        swiftPath.addCurve(to: CGPoint(x: 181.29, y: 117.07),\n                           controlPoint1: CGPoint(x: 269, y: 180.8),\n                           controlPoint2: CGPoint(x: 211.4, y: 140.8))\n        swiftPath.addCurve(to: CGPoint(x: 85, y: 33.6),\n                           controlPoint1: CGPoint(x: 151.18, y: 93.35),\n                           controlPoint2: CGPoint(x: 85, y: 33.6))\n        swiftPath.addCurve(to: CGPoint(x: 145, y: 117.07),\n                           controlPoint1: CGPoint(x: 85, y: 33.6),\n                           controlPoint2: CGPoint(x: 128.15, y: 96.31))\n        swiftPath.addCurve(to: CGPoint(x: 185.78, y: 163.66),\n                           controlPoint1: CGPoint(x: 161.85, y: 137.84),\n                           controlPoint2: CGPoint(x: 185.78, y: 163.66))\n        swiftPath.addCurve(to: CGPoint(x: 136.36, y: 129.42),\n                           controlPoint1: CGPoint(x: 185.78, y: 163.66),\n                           controlPoint2: CGPoint(x: 161.07, y: 147.39))\n        swiftPath.addCurve(to: CGPoint(x: 34.6, y: 50.4),\n                           controlPoint1: CGPoint(x: 111.65, y: 111.46),\n                           controlPoint2: CGPoint(x: 34.6, y: 50.4))\n        swiftPath.addCurve(to: CGPoint(x: 133.8, y: 169.2),\n                           controlPoint1: CGPoint(x: 34.6, y: 50.4),\n                           controlPoint2: CGPoint(x: 82.69, y: 119.24))\n        swiftPath.addCurve(to: CGPoint(x: 214.6, y: 244),\n                           controlPoint1: CGPoint(x: 184.91, y: 219.16),\n                           controlPoint2: CGPoint(x: 214.6, y: 244))\n        swiftPath.addCurve(to: CGPoint(x: 129.8, y: 264.8),\n                           controlPoint1: CGPoint(x: 214.6, y: 244),\n                           controlPoint2: CGPoint(x: 196.2, y: 263.2))\n        swiftPath.addCurve(to: CGPoint(x: 0, y: 221),\n                           controlPoint1: CGPoint(x: 63.4, y: 266.4),\n                           controlPoint2: CGPoint(x: 0, y: 221))\n        swiftPath.addCurve(to: CGPoint(x: 206.6, y: 339.2),\n                           controlPoint1: CGPoint(x: 0, y: 221),\n                           controlPoint2: CGPoint(x: 62.5, y: 339.2))\n        swiftPath.addCurve(to: CGPoint(x: 325, y: 304.8),\n                           controlPoint1: CGPoint(x: 270.6, y: 339.2),\n                           controlPoint2: CGPoint(x: 288.93, y: 304.8))\n        swiftPath.addCurve(to: CGPoint(x: 383.3, y: 339.2),\n                           controlPoint1: CGPoint(x: 361.07, y: 304.8),\n                           controlPoint2: CGPoint(x: 381.7, y: 340))\n        swiftPath.addCurve(to: CGPoint(x: 376.2, y: 283.2),\n                           controlPoint1: CGPoint(x: 384.9, y: 338.4),\n                           controlPoint2: CGPoint(x: 385, y: 308))\n        return swiftPath.cgPath\n    }\n\n    static func circle(_ inFrame: CGRect) -> CGPath {\n        let circle = UIBezierPath(ovalIn: inFrame)\n        return circle.cgPath\n    }\n}\n"
  },
  {
    "path": "StarBounce/StarButton.swift",
    "content": "//\n//  StatButton.swift\n//  FavoriteStar\n//\n//  Created by Rafael Machado on 14/11/14.\n//  Copyright (c) 2014 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\nimport QuartzCore\n\n@IBDesignable\nclass StarButton: UIButton, CAAnimationDelegate {\n\n    fileprivate var starShape: CAShapeLayer!\n    fileprivate var outerRingShape: CAShapeLayer!\n    fileprivate var fillRingShape: CAShapeLayer!\n\n    fileprivate let starKey = \"FAVANIMKEY\"\n    fileprivate let favoriteKey = \"FAVORITE\"\n    fileprivate let notFavoriteKey = \"NOTFAVORITE\"\n\n    @IBInspectable\n    var lineWidth: CGFloat = 1 {\n        didSet {\n            updateLayerProperties()\n        }\n    }\n\n    @IBInspectable\n    var favoriteColor: UIColor = UIColor(hex:\"eecd34\") {\n        didSet {\n            updateLayerProperties()\n        }\n    }\n\n    @IBInspectable\n    var notFavoriteColor: UIColor = UIColor(hex:\"9e9b9b\") {\n        didSet {\n            updateLayerProperties()\n        }\n    }\n\n    @IBInspectable\n    var starFavoriteColor: UIColor = UIColor(hex:\"9e9b9b\") {\n        didSet {\n            updateLayerProperties()\n        }\n    }\n\n    var isFavorite: Bool = false {\n        didSet {\n            if self.isFavorite {\n                favorite()\n            } else {\n                notFavorite()\n            }\n        }\n    }\n\n    fileprivate func updateLayerProperties() {\n        if fillRingShape != nil {\n            fillRingShape.fillColor = favoriteColor.cgColor\n        }\n\n        if outerRingShape != nil {\n            outerRingShape.lineWidth = lineWidth\n            outerRingShape.strokeColor = notFavoriteColor.cgColor\n        }\n\n        if starShape != nil {\n            if isFavorite {\n                starShape.fillColor = starFavoriteColor.cgColor\n            } else {\n                starShape.fillColor = notFavoriteColor.cgColor\n            }\n        }\n    }\n\n    override func layoutSubviews() {\n        super.layoutSubviews()\n        createLayersIfNeeded()\n        updateLayerProperties()\n    }\n\n    fileprivate func createLayersIfNeeded() {\n        if fillRingShape == nil {\n            fillRingShape = CAShapeLayer()\n            fillRingShape.path = Paths.circle(frameWithInset())\n            fillRingShape.bounds = (fillRingShape.path?.boundingBox)!\n            fillRingShape.fillColor = favoriteColor.cgColor\n            fillRingShape.lineWidth = lineWidth\n            fillRingShape.position = CGPoint(x: fillRingShape.bounds.width/2, y: fillRingShape.bounds.height/2)\n            fillRingShape.transform = CATransform3DMakeScale(0.2, 0.2, 0.2)\n            fillRingShape.opacity = 0\n            self.layer.addSublayer(fillRingShape)\n        }\n        if outerRingShape == nil {\n            outerRingShape = CAShapeLayer()\n            outerRingShape.path = Paths.circle(frameWithInset())\n            outerRingShape.bounds = frameWithInset()\n            outerRingShape.lineWidth = lineWidth\n            outerRingShape.strokeColor = notFavoriteColor.cgColor\n            outerRingShape.fillColor = UIColor.clear.cgColor\n            outerRingShape.position = CGPoint(x: self.bounds.width/2, y: self.bounds.height/2)\n            outerRingShape.transform = CATransform3DIdentity\n            outerRingShape.opacity = 0.5\n            self.layer.addSublayer(outerRingShape)\n        }\n        if starShape == nil {\n            var starFrame = self.bounds\n            starFrame.size.width = starFrame.width/2.5\n            starFrame.size.height = starFrame.height/2.5\n\n            starShape = CAShapeLayer()\n            starShape.path = CGPath.rescaleForFrame(path: Paths.star, frame: starFrame)\n            starShape.bounds = (starShape.path?.boundingBoxOfPath)!\n            starShape.fillColor = notFavoriteColor.cgColor\n            starShape.position = CGPoint(x: (outerRingShape.path?.boundingBox.width)!/2,\n                                         y: (outerRingShape.path?.boundingBox.height)!/2)\n            starShape.transform = CATransform3DIdentity\n            starShape.opacity = 0.5\n            self.layer.addSublayer(starShape)\n        }\n    }\n\n    fileprivate func frameWithInset() -> CGRect {\n        return self.bounds.insetBy(dx: lineWidth/2, dy: lineWidth/2)\n    }\n\n    fileprivate func notFavorite() {\n        let starFillColor = CABasicAnimation(keyPath: \"fillColor\")\n        starFillColor.toValue = notFavoriteColor.cgColor\n        starFillColor.duration = 0.3\n\n        let starOpacity = CABasicAnimation(keyPath: \"opacity\")\n        starOpacity.toValue = 0.5\n        starOpacity.duration = 0.3\n\n        let starGroup = CAAnimationGroup()\n        starGroup.animations = [starFillColor, starOpacity]\n\n        starShape.add(starGroup, forKey: nil)\n        starShape.fillColor = notFavoriteColor.cgColor\n        starShape.opacity = 0.5\n\n        let fillCircle = CABasicAnimation(keyPath: \"opacity\")\n        fillCircle.toValue = 0\n        fillCircle.duration = 0.3\n        fillCircle.setValue(notFavoriteKey, forKey: starKey)\n        fillCircle.delegate = self\n\n        fillRingShape.add(fillCircle, forKey: nil)\n        fillRingShape.opacity = 0\n\n        let outerCircle = CABasicAnimation(keyPath: \"opacity\")\n        outerCircle.toValue = 0.5\n        outerCircle.duration = 0.3\n\n        outerRingShape.add(outerCircle, forKey: nil)\n        outerRingShape.opacity = 0.5\n\n    }\n\n    fileprivate func favorite() {\n        var starGoUp = CATransform3DIdentity\n        starGoUp = CATransform3DScale(starGoUp, 1.5, 1.5, 1.5)\n        var starGoDown = CATransform3DIdentity\n        starGoDown = CATransform3DScale(starGoDown, 0.01, 0.01, 0.01)\n\n        let starKeyFrames = CAKeyframeAnimation(keyPath: \"transform\")\n        starKeyFrames.values = [NSValue(caTransform3D:CATransform3DIdentity),\n                                NSValue(caTransform3D:starGoUp),\n                                NSValue(caTransform3D:starGoDown)]\n        starKeyFrames.keyTimes = [0.0, 0.4, 0.6]\n        starKeyFrames.duration = 0.4\n        starKeyFrames.beginTime = CACurrentMediaTime() + 0.05\n        starKeyFrames.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)\n        starKeyFrames.fillMode =  kCAFillModeBackwards\n        starKeyFrames.setValue(favoriteKey, forKey: starKey)\n        starKeyFrames.delegate = self\n\n        starShape.add(starKeyFrames, forKey: favoriteKey)\n        starShape.transform = starGoDown\n\n        var grayGoUp = CATransform3DIdentity\n        grayGoUp = CATransform3DScale(grayGoUp, 1.5, 1.5, 1.5)\n        var grayGoDown = CATransform3DIdentity\n        grayGoDown = CATransform3DScale(grayGoDown, 0.01, 0.01, 0.01)\n\n        let outerCircleAnimation = CAKeyframeAnimation(keyPath: \"transform\")\n        outerCircleAnimation.values = [NSValue(caTransform3D:CATransform3DIdentity),\n                                       NSValue(caTransform3D:grayGoUp),\n                                       NSValue(caTransform3D:grayGoDown)]\n        outerCircleAnimation.keyTimes = [0.0, 0.4, 0.6]\n        outerCircleAnimation.duration = 0.4\n        outerCircleAnimation.beginTime = CACurrentMediaTime() + 0.01\n        outerCircleAnimation.fillMode =  kCAFillModeBackwards\n        outerCircleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)\n\n        outerRingShape.add(outerCircleAnimation, forKey: \"Gray circle Animation\")\n        outerRingShape.transform = grayGoDown\n\n        var favoriteFillGrow = CATransform3DIdentity\n        favoriteFillGrow = CATransform3DScale(favoriteFillGrow, 1.5, 1.5, 1.5)\n        let fillCircleAnimation = CAKeyframeAnimation(keyPath: \"transform\")\n        fillCircleAnimation.values = [NSValue(caTransform3D:fillRingShape.transform),\n                                      NSValue(caTransform3D:favoriteFillGrow),\n                                      NSValue(caTransform3D:CATransform3DIdentity)]\n        fillCircleAnimation.keyTimes = [0.0, 0.4, 0.6]\n        fillCircleAnimation.duration = 0.4\n        fillCircleAnimation.beginTime = CACurrentMediaTime() + 0.22\n        fillCircleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)\n        fillCircleAnimation.fillMode =  kCAFillModeBackwards\n\n        let favoriteFillOpacity = CABasicAnimation(keyPath: \"opacity\")\n        favoriteFillOpacity.toValue = 1\n        favoriteFillOpacity.duration = 1\n        favoriteFillOpacity.beginTime = CACurrentMediaTime()\n        favoriteFillOpacity.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)\n        favoriteFillOpacity.fillMode =  kCAFillModeBackwards\n\n        fillRingShape.add(favoriteFillOpacity, forKey: \"Show fill circle\")\n        fillRingShape.add(fillCircleAnimation, forKey: \"fill circle Animation\")\n        fillRingShape.transform = CATransform3DIdentity\n    }\n\n    func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {\n        if let key = anim.value(forKey: starKey) as? String {\n            switch key  {\n            case favoriteKey:\n                endFavorite()\n            case notFavoriteKey:\n                prepareForFavorite()\n            default:\n                break\n            }\n        }\n        enableTouch()\n    }\n\n    fileprivate func endFavorite() {\n\n        executeWithoutActions {\n            self.starShape.fillColor = self.starFavoriteColor.cgColor\n            self.starShape.opacity = 1\n            self.fillRingShape.opacity = 1\n            self.outerRingShape.transform = CATransform3DIdentity\n            self.outerRingShape.opacity = 0\n        }\n\n        var starGoUp = CATransform3DIdentity\n        starGoUp = CATransform3DScale(starGoUp, 2, 2, 2)\n\n        let starKeyFrames = CAKeyframeAnimation(keyPath: \"transform\")\n        starKeyFrames.values = [NSValue(caTransform3D: starShape.transform),\n                                NSValue(caTransform3D:starGoUp),\n                                NSValue(caTransform3D:CATransform3DIdentity)]\n        starKeyFrames.keyTimes = [0.0, 0.4, 0.6]\n        starKeyFrames.duration = 0.2\n        starKeyFrames.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)\n\n        starShape.add(starKeyFrames, forKey: nil)\n        starShape.transform = CATransform3DIdentity\n    }\n\n    fileprivate func prepareForFavorite() {\n        executeWithoutActions {\n            self.fillRingShape.opacity = 0\n            self.fillRingShape.transform = CATransform3DMakeScale(0.2, 0.2, 0.2)\n        }\n    }\n\n    fileprivate func executeWithoutActions(_ closure: () -> Void) {\n        CATransaction.begin()\n        CATransaction.setDisableActions(true)\n        closure()\n        CATransaction.commit()\n    }\n\n    func animationDidStart(_ anim: CAAnimation) {\n        disableTouch()\n    }\n\n    fileprivate func disableTouch() {\n        self.isUserInteractionEnabled = false\n    }\n\n    fileprivate func enableTouch() {\n        self.isUserInteractionEnabled = true\n    }\n}\n"
  },
  {
    "path": "StarBounce/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  FavoriteStart\n//\n//  Created by Rafael Machado on 14/11/14.\n//  Copyright (c) 2014 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    @IBAction func favorite(_ sender: StarButton!) {\n        sender.isFavorite = !sender.isFavorite\n    }\n}\n"
  },
  {
    "path": "StarBounce.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t01D15DC41A8A60240046F649 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DC31A8A60240046F649 /* AppDelegate.swift */; };\n\t\t01D15DC91A8A60240046F649 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01D15DC71A8A60240046F649 /* Main.storyboard */; };\n\t\t01D15DCB1A8A60240046F649 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01D15DCA1A8A60240046F649 /* Images.xcassets */; };\n\t\t01D15DCE1A8A60240046F649 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 01D15DCC1A8A60240046F649 /* LaunchScreen.xib */; };\n\t\t01D15DDA1A8A60240046F649 /* StarBounceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DD91A8A60240046F649 /* StarBounceTests.swift */; };\n\t\t01D15DE71A8A60620046F649 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DE31A8A60620046F649 /* ViewController.swift */; };\n\t\t01D15DE81A8A60620046F649 /* StarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DE41A8A60620046F649 /* StarButton.swift */; };\n\t\t01D15DE91A8A60620046F649 /* Paths.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DE51A8A60620046F649 /* Paths.swift */; };\n\t\t01D15DEA1A8A60620046F649 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D15DE61A8A60620046F649 /* Extensions.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t01D15DD41A8A60240046F649 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 01D15DB61A8A60240046F649 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 01D15DBD1A8A60240046F649;\n\t\t\tremoteInfo = StarBounce;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t01D15DBE1A8A60240046F649 /* StarBounce.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StarBounce.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t01D15DC21A8A60240046F649 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t01D15DC31A8A60240046F649 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t01D15DC81A8A60240046F649 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t01D15DCA1A8A60240046F649 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t01D15DCD1A8A60240046F649 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t01D15DD31A8A60240046F649 /* StarBounceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StarBounceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t01D15DD81A8A60240046F649 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t01D15DD91A8A60240046F649 /* StarBounceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarBounceTests.swift; sourceTree = \"<group>\"; };\n\t\t01D15DE31A8A60620046F649 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t01D15DE41A8A60620046F649 /* StarButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StarButton.swift; sourceTree = \"<group>\"; };\n\t\t01D15DE51A8A60620046F649 /* Paths.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Paths.swift; sourceTree = \"<group>\"; };\n\t\t01D15DE61A8A60620046F649 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t01D15DBB1A8A60240046F649 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t01D15DD01A8A60240046F649 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t01D15DB51A8A60240046F649 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DC01A8A60240046F649 /* StarBounce */,\n\t\t\t\t01D15DD61A8A60240046F649 /* StarBounceTests */,\n\t\t\t\t01D15DBF1A8A60240046F649 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DBF1A8A60240046F649 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DBE1A8A60240046F649 /* StarBounce.app */,\n\t\t\t\t01D15DD31A8A60240046F649 /* StarBounceTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DC01A8A60240046F649 /* StarBounce */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DC31A8A60240046F649 /* AppDelegate.swift */,\n\t\t\t\t01D15DE31A8A60620046F649 /* ViewController.swift */,\n\t\t\t\t01D15DE41A8A60620046F649 /* StarButton.swift */,\n\t\t\t\t01D15DE51A8A60620046F649 /* Paths.swift */,\n\t\t\t\t01D15DE61A8A60620046F649 /* Extensions.swift */,\n\t\t\t\t01D15DC71A8A60240046F649 /* Main.storyboard */,\n\t\t\t\t01D15DCA1A8A60240046F649 /* Images.xcassets */,\n\t\t\t\t01D15DCC1A8A60240046F649 /* LaunchScreen.xib */,\n\t\t\t\t01D15DC11A8A60240046F649 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = StarBounce;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DC11A8A60240046F649 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DC21A8A60240046F649 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DD61A8A60240046F649 /* StarBounceTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DD91A8A60240046F649 /* StarBounceTests.swift */,\n\t\t\t\t01D15DD71A8A60240046F649 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = StarBounceTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DD71A8A60240046F649 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DD81A8A60240046F649 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t01D15DBD1A8A60240046F649 /* StarBounce */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 01D15DDD1A8A60240046F649 /* Build configuration list for PBXNativeTarget \"StarBounce\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t01D15DBA1A8A60240046F649 /* Sources */,\n\t\t\t\t01D15DBB1A8A60240046F649 /* Frameworks */,\n\t\t\t\t01D15DBC1A8A60240046F649 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StarBounce;\n\t\t\tproductName = StarBounce;\n\t\t\tproductReference = 01D15DBE1A8A60240046F649 /* StarBounce.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t01D15DD21A8A60240046F649 /* StarBounceTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 01D15DE01A8A60240046F649 /* Build configuration list for PBXNativeTarget \"StarBounceTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t01D15DCF1A8A60240046F649 /* Sources */,\n\t\t\t\t01D15DD01A8A60240046F649 /* Frameworks */,\n\t\t\t\t01D15DD11A8A60240046F649 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t01D15DD51A8A60240046F649 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = StarBounceTests;\n\t\t\tproductName = StarBounceTests;\n\t\t\tproductReference = 01D15DD31A8A60240046F649 /* StarBounceTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t01D15DB61A8A60240046F649 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftMigration = 0710;\n\t\t\t\tLastSwiftUpdateCheck = 0710;\n\t\t\t\tLastUpgradeCheck = 0820;\n\t\t\t\tORGANIZATIONNAME = \"Rafael Machado\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t01D15DBD1A8A60240046F649 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t\tLastSwiftMigration = 0820;\n\t\t\t\t\t};\n\t\t\t\t\t01D15DD21A8A60240046F649 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t\tLastSwiftMigration = 0820;\n\t\t\t\t\t\tTestTargetID = 01D15DBD1A8A60240046F649;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 01D15DB91A8A60240046F649 /* Build configuration list for PBXProject \"StarBounce\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 01D15DB51A8A60240046F649;\n\t\t\tproductRefGroup = 01D15DBF1A8A60240046F649 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t01D15DBD1A8A60240046F649 /* StarBounce */,\n\t\t\t\t01D15DD21A8A60240046F649 /* StarBounceTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t01D15DBC1A8A60240046F649 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t01D15DC91A8A60240046F649 /* Main.storyboard in Resources */,\n\t\t\t\t01D15DCE1A8A60240046F649 /* LaunchScreen.xib in Resources */,\n\t\t\t\t01D15DCB1A8A60240046F649 /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t01D15DD11A8A60240046F649 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t01D15DBA1A8A60240046F649 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t01D15DEA1A8A60620046F649 /* Extensions.swift in Sources */,\n\t\t\t\t01D15DE81A8A60620046F649 /* StarButton.swift in Sources */,\n\t\t\t\t01D15DE71A8A60620046F649 /* ViewController.swift in Sources */,\n\t\t\t\t01D15DE91A8A60620046F649 /* Paths.swift in Sources */,\n\t\t\t\t01D15DC41A8A60240046F649 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t01D15DCF1A8A60240046F649 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t01D15DDA1A8A60240046F649 /* StarBounceTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t01D15DD51A8A60240046F649 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 01D15DBD1A8A60240046F649 /* StarBounce */;\n\t\t\ttargetProxy = 01D15DD41A8A60240046F649 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t01D15DC71A8A60240046F649 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DC81A8A60240046F649 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t01D15DCC1A8A60240046F649 /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t01D15DCD1A8A60240046F649 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t01D15DDB1A8A60240046F649 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t01D15DDC1A8A60240046F649 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t01D15DDE1A8A60240046F649 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = StarBounce/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.machado.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t01D15DDF1A8A60240046F649 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = StarBounce/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.machado.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t01D15DE11A8A60240046F649 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = StarBounceTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.machado.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/StarBounce.app/StarBounce\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t01D15DE21A8A60240046F649 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = StarBounceTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.machado.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/StarBounce.app/StarBounce\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t01D15DB91A8A60240046F649 /* Build configuration list for PBXProject \"StarBounce\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t01D15DDB1A8A60240046F649 /* Debug */,\n\t\t\t\t01D15DDC1A8A60240046F649 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t01D15DDD1A8A60240046F649 /* Build configuration list for PBXNativeTarget \"StarBounce\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t01D15DDE1A8A60240046F649 /* Debug */,\n\t\t\t\t01D15DDF1A8A60240046F649 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t01D15DE01A8A60240046F649 /* Build configuration list for PBXNativeTarget \"StarBounceTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t01D15DE11A8A60240046F649 /* Debug */,\n\t\t\t\t01D15DE21A8A60240046F649 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 01D15DB61A8A60240046F649 /* Project object */;\n}\n"
  },
  {
    "path": "StarBounce.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:StarBounce.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "StarBounceTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "StarBounceTests/StarBounceTests.swift",
    "content": "//\n//  StarBounceTests.swift\n//  StarBounceTests\n//\n//  Created by Rafael Machado on 2/10/15.\n//  Copyright (c) 2015 Rafael Machado. All rights reserved.\n//\n\nimport UIKit\nimport XCTest\n\nclass StarBounceTests: XCTestCase {\n\n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        XCTAssert(true, \"Pass\")\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n\n}\n"
  }
]