[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n\n## Other\n*.moved-aside\n*.xccheckout\n*.xcscmblueprint\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\n# Packages/\n# Package.pins\n# Package.resolved\n.build/\n\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# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n#\n\n# Environments\n.env\n.env.default\n\nPods/\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/#source-control\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output"
  },
  {
    "path": ".swiftlint.yml",
    "content": "disabled_rules:\n  - trailing_whitespace\n  - line_length\n  - type_name\n  - identifier_name\n\nopt_in_rules:\n  - empty_count\n  - force_unwrapping\n\nexcluded:\n  - Pods\n\nfunction_body_length:\n  warning: 50"
  },
  {
    "path": ".travis.yml",
    "content": "language: objective-c\nos: osx\nosx_image: xcode9.2\nxcode_workspace: insights-for-instagram.xcworkspace\npodfile: Podfile\ncache: cocoapods\nnotifications:\n  email: false\n\nbefore_install:\n  - rvm install ruby --latest\n  - gem install cocoapods\n  - pod repo update master\n  - gem install fastlane --no-ri --no-rdoc --no-document\n\n#  - brew update\n#  - brew install swiftlint || true\n\njobs:\n  include:\n    - stage: XCTest\n      script:\n        - fastlane scan -s insights-for-instagram"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 alexdimango.me, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, 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"
  },
  {
    "path": "Podfile",
    "content": "# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ntarget 'insights-for-instagram' do\n  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks\n  use_frameworks!\n  inhibit_all_warnings!\n\n  # Pods for insights-for-instagram\n  pod 'Moya'\n  pod 'RealmSwift'\n  pod 'ObjectMapper'\n  pod 'Kingfisher', '~> 4.0'\n  pod 'SwiftLint'\n\n  target 'insights-for-instagramTests' do\n    inherit! :search_paths\n    pod 'Quick'\n    pod 'Nimble'\n  end\n  \nend\n"
  },
  {
    "path": "README.md",
    "content": "# Insights for Instagram\nA simple iOS Instagram's media insights App.\n\n![iOS](https://img.shields.io/badge/iOS-10.0%2B-blue.svg)\n![Swift](https://img.shields.io/badge/Swift-4-blue.svg)\n[![Build Status](https://travis-ci.org/adimango/insights-for-instagram.svg?branch=master)](https://travis-ci.org/adimango/insights-for-instagram)\n\n![](screenshots/app-github-header.png)\n\n### Quick Start\n\nWant to get the app running? Run this in your shell:\n\n```sh\ngit clone https://github.com/adimango/insights-for-instagram.git\ncd insights-for-instagram\npod install\nopen insights-for-instagram.xcworkspace\n```\n\nYou will have a running version of the insights-for-instagram app by hitting `Build > Run`.\n\n### Features\n\n* Passwordless Reports, simply add your Instagram username, and start seeing reports right away\n* Best Engagement, insights for Instagram gives you information about which posts resonate better than others\n* Top Most Commented and Liked, the posts that generated the most comments or likes\n\n### Planned features\n\n* Best Day to Post, find out what your best time to post on Instagram is\n* Hashtag Performance, discover which hashtags deliver the most engagement\n\n### Questions\n\nIf you have questions about any aspect of this project, please feel free to\n[open an issue](https://github.com/adimango/insights-for-instagram/issues/new).\n\n### Credits\n\n- [Moya][]: network abstraction layer written in Swift\n- [Realm][]: data layer written in Swift\n- [Quick][]: behavior-driven development framework for Swift\n\n### License\n\nMIT License. See [LICENSE](LICENSE).\n\n[Moya]:https://github.com/Moya/Moya\n[Realm]:https://realm.io/docs/swift/latest/\n[Quick]:https://github.com/Quick/Quick\n\n## Updates\n\n\n### Apr 04, 2018: Banned private API\n\nInstagram has banned getting data from `https://www.instagram.com/{username}/?__a=1`\nWith a bit of javascript we can still get the same json as before, but there are not workarounds yet for the get items queries.\n\n```\n// GET /api/users/:user_name -> returns user account details\n// Below an example with National Geographic\nhttps://insights-for-instagram.herokuapp.com/api/users/natgeo\n```\n\n### Dec 09, 2017: Back on Track\n\nThe app is using a new Instragram API proxy, developed using `/graphql/query` and some web API params.\n\n```\n// GET /api/users/:user_name/media -> returns media\n// Below an example with National Geographic\nhttps://insights-for-instagram.herokuapp.com/api/users/natgeo/media \n```\n\n### Dec 01, 2017: Breaking Changes\n\nThe Instragram API media endpoints now returns to 404-pages. After more of 20k downloads in just few month, Instagram removed the public API. However, the advanced queries are still available and a workaround will be push soon!\n\n"
  },
  {
    "path": "fastlane/Appfile",
    "content": "# The Appfile can be used to specify information that's used across all fastlane\n# tools, like your username or the app's bundle identifier.\n#\n# For more details, check out the documentation at:\n# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md\n\n# app_identifier \"me.alexdimango.insights-for-instagram\"\n# apple_id \"alex.dimango@gmail.com\""
  },
  {
    "path": "fastlane/Fastfile",
    "content": "# More documentation about how to customize your build\n# can be found here:\n# https://docs.fastlane.tools\n\nfastlane_version \"1.109.0\"\ndefault_platform :ios\n\ndesc \"Release a new beta version on Testflight\"\ndesc \"This action does the following:\"\ndesc \"\"\ndesc \"- Ensures a clean git status\"\ndesc \"- Increment the build number\"\ndesc \"- Build and sign the app\"\ndesc \"- Upload the ipa file to Testflight\"\ndesc \"- Commit and push the version bump\"\n\nlane :beta do\n\n  # make sure we start off with a clean slate\n  ensure_git_status_clean\n\n  # increment build number\n  increment_build_number\n\n  # increment to the specified version number\n  version = increment_version_number\n\n  # build your iOS app\n  gym(\n    # scheme: \"insights-for-instagram\",\n    export_method: \"app-store\"\n  )\n\n  # upload to Testflight\n  pilot(skip_waiting_for_build_processing: true)\n\n  # make sure our directory is clean, except for changes Fastlane has made\n  clean_build_artifacts\n\n  # tag release and push to GitHub\n  sh \"git add .. ; git commit -m 'Deploying version #{version}.'\"\n  add_git_tag tag: version\n  push_to_git_remote\nend\n\nerror do |lane, exception|\n  if lane == :deploy\n    puts \"Unable to deploy, resetting git repository.\"\n    clean_build_artifacts\n    reset_git_repo\n  end\nend"
  },
  {
    "path": "fastlane/README.md",
    "content": "fastlane documentation\n================\n# Installation\n\nMake sure you have the latest version of the Xcode command line tools installed:\n\n```\nxcode-select --install\n```\n\n## Choose your installation method:\n\n<table width=\"100%\" >\n<tr>\n<th width=\"33%\"><a href=\"http://brew.sh\">Homebrew</a></td>\n<th width=\"33%\">Installer Script</td>\n<th width=\"33%\">Rubygems</td>\n</tr>\n<tr>\n<td width=\"33%\" align=\"center\">macOS</td>\n<td width=\"33%\" align=\"center\">macOS</td>\n<td width=\"33%\" align=\"center\">macOS or Linux with Ruby 2.0.0 or above</td>\n</tr>\n<tr>\n<td width=\"33%\"><code>brew cask install fastlane</code></td>\n<td width=\"33%\"><a href=\"https://download.fastlane.tools\">Download the zip file</a>. Then double click on the <code>install</code> script (or run it in a terminal window).</td>\n<td width=\"33%\"><code>sudo gem install fastlane -NV</code></td>\n</tr>\n</table>\n\n# Available Actions\n### beta\n```\nfastlane beta\n```\nRelease a new beta version on Testflight\n\nThis action does the following:\n\n\n\n- Ensures a clean git status\n\n- Increment the build number\n\n- Build and sign the app\n\n- Upload the ipa file to Testflight\n\n- Commit and push the version bump\n\n----\n\nThis README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.\nMore information about fastlane can be found on [fastlane.tools](https://fastlane.tools).\nThe documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).\n"
  },
  {
    "path": "insights-for-instagram/Account/AccountViewController.swift",
    "content": "import UIKit\n\nclass AccountViewController: UITableViewController {\n   \n    // MARK: - Properties\n\n    @IBOutlet weak var accountNameTableCell: UITableViewCell!\n\n    // MARK: - View lifecycle\n    \n    override func viewWillAppear(_ animated: Bool) {\n        tableView.tableFooterView = UIView()\n        guard let name = AppUserAccount().name else {\n            accountNameTableCell.textLabel?.text = NSLocalizedString(\"Account Name\", comment: \"\")\n            return\n        }\n        accountNameTableCell.textLabel?.text = name\n    }\n    \n    override func viewDidDisappear(_ animated: Bool) {\n        accountNameTableCell.isSelected = false\n    }\n    \n    // MARK: - Table view data source\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath.row > 1 {\n           let cell = tableView.cellForRow(at: indexPath)\n           cell?.isSelected = false\n           diplayDeleteAllReportsAlert()\n        }\n    }\n    \n    // MARK: - Actions\n    \n    private func diplayDeleteAllReportsAlert() {\n    \n    let alertController = UIAlertController(title: AppConfiguration.Messages.deleteReportsTitle, message: AppConfiguration.Messages.deleteReportsMessage, preferredStyle: UIAlertControllerStyle.alert)\n        \n    let deleteAllAction = UIAlertAction(title: AppConfiguration.Messages.deleteAllButton, style: UIAlertActionStyle.destructive) { (_: UIAlertAction) -> Void in\n        self.accountNameTableCell.textLabel?.text = NSLocalizedString(\"Account Name\", comment: \"\")\n        DataService.deleteAll()\n    }\n        \n    let cancelAction = UIAlertAction(title: AppConfiguration.Messages.cancelButton, style: UIAlertActionStyle.default) { (_: UIAlertAction) -> Void in\n    }\n    \n    alertController.addAction(cancelAction)\n    alertController.addAction(deleteAllAction)\n    present(alertController, animated: true, completion: nil)\n    \n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Account/AddAccountInteractor.swift",
    "content": "import UIKit\n\nclass AddAccountInteractor {\n    \n    // MARK: - Properties    \n    \n    var presenter: AddAccountPresenter?\n    \n    // MARK: - Storing/updating account logic\n    \n    func validateAccount(with userName: String) {\n        presenter?.presentLoadingIndicator()\n        if AppUserAccount().name != userName { //remove old account data\n            DataService.deleteAll()\n        }\n        \n        DataService.media(for: userName) { (error) in\n            guard let error = error else {\n                self.presenter?.presentReportsCompleted()\n                NotificationCenter.default.post(name: AppConfiguration.DefaultsNotifications.reload, object: nil)\n                return\n            }\n            self.stopLoading(with: error)\n        }\n    }\n    \n    func loadAccount() {\n        guard let name = AppUserAccount().name  else {\n            presenter?.presentAddAccount()\n            return\n        }\n        presenter?.presentUpdateAccount(account: name)\n    }\n    \n    func deleteAccount() {\n        presenter?.presentAddAccount()\n        DataService.deleteAll()\n    }\n    \n    private func stopLoading(with message: String) {\n        presenter?.presentAlertController(title: AppConfiguration.Messages.somethingWrongMessage, message: message)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Account/AddAccountPresenter.swift",
    "content": "import Foundation\nimport UIKit\n\nclass AddAccountPresenter {\n    \n    // MARK: - Properties\n    \n    weak var viewController: AddAccountDisplayLogic?\n    \n    // MARK: AddCoountPresentation Logic\n    \n    func presentAddAccount() {\n        let leftBarButton = UIBarButtonItem()\n        leftBarButton.title = \"Account\"\n        let rightBarButton = UIBarButtonItem(title: \"Done\", style: .plain, target: viewController, action: #selector(AddAccountViewController.doneTapped))\n        self.viewController?.diplayAddAccount(with: leftBarButton, rightBarButton: rightBarButton)\n    }\n    \n    func presentLoadingIndicator() {\n        let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))\n        activityIndicator.color = UIColor.black\n        activityIndicator.startAnimating()\n        let leftBarButton = UIBarButtonItem(title: \"Cancel\", style: .plain, target: viewController, action: #selector(AddAccountViewController.cancelTapped))\n        let rightBarButton = UIBarButtonItem(customView: activityIndicator)\n        viewController?.diplayLoadingAccount(with: leftBarButton, rightBarButton: rightBarButton)\n    }\n    \n    func presentUpdateAccount(account: String) {\n        let leftBarButton = UIBarButtonItem()\n        leftBarButton.title = \"Account\"\n        let rightBarButton = UIBarButtonItem(title: \"Done\", style: .plain, target: viewController, action: #selector(AddAccountViewController.doneTapped))\n        viewController?.diplayUpdateAccount(with: account, leftBarButton: leftBarButton, rightBarButton: rightBarButton)\n    }\n    \n    func presentReportsCompleted() {\n        presentAddAccount()\n        viewController?.diplayAlert(title: AppConfiguration.Messages.reportsCompletedTitle, message: AppConfiguration.Messages.reportsCompletedMessage)\n    }\n    \n    // MARK: - Present Alert Controller\n    \n    func presentAlertController(title: String, message: String) {\n        presentAddAccount()\n        viewController?.diplayAlert(title: title, message: message)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Account/AddAccountViewController.swift",
    "content": "import UIKit\n\nprotocol AddAccountDisplayLogic: class {\n    func diplayAddAccount(with leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem)\n    func diplayLoadingAccount(with leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem)\n    func diplayUpdateAccount(with accountName: String, leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem)\n    func diplayAlert(title: String, message: String)\n}\n\nclass AddAccountViewController: UIViewController, AddAccountDisplayLogic {\n\n    // MARK: - Properties\n\n    @IBOutlet weak var usernameTextfield: UITextField!\n    var interactor: AddAccountInteractor?\n    var presenter: AddAccountPresenter?\n    \n    // MARK: Object lifecycle\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setup()\n    }\n    \n    // MARK: Setup\n    \n    private func setup() {\n        let viewController = self\n        let interactor = AddAccountInteractor()\n        let presenter = AddAccountPresenter()\n        viewController.interactor = interactor\n        viewController.presenter = presenter\n        interactor.presenter = presenter\n        presenter.viewController = viewController\n    }\n\n    // MARK: - View lifecycle\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        usernameTextfield.becomeFirstResponder()\n        interactor?.loadAccount()\n    }\n    \n    // MARK: - Actions\n    \n    @objc func doneTapped() {\n        guard let username = usernameTextfield.text, !username.isEmpty else {\n            return\n        }\n        usernameTextfield.resignFirstResponder()\n        interactor?.validateAccount(with: username)\n    }\n    \n     @objc func cancelTapped() {\n        usernameTextfield.text = \"\"\n        interactor?.deleteAccount()\n    }\n    \n    // MARK: - AddAccountDisplayLogic\n    \n    func diplayAddAccount(with leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem) {\n        usernameTextfield.isEnabled = true\n        navigationItem.hidesBackButton = false\n        navigationItem.setLeftBarButton(nil, animated: true)\n        navigationItem.setRightBarButton(rightBarButton, animated: true)\n    }\n    \n    func diplayLoadingAccount(with leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem) {\n        usernameTextfield.isEnabled = false\n        navigationItem.setLeftBarButton(leftBarButton, animated: true)\n        navigationItem.setRightBarButton(rightBarButton, animated: true)\n    }\n    \n    func diplayUpdateAccount(with accountName: String, leftBarButton: UIBarButtonItem, rightBarButton: UIBarButtonItem) {\n        usernameTextfield.text = accountName\n        usernameTextfield.isEnabled = true\n        usernameTextfield.becomeFirstResponder()\n        navigationItem.hidesBackButton = false\n        navigationItem.setLeftBarButton(nil, animated: true)\n        navigationItem.setRightBarButton(rightBarButton, animated: true)\n    }\n    \n    func diplayAlert(title: String, message: String) {\n        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        let alertAction = UIAlertAction(title: AppConfiguration.Messages.okButton, style: .default, handler: nil)\n        alertController.addAction(alertAction)\n        present(alertController, animated: true, completion: nil)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/App/AppConfiguration.swift",
    "content": "import Foundation\n\nclass AppConfiguration {\n    \n    // MARK: - AppConfiguration.TableViewSection\n    \n    struct TableViewSections {\n        static let zero = NSLocalizedString(\"Best Engagement\", comment: \"\")\n        static let one = NSLocalizedString(\"Top 25 Most Commented\", comment: \"\")\n        static let two = NSLocalizedString(\"Recently Posted\", comment: \"\")\n    }\n    \n    // MARK: - AppConfiguration.TableViewCellIdentifiers\n    \n    struct TableViewCellIdentifiers {\n        static let cell = \"cellID\"\n    }\n    \n    struct DefaultsNotifications {\n        static let reload = Notification.Name(rawValue: \"reload\")\n    }\n    \n    // MARK: - AppConfiguration.Messages\n    \n    struct Messages {\n        static let okButton = NSLocalizedString(\"OK\", comment: \"\")\n        static let doneButton = NSLocalizedString(\"Done\", comment: \"\")\n        static let cancelButton = NSLocalizedString(\"Cancel\", comment: \"\")\n        static let deleteAllButton = NSLocalizedString(\"Delete All\", comment: \"\")\n        static let somethingWrongMessage = NSLocalizedString(\"Something went wrong\", comment: \"\")\n        static let privateAccountMessage = NSLocalizedString(\"This account is private\", comment: \"\")\n        static let reportsCompletedTitle = NSLocalizedString(\"Reports Completed\", comment: \"\")\n        static let reportsCompletedMessage = NSLocalizedString(\"Please go back to the Insights screen\", comment: \"\")\n        static let deleteReportsTitle = NSLocalizedString(\"Delete Reports\", comment: \"\")\n        static let deleteReportsMessage = NSLocalizedString(\"Remove my account and delete all the reports\", comment: \"\")\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/App/AppDelegate.swift",
    "content": "import UIKit\nimport RealmSwift\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        setupAppearance()\n        return true\n    }\n    \n    // MARK: Setup UIAppearance\n    \n    private func setupAppearance() {\n        UINavigationBar.appearance().shadowImage = UIImage()\n        UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)\n        UINavigationBar.appearance().tintColor = UIColor.red\n        UITabBar.appearance().tintColor = UIColor.init(red: 233/255, green: 79/255, blue: 97/255, alpha: 1)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/App/AppExtensions.swift",
    "content": "import UIKit\n\n// MARK: - Formatter\n\nextension Formatter {\n    static let withPoint: NumberFormatter = {\n        let formatter = NumberFormatter()\n        formatter.groupingSeparator = \".\"\n        formatter.numberStyle = .decimal\n        return formatter\n    }()\n}\n\n// MARK: - Integer\n\nextension BinaryInteger {\n    var formattedWithPoint: String {\n        return Formatter.withPoint.string(for: self) ?? \"\"\n    }\n}\n\n// MARK: - String\n\nextension String {\n    \n    /// -returns: A string without white spaces and new lines.\n    func trim() -> String {\n        return self.trimmingCharacters(in: .whitespacesAndNewlines)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/App/AppUserAccount.swift",
    "content": "import Foundation\n\nclass AppUserAccount {\n    enum DefaultsKeys: String {\n        case UserAccountKey\n    }\n    \n    // MARK: - Initializers\n    \n    let defaults: UserDefaults\n    \n    init(defaults: UserDefaults) {\n        self.defaults = defaults\n    }\n    \n    init() {\n        self.defaults = UserDefaults.standard\n    }\n    \n    // MARK: - Properties\n    \n    var name: String? {\n        get {\n            let key = defaults.string(forKey: DefaultsKeys.UserAccountKey.rawValue)\n            return key\n        }\n        set(newName) {\n            guard let name = newName else {\n            defaults.removeObject(forKey: DefaultsKeys.UserAccountKey.rawValue)\n            defaults.synchronize()\n            return\n            }\n            defaults.set(name, forKey: DefaultsKeys.UserAccountKey.rawValue)\n            defaults.synchronize()\n        }\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"insights-29.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"insights-58.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"insights-87.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x-2.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"50x50\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-Small-50x50@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"50x50\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-Small-50x50@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"72x72\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-72x72@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"72x72\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-72x72@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"iTunesArtwork@2x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"24x24\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"notificationCenter\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"27.5x27.5\",\n      \"idiom\" : \"watch\",\n      \"scale\" : \"2x\",\n      \"role\" : \"notificationCenter\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"role\" : \"companionSettings\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\",\n      \"role\" : \"appLauncher\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"86x86\",\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Icon-86@2x.png\",\n      \"scale\" : \"2x\",\n      \"role\" : \"quickLook\",\n      \"subtype\" : \"38mm\"\n    },\n    {\n      \"size\" : \"98x98\",\n      \"idiom\" : \"watch\",\n      \"filename\" : \"Icon-98@2x.png\",\n      \"scale\" : \"2x\",\n      \"role\" : \"quickLook\",\n      \"subtype\" : \"42mm\"\n    },\n    {\n      \"idiom\" : \"watch-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/chevron_location_.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"chevron_location_@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"chevron_location_@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/icons8-Male User Filled_30.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Male User Filled_30.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Male User Filled_60.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/line-chart-graph.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Line Chart_30.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Line Chart_60.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/placeHolder.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"test.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Assets.xcassets/user-icon.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Male User Filled-50.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icons8-Male User Filled-100.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "insights-for-instagram/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"49e-Tb-3d3\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Insights View Controller-->\n        <scene sceneID=\"RRM-QO-QT9\">\n            <objects>\n                <tableViewController id=\"Ch5-O9-Ye5\" customClass=\"InsightsViewController\" customModule=\"insights_for_instagram\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" showsHorizontalScrollIndicator=\"NO\" showsVerticalScrollIndicator=\"NO\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" allowsSelection=\"NO\" rowHeight=\"200\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"QCx-Gf-Hye\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <view key=\"tableHeaderView\" contentMode=\"scaleToFill\" id=\"OKS-hm-khu\" userLabel=\"Header\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"83\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <subviews>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Insights\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ddA-8q-D8E\">\n                                    <rect key=\"frame\" x=\"20\" y=\"23\" width=\"156.5\" height=\"50\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"height\" constant=\"50\" id=\"DUu-BP-hYw\"/>\n                                    </constraints>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"heavy\" pointSize=\"40\"/>\n                                    <nil key=\"textColor\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4dO-Iu-9Ez\">\n                                    <rect key=\"frame\" x=\"260\" y=\"28\" width=\"40\" height=\"40\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"width\" constant=\"40\" id=\"2v9-0o-9Wl\"/>\n                                        <constraint firstAttribute=\"height\" constant=\"40\" id=\"4pX-CE-YYD\"/>\n                                    </constraints>\n                                    <state key=\"normal\" image=\"user-icon\"/>\n                                    <connections>\n                                        <action selector=\"displayAccount:\" destination=\"Ch5-O9-Ye5\" eventType=\"touchUpInside\" id=\"JXk-Tk-puz\"/>\n                                    </connections>\n                                </button>\n                            </subviews>\n                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            <constraints>\n                                <constraint firstAttribute=\"trailing\" secondItem=\"4dO-Iu-9Ez\" secondAttribute=\"trailing\" constant=\"20\" id=\"65d-cu-JAI\"/>\n                                <constraint firstAttribute=\"trailing\" relation=\"greaterThanOrEqual\" secondItem=\"ddA-8q-D8E\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"7lQ-6q-K8u\"/>\n                                <constraint firstAttribute=\"bottom\" secondItem=\"ddA-8q-D8E\" secondAttribute=\"bottom\" constant=\"10\" id=\"L8Z-mG-mNm\"/>\n                                <constraint firstItem=\"ddA-8q-D8E\" firstAttribute=\"leading\" secondItem=\"OKS-hm-khu\" secondAttribute=\"leading\" constant=\"20\" id=\"d7n-qM-9fa\"/>\n                                <constraint firstAttribute=\"bottom\" secondItem=\"4dO-Iu-9Ez\" secondAttribute=\"bottom\" constant=\"15\" id=\"dw0-46-TdA\"/>\n                            </constraints>\n                        </view>\n                        <view key=\"tableFooterView\" contentMode=\"scaleToFill\" id=\"AuA-z4-vXQ\" userLabel=\"Footer\">\n                            <rect key=\"frame\" x=\"0.0\" y=\"83\" width=\"320\" height=\"200\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <subviews>\n                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JH6-hT-hFq\" userLabel=\"WeekdayBlue\">\n                                    <rect key=\"frame\" x=\"20\" y=\"46\" width=\"279\" height=\"133\"/>\n                                    <subviews>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Weekday.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Mma-WH-dqA\" userLabel=\"WeekdayLabel\">\n                                            <rect key=\"frame\" x=\"46\" y=\"41\" width=\"188\" height=\"50\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"height\" constant=\"50\" id=\"47T-IG-GLM\"/>\n                                            </constraints>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" weight=\"heavy\" pointSize=\"40\"/>\n                                            <color key=\"textColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <color key=\"backgroundColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    <constraints>\n                                        <constraint firstItem=\"Mma-WH-dqA\" firstAttribute=\"centerX\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"centerX\" id=\"WZL-cB-1bV\"/>\n                                        <constraint firstItem=\"Mma-WH-dqA\" firstAttribute=\"centerY\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"centerY\" id=\"Xgt-Ut-SW3\"/>\n                                    </constraints>\n                                    <userDefinedRuntimeAttributes>\n                                        <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"layer.masksToBounds\" value=\"YES\"/>\n                                        <userDefinedRuntimeAttribute type=\"number\" keyPath=\"layer.cornerRadius\">\n                                            <integer key=\"value\" value=\"4\"/>\n                                        </userDefinedRuntimeAttribute>\n                                    </userDefinedRuntimeAttributes>\n                                </view>\n                                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Your Best Day to Post\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Q6i-Ho-9L4\" userLabel=\"WeekdayTitleLabel\">\n                                    <rect key=\"frame\" x=\"20\" y=\"8\" width=\"279\" height=\"27\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"27\" id=\"M9R-QC-kkq\"/>\n                                    </constraints>\n                                    <fontDescription key=\"fontDescription\" type=\"system\" weight=\"heavy\" pointSize=\"18\"/>\n                                    <nil key=\"textColor\"/>\n                                    <nil key=\"highlightedColor\"/>\n                                </label>\n                                <view alpha=\"0.40000000000000002\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"S9g-N7-BEs\" userLabel=\"Separator\">\n                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"300\" height=\"0.5\"/>\n                                    <color key=\"backgroundColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                    <constraints>\n                                        <constraint firstAttribute=\"height\" constant=\"1\" id=\"lq3-8e-BJQ\"/>\n                                    </constraints>\n                                </view>\n                            </subviews>\n                            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            <constraints>\n                                <constraint firstAttribute=\"bottom\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"bottom\" constant=\"21\" id=\"Bhh-7U-67L\"/>\n                                <constraint firstAttribute=\"trailing\" secondItem=\"S9g-N7-BEs\" secondAttribute=\"trailing\" id=\"FYt-nZ-XGM\"/>\n                                <constraint firstItem=\"S9g-N7-BEs\" firstAttribute=\"leading\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"leading\" constant=\"20\" id=\"Ibs-wR-T8L\"/>\n                                <constraint firstItem=\"Q6i-Ho-9L4\" firstAttribute=\"trailing\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"trailing\" id=\"OLf-2n-C1s\"/>\n                                <constraint firstAttribute=\"trailing\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"trailing\" constant=\"21\" id=\"PNb-BN-QxD\"/>\n                                <constraint firstItem=\"Q6i-Ho-9L4\" firstAttribute=\"top\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"top\" constant=\"8\" id=\"R3n-VW-hIT\"/>\n                                <constraint firstItem=\"JH6-hT-hFq\" firstAttribute=\"top\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"top\" constant=\"46\" id=\"UcS-Q1-QVu\"/>\n                                <constraint firstItem=\"JH6-hT-hFq\" firstAttribute=\"leading\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"leading\" constant=\"20\" id=\"ere-lG-9lu\"/>\n                                <constraint firstItem=\"Q6i-Ho-9L4\" firstAttribute=\"leading\" secondItem=\"JH6-hT-hFq\" secondAttribute=\"leading\" id=\"ln3-WV-4c0\"/>\n                                <constraint firstItem=\"Q6i-Ho-9L4\" firstAttribute=\"leading\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"leading\" constant=\"20\" id=\"pCv-yf-KPE\"/>\n                                <constraint firstItem=\"S9g-N7-BEs\" firstAttribute=\"top\" secondItem=\"AuA-z4-vXQ\" secondAttribute=\"top\" id=\"rXb-fF-3ml\"/>\n                            </constraints>\n                        </view>\n                        <sections/>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"Ch5-O9-Ye5\" id=\"P7C-ZE-IvU\"/>\n                            <outlet property=\"delegate\" destination=\"Ch5-O9-Ye5\" id=\"CiD-gA-jJv\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" id=\"VVd-PE-ePJ\"/>\n                    <refreshControl key=\"refreshControl\" opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"center\" enabled=\"NO\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" id=\"S7E-Wr-Of8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1000\" height=\"1000\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <connections>\n                            <action selector=\"refresh:\" destination=\"Ch5-O9-Ye5\" eventType=\"primaryActionTriggered\" id=\"1vI-Tk-p4W\"/>\n                        </connections>\n                    </refreshControl>\n                    <connections>\n                        <outlet property=\"footerView\" destination=\"AuA-z4-vXQ\" id=\"shM-JA-JeO\"/>\n                        <outlet property=\"refreshController\" destination=\"S7E-Wr-Of8\" id=\"Vz3-bD-Fp4\"/>\n                        <outlet property=\"weekdayLabel\" destination=\"Mma-WH-dqA\" id=\"NZp-03-SZ0\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"IHe-Uq-TEh\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2010\" y=\"-639.08450704225356\"/>\n        </scene>\n        <!--Tab Bar Controller-->\n        <scene sceneID=\"yl2-sM-qoP\">\n            <objects>\n                <tabBarController id=\"49e-Tb-3d3\" sceneMemberID=\"viewController\">\n                    <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\"/>\n                    <nil key=\"simulatedBottomBarMetrics\"/>\n                    <tabBar key=\"tabBar\" contentMode=\"scaleToFill\" id=\"W28-zg-YXA\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"975\" width=\"768\" height=\"49\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </tabBar>\n                    <connections>\n                        <segue destination=\"S7o-FW-vkP\" kind=\"relationship\" relationship=\"viewControllers\" id=\"L1r-x4-rcR\"/>\n                        <segue destination=\"ysz-7x-ApL\" kind=\"relationship\" relationship=\"viewControllers\" id=\"lzU-1b-eKA\"/>\n                    </connections>\n                </tabBarController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"HuB-VB-40B\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"161\" y=\"-638\"/>\n        </scene>\n        <!--Insights-->\n        <scene sceneID=\"s73-Ab-IC3\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" navigationBarHidden=\"YES\" id=\"S7o-FW-vkP\" sceneMemberID=\"viewController\">\n                    <tabBarItem key=\"tabBarItem\" title=\"Insights\" image=\"line-chart-graph\" id=\"8FS-IR-PId\"/>\n                    <toolbarItems/>\n                    <nil key=\"simulatedTopBarMetrics\"/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"M8X-1l-2gm\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"Ch5-O9-Ye5\" kind=\"relationship\" relationship=\"rootViewController\" id=\"gwH-ca-ERB\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"7Le-HY-pMD\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1087\" y=\"-637\"/>\n        </scene>\n        <!--Account-->\n        <scene sceneID=\"eMh-5G-Nq0\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"ysz-7x-ApL\" sceneMemberID=\"viewController\">\n                    <tabBarItem key=\"tabBarItem\" title=\"Account\" image=\"icons8-Male User Filled_30\" id=\"cPa-gy-q4n\"/>\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" translucent=\"NO\" id=\"T60-t6-wuk\">\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"barTintColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"NuY-RT-tWP\" kind=\"relationship\" relationship=\"rootViewController\" id=\"JzL-oD-EPK\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"i1Z-ND-hRm\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1086\" y=\"171\"/>\n        </scene>\n        <!--Account-->\n        <scene sceneID=\"5Fj-1g-qAM\">\n            <objects>\n                <tableViewController id=\"NuY-RT-tWP\" customClass=\"AccountViewController\" customModule=\"insights_for_instagram\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"piD-qk-mqj\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"504\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"0.97254901959999995\" green=\"0.97254901959999995\" blue=\"0.98823529409999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <inset key=\"separatorInset\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                        <color key=\"sectionIndexBackgroundColor\" red=\"0.97254901959999995\" green=\"0.97254901959999995\" blue=\"0.98823529409999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <sections>\n                            <tableViewSection id=\"8sB-ME-b0N\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" rowHeight=\"15\" id=\"6lW-Ye-PYw\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"15\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"6lW-Ye-PYw\" id=\"19o-yW-okD\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"14.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                        <color key=\"backgroundColor\" red=\"0.97254901960784312\" green=\"0.97254901960784312\" blue=\"0.9882352941176471\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"disclosureIndicator\" indentationWidth=\"10\" textLabel=\"2I4-Ml-xRV\" imageView=\"wvX-I4-BAE\" rowHeight=\"70\" style=\"IBUITableViewCellStyleDefault\" id=\"nGc-Qn-QV3\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"15\" width=\"320\" height=\"70\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"nGc-Qn-QV3\" id=\"923-u0-cbw\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"286\" height=\"69.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Account name\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"2I4-Ml-xRV\">\n                                                    <rect key=\"frame\" x=\"81\" y=\"0.0\" width=\"204\" height=\"69.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" image=\"user-icon\" id=\"wvX-I4-BAE\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"9\" width=\"50\" height=\"50\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </imageView>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"lSo-z7-nYe\" kind=\"show\" id=\"lzZ-Rq-ean\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" rowHeight=\"40\" id=\"gV3-y1-XvB\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"85\" width=\"320\" height=\"40\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"gV3-y1-XvB\" id=\"ahF-rx-rsn\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"39.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                        </tableViewCellContentView>\n                                        <color key=\"backgroundColor\" red=\"0.97254901959999995\" green=\"0.97254901959999995\" blue=\"0.98823529409999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"yVk-qv-tLH\" imageView=\"FTJ-pB-1od\" rowHeight=\"50\" style=\"IBUITableViewCellStyleDefault\" id=\"wf2-5F-5vv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"125\" width=\"320\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"wf2-5F-5vv\" id=\"otO-vZ-lXh\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"49.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Delete my reports\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"yVk-qv-tLH\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"289\" height=\"49.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <color key=\"textColor\" red=\"1\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" id=\"FTJ-pB-1od\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1000\" height=\"1000\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </imageView>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"NuY-RT-tWP\" id=\"36h-ze-7K9\"/>\n                            <outlet property=\"delegate\" destination=\"NuY-RT-tWP\" id=\"EDe-34-Te7\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Account\" id=\"34M-Ra-SjB\"/>\n                    <connections>\n                        <outlet property=\"accountNameTableCell\" destination=\"nGc-Qn-QV3\" id=\"fVJ-9C-8gO\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"PcN-AU-9Kl\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2010\" y=\"170\"/>\n        </scene>\n        <!--Account-->\n        <scene sceneID=\"PhT-p2-mfK\">\n            <objects>\n                <viewController title=\"Account\" hidesBottomBarWhenPushed=\"YES\" id=\"lSo-z7-nYe\" customClass=\"AddAccountViewController\" customModule=\"insights_for_instagram\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"fsY-Ho-ipb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"eQH-5h-mds\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"wpc-8T-JO0\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"504\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <scrollView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" showsHorizontalScrollIndicator=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"G9F-RN-IqA\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"504\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Insights are only available for public instagram accounts. You'll see statistics for your last thousand posts.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"3\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zHl-Nw-eLb\">\n                                        <rect key=\"frame\" x=\"8\" y=\"18\" width=\"304\" height=\"50\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"50\" id=\"RP1-Hz-CiQ\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                        <color key=\"textColor\" red=\"0.59607843137254901\" green=\"0.59607843137254901\" blue=\"0.62352941176470589\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Hrj-dS-INX\" userLabel=\"Container\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"70\" width=\"320\" height=\"70\"/>\n                                        <subviews>\n                                            <view alpha=\"0.5\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"T1q-qH-NoW\" userLabel=\"Separator\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"0.5\"/>\n                                                <color key=\"backgroundColor\" white=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"0.67000000000000004\" id=\"eUO-Ja-bKH\"/>\n                                                </constraints>\n                                            </view>\n                                            <view alpha=\"0.5\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"was-CB-ySX\" userLabel=\"Separator\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"69.5\" width=\"320\" height=\"0.5\"/>\n                                                <color key=\"backgroundColor\" white=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"height\" constant=\"0.67000000000000004\" id=\"5xQ-FI-5Kh\"/>\n                                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"0.67000000000000004\" id=\"er4-CN-Ufa\"/>\n                                                </constraints>\n                                            </view>\n                                            <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" placeholder=\"Username\" textAlignment=\"natural\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cRH-vl-inv\">\n                                                <rect key=\"frame\" x=\"8\" y=\"10\" width=\"304\" height=\"50\"/>\n                                                <nil key=\"textColor\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <textInputTraits key=\"textInputTraits\"/>\n                                                <connections>\n                                                    <outlet property=\"delegate\" destination=\"lSo-z7-nYe\" id=\"9SZ-4E-fbG\"/>\n                                                </connections>\n                                            </textField>\n                                        </subviews>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"was-CB-ySX\" secondAttribute=\"trailing\" id=\"02Y-AV-EWR\"/>\n                                            <constraint firstAttribute=\"bottom\" secondItem=\"was-CB-ySX\" secondAttribute=\"bottom\" id=\"7RU-kg-BSa\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"T1q-qH-NoW\" secondAttribute=\"trailing\" id=\"GwU-aP-Oyi\"/>\n                                            <constraint firstItem=\"T1q-qH-NoW\" firstAttribute=\"top\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"top\" id=\"Hem-xe-j0g\"/>\n                                            <constraint firstItem=\"cRH-vl-inv\" firstAttribute=\"leading\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"leading\" constant=\"8\" id=\"Mb7-aw-qe7\"/>\n                                            <constraint firstItem=\"was-CB-ySX\" firstAttribute=\"leading\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"leading\" id=\"O5L-fS-fc6\"/>\n                                            <constraint firstItem=\"was-CB-ySX\" firstAttribute=\"top\" secondItem=\"cRH-vl-inv\" secondAttribute=\"bottom\" constant=\"9.3300000000000001\" id=\"T4c-0G-DVn\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"cRH-vl-inv\" secondAttribute=\"trailing\" constant=\"8\" id=\"TwE-gx-RyZ\"/>\n                                            <constraint firstItem=\"T1q-qH-NoW\" firstAttribute=\"leading\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"leading\" id=\"g61-IM-4qz\"/>\n                                            <constraint firstItem=\"cRH-vl-inv\" firstAttribute=\"top\" secondItem=\"T1q-qH-NoW\" secondAttribute=\"bottom\" constant=\"9.3300000000000001\" id=\"hGp-Lz-oy0\"/>\n                                            <constraint firstAttribute=\"height\" constant=\"70\" id=\"hqG-ju-q1U\"/>\n                                        </constraints>\n                                    </view>\n                                    <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"The report generation only takes a few minutes. But it depends from the internet connection speed.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" numberOfLines=\"3\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2ja-Y4-tBv\">\n                                        <rect key=\"frame\" x=\"12\" y=\"148\" width=\"296\" height=\"40\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"40\" id=\"1R8-7Q-bZa\"/>\n                                            <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"40\" id=\"2Ev-HN-qB7\"/>\n                                        </constraints>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"12\"/>\n                                        <color key=\"textColor\" red=\"0.59607843137254901\" green=\"0.59607843137254901\" blue=\"0.62352941176470589\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                        <nil key=\"highlightedColor\"/>\n                                    </label>\n                                </subviews>\n                                <color key=\"backgroundColor\" red=\"0.97254901959999995\" green=\"0.97254901959999995\" blue=\"0.98823529409999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstItem=\"Hrj-dS-INX\" firstAttribute=\"top\" secondItem=\"zHl-Nw-eLb\" secondAttribute=\"bottom\" constant=\"2\" id=\"BJo-y5-LoF\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"trailing\" id=\"HhD-i5-lAj\"/>\n                                    <constraint firstAttribute=\"bottom\" secondItem=\"zHl-Nw-eLb\" secondAttribute=\"bottom\" constant=\"555\" id=\"JAR-bl-3mo\"/>\n                                    <constraint firstAttribute=\"trailing\" secondItem=\"2ja-Y4-tBv\" secondAttribute=\"trailing\" constant=\"12\" id=\"RdX-gE-BEs\"/>\n                                    <constraint firstItem=\"zHl-Nw-eLb\" firstAttribute=\"leading\" relation=\"greaterThanOrEqual\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"leadingMargin\" id=\"T8u-NC-ioa\"/>\n                                    <constraint firstItem=\"2ja-Y4-tBv\" firstAttribute=\"top\" secondItem=\"Hrj-dS-INX\" secondAttribute=\"bottom\" constant=\"8\" id=\"Whr-RV-8qw\"/>\n                                    <constraint firstItem=\"zHl-Nw-eLb\" firstAttribute=\"trailing\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"trailingMargin\" id=\"aK2-Hz-VbZ\"/>\n                                    <constraint firstItem=\"Hrj-dS-INX\" firstAttribute=\"leading\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"leading\" id=\"b7A-mK-aJA\"/>\n                                    <constraint firstItem=\"2ja-Y4-tBv\" firstAttribute=\"leading\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"leading\" constant=\"12\" id=\"bBZ-Ql-9tc\"/>\n                                    <constraint firstItem=\"zHl-Nw-eLb\" firstAttribute=\"centerX\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"centerX\" id=\"bqT-wz-Lza\"/>\n                                    <constraint firstItem=\"zHl-Nw-eLb\" firstAttribute=\"top\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"top\" constant=\"18\" id=\"iUN-U4-sAx\"/>\n                                </constraints>\n                            </scrollView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"trailing\" id=\"BGH-3j-Kad\"/>\n                            <constraint firstItem=\"eQH-5h-mds\" firstAttribute=\"top\" secondItem=\"G9F-RN-IqA\" secondAttribute=\"bottom\" id=\"ESM-Qp-UsE\"/>\n                            <constraint firstItem=\"G9F-RN-IqA\" firstAttribute=\"top\" secondItem=\"fsY-Ho-ipb\" secondAttribute=\"bottom\" id=\"Wm1-Dd-VQf\"/>\n                            <constraint firstItem=\"G9F-RN-IqA\" firstAttribute=\"leading\" secondItem=\"wpc-8T-JO0\" secondAttribute=\"leading\" id=\"l52-P5-v8X\"/>\n                        </constraints>\n                    </view>\n                    <nil key=\"simulatedBottomBarMetrics\"/>\n                    <connections>\n                        <outlet property=\"usernameTextfield\" destination=\"cRH-vl-inv\" id=\"6Gc-zi-eme\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"LvL-iT-gtN\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"2854\" y=\"170\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"icons8-Male User Filled_30\" width=\"30\" height=\"30\"/>\n        <image name=\"line-chart-graph\" width=\"30\" height=\"30\"/>\n        <image name=\"user-icon\" width=\"50\" height=\"50\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "insights-for-instagram/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>Insights</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0.7</string>\n\t<key>CFBundleVersion</key>\n\t<string>10</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>UIRequiresFullScreen</key>\n\t<true/>\n\t<key>UIStatusBarTintParameters</key>\n\t<dict>\n\t\t<key>UINavigationBar</key>\n\t\t<dict>\n\t\t\t<key>Style</key>\n\t\t\t<string>UIBarStyleDefault</string>\n\t\t\t<key>Translucent</key>\n\t\t\t<false/>\n\t\t</dict>\n\t</dict>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</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": "insights-for-instagram/Insights/InsightsInteractor.swift",
    "content": "import UIKit\n\nclass InsightsInteractor {\n    \n    // MARK: - Properties\n    \n    var presenter: InstagramMediaPresentation?\n    \n    // MARK: Object lifecycle\n    \n    init() {\n        NotificationCenter.default.addObserver(self, selector: #selector(InsightsInteractor.loadMedia), name: AppConfiguration.DefaultsNotifications.reload, object: nil)\n    }\n    \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n    \n    // MARK: - Load media\n    \n    @objc func loadMedia() {\n        guard let userName = AppUserAccount().name else {\n            loadEmptyMedia()\n            return\n        }\n        loadStoredMedia()\n        DataService.media(for: userName) { (error) in\n            if error == nil {\n                self.loadStoredMedia()\n            }\n        }\n    }\n    \n    func loadEmptyMedia() {\n        presenter?.presentNoAccountSections()\n    }\n    \n    func loadStoredMedia() {\n        let bestEngagement = DataService.bestEngagement(with: 25)\n        let lastWeeksPosted = DataService.lastWeeksPosted(weeks: 12)\n        let topMostCommented = DataService.mostLiked(with: 25)\n        let bestEngagementDictionary: [String: Any] = [\"sectionTitle\": AppConfiguration.TableViewSections.zero, \"items\": bestEngagement]\n        let mostCommentedDictionary: [String: Any] = [\"sectionTitle\": AppConfiguration.TableViewSections.one, \"items\": topMostCommented]\n        let lastWeeksPostedDictionary: [String: Any] = [\"sectionTitle\": AppConfiguration.TableViewSections.two, \"items\": lastWeeksPosted]\n        presenter?.presentLoadedSections(with: [bestEngagementDictionary, mostCommentedDictionary, lastWeeksPostedDictionary])\n    }\n    \n    func loadFetchMediaFailureAlert(error: Error) {\n        presenter?.presentAlertController(with: error.localizedDescription)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Insights/InsightsPresenter.swift",
    "content": "import Foundation\nimport UIKit\n\nstruct InstagramMediaSection {\n    let sectionTitle: String\n    let instagramMediaViews: [InstagramMediaView]\n}\n\nstruct InstagramMediaView {\n    let likes: String\n    let comments: String\n    let imageURL: String\n}\n\nprotocol InstagramMediaPresentation {\n    func presentLoadedSections (with items: [[String: Any]])\n    func presentNoAccountSections ()\n    func presentAlertController(with message: String)\n}\n\nclass InsightsPresenter: InstagramMediaPresentation {\n    \n    // MARK: - Properties\n    \n    weak var viewController: InsightsViewDisplayLogic?\n    \n    // MARK: - Present fetched media\n    \n    func presentLoadedSections(with items: [[String: Any]]) {\n        var instagramMediaSections = [InstagramMediaSection]()\n        for section in items {\n            guard let sectionTitle = section[\"sectionTitle\"] as? String,\n            let instagramMedias = section[\"items\"] as? [InstagramMedia] else { return }\n            var instagramMediaViews = [InstagramMediaView]()\n            for item in instagramMedias {\n                let itemView = InstagramMediaView(likes: NSLocalizedString(\"Likes: \", comment: \"\")+\"\\(item.likesCount.formattedWithPoint)\", comments: NSLocalizedString(\"Comments: \", comment: \"\")+\"\\(item.commentsCount.formattedWithPoint)\", imageURL: item.imageUrl)\n                instagramMediaViews.append(itemView)\n            }\n            let instagramMediaSection = InstagramMediaSection(sectionTitle: sectionTitle, instagramMediaViews: instagramMediaViews)\n            instagramMediaSections.append(instagramMediaSection)\n        }\n        let weekday = DataService.weekday()\n        viewController?.diplayFetchedMedia(instagramMediaSections: instagramMediaSections, weekday: weekday)\n    }\n    \n    // MARK: - Present no account UI\n    \n    func presentNoAccountSections() {\n        let instagramMediaSections = createPlaceHolderSection()\n        viewController?.diplayFetchedMedia(instagramMediaSections: instagramMediaSections, weekday: NSLocalizedString(\"Weekday.\", comment: \"\"))\n    }\n    \n    private func createPlaceHolderSection() -> [InstagramMediaSection] {\n        let item = InstagramMediaView(likes: NSLocalizedString(\"Likes\", comment: \"\"), comments: NSLocalizedString(\"Comments\", comment: \"\"), imageURL: \"\")\n        let items = Array(repeating: item, count: 3)\n        let instagramItemsSection_0 = InstagramMediaSection(sectionTitle: AppConfiguration.TableViewSections.zero, instagramMediaViews: items)\n        let instagramItemsSection_1 = InstagramMediaSection(sectionTitle: AppConfiguration.TableViewSections.one, instagramMediaViews: items)\n        let instagramItemsSection_2 = InstagramMediaSection(sectionTitle: AppConfiguration.TableViewSections.two, instagramMediaViews: items)\n        return [instagramItemsSection_0, instagramItemsSection_1, instagramItemsSection_2]\n    }\n    \n    // MARK: - Present Alert Controller\n    \n    func presentAlertController(with message: String) {\n        viewController?.diplayFetchMediaFailureAlert(title: AppConfiguration.Messages.somethingWrongMessage, message: message)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Insights/InsightsViewController.swift",
    "content": "import UIKit\n\nprotocol InsightsViewDisplayLogic: class {\n    func diplayFetchedMedia(instagramMediaSections: [InstagramMediaSection], weekday: String)\n    func diplayFetchMediaFailureAlert(title: String, message: String)\n}\n\nclass InsightsViewController: UITableViewController, InsightsViewDisplayLogic {\n\n    // MARK: - Properties\n    \n    var interactor: InsightsInteractor?\n    var presenter: InstagramMediaPresentation?\n    var sections: [InstagramMediaSection]?\n    var storedOffsets = [Int: CGFloat]()\n\n    @IBOutlet weak var footerView: UIView?\n    @IBOutlet weak var weekdayLabel: UILabel!\n    @IBOutlet weak var refreshController: UIRefreshControl!\n    \n    // MARK: Object lifecycle\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setup()\n    }\n    \n    // MARK: Setup\n    \n    private func setup() {\n       let viewController = self\n       let interactor = InsightsInteractor()\n       let presenter = InsightsPresenter()\n       viewController.interactor = interactor\n       viewController.presenter = presenter\n       interactor.presenter = presenter\n       presenter.viewController = viewController\n       sections = []\n    }\n    \n    // MARK: - View lifecycle\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        setupUI()\n        fetchMediaOnload()\n    }\n    \n    // MARK: - SetupUI\n    \n    private func setupUI() {\n        tableView.register(InstagramMediaSectionTableViewCell.self, forCellReuseIdentifier: AppConfiguration.TableViewCellIdentifiers.cell)\n        tableView.rowHeight = UITableViewAutomaticDimension\n        tableView.estimatedRowHeight = 200\n        tableView.separatorStyle = .none\n        self.footerView?.isHidden = true\n    }\n    \n    // MARK: - Fetch Media\n    \n    func fetchMediaOnload() {\n        DispatchQueue.global(qos: .background).async {\n            self.interactor?.loadMedia()\n        }\n    }\n    \n    // MARK: - Table view data source\n    \n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 1\n    }\n    \n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        guard let sections = sections else { return 0 }\n        return sections.count\n    }\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        guard let cell = tableView.dequeueReusableCell(withIdentifier: AppConfiguration.TableViewCellIdentifiers.cell, for: indexPath) as? InstagramMediaSectionTableViewCell else {\n            return InstagramMediaSectionTableViewCell()\n        }\n        let instagramItemsSection = self.sections?[indexPath.row]\n        cell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)\n        cell.collectionViewOffset = storedOffsets[indexPath.row] ?? 0\n        cell.sectionNameLabel.text = instagramItemsSection?.sectionTitle\n        return cell\n    }\n    \n    override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {\n        guard let tableViewCell = cell as? InstagramMediaSectionTableViewCell else { return }\n        storedOffsets[indexPath.row] = tableViewCell.collectionViewOffset\n    }\n    \n    // MARK: - Actions\n    \n    @IBAction func refresh(_ sender: Any) {\n        fetchMediaOnload()\n    }\n    \n    @IBAction func displayAccount(_ sender: Any) {\n        if let tabBarController = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController {\n            tabBarController.selectedIndex = 1\n        }\n    }\n        \n    func diplayFetchedMedia(instagramMediaSections: [InstagramMediaSection], weekday: String) {\n        self.sections = instagramMediaSections\n        DispatchQueue.main.async {\n            self.footerView?.isHidden = false\n            self.weekdayLabel.text = weekday\n            self.refreshController.endRefreshing()\n            self.tableView.reloadData()\n        }\n    }\n    \n    func diplayFetchMediaFailureAlert(title: String, message: String) {\n        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        let alertAction = UIAlertAction(title: AppConfiguration.Messages.okButton, style: .default, handler: nil)\n        alertController.addAction(alertAction)\n        self.present(alertController, animated: true, completion: nil)\n    }\n}\n\nextension InsightsViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {\n\n    // MARK: - Collections view data source\n\n    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {\n        let index = collectionView.tag\n        let instagramMediaSection = self.sections?[index]\n        return (instagramMediaSection?.instagramMediaViews.count) ?? 0\n    }\n    \n    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {\n        let index = collectionView.tag\n        let instagramMediaSection = self.sections?[index]\n        let media = instagramMediaSection?.instagramMediaViews[indexPath.row]\n        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: AppConfiguration.TableViewCellIdentifiers.cell, for: indexPath) as?\n            InstagramMediaCollectionViewCell else { return InstagramMediaCollectionViewCell() }\n        cell.mediaModelView = media\n        return cell\n    }\n    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {\n        let h = collectionView.frame.height - 10\n        return CGSize(width: 324/2, height: h)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Insights/Views/InstagramMediaCollectionViewCell.swift",
    "content": "import UIKit\nimport Kingfisher\n\nclass InstagramMediaCollectionViewCell: UICollectionViewCell {\n    \n    // MARK: - Properties\n    \n    var mediaModelView: InstagramMediaView? {\n        didSet {\n            updateViews()\n        }\n    }\n    \n    let imageView: UIImageView = {\n        let image = UIImageView()\n        image.contentMode = .scaleAspectFill\n        image.layer.cornerRadius = 4\n        image.layer.masksToBounds = true\n        image.image = UIImage(named: \"placeHolder\")\n        return image\n    }()\n    \n    let likesLabel: UILabel = {\n        let label = UILabel()\n        label.font = UIFont.systemFont(ofSize: 14, weight: UIFont.Weight.regular)\n        return label\n    }()\n    \n    let commentsLabel: UILabel = {\n        let label = UILabel()\n        label.font = UIFont.systemFont(ofSize: 14, weight: UIFont.Weight.regular)\n        label.textColor = UIColor.lightGray\n        return label\n    }()\n    \n    // MARK: Object lifecycle\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setupViews()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    func setupViews() {\n        addSubview(imageView)\n        addSubview(likesLabel)\n        addSubview(commentsLabel)\n        imageView.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.width)\n        likesLabel.frame = CGRect(x: 0, y: frame.width + 6, width: frame.width, height: 16)\n        commentsLabel.frame = CGRect(x: 0, y: frame.width + 25, width: frame.width, height: 16)\n    }\n    \n    func updateViews() {\n        self.likesLabel.text = mediaModelView?.likes\n        self.commentsLabel.text = mediaModelView?.comments\n        if let imageUrl = mediaModelView?.imageURL, let url = URL(string: imageUrl) {\n            self.imageView.kf.setImage(with: url)\n        }\n    }\n    \n    override func prepareForReuse() {\n        imageView.image = UIImage(named: \"placeHolder\")\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Insights/Views/InstagramMediaSectionTableViewCell.swift",
    "content": "import Foundation\nimport UIKit\n\nclass InstagramMediaSectionTableViewCell: UITableViewCell {\n    \n    // MARK: Object lifecycle\n    \n    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        setupView()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    // MARK: - Properties\n    \n    let itemsCollectionView: UICollectionView = {\n        let layout = UICollectionViewFlowLayout()\n        layout.scrollDirection = .horizontal\n        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)\n        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)\n        collectionView.backgroundColor = UIColor.clear\n        collectionView.showsHorizontalScrollIndicator = false\n        collectionView.translatesAutoresizingMaskIntoConstraints = false\n        return collectionView\n    }()\n    \n    let sectionNameLabel: UILabel = {\n        let label = UILabel()\n        label.font = UIFont.systemFont(ofSize: 18, weight: UIFont.Weight.heavy)\n        label.translatesAutoresizingMaskIntoConstraints = false\n        return label\n    }()\n    \n    let dividerLineView: UIView = {\n        let view = UIView()\n        view.backgroundColor = UIColor(white: 0.4, alpha: 0.4)\n        view.translatesAutoresizingMaskIntoConstraints = false\n        return view\n    }()\n    \n    func setupView() {\n        contentView.backgroundColor = UIColor.clear\n        addSubview(itemsCollectionView)\n        addSubview(dividerLineView)\n        addSubview(sectionNameLabel)\n        itemsCollectionView.addConstraint(NSLayoutConstraint(item: itemsCollectionView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: (420/2)))\n        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"H:|-20-[sectionNameLabel]|\", options: NSLayoutFormatOptions(), metrics: nil, views: [\"sectionNameLabel\": sectionNameLabel]))\n\n        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"H:|-20-[dividerLineView]|\", options: NSLayoutFormatOptions(), metrics: nil, views: [\"dividerLineView\": dividerLineView]))\n        \n        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"H:|-10-[itemsCollectionView]|\", options: NSLayoutFormatOptions(), metrics: nil, views: [\"itemsCollectionView\": itemsCollectionView]))\n        \n        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: \"V:|[dividerLineView(0.5)][sectionNameLabel(40)][itemsCollectionView]-20-|\", options: NSLayoutFormatOptions(), metrics: nil, views: [\"itemsCollectionView\": itemsCollectionView, \"dividerLineView\": dividerLineView, \"sectionNameLabel\": sectionNameLabel]))\n        itemsCollectionView.register(InstagramMediaCollectionViewCell.self, forCellWithReuseIdentifier: AppConfiguration.TableViewCellIdentifiers.cell)\n    }\n}\n\n// MARK: UICollectionViewDataSource\n\nextension InstagramMediaSectionTableViewCell {\n    //Following https://github.com/ashfurrow/ design\n    func setCollectionViewDataSourceDelegate<D: UICollectionViewDataSource & UICollectionViewDelegate>(_ dataSourceDelegate: D, forRow row: Int) {\n        itemsCollectionView.delegate = dataSourceDelegate\n        itemsCollectionView.dataSource = dataSourceDelegate\n        itemsCollectionView.tag = row\n        itemsCollectionView.setContentOffset(itemsCollectionView.contentOffset, animated: false)\n        itemsCollectionView.reloadData()\n    }\n    \n    var collectionViewOffset: CGFloat {\n        set { itemsCollectionView.contentOffset.x = newValue }\n        get { return itemsCollectionView.contentOffset.x }\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "insights-for-instagram/Models/InstagramMedia.swift",
    "content": "import ObjectMapper\nimport RealmSwift\n\nclass InstagramMedia: Object, Mappable {\n    \n    @objc dynamic var id = \"\"\n    @objc dynamic var code = \"\"\n    @objc dynamic var type = \"\"\n    @objc dynamic var imageUrl = \"\"\n    @objc dynamic var createdTime = Date()\n    @objc dynamic var weekday = 0 // https://developer.apple.com/documentation/foundation/nsdatecomponents/1410442-weekday\n    @objc dynamic var likesCount = 0\n    @objc dynamic var commentsCount = 0\n    @objc dynamic var engagementCount = 0 // includes the total number of Instagram accounts that liked or commented a post\n    override static func primaryKey() -> String? {\n        return \"id\"\n    }\n    \n    required convenience init?(map: Map) {\n        self.init()\n    }\n    \n    func mapping(map: Map) {\n        id <- map[\"id\"]\n        code <- map[\"code\"]\n        imageUrl <- map[\"image_url\"]\n        createdTime <- (map[\"created_time\"], DateTransform())\n        weekday = Calendar.current.component(.weekday, from: createdTime)\n        likesCount <- map[\"likes_count\"]\n        commentsCount <- map[\"comments_count\"]\n        engagementCount <- map[\"engagement_count\"]\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram/Networking/InstagramAPI.swift",
    "content": "import Foundation\nimport Moya\n\n// MARK: - Provider setup\n\nstruct Constant {\n    static let baseURL = \"https://insights-for-instagram.herokuapp.com/api/\"\n}\n\nprivate func JSONResponseDataFormatter(_ data: Data) -> Data {\n    do {\n        let dataAsJSON = try JSONSerialization.jsonObject(with: data)\n        let prettyData =  try JSONSerialization.data(withJSONObject: dataAsJSON, options: .prettyPrinted)\n        return prettyData\n    } catch {\n        return data // fallback to original data if it can't be serialized.\n    }\n}\n\nlet InstagramProvider = MoyaProvider<Instagram>(plugins: [NetworkLoggerPlugin(verbose: false, responseDataFormatter: JSONResponseDataFormatter)])\n\n// MARK: - Provider support\n\nprivate extension String {\n    var urlEscaped: String? {\n        return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)\n    }\n}\n\npublic enum Instagram {\n    case userMedia(String)\n}\n\nextension Instagram: TargetType {\n    public var baseURL: URL { return URL(string: Constant.baseURL)! } // swiftlint:disable:this force_unwrapping\n    public var path: String {\n        switch self {\n        case .userMedia(let name):\n            guard let name = name.urlEscaped else { return \"\" }\n            return \"users/\\(name)/media\"\n        }\n    }\n    public var method: Moya.Method {\n        return .get\n    }\n    \n    public var parameterEncoding: ParameterEncoding {\n        return URLEncoding.default\n    }\n    \n    public var task: Task {\n        return .requestPlain\n    }\n    \n    public var validate: Bool {\n        switch self {\n        default:\n            return false\n        }\n    }\n   \n    public var sampleData: Data {\n        return Data()\n    }\n    \n    public var headers: [String: String]? {\n        return nil\n    }\n}\n\npublic func url(_ route: TargetType) -> String {\n    return route.baseURL.appendingPathComponent(route.path).absoluteString\n}\n\n// MARK: - Response Handlers\n\nextension Moya.Response {\n    func mapNSArray() throws -> [String: Any] {\n        let any = try self.mapJSON()\n        guard let array = any as? [String: Any] else {\n            throw MoyaError.jsonMapping(self)\n        }\n        return array\n    }\n}\n\n// MARK: - Provider support\n\nfunc stubbedResponse(_ filename: String) -> Data? {\n    @objc class TestClass: NSObject { }\n    let bundle = Bundle(for: TestClass.self)\n    guard let path = bundle.path(forResource: filename, ofType: \"json\") else { return nil }\n    return (try? Data(contentsOf: URL(fileURLWithPath: path)))\n}\n"
  },
  {
    "path": "insights-for-instagram/Services/DataService.swift",
    "content": "import RealmSwift\n\nenum Weekday: Int {\n    case sunday = 1\n    case monday = 2\n    case tuesday = 3\n    case wednesday = 4\n    case thursday = 5\n    case friday = 6\n    case saturday = 7\n}\n\nclass DataService {\n    \n    static func media( for userName: String, completion: @escaping ( _ error: String?) -> Void) {\n        InstagramProvider.request(.userMedia(userName)) { result in\n            do {\n                let response = try result.dematerialize()\n                let value: [String: Any] = try response.mapNSArray()\n                guard let items = value[\"data\"] as? [[String: Any]], items.isEmpty == false else {\n                completion(AppConfiguration.Messages.privateAccountMessage)\n                return\n                }\n                AppUserAccount().name = userName\n                importInstagramMedia(instagramMedia: items, completion: {\n                    completion(nil)\n                })\n            } catch {\n                completion(error.localizedDescription)\n            }\n        }\n    }\n    \n    // Creates/updates media\n    static func importInstagramMedia(instagramMedia: [[String: Any]], completion: @escaping () -> Void) {\n        DispatchQueue.global().async {\n            guard let realm = try? Realm() else { return }\n            realm.beginWrite()\n            for media in instagramMedia {\n                guard let instagramMedia = InstagramMedia(JSON: media) else {\n                    continue\n                }\n                realm.add(instagramMedia, update: true)\n            }\n            try? realm.commitWrite()\n            DispatchQueue.main.async {\n                completion()\n            }\n        }\n    }\n    \n    // Returns the top n most liked\n    static func mostLiked (with limit: Int ) -> [InstagramMedia] {\n        // paginating behavior isn’t necessary at all: https://realm.io/docs/swift/latest/#limiting-results\n        guard let realm = try? Realm() else { return [] }\n        let medias = realm.objects(InstagramMedia.self).sorted(byKeyPath: \"commentsCount\", ascending: false)\n        if medias.count > limit {\n            return Array(medias[0...limit])\n        }\n        return Array(medias)\n    }\n    \n    // Returns last (n) weeks posted media\n    static func lastWeeksPosted (weeks: Int) -> [InstagramMedia] {\n        guard let realm = try? Realm() else { return [] }\n        guard let fromDate = Calendar.current.date(byAdding: .day, value: -(7 * weeks), to: Date()) else { return [] }\n        let predicate = NSPredicate(format: \"createdTime > %@\", fromDate as NSDate)\n        let medias = realm.objects(InstagramMedia.self).sorted(byKeyPath: \"createdTime\", ascending: false).filter(predicate)\n        return Array(medias)\n    }\n    \n    // Returns best Engagement\n    static func bestEngagement (with limit: Int) -> [InstagramMedia] {\n        guard let realm = try? Realm() else { return [] }\n        let medias = realm.objects(InstagramMedia.self).sorted(byKeyPath: \"engagementCount\", ascending: false)\n        if medias.count > limit {\n            return Array(medias[0...limit])\n        }\n        return Array(medias)\n    }\n    \n    // Returns the oldest media stored locally\n    static func instagramMediaIndex() -> (offset: String?, count: Int) {\n        guard let realm = try? Realm() else { return (nil, 0) }\n        let entries = realm.objects(InstagramMedia.self).sorted(byKeyPath: \"createdTime\", ascending: true)\n        if entries.isEmpty == false {\n            guard let offset = entries[0][\"id\"] as? String else { return (nil, 0) }\n            let count = entries.count\n            return (offset, count)\n        } else {\n            return (nil, 0)\n        }\n    }\n    \n    // Weekday\n    // swiftlint:disable:next cyclomatic_complexity\n    static func weekday() -> String {\n        \n        guard let realm = try? Realm() else { return \"\" }\n        \n        var predicateArray = [NSPredicate]()\n        var groupbyArray = [[InstagramMedia]]()\n        var summedEngagementArray = [(Int, Int)]()\n\n        for weekday in 1...7 {\n            let predicate = NSPredicate(format: \"weekday == %d\", weekday)\n            predicateArray.append(predicate)\n        }\n        for weekday in predicateArray.indices {\n            let medias = Array(realm.objects(InstagramMedia.self).filter(predicateArray[weekday]))\n            groupbyArray.append(medias)\n        }\n        for weekday in groupbyArray.indices {\n            let array = groupbyArray[weekday]\n            summedEngagementArray.append(DataService.sumEngagement(for: array, day: weekday))\n        }\n        \n        summedEngagementArray = summedEngagementArray.sorted(by: { $0.0 > $1.0 })\n\n        switch summedEngagementArray[0].1 {\n        case Weekday.sunday.rawValue:\n            return NSLocalizedString(\"Sunday.\", comment: \"\")\n        case Weekday.monday.rawValue:\n            return NSLocalizedString(\"Monday.\", comment: \"\")\n        case Weekday.tuesday.rawValue:\n            return NSLocalizedString(\"Tuesday.\", comment: \"\")\n        case Weekday.wednesday.rawValue:\n            return NSLocalizedString(\"Wednesday.\", comment: \"\")\n        case Weekday.thursday.rawValue:\n            return NSLocalizedString(\"Thursday.\", comment: \"\")\n        case Weekday.friday.rawValue:\n            return NSLocalizedString(\"Friday.\", comment: \"\")\n        case Weekday.saturday.rawValue:\n            return NSLocalizedString(\"Saturday.\", comment: \"\")\n        default:\n            return NSLocalizedString(\"Weekday.\", comment: \"\")\n        }\n    }\n    \n    static func sumEngagement(for array: [InstagramMedia], day: Int) -> (Int, Int) {\n        var engagmentSum = 0\n        for media in array {\n            engagmentSum += media.engagementCount\n        }\n        return (engagmentSum, day + 1)\n    }\n    \n    static func deleteAll() {\n        AppUserAccount().name = nil\n        guard let realm = try? Realm() else { return }\n        try? realm.write {\n            realm.deleteAll()\n        }\n        NotificationCenter.default.post(name: AppConfiguration.DefaultsNotifications.reload, object: nil)\n    }\n}\n"
  },
  {
    "path": "insights-for-instagram.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\t826DAD622CE2DE3A20EE8817 /* Pods_insights_for_instagramTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09F2374247510737687CC66A /* Pods_insights_for_instagramTests.framework */; };\n\t\t970EC5CA084F08EC732835A5 /* Pods_insights_for_instagram.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 802F0FF4317368326E258C85 /* Pods_insights_for_instagram.framework */; };\n\t\tAD4142E31F6FD78E00A83795 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AD4142E21F6FD78E00A83795 /* LaunchScreen.storyboard */; };\n\t\tAD4142E41F6FD78E00A83795 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AD4142E21F6FD78E00A83795 /* LaunchScreen.storyboard */; };\n\t\tAD61BABD1F6BDBF900307E92 /* AddAccountPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD61BABC1F6BDBF900307E92 /* AddAccountPresenter.swift */; };\n\t\tAD6C69081F390A4E00039B66 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AD6C69061F390A4E00039B66 /* Main.storyboard */; };\n\t\tAD6C690A1F390A4E00039B66 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AD6C69091F390A4E00039B66 /* Assets.xcassets */; };\n\t\tAD7D8C371F73CCC60094697E /* InstagramAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD7D8C361F73CCC60094697E /* InstagramAPITests.swift */; };\n\t\tADB36EDB1F7306DA002844FD /* InstagramMediaTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADB36EDA1F7306DA002844FD /* InstagramMediaTests.swift */; };\n\t\tADC34C1B20261413008E7875 /* InstagramMediaCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADC34C1A20261413008E7875 /* InstagramMediaCollectionViewCell.swift */; };\n\t\tADD71BCF1F6AE47800251445 /* InstagramAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BCE1F6AE47800251445 /* InstagramAPI.swift */; };\n\t\tADD71BD31F6AE48500251445 /* InstagramMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BD21F6AE48500251445 /* InstagramMedia.swift */; };\n\t\tADD71BDA1F6AE49B00251445 /* InsightsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BD61F6AE49B00251445 /* InsightsInteractor.swift */; };\n\t\tADD71BDD1F6AE49B00251445 /* InsightsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BD71F6AE49B00251445 /* InsightsPresenter.swift */; };\n\t\tADD71BE01F6AE49B00251445 /* InsightsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BD81F6AE49B00251445 /* InsightsViewController.swift */; };\n\t\tADD71BE31F6AE49B00251445 /* InstagramMediaSectionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BD91F6AE49B00251445 /* InstagramMediaSectionTableViewCell.swift */; };\n\t\tADD71BEC1F6AE4AC00251445 /* AppUserAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BE61F6AE4AC00251445 /* AppUserAccount.swift */; };\n\t\tADD71BF21F6AE4AC00251445 /* DataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BE81F6AE4AC00251445 /* DataService.swift */; };\n\t\tADD71BF51F6AE4AC00251445 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BE91F6AE4AC00251445 /* AppConfiguration.swift */; };\n\t\tADD71BF81F6AE4AC00251445 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BEA1F6AE4AC00251445 /* AppDelegate.swift */; };\n\t\tADD71BFB1F6AE4AC00251445 /* AppExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BEB1F6AE4AC00251445 /* AppExtensions.swift */; };\n\t\tADD71C021F6AE4C100251445 /* AccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71BFE1F6AE4C100251445 /* AccountViewController.swift */; };\n\t\tADD71C081F6AE4C100251445 /* AddAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71C001F6AE4C100251445 /* AddAccountViewController.swift */; };\n\t\tADD71C0B1F6AE4C100251445 /* AddAccountInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD71C011F6AE4C100251445 /* AddAccountInteractor.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tAD6C69141F390A4F00039B66 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = AD6C68F51F390A4E00039B66 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = AD6C68FC1F390A4E00039B66;\n\t\t\tremoteInfo = \"insights-for-instagram\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t09F2374247510737687CC66A /* Pods_insights_for_instagramTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_insights_for_instagramTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1879247EFBB7E37B2DF8A95E /* Pods-insights-for-instagramTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-insights-for-instagramTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-insights-for-instagramTests/Pods-insights-for-instagramTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t25CF554A7A2BE8E283AEC682 /* Pods-insights-for-instagram.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-insights-for-instagram.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-insights-for-instagram/Pods-insights-for-instagram.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7FADBF9E959DB8F02D5624CA /* Pods-insights-for-instagramTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-insights-for-instagramTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-insights-for-instagramTests/Pods-insights-for-instagramTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t802F0FF4317368326E258C85 /* Pods_insights_for_instagram.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_insights_for_instagram.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA7CD320FF647674A7285FBC0 /* Pods-insights-for-instagram.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-insights-for-instagram.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-insights-for-instagram/Pods-insights-for-instagram.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAD4142E21F6FD78E00A83795 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tAD61BABC1F6BDBF900307E92 /* AddAccountPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddAccountPresenter.swift; sourceTree = \"<group>\"; };\n\t\tAD6C68FD1F390A4E00039B66 /* insights-for-instagram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"insights-for-instagram.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAD6C69071F390A4E00039B66 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tAD6C69091F390A4E00039B66 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tAD6C690E1F390A4E00039B66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tAD6C69131F390A4F00039B66 /* insights-for-instagramTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"insights-for-instagramTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tAD6C69191F390A4F00039B66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tAD7D8C361F73CCC60094697E /* InstagramAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstagramAPITests.swift; sourceTree = \"<group>\"; };\n\t\tADB36EDA1F7306DA002844FD /* InstagramMediaTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstagramMediaTests.swift; sourceTree = \"<group>\"; };\n\t\tADC34C1A20261413008E7875 /* InstagramMediaCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstagramMediaCollectionViewCell.swift; sourceTree = \"<group>\"; };\n\t\tADD71BCE1F6AE47800251445 /* InstagramAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstagramAPI.swift; sourceTree = \"<group>\"; };\n\t\tADD71BD21F6AE48500251445 /* InstagramMedia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstagramMedia.swift; sourceTree = \"<group>\"; };\n\t\tADD71BD61F6AE49B00251445 /* InsightsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsightsInteractor.swift; sourceTree = \"<group>\"; };\n\t\tADD71BD71F6AE49B00251445 /* InsightsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsightsPresenter.swift; sourceTree = \"<group>\"; };\n\t\tADD71BD81F6AE49B00251445 /* InsightsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsightsViewController.swift; sourceTree = \"<group>\"; };\n\t\tADD71BD91F6AE49B00251445 /* InstagramMediaSectionTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstagramMediaSectionTableViewCell.swift; sourceTree = \"<group>\"; };\n\t\tADD71BE61F6AE4AC00251445 /* AppUserAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUserAccount.swift; sourceTree = \"<group>\"; };\n\t\tADD71BE81F6AE4AC00251445 /* DataService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataService.swift; sourceTree = \"<group>\"; };\n\t\tADD71BE91F6AE4AC00251445 /* AppConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppConfiguration.swift; sourceTree = \"<group>\"; };\n\t\tADD71BEA1F6AE4AC00251445 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tADD71BEB1F6AE4AC00251445 /* AppExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppExtensions.swift; sourceTree = \"<group>\"; };\n\t\tADD71BFE1F6AE4C100251445 /* AccountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountViewController.swift; sourceTree = \"<group>\"; };\n\t\tADD71C001F6AE4C100251445 /* AddAccountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddAccountViewController.swift; sourceTree = \"<group>\"; };\n\t\tADD71C011F6AE4C100251445 /* AddAccountInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddAccountInteractor.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tAD6C68FA1F390A4E00039B66 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t970EC5CA084F08EC732835A5 /* Pods_insights_for_instagram.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAD6C69101F390A4F00039B66 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t826DAD622CE2DE3A20EE8817 /* Pods_insights_for_instagramTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tAD6C68F41F390A4E00039B66 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAD6C68FE1F390A4E00039B66 /* Products */,\n\t\t\t\tAD6C68FF1F390A4E00039B66 /* insights-for-instagram */,\n\t\t\t\tAD6C69161F390A4F00039B66 /* insights-for-instagramTests */,\n\t\t\t\tFAD78C34808A08430765163F /* Pods */,\n\t\t\t\tF3AD435598555D6DC2ACAD81 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAD6C68FE1F390A4E00039B66 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAD6C68FD1F390A4E00039B66 /* insights-for-instagram.app */,\n\t\t\t\tAD6C69131F390A4F00039B66 /* insights-for-instagramTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAD6C68FF1F390A4E00039B66 /* insights-for-instagram */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71B8A1F6AE36500251445 /* Account */,\n\t\t\t\tADD71B891F6AE32A00251445 /* App */,\n\t\t\t\tADD71B8B1F6AE36F00251445 /* Insights */,\n\t\t\t\tADD71B8C1F6AE37C00251445 /* Models */,\n\t\t\t\tADD71B8D1F6AE38500251445 /* Networking */,\n\t\t\t\tADC34C192025FAD5008E7875 /* Services */,\n\t\t\t\tAD6C69091F390A4E00039B66 /* Assets.xcassets */,\n\t\t\t\tAD6C690E1F390A4E00039B66 /* Info.plist */,\n\t\t\t\tAD4142E21F6FD78E00A83795 /* LaunchScreen.storyboard */,\n\t\t\t\tAD6C69061F390A4E00039B66 /* Main.storyboard */,\n\t\t\t);\n\t\t\tpath = \"insights-for-instagram\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAD6C69161F390A4F00039B66 /* insights-for-instagramTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAD6C69191F390A4F00039B66 /* Info.plist */,\n\t\t\t\tADB36EDA1F7306DA002844FD /* InstagramMediaTests.swift */,\n\t\t\t\tAD7D8C361F73CCC60094697E /* InstagramAPITests.swift */,\n\t\t\t);\n\t\t\tpath = \"insights-for-instagramTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADC34C192025FAD5008E7875 /* Services */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BE81F6AE4AC00251445 /* DataService.swift */,\n\t\t\t);\n\t\t\tpath = Services;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADC34C1C202615FF008E7875 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BD91F6AE49B00251445 /* InstagramMediaSectionTableViewCell.swift */,\n\t\t\t\tADC34C1A20261413008E7875 /* InstagramMediaCollectionViewCell.swift */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADD71B891F6AE32A00251445 /* App */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BE91F6AE4AC00251445 /* AppConfiguration.swift */,\n\t\t\t\tADD71BEA1F6AE4AC00251445 /* AppDelegate.swift */,\n\t\t\t\tADD71BEB1F6AE4AC00251445 /* AppExtensions.swift */,\n\t\t\t\tADD71BE61F6AE4AC00251445 /* AppUserAccount.swift */,\n\t\t\t);\n\t\t\tpath = App;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADD71B8A1F6AE36500251445 /* Account */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BFE1F6AE4C100251445 /* AccountViewController.swift */,\n\t\t\t\tADD71C011F6AE4C100251445 /* AddAccountInteractor.swift */,\n\t\t\t\tAD61BABC1F6BDBF900307E92 /* AddAccountPresenter.swift */,\n\t\t\t\tADD71C001F6AE4C100251445 /* AddAccountViewController.swift */,\n\t\t\t);\n\t\t\tpath = Account;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADD71B8B1F6AE36F00251445 /* Insights */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADC34C1C202615FF008E7875 /* Views */,\n\t\t\t\tADD71BD61F6AE49B00251445 /* InsightsInteractor.swift */,\n\t\t\t\tADD71BD71F6AE49B00251445 /* InsightsPresenter.swift */,\n\t\t\t\tADD71BD81F6AE49B00251445 /* InsightsViewController.swift */,\n\t\t\t);\n\t\t\tpath = Insights;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADD71B8C1F6AE37C00251445 /* Models */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BD21F6AE48500251445 /* InstagramMedia.swift */,\n\t\t\t);\n\t\t\tpath = Models;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tADD71B8D1F6AE38500251445 /* Networking */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tADD71BCE1F6AE47800251445 /* InstagramAPI.swift */,\n\t\t\t);\n\t\t\tpath = Networking;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF3AD435598555D6DC2ACAD81 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t802F0FF4317368326E258C85 /* Pods_insights_for_instagram.framework */,\n\t\t\t\t09F2374247510737687CC66A /* Pods_insights_for_instagramTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFAD78C34808A08430765163F /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t25CF554A7A2BE8E283AEC682 /* Pods-insights-for-instagram.debug.xcconfig */,\n\t\t\t\tA7CD320FF647674A7285FBC0 /* Pods-insights-for-instagram.release.xcconfig */,\n\t\t\t\t7FADBF9E959DB8F02D5624CA /* Pods-insights-for-instagramTests.debug.xcconfig */,\n\t\t\t\t1879247EFBB7E37B2DF8A95E /* Pods-insights-for-instagramTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tAD6C68FC1F390A4E00039B66 /* insights-for-instagram */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = AD6C69271F390A4F00039B66 /* Build configuration list for PBXNativeTarget \"insights-for-instagram\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA841561F091F6E1A316F0B6D /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tAD6C68F91F390A4E00039B66 /* Sources */,\n\t\t\t\tAD6C68FA1F390A4E00039B66 /* Frameworks */,\n\t\t\t\tAD6C68FB1F390A4E00039B66 /* Resources */,\n\t\t\t\tB4A905D47AD41D1CAD9E0B84 /* [CP] Embed Pods Frameworks */,\n\t\t\t\tE0E93F41DF7DC8CABFA0959C /* [CP] Copy Pods Resources */,\n\t\t\t\tADBDCEB92022681300183499 /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"insights-for-instagram\";\n\t\t\tproductName = \"insights-for-instagram\";\n\t\t\tproductReference = AD6C68FD1F390A4E00039B66 /* insights-for-instagram.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tAD6C69121F390A4F00039B66 /* insights-for-instagramTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = AD6C692A1F390A4F00039B66 /* Build configuration list for PBXNativeTarget \"insights-for-instagramTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5C69263025FD218D8650F06A /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tAD6C690F1F390A4F00039B66 /* Sources */,\n\t\t\t\tAD6C69101F390A4F00039B66 /* Frameworks */,\n\t\t\t\tAD6C69111F390A4F00039B66 /* Resources */,\n\t\t\t\t480D1B7517B89E5E86BC99CC /* [CP] Embed Pods Frameworks */,\n\t\t\t\t71875759ADCF7CD1A3B52512 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tAD6C69151F390A4F00039B66 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"insights-for-instagramTests\";\n\t\t\tproductName = \"insights-for-instagramTests\";\n\t\t\tproductReference = AD6C69131F390A4F00039B66 /* insights-for-instagramTests.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\tAD6C68F51F390A4E00039B66 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0830;\n\t\t\t\tLastUpgradeCheck = 0900;\n\t\t\t\tORGANIZATIONNAME = \"Alex Di Mango\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tAD6C68FC1F390A4E00039B66 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tDevelopmentTeam = 46BS3CW9YT;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tAD6C69121F390A4F00039B66 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.3.3;\n\t\t\t\t\t\tDevelopmentTeam = 46BS3CW9YT;\n\t\t\t\t\t\tLastSwiftMigration = 0920;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = AD6C68FC1F390A4E00039B66;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = AD6C68F81F390A4E00039B66 /* Build configuration list for PBXProject \"insights-for-instagram\" */;\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 = AD6C68F41F390A4E00039B66;\n\t\t\tproductRefGroup = AD6C68FE1F390A4E00039B66 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tAD6C68FC1F390A4E00039B66 /* insights-for-instagram */,\n\t\t\t\tAD6C69121F390A4F00039B66 /* insights-for-instagramTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tAD6C68FB1F390A4E00039B66 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tAD4142E31F6FD78E00A83795 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tAD6C690A1F390A4E00039B66 /* Assets.xcassets in Resources */,\n\t\t\t\tAD6C69081F390A4E00039B66 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAD6C69111F390A4F00039B66 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tAD4142E41F6FD78E00A83795 /* LaunchScreen.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t480D1B7517B89E5E86BC99CC /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagramTests/Pods-insights-for-instagramTests-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Quick/Quick.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagramTests/Pods-insights-for-instagramTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t5C69263025FD218D8650F06A /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-insights-for-instagramTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t71875759ADCF7CD1A3B52512 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagramTests/Pods-insights-for-instagramTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA841561F091F6E1A316F0B6D /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-insights-for-instagram-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tADBDCEB92022681300183499 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/SwiftLint/swiftlint\\\"\\n\";\n\t\t};\n\t\tB4A905D47AD41D1CAD9E0B84 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagram/Pods-insights-for-instagram-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Moya/Moya.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Realm/Realm.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/Result/Result.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Result.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagram/Pods-insights-for-instagram-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE0E93F41DF7DC8CABFA0959C /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-insights-for-instagram/Pods-insights-for-instagram-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tAD6C68F91F390A4E00039B66 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tADD71BDD1F6AE49B00251445 /* InsightsPresenter.swift in Sources */,\n\t\t\t\tADD71BF21F6AE4AC00251445 /* DataService.swift in Sources */,\n\t\t\t\tADD71BE01F6AE49B00251445 /* InsightsViewController.swift in Sources */,\n\t\t\t\tADD71BEC1F6AE4AC00251445 /* AppUserAccount.swift in Sources */,\n\t\t\t\tADD71C021F6AE4C100251445 /* AccountViewController.swift in Sources */,\n\t\t\t\tADD71C0B1F6AE4C100251445 /* AddAccountInteractor.swift in Sources */,\n\t\t\t\tADD71BF51F6AE4AC00251445 /* AppConfiguration.swift in Sources */,\n\t\t\t\tADD71C081F6AE4C100251445 /* AddAccountViewController.swift in Sources */,\n\t\t\t\tADD71BF81F6AE4AC00251445 /* AppDelegate.swift in Sources */,\n\t\t\t\tADD71BCF1F6AE47800251445 /* InstagramAPI.swift in Sources */,\n\t\t\t\tADD71BE31F6AE49B00251445 /* InstagramMediaSectionTableViewCell.swift in Sources */,\n\t\t\t\tAD61BABD1F6BDBF900307E92 /* AddAccountPresenter.swift in Sources */,\n\t\t\t\tADD71BDA1F6AE49B00251445 /* InsightsInteractor.swift in Sources */,\n\t\t\t\tADD71BD31F6AE48500251445 /* InstagramMedia.swift in Sources */,\n\t\t\t\tADC34C1B20261413008E7875 /* InstagramMediaCollectionViewCell.swift in Sources */,\n\t\t\t\tADD71BFB1F6AE4AC00251445 /* AppExtensions.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAD6C690F1F390A4F00039B66 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tADB36EDB1F7306DA002844FD /* InstagramMediaTests.swift in Sources */,\n\t\t\t\tAD7D8C371F73CCC60094697E /* InstagramAPITests.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\tAD6C69151F390A4F00039B66 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = AD6C68FC1F390A4E00039B66 /* insights-for-instagram */;\n\t\t\ttargetProxy = AD6C69141F390A4F00039B66 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tAD6C69061F390A4E00039B66 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tAD6C69071F390A4E00039B66 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tpath = .;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tAD6C69251F390A4F00039B66 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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\tDEBUG_INFORMATION_FORMAT = dwarf;\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_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 = 10.3;\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_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tAD6C69261F390A4F00039B66 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = 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_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\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 = 10.3;\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\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\tAD6C69281F390A4F00039B66 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 25CF554A7A2BE8E283AEC682 /* Pods-insights-for-instagram.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = 10;\n\t\t\t\tDEVELOPMENT_TEAM = 46BS3CW9YT;\n\t\t\t\tINFOPLIST_FILE = \"insights-for-instagram/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"me.alexdimango.insights-for-instagram\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tAD6C69291F390A4F00039B66 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A7CD320FF647674A7285FBC0 /* Pods-insights-for-instagram.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = 10;\n\t\t\t\tDEVELOPMENT_TEAM = 46BS3CW9YT;\n\t\t\t\tINFOPLIST_FILE = \"insights-for-instagram/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"me.alexdimango.insights-for-instagram\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tAD6C692B1F390A4F00039B66 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7FADBF9E959DB8F02D5624CA /* Pods-insights-for-instagramTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = \"$(inherited)\";\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tDEVELOPMENT_TEAM = 46BS3CW9YT;\n\t\t\t\tINFOPLIST_FILE = \"insights-for-instagramTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"me.alexdimango.insights-for-instagramTests\";\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)/insights-for-instagram.app/insights-for-instagram\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tAD6C692C1F390A4F00039B66 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1879247EFBB7E37B2DF8A95E /* Pods-insights-for-instagramTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = \"$(inherited)\";\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tDEVELOPMENT_TEAM = 46BS3CW9YT;\n\t\t\t\tINFOPLIST_FILE = \"insights-for-instagramTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"me.alexdimango.insights-for-instagramTests\";\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)/insights-for-instagram.app/insights-for-instagram\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tAD6C68F81F390A4E00039B66 /* Build configuration list for PBXProject \"insights-for-instagram\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tAD6C69251F390A4F00039B66 /* Debug */,\n\t\t\t\tAD6C69261F390A4F00039B66 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tAD6C69271F390A4F00039B66 /* Build configuration list for PBXNativeTarget \"insights-for-instagram\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tAD6C69281F390A4F00039B66 /* Debug */,\n\t\t\t\tAD6C69291F390A4F00039B66 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tAD6C692A1F390A4F00039B66 /* Build configuration list for PBXNativeTarget \"insights-for-instagramTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tAD6C692B1F390A4F00039B66 /* Debug */,\n\t\t\t\tAD6C692C1F390A4F00039B66 /* 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 = AD6C68F51F390A4E00039B66 /* Project object */;\n}\n"
  },
  {
    "path": "insights-for-instagram.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:insights-for-instagram.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "insights-for-instagram.xcodeproj/xcshareddata/xcschemes/insights-for-instagram.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0920\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AD6C68FC1F390A4E00039B66\"\n               BuildableName = \"insights-for-instagram.app\"\n               BlueprintName = \"insights-for-instagram\"\n               ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AD6C69121F390A4F00039B66\"\n               BuildableName = \"insights-for-instagramTests.xctest\"\n               BlueprintName = \"insights-for-instagramTests\"\n               ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AD6C691D1F390A4F00039B66\"\n               BuildableName = \"insights-for-instagramUITests.xctest\"\n               BlueprintName = \"insights-for-instagramUITests\"\n               ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD6C68FC1F390A4E00039B66\"\n            BuildableName = \"insights-for-instagram.app\"\n            BlueprintName = \"insights-for-instagram\"\n            ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD6C68FC1F390A4E00039B66\"\n            BuildableName = \"insights-for-instagram.app\"\n            BlueprintName = \"insights-for-instagram\"\n            ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AD6C68FC1F390A4E00039B66\"\n            BuildableName = \"insights-for-instagram.app\"\n            BlueprintName = \"insights-for-instagram\"\n            ReferencedContainer = \"container:insights-for-instagram.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "insights-for-instagram.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:insights-for-instagram.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "insights-for-instagramTests/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.7</string>\n\t<key>CFBundleVersion</key>\n\t<string>10</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "insights-for-instagramTests/InstagramAPITests.swift",
    "content": "import Quick\nimport Nimble\nimport Alamofire\n@testable\nimport insights_for_instagram\nimport Moya\n\nclass InstagramAPITests: QuickSpec {\n    override func spec() {\n        var provider: MoyaProvider<Instagram>!\n        beforeEach {\n            provider = MoyaProvider<Instagram>(stubClosure: MoyaProvider.immediatelyStub)\n        }\n        it(\"returns stubbed data for user media request\") {\n            var json: String?\n            let target: Instagram = .userMedia(\"\")\n            provider.request(target) { result in\n                if case let .success(response) = result {\n                    json = String(data: response.data, encoding: .utf8)\n                }\n            }\n            let sampleData = String(data: target.sampleData, encoding: .utf8)\n            expect(json).to(equal(sampleData))\n        }\n    }\n}\n"
  },
  {
    "path": "insights-for-instagramTests/InstagramMediaTests.swift",
    "content": "import Quick\nimport Nimble\nimport Result\nimport Alamofire\n@testable import insights_for_instagram\nimport ObjectMapper\n\nclass InstagramMediaTests: QuickSpec {\n    override func spec() {\n        it(\"create from JSON\") {\n            let id = \"id-xyz\"\n            let code = \"xyx\"\n            let imageUrl = \"\"\n            let createdTime = Date()\n            let likesCount = 4\n            let commentsCount = 3\n            let engagementCount = 7\n            let json = [\"id\": id, \"code\": code, \"image_url\": imageUrl, \"created_time\": createdTime, \"likes_count\": likesCount, \"comments_count\": commentsCount, \"engagement_count\": engagementCount] as [String: Any]\n            let media = InstagramMedia(JSON: json)\n            expect(media?.id) == id\n            expect(media?.code) == code\n            expect(media?.likesCount) == 4\n            expect(media?.commentsCount) == 3\n            expect(media?.engagementCount) == 4 + 3\n        }\n}}\n"
  }
]