Giter Club home page Giter Club logo

the-blue-alliance-ios's Introduction

The Blue Alliance - iOS App

CI

An iOS app for accessing information about the FIRST Robotics Competition. This is a native mobile version of The Blue Alliance.

Contributing

Want to add features, fix bugs, or just poke around the code? No problem! Setup instructions (and lots of other documentation) can be found in the Wiki.

Project Communication

  • Keep up to date with the mailing list.
  • Chat with us on our Slack team. (Request an invite in the mailing list.)

iOS discussion happens in the #dev-ios channel in the Slack

Learning

Information about the app's architecture, tooling used for this repo, and more can be found in the Wiki. If you're new to iOS development, please refer to Apple's documentation for reference. This tutorial is a great tutorial to start with.

Finding Tasks

Outstanding work for The Blue Alliance for iOS is tracked in GitHub Issues. All Issues are tagged with labels. If you're new to The Blue Alliance for iOS, the good first issue label is a great place to start!

Make Commits!

  1. Fork this repository and follow setup setups
  2. Make, commit, and push your changes to your branch
  3. Submit a pull request here and we'll review it and get it added in!

For more detailed instructions, see GitHub's Guide to Contributing.

the-blue-alliance-ios's People

Contributors

austinshalit avatar brandondean avatar brytonmoeller avatar cj-plusplus avatar cyocom avatar dbravo1990 avatar dependabot[bot] avatar donald-pinckney avatar dracco1993 avatar fangeugene avatar gregmarra avatar kevinbai0 avatar ronakroy avatar zachorr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

the-blue-alliance-ios's Issues

Make sure we respect district point tiebreakers

We currently don't store tiebreaker data from the event points call, but I'm not sure we need to? I believe the API handles all tiebreaker data when calculating rankings, and there's no UI around showing tiebreakers if rankings are tied (although we could build some if we wanted)

Explore other options for showing team sponsors

Per #59 team sponsors got nuked from team summary view which isn't a bad thing since most of the time it's a wall of text, but we could figure out a way display the information without it hogging screen space.

Some options include:

  • Put the sponsors in a cell on info view, limit the lines to something reasonable (like 2 or 3), and then resize expand the cell when tapped. This is what android does.
  • Create a 'Sponsors' cell that is a disclosure into a screen that is just a giant text view. ๐Ÿ˜Ž

Core Data Background Import

Inserting all 5000ish team objects all at once takes about 10-20 seconds on my phone, and its happening on the main thread.

It is not the downloading that is a problem, it is already on a background thread. I haven't yet setup any concurrency in Core Data though, and just the insertion of that many objects takes a long time. At some point it needs to get moved to a background thread.

Error while running pod install

Neels-MacBook-Pro-2:~ NeelPatel$ cd /Users/NeelPatel/Downloads/the-blue-alliance-ios-swift/the-blue-alliance-ios
Neels-MacBook-Pro-2:the-blue-alliance-ios NeelPatel$ pod install
[in /Users/NeelPatel/Downloads/the-blue-alliance-ios-swift]
Analyzing dependencies
Fetching podspec for React from js/node_modules/react-native
[!] No podspec found for React in js/node_modules/react-native
Neels-MacBook-Pro-2:the-blue-alliance-ios NeelPatel$

Year Selection Screen

I wanted to move the discussion to an issue

Do we not want to have the screen automatically close after a user select a new year? I don't think they'll be going back and forth selecting years, so removing it shouldn't be an issue, right?

groupEventsByWeek in EventsViewController does not compute sections correction when events are filtered from searching

- (NSArray *)groupEventsByWeek seems to build the list of event groups iteratively, so when events are filtered by searching, the iterative process misses the events excluded from the search results, and can assign later events to early weeks.
2014-05-24 01 58 41
Ultimately, it might be better if we can calculate the groups not-iteratively, i.e. as a function only of an individual event.
@ZachOrr can you help with this?

Background fetch Team objects

I removed a lot of (gross) code for synchronously fetching a team object when we didn't have it and instead create stub teams to work on in ec7d23c. This worked out well from a data standpoint, but is very confusing form a UI standpoint.

My thought is we could approach this a few different ways. We could add back in the synchronous fetching code, we could do a fetch for teams periodically on launch to make sure they're up to date, or (my favorite option) we could create a background task that gets fired off when creating a stub Team object to fetch the rest of the data and resolve the missing data for the object.

This might be a bit of work - we need to make sure team objects will update in their contexts when the object is changed. I believe we'll get this for free anywhere we're using a FRC, but we need to make sure in places we're not using a FRC but are using team data (like the Info view) we register for changes.

importTeamsUsingManagedObjectContext crashes

I'm having a problem when trying to import teams from the CSV. Here's the error message I get

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSDictionary initWithObjects:forKeys:]: count of objects (2) differs from count of keys (5)'

Assign Event week indeterminately

Right now we're assigning event week's based on start dates of all other events. With the addition of b945773 we should be able to determine the week for an event individually

Glitch team 4

In the app, there are 2 teams with the team number 4. One, the legitimate team, "Team 4 ELEMENT." The other is just called "Team 4." When clicking on the "Team 4," the app crashes. There may be other glitched teams, but Team 4 is the most noticeable because they are at the top of the list.

Will this be up and running this season?

I'm wondering if this will be up and running any time this season? Week 1 of competitions are done, but there's still lots of competitions left and having a TBA iOS app would be awesome! I don't know anything about iOS development so I can't tell how far away this is from being finished. I wish I could help you guys finish this -- if I knew how to make iOS apps, I would definitely help!

Find library to show photos from media collection view

If we could find something nice to show images from the media collection view cells the way Twitter or Tweetbot shows images, that would be cool. We could write it ourselves if we wanted, but I'm not sure it's entirely worth it. If anyone is up for the task, you could probably do this using UIViewControllerTransitioningDelegate

Icons for Side Menu

Besides tweaking visuals for the side menu, at some point we need icons for the side menu options. Not high priority for now, but something to remember for later.

Team List

TBA doesn't have an endpoint for a list of all teams (although it's been proposed - the-blue-alliance/the-blue-alliance#727). Should we load in the CSV file and parse it, or wait on getting an API endpoint to get a list of teams? I've got the model started for this.

iOS 11 Updates

I'd love to move forward with iOS 11 (since right now TBA's target is iOS 10 only - I don't see a reason not to only support 1 OS for an app like this). This is more a note to self for when I go to update things later... anyone else should feel free to add on

  • Table view cells are now automatically self-sizing, which means we can remove UITableViewAutomaticDimension
  • New navigation titles which take the Apple Music style - largeTitleDisplayMode. Also can have integrated search bars (UINavigationBar.searchController). Keep in mind we need to make sure we're using the new safeAreaLayoutGuide (https://www.bignerdranch.com/blog/wwdc-2017-large-titles-and-safe-area-layout-guides/)
  • topLayoutGuide and bottomLayoutGuide are now deprecated, so we should replace any uses of them
  • Stack views have a new setCustomSpacing method - if we're ever doing a stack view inside a stack view for custom spacing between items (which I'm not entirely sure we're doing), we can remove that level of nesting
  • New Drag/Drop APIs look cool - would love to think about how we could use this. Off the top of my head, you might be able to drag/drop media items to files to download, or use the drag/drop APIs when allowing users to suggest media

Swift 4 things include...

  • Strings are collections again, so anywhere we're doing string slicing we can work them as collections
  • Ranges can also be on-sided, so we don't have to write both ends if we don't want to/need to
characters[..<3]

We Need a Team XXXX @ Event Controller

We need to make a controller summarizing a team's performance at a given event. This can be linked to via an accessory control in cells in the list of events for a team and the list of teams at an event. In terms of functionality, the Android app has these tabs:

  • Summary
    • Rank (7th)
    • Record (13-7-0)
    • Alliance (Captain of the 6th alliance)
    • Elimination Status (Eliminated in the finals)
  • Matches (list of matches for team xxxx at the event)
  • Stats (I'm not sure if this is really worth putting in, I've never been a fan of these figures)
    • OPR
    • DPR
    • CCWM
  • Awards

Seems to be an issue with `pod install` during the setup tasks listed in the ReadMe

While following the ReadMe, the pod install command results in this error:

Austins-MacBook-Pro:js austin$ pod install
[in /Users/austin/the-blue-alliance-ios]
Setting up CocoaPods master repo
  $ /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress
  Cloning into 'master'...
  remote: Counting objects: 1416611, done.        
  remote: Compressing objects: 100% (7191/7191), done.        
  remote: Total 1416611 (delta 5468), reused 6128 (delta 2336), pack-reused 1406611        
  Receiving objects: 100% (1416611/1416611), 413.01 MiB | 13.57 MiB/s, done.
  Resolving deltas: 100% (722899/722899), done.
  Checking out files: 100% (170046/170046), done.

CocoaPods 1.3.0.beta.3 is available.
To update use: `sudo gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.3.0.beta.3

Setup completed
Analyzing dependencies
Fetching podspec for `React` from `js/node_modules/react-native`
Fetching podspec for `Yoga` from `js/node_modules/react-native/ReactCommon/yoga`
Downloading dependencies
Installing AppAuth (0.9.1)
Installing GTMAppAuth (0.6.1)
Installing GTMSessionFetcher (1.1.11)
Installing PureLayout (3.0.2)
Installing React (0.43.0)
Installing TBAKit (2.0.0)
Installing Yoga (0.43.0.React)
Installing youtube-ios-player-helper (0.1.6)
Generating Pods project
[!] An error occurred while processing the post-install hook of the Podfile.

unknown file type: Pods/Target Support Files/Pods-the-blue-alliance-ios/Pods-the-blue-alliance-ios-acknowledgements.plist

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1375:in `copy'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:463:in `block in copy_entry'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1485:in `call'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1485:in `wrap_traverse'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:460:in `copy_entry'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:435:in `block in cp_r'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1558:in `block in fu_each_src_dest'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1574:in `fu_each_src_dest0'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:1556:in `fu_each_src_dest'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:434:in `cp_r'
/Users/austin/the-blue-alliance-ios/Podfile:25:in `block (2 levels) in from_ruby'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-1.2.1/lib/cocoapods-core/podfile.rb:179:in `call'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-core-1.2.1/lib/cocoapods-core/podfile.rb:179:in `post_install!'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:670:in `run_podfile_post_install_hook'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:658:in `block in run_podfile_post_install_hooks'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/user_interface.rb:142:in `message'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:657:in `run_podfile_post_install_hooks'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:181:in `block in generate_pods_project'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/user_interface.rb:64:in `section'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:178:in `generate_pods_project'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/installer.rb:115:in `install!'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/command/install.rb:41:in `run'
/Library/Ruby/Gems/2.0.0/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/lib/cocoapods/command.rb:52:in `run'
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.2.1/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'

I'm not sure if this is something I did or just a standard during the install on a fresh build. Does anybody have any suggestions? Also, I'm mostly looking to utilize this as a method for pulling TBA data into my own iOS app later on.

Remember last selected week when viewing event years

This is a feature open to discussion, but I think it might be nice if we remember what week a user was previously viewing for a year while switching between years and default to that week. Even if we only keep this around for the current session.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.