TripUp is an open source, photo storage and sharing app made for privacy conscious users.

Related tags

Image tripup-ios
Overview

TripUp iOS App

GitHub Xcode 12.4+ iOS 12.4+ Swift 5.0+

TripUp is an open source, photo storage and sharing app made for privacy conscious users.

Available on the App Store

Screenshots

Features

  • Auto backs up all your photos to the cloud
  • Background uploads
  • Photos, data and metadata are all end-to-end encrypted with PGP
  • Supports user registration with a phone number, e-mail address or Sign in with Apple
  • Shared albums with fine-grained privacy controls for individual photos
  • Supports iOS Dark Mode
  • Native Swift app
  • Open source client + server

Questions and Support

Please use the following channels for any questions or support:

Please DO NOT use the GitHub issue tracker for support queries. ❗️

Build Instructions

Dependencies

  • Firebase, for authentication and dynamic links.
  • AWS, for data storage.
  • OneSignal, for notifications.
  • RevenueCat, for managing in-app purchases.
  • TripUp server, for hosting and co-ordinating user state.

Note: where possible, analytics are disabled for the above services.

Steps

  1. Replace the GoogleService-Info.plist file with the one provided to you by Firebase.
  2. Update the awsconfiguration.json file with your AWS Cognito PoolID and Region, as per your AWS setup.
  3. Project build settings -> User-Defined heading:
    • change API_BASE_URL to the URL of the TripUp server instance that you wish to use.
    • change AWS_ASSETS_BUCKET to the name of the bucket that you wish to use on AWS.
  4. Modify Info.plist accordingly, specifically the following values:
    • Under URL types -> URL Schemes:
      • com.googleusercontent.apps... should be set to the REVERSED_CLIENT_ID value found in your GoogleService-Info.plist file.
      • The firdynamiclinks URL Scheme should be set your bundle identifier.
    • Under AppConfig:
      • AWS_ASSETS_BUCKET_REGION, which should be the same value as the one set in awsconfiguration.json.
      • DOMAIN, should be a fully qualified hostname.
      • FEDERATION_PROVIDER, should be the URL of your federation provider, which in this case is securetoken.google.com/YOUR_FIREBASE_PROJECT_ID.
      • FIREBASE_DYNAMICLINKS_DOMAIN, should be set to your Firebase Dynamic Links Domain.
      • ONESIGNAL_APP_ID, should be set to your OneSignal App ID.
      • REVENUECAT_APIKEY, should be set to your RevenueCat API key.
  5. Adjust the Associated Domains under the TripUp Target, Signing & Capabilities tab to the following values:
    • applinks:YOUR_FIREBASE_PROJECT_ID.firebaseapp.com
    • applinks:YOUR_FIREBASE_DYNAMIC_LINKS_DOMAIN
  6. Build to whichever target you want and Sign with your Apple Developer account.

Contributing

There are many ways to contribute to TripUp!

Bug reports

We use the GitHub issue tracker for bug reports. Please search existing issues and create a new one if your bug report has not been raised, providing as much detail as possible.

🛑 Please DO NOT bump an issue with +1 posts that do not add to the discussion. Use the emoji reactions instead to show that an issue affects you too; we will prioritise issues that have the most reactions. 🛑

Code

Swift developers wanted! We prefer native development whenever possible and welcome developers (new and experienced) to contribute. We use GitHub projects for coordinating our work. If you require help with a code change, feel free to open a pull request.

For this repository, we require contributors to sign a copyright license agreement (CLA). The signing process will be presented when you submit a pull request. A CLA is required because the Apple App Store Terms of Service (ToS) are incompatible with the license of this project, the AGPLv3. To include your contributions in our App Store release, we require an exclusive copyright license to any contributions you make, which grants us the ability to dual license the code; under the AGPLv3 (this repository) and under a license that complies with the App Store ToS. Please note that we use a CLA written and approved by the Free Software Foundation which ensures that we always release your contributions under the AGPLv3 and can never exclusively re-license your contributions under a proprietary license. Refer to our CLA for the full license agreement (also visible when submitting a pull request).

Feature suggestions

Please use GitHub Discussions to suggest new features.

Translations

We welcome translations for as many languages as possible! Contact us if you'd like to help but are unsure on how to use Xcode or GitHub pull requests.

License

This project is licensed under the AGPLv3. Please see the LICENSE file for the full license terms.

Please note that whilst the code is licensed under the AGPLv3, all assets, logos and branding, including the name, are subject to relevant trademark laws and explicit permission is required before using these for any commercial purposes.

Comments
  • App crash due to `runtime.raise_trampoline`

    App crash due to `runtime.raise_trampoline`

    Describe the bug Multiple crashes due to runtime.raise_trampoline, causing thread to crash with SIGABRT ABORT.

    To Reproduce Unknown. Collected via Crashlytics.

    Smartphone (please complete the following information): Seems to occur more often on iOS 15 (currently in beta), but few instances of it occuring on iOS 14. App version ranges from 1.1.2 to 2.1.4.

    Additional context runtime.raise_trampoline appears to be from Go runtime, indicating an issue with GopenPGP library. Some crash reports indicate that the crash occurs when using the non-streaming API, at the point where finish() is called on the new low memory attachment processor.

    bug 
    opened by vin047 1
  • App crash

    App crash

    Describe the bug A clear and concise description of what the bug is.

    App crashes when i click something

    To Reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Click anything like photos, setting options

    Expected behavior A clear and concise description of what you expected to happen. Show contents

    Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Device: iPhone 7
    • OS: iOS 14.6
    • Browser: [e.g. stock browser, safari, firefox]
    • App Version: 2.1.1

    Additional context Add any other context about the problem here.

    https://www.icloud.com/iclouddrive/0Ac-QPcqV0YP7gncvbKnBPIzg#swiftybeaver

    bug 
    opened by hellojaccc 1
  • Upload/download of large files (videos) fails

    Upload/download of large files (videos) fails

    • Issue for release 2.1.9(.1) only.
    • Occurs due to a http timeout which is reached when transferring a large file. The new Soto framework has a default timeout set to 20 seconds.
    • Solution is to increase the http timeout for the S3 service client. 7 days is the default according to https://developer.apple.com/documentation/foundation/nsurlsessionconfiguration/1408153-timeoutintervalforresource.
    bug 
    opened by vin047 0
  • App crash due to `awsbf_warnBlockingOperationOnMainThread` from AWSCore

    App crash due to `awsbf_warnBlockingOperationOnMainThread` from AWSCore

    Describe the bug Title. From Crashlytics:

    Crashed: NSOperationQueue 0x107e09960 (QOS: UNSPECIFIED)
    EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000030
    

    To Reproduce Unknown. Collected via Crashlytics.

    Smartphone (please complete the following information):

    • Device: iPhone 12, iPhone SE 2
    • OS: 15.0.0, 15.0.1
    • App Version: 2.1.7.1, 2.1.7.1

    Additional context Believe this is happening due to workaround implemented in AWSAdapter to stop completion callback being called twice on multi-part upload failure.

    bug 
    opened by vin047 0
  • Encrypt photos as streams

    Encrypt photos as streams

    Photos are currently loaded into memory and encrypted in full, using a custom Protobuf format for storing the key and data packets.

    Instead, photos should use the streaming API and be encrypted as standard PGPMessages, which is currently used for videos only.

    1. Encrypt new photos with streaming API and store as standard PGPMessages.
    2. Decrypt newer photos with streaming API.
    3. Provide fallback decryption for photos encrypted the old way (until migration upgrade is implemented).

    Note: this should hopefully resolve #24 too.

    code architecture 
    opened by vin047 0
  • Various labels being truncated on smaller devices

    Various labels being truncated on smaller devices

    1. Video length labels on cells.
    2. Date labels on header views of collection views.
    3. Selection counter badge number (usually once reached a triple digit count).
    bug user interface 
    opened by vin047 0
  • App crash when downloading the privacy policy

    App crash when downloading the privacy policy

    Describe the bug Occurs when attempting to cast the html returned after evaluating the javascript – unable to cast the returned html as String.

    To Reproduce Unknown. Collected via Crashlytics. Presumably due to an invalid cast, which must occur when the javascript has failed to load for whatever reason (e.g. no internet connection perhaps?).

    Smartphone (please complete the following information):

    • Device: iPhone 6S
    • OS: iOS 14.7.1
    • App Version: 2.1.3.1
    bug 
    opened by vin047 0
  • App crash due to AWSCore

    App crash due to AWSCore

    Describe the bug Heap corruption according to Crashlytics.

    Issue 1:

    __destroy_helper_block_e8_32s40s48s56s
    
    Crashed: NSOperationQueue 0x105b26b10 (QOS: UNSPECIFIED)
    EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x000000042e707080
    

    Issue 2:

    -[AWSURLSessionManager taskWithDelegate:]
    
    Crashed: NSOperationQueue 0x10701aef0 (QOS: UNSPECIFIED)
    EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x00000008f56bbfa0
    

    To Reproduce Unknown. Collected via Crashlytics. Occurs while uploading data to S3.

    Smartphone (please complete the following information): Crash 1:

    • Device: iPhone 12, iPhone XS
    • OS: iOS 15 (beta)
    • App Version: 1.1.2.17, 2.1.3.1

    Crash 2:

    • Device: iPhone 12
    • OS: iOS 15 (beta)
    • App Version: 2.1.3.1

    Additional context Possibly due to #24 as other threads are at the same point as mentioned in that issue, but uncertain.

    bug 
    opened by vin047 0
  • Original filenames

    Original filenames

    • Import operation should save original filename of asset.
    • When sharing and saving, use original filename.
    • Write an upgrade operation to import original filenames from photo library.
    • Handle assets without original filenames or that haven't been upgraded yet.
    code architecture 
    opened by vin047 0
  • "Backup and Sync" option in Settings is unclear

    "Backup and Sync" setting might give the impression that any deletions in the Photos app will be reflected in TripUp Cloud backup. Change to something more clear, like "Backup Library".

    good first issue user interface 
    opened by vin047 0
  • Notify user to keep app open when performing a manual import

    Notify user to keep app open when performing a manual import

    App should notify user to keep app in the foreground when running a manual import – unlike auto import, manual import and follow up actions (such as being added to a group album) is at risk of being lost if app state is lost.

    enhancement good first issue user interface 
    opened by vin047 0
  • Self-host support

    Self-host support

    • [x] Refactor code to support custom S3 endpoint.
    • [ ] Refactor code to support custom server endpoint.
    • [ ] Refactor API caller to support 2 endpoints – one for self-hosted server and one for central server calls (for calls related to Firebase service and notifications).
    • [ ] Design user interface to support custom endpoint entry on user sign in.
    • [ ] Call API to set token claim and refresh token once custom endpoint is entered.
    • [ ] Force refresh token when creating a new user.
    • [ ] Force refresh token when authorisation details are updated/changed.
    • [ ] Update README.
    opened by vin047 0
  • Change references to

    Change references to "photo" in the user interface to a more generic term

    Describe the bug Number of references to "photo" in the user interface (e.g. when saving an item to the photo library from fullscreen view). As TripUp now supports videos, should be changed to a more generic term like "item" or "asset".

    bug good first issue user interface 
    opened by vin047 0
  • App crash due to CoreGraphics `ERROR_CGDataProvider_BufferIsNotReadable`

    App crash due to CoreGraphics `ERROR_CGDataProvider_BufferIsNotReadable`

    Describe the bug Title. Crashed main queue. EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000116a7eb54

    To Reproduce Unknown. Collected via Crashlytics.

    Smartphone (please complete the following information):

    • Device: iPhone SE 2
    • OS: iOS 15.0.0, build 19A5307g (beta 4)
    • App Version: 2.1.1, build 1.1.1.1
    • Orientation: Portrait
    • RAM free: 306.44 MB
    • Disk free: 75.52 GB
    • Jailbroken: No
    • Date: 28 Jul 2021, 16:09:59

    Additional context Possible bug due to beta iOS. Monitoring for future issues. Included incomplete crash log from Crashlytics (cut out minor threads). crashlytics-relevant-logs.txt

    bug question 
    opened by vin047 0
  • AssetManager operations should always attempt to run

    AssetManager operations should always attempt to run

    AssetManager operations should run until an error is encountered, instead of preemptively and continuously checking system state and external variables to determine if operation should execute. Instead, fire operation and handle errors accordingly.

    Depends on tripupapp/tripup-server#8, as operation must fail when user doesn't have the required entitlements.

    code architecture 
    opened by vin047 0
  • Foreground import operations are suspended in background state

    Foreground import operations are suspended in background state

    Describe the bug Import operations started in the foreground remain suspended in background state. This makes them unable to be set as dependencies (as required by #15) as well as unresponsive to cancellation events until the app returns to the foreground.

    To Reproduce Steps to reproduce the behavior:

    1. Enable Debug logs and Backup & Sync.
    2. Leave phone on standby and on charge to begin background process.
    3. Later, pick up phone and open app.
    4. Observe in the logs that the foreground import operations resumed only after app returned to foreground, regardless of other events including cancellation.

    Expected behavior Foreground import operation should resume and complete in background mode (without spawning another operation for the next batch).

    Dependent on #17

    bug 
    opened by vin047 0
Owner
TripUp
Private Photo Storage
TripUp
Jogendra 113 Nov 28, 2022
DTPhotoViewerController - A fully customizable photo viewer ViewController to display single photo or collection of photos, inspired by Facebook photo viewer.

DTPhotoViewerController Example Demo video: https://youtu.be/aTLx4M4zsKk DTPhotoViewerController is very simple to use, if you want to display only on

Tung Vo 277 Dec 17, 2022
DGCropImage - A photo cropping tool which mimics Photo.app written by Swift

DGCropImage A photo cropping tool which mimics Photo.app written by Swift. This

donggyu 11 Jul 14, 2022
React-native-photo-editor - Photo editor using native modules for iOS and Android

?? Image editor using native modules for iOS and Android. Inherit from 2 available libraries, ZLImageEditor (iOS) and PhotoEditor (Android)

Baron Ha. 244 Jan 5, 2023
A photo gallery for iOS with a modern feature set. Similar features as the Facebook photo browser.

EBPhotoPages ”A photo gallery can become a pretty complex component of an app very quickly. The EBPhotoPages project demonstrates how a developer coul

Eddy Borja 1.7k Dec 8, 2022
Lightweight and customisable async image loading in SwiftUI. Supports on-disk storage, placeholders and more!

Asyncrounously download and display images in Swift UI. Supports progress indicators, placeholders and image transitions. RemoteImageView Asyncrounous

Callum Trounce 192 Dec 7, 2022
Kanvas is an open-source iOS library for adding effects, drawings, text, stickers, and making GIFs from existing media or the camera.

Kanvas Kanvas is an open-source iOS library for adding effects, drawings, text, stickers, and making GIFs from existing media or the camera.

Tumblr 267 Nov 24, 2022
An open source iOS framework for GPU-based image and video processing

GPUImage Brad Larson http://www.sunsetlakesoftware.com @bradlarson [email protected] Overview The GPUImage framework is a BSD-licensed iO

Brad Larson 20k Jan 1, 2023
PublisherKit - An open source implementation of Apple's Combine framework for processing asynchronous events over time

Publisher Kit Overview PublisherKit provides a declarative Swift API for processing asynchronous events over time. It is an open source version of App

null 5 Feb 22, 2022
PhotoApp - A Simple Photo App using Swift and MVC pattern

PhotoApp A Simple Photo App using Swift and MVC pattern After App launch, you wi

null 2 Aug 14, 2022
An app show your Live Photo and export as GIF.

LivelyGIFs Show your Live Photo and export as GIF. Demo HighLights Do not use Pod or Cathage to install 3rd party library Simple logic, new learner fr

Xue Yu 95 Jun 24, 2022
Lightweight iOS Photo Blur App

Blurry Blurry is the go-to image blurring tool to help you apply beautiful blurs for your photos. It is perfect for creating wallpapers, backgrounds,

Andy 17 Nov 22, 2022
PixPic, a Photo Editing App

PixPic PixPic, a Photo Editing App Built by Our iOS Interns What's the best way to teach interns how to write an iOS app? Just let them do it! This ap

Yalantis 1.3k Dec 24, 2022
An image cropper / photo cropper for iOS like in the Contacts app with support for landscape orientation.

RSKImageCropper An image cropper for iOS like in the Contacts app with support for landscape orientation. Installation RSKImageCropper requires iOS 9.

Ruslan Skorb 2.4k Jan 5, 2023
Photo Gallery App demo using a REST API

Photo Gallery iOS App - (Using Rest API) A demo Photo Gallery App using a Rest API using MVVM architecture in Swift + UIKit. Overview Fully Programmat

Neel Mewada 2 Nov 22, 2021
Nasa photo from Mars app

NasaPhotoApp MVVM(Combine, Block, Async wait) This app compares 3 ways(Combine, Block, Async wait) to bring data from network layer to view. The appli

null 0 Nov 25, 2021
App that Displays the NASA Photo of Day

SpacePod We'll progressively build a small SwiftUI app that displays the NASA ph

Kern Jackson 6 Nov 6, 2022
Nilay Dagdemir 0 Jan 23, 2022
PhotoEditor SDK: A fully customizable photo editor for your app.

About PhotoEditor SDK for iOS Our SDK provides tools for adding photo editing capabilities to your iOS application with a big variety of filters that

IMG.LY 116 Jan 1, 2023