Weather and forecasts for humans. Information you can act on.

Related tags

Utility swift ios
Overview

Tropos

Circle CI

Weather and forecasts for humans. Information you can act on.

Most weather apps throw a lot of information at you but that doesn't answer the question of "What does it feel like outside?". Tropos answers this by relating the current conditions to conditions at the same time yesterday.

Download on the App Store

Setup

Run bin/setup

This will:

  • Install fastlane, swiftlint and xcpretty
  • Install the carthage dependencies
  • Create Secrets.h. TRForecastAPIKey is the only one required for the application to run. You can get a key from https://developer.forecast.io. You should include all keys for production builds.

Testing

Run bin/test

This will run the tests from the command line, and pipe the result through XCPretty.

Contributing

See the CONTRIBUTING document. Thank you, contributors!

Need Help?

We offer 1-on-1 coaching. We can help you with ReactiveCocoa, getting started writing unit tests, converting from Objective-C to Swift, and more. Get in touch.

License

Tropos is Copyright (c) 2019 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.

About

thoughtbot

Tropos is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We love open source software! See our other projects or hire us to help build your product.

Comments
  • Configure project to start work with Swift

    Configure project to start work with Swift

    As talked in Moving app to Swift issue I configured project by adding bridging headers for main target and unit tests one, and changed a bit configuration of them by adding Swift support.

    I also had problems with integrating Quick and Nimble via Cocoapods because Swift libraries are integrated as frameworks and Cocoapods' requirement is to use flag use_frameworks!. This flag brake another pods and project is not compiling. Because of that I decided to download frameworks from github and integrate them with project manually. I created sample test (not commited) and project is compiling which is great ;)

    With this setup I think we can start moving by little steps to Swift ;)

    opened by tomkowz 18
  • Bring settings in-app

    Bring settings in-app

    https://trello.com/c/dd7EGPPt/6-move-settings-in-app

    Adds a settings modal from which the unit settings can be selected. It also displays the privacy policy in a web view.

    screen shot 2015-04-30 at 3 00 16 pm

    To-do:

    • [x] Find a good place for the settings button
    • [x] Bring in acknowledgements
    • [x] Add Tropos version/build information
    • [x] Outbounds links to Forecast.io and thoughtbot
    opened by hyperspacemark 11
  • Cache forecast to disk

    Cache forecast to disk

    This PR implements caches the weather update to disk whenever it's requested. This cache is then used when the app is loaded so the user doesn't have to wait for the update to complete to have something on screen.

    I'm opening this as a separate PR than background fetch. This sets up the prerequisite things we need so I can come back with another PR that uses this to refresh this data in the background.

    In this gif: 1st app start is fresh with no cache. 2nd is with the cache

    troposcache

    opened by jakecraige 10
  • Add precipitation chance to weather view

    Add precipitation chance to weather view

    We show whether there is no chance of precipitation, a slight chance (< 30%), or a good chance (> 30%). The precipitation chance is displayed on the main weather screen, above the wind information.

    • Add TRPrecipitationChanceFormatter to handle formatting of precipitation chance string
    • Add TRPrecipitation to handle calculation of chance of precipitation severity

    screen shot 2015-05-08 at 17 12 12

    Trello: https://trello.com/c/FjADNvIV/1-will-it-rain-today

    opened by Euraldius 10
  • Ask engaged and happy users to review

    Ask engaged and happy users to review

    https://github.com/arashpayan/appirater ?

    Prompt users after x hours or y opens to answer if they like the app, and send the ones who don't to your support email while prompting happy users to leave a review.

    opened by croaky 8
  • Forecast in morning push notification not up-to-date

    Forecast in morning push notification not up-to-date

    In some situations the forecast information in the morning push notification is outdated. When the app goes into suspended state it still keeps cached forecast information. The information isn't actually updated when the silent notification is received, the local notification presented to the user will show the information loaded the last time the app was in the foreground.

    The refresh was disabled in #178 because it was preventing the local notification from being shown at all. The reasoning at the time was that the refresh would be triggered by application:didFinishLaunching: when the app was being unsuspended but that appears not to be true.

    The solution seems to be trigger the updateWeatherCommand from application:didReceiveRemoteNotification:completionHandler only if it wasn't already triggered in application:didFinishLaunching:

    opened by klaaspieter 7
  • Siri intent definition localisation

    Siri intent definition localisation

    When I submitted an initial beta build to TestFlight, I got a warning about missing localisations for our supported languages (Italian, French and Polish). This work-in-progress PR first configures the project for Base Internationalisation, then sets up strings files for our various languages. This branch can then become a staging area for the actual translations, which I'll be reaching out to previous contributors for help with.

    opened by sharplet 6
  • MVVM Architecture Question

    MVVM Architecture Question

    Hey folks,

    Thanks for open sourcing the project! Its great to watch the ThoughtBot team (and now others) doing what they do best.

    My question is around MVVM Architecture, other implementations of MVVM seem to throw everything into the viewModel where Tropos has a controller object that seems to do most of the heavy lifting. What is the thinking around this? How do you decide where the responsibility of the controller & viewModel starts and ends?

    To use an example, lets say Tropos one day requires user authentication in order to see the weather updates, this introduces a authenticationViewController, authenticationController and authenticationViewModel.

    If the authenticated state is determined by presence of a accessToken in userDefaults is it the controller that would be providing a RAC signal here? Is the viewModel aware of the authenticated state?

    Thanks again!

    opened by pnicholls 6
  • Clear screen on refresh

    Clear screen on refresh

    Fixes #37

    Thought about using a blank-returning-boring-dummy view model and relying on viewModelDidChange:, but that seemed excessive.

    Waiting on the test suite.

    EDIT: Fixes #20

    opened by dazmuda 6
  • TRTemperatureComparison+localizedStringFromComparison accepts a date

    TRTemperatureComparison+localizedStringFromComparison accepts a date

    There was a bug in where comparisons shown from the cache would show inaccurate text because it wasn't using the date from the cache.

    Ex: If the date was cached in the AM and you open the app in the afternoon it might say, "Last updated 8:00AM, It's the same this afternoon as yesterday afternoon." when it should say, "Last updated 8:00AM, It's the same this morning as yesterday morning."

    This PR has the comparison be initialized with a date that it uses when checking the time of day.

    I chose to switch from a class method to instance method so that I didn't have to pass the date through a chain of class methods.

    https://trello.com/c/IeLJK4C8/36-temperature-comparison-text-not-taking-cached-date-into-account

    opened by jakecraige 5
  • Use GMT offset as Courier channel name

    Use GMT offset as Courier channel name

    This partially fixes the issue where certain time zones will never receive push notifications because the time zone names used by Rails are different from those used by iOS (See thoughtbot/Tropos#185 for more information)

    This fixes it by not using the names, but the relative offset from UTC as the channel name. Currently we subscribe to us-pacific when the iOS time zone is set to San Francisco.

    This PR changes it to subscribe to the channel minus-0700 instead. This is a more reliable way of identifying time zones across platforms.

    opened by klaaspieter 4
  • Fix dependencies to make them compatible with Swift 4.2

    Fix dependencies to make them compatible with Swift 4.2

    After having forked this repository, the project does not compile. Indeed errors about old Swift 3.0 version in use raise, making the build fail. Versions of dependencies of Carthage file has been increased to make to project compilable and compatible to Swift 4.2

    Note that compatibility to Swfit 5+ implies some refactoring.

    opened by pylapp 0
  • Generate and render acknowledgements as Settings.bundle

    Generate and render acknowledgements as Settings.bundle

    This restores functionality that was previously provided by cocoapods-acknowledgements (CocoaPods was removed in https://github.com/thoughtbot/Tropos/pull/224).

    The two main parts of this are the generate-acknowledgements command line tool, written as a small Swift program, and a new AcknowledgementsViewController.

    opened by sharplet 0
  • 365 days of slight chance of rain

    365 days of slight chance of rain

    The Tropos app appears to indicate a slight chance of rain 365 days a year, even when other weather forecasts are calling for 99% chance of rain. I am located in Canada.

    opened by gordonbisnor 0
  • Remove unused keys from Localizable.strings

    Remove unused keys from Localizable.strings

    Various strings are unused in the translations and we should remove them to prevent confusion / unnecessary work. Thanks to @tomkowz for bringing these up.

    • PrecipitationChanceFormat
    • NoneRain
    • Good
    • Slight
    • None
    help wanted 
    opened by jakecraige 0
Owner
thoughtbot, inc.
We work with organizations of all sizes to design, develop, and grow their web and mobile products.
thoughtbot, inc.
Pavel Surový 0 Jan 1, 2022
It makes a preview from an URL, grabbing all the information such as title, relevant texts and images.

Link Previewer for iOS, macOS, watchOS and tvOS It makes a preview from an URL, grabbing all the information such as title, relevant texts and images.

Leonardo Cardoso 1.3k Jan 2, 2023
Swift APIs for getting book information from popular web services

Swift APIs for getting book information from popular web services

Brian Dewey 1 Sep 25, 2021
Ethereum Wallet Toolkit for iOS - You can implement an Ethereum wallet without a server and blockchain knowledge.

Introduction EtherWalletKit is an Ethereum Wallet Toolkit for iOS. I hope cryptocurrency and decentralized token economy become more widely adapted. H

Sung Woo Chang 136 Dec 25, 2022
LifetimeTracker can surface retain cycle / memory issues right as you develop your application

LifetimeTracker Bar style Circular style LifetimeTracker can surface retain cycle / memory issues right as you develop your application, and it will s

Krzysztof Zabłocki 2.8k Jan 4, 2023
Headline News Widget for Pock.You can display the articles fetched by rss.

Headline News Widget for Pock This is a headline news widget plugin for Pock You can display the articles fetched by rss. Demo In the demo video, the

null 11 Aug 30, 2022
The Objective-C block utilities you always wish you had.

BlocksKit Blocks in C and Objective-C are downright magical. They make coding easier and potentially quicker, not to mention faster on the front end w

BlocksKit 6.9k Dec 28, 2022
A NEWS app which can be used to read,share and bookmark articles of various categories

Scoop A NEWS App for iOS 14 built using Swift which allow the users to read,bookmark and share news articles. Built using MVC architecture Requirement

Sai Balaji 3 Oct 12, 2022
A simple macOS utility that can be used to control the behaviour of Bose QC35 Headphones straight from the menu bar.

bose-macos-utility A simple macOS utility that can be used to control the behaviour of Bose QC35 Headphones straight from the menu bar. Why Have you e

Łukasz Zalewski 11 Aug 26, 2022
An application where users can simulate trading stocks with a starting balance of fake money.

Eighth Wonder Finance Table of Contents Overview Product Spec Video Walkthrough Wireframes Schema Overview Description An application where users can

Josh Harris 0 Dec 5, 2021
MediaType is a library that can be used to create Media Types in a type-safe manner.

This is a general purpose Swift library for a concept of typed treatment for Media Types. We use this library on clients and servers to speak the same dialect and to enjoy all the comfort strong types provide over raw strings.

21Gram Consulting 79 Jul 19, 2022
Protected is a Swift Package that allows you to specify the read and write rights for any type, depending on context by using Phantom types

Protected is a Swift Package that allows you to specify the read and write rights for any type, depending on context by using Phantom types

Mathias Quintero 9 Sep 25, 2022
Differific is a diffing tool that helps you compare Hashable objects using the Paul Heckel's diffing algorithm

Differific is a diffing tool that helps you compare Hashable objects using the Paul Heckel's diffing algorithm. Creating a chan

Christoffer Winterkvist 127 Jun 3, 2022
WhatsNewKit enables you to easily showcase your awesome new app features.

WhatsNewKit enables you to easily showcase your awesome new app features. It's designed from the ground up to be fully customized to your needs. Featu

Sven Tiigi 2.8k Jan 3, 2023
Extensions that allow you to work with optionals

RxOptionals Sometimes it happens that you need to bind to several optional binders or to an optional method (for example, when using weak). To do this

Dane4ka 3 Aug 9, 2021
Generates a random photo after you click the button

Swift Random Photo Generator Generates a random photo after you click the button! Things you need to do ?? clone this repository git clone https://git

Tsuen Hsueh 2 Aug 16, 2022
ALO sync allows you to sync resources form an ALO endpoint to your macOS file system.

ALO sync allows you to sync resources form an ALO endpoint to your macOS file system. Prerequisites macOS 11 No support for search* No suppor

Lawrence Bensaid 2 Jan 22, 2022
LibAuthentication will simplify your code when if you want to use FaceID/TouchID in your tweaks.

LibAuthentication will simplify your code when if you want to use FaceID/TouchID in your tweaks.

Maximehip 6 Oct 3, 2022