Giter Site home page Giter Site logo

tylerdlawrence / hipstapaper Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jeffreybergier/hipstapaper

0.0 0.0 0.0 5.85 MB

An open source Instapaper clone that features apps and extensions that use native UI Components for Mac and iOS.

License: MIT License

Swift 100.00%

hipstapaper's Introduction

Xcode: 12.4 Swift: 5.3 iOS: 14 macOS: 11 devices: iPhone & iPad & Mac UI: SwiftUI Data: CoreData Sync: iCloud

Hipstapaper Screenshots

TODO: Screenshot outdated

Hipstapaper - iOS and Mac Reading List App

A macOS, iOS, and iPadOS app written 100% in SwiftUI. Hipstapaper is an app that takes a URL shared from another app via the share extension, loads the page to get the title, and a screenshot, and then saves the resulting bookmark via Core Data. Hipstapaper uses iCloud Core Data syncing via NSPersistentCloudKitContainer to sync all data between devices. Hipstapaper supports basic tagging and archiving for saved bookmarks.

How to Get the App

Hipstapaper is not available on the App Store. Its not broadly usable in its current state because SwiftUI has many performance issues and bugs that I do not want to work around. I'm hoping Apple resolved many of them at WWDC 2021. Also, I mostly created this app to learn and to use myself and it is not meant to be a commercial product. That said, you are welcome to use it if you think its interesting.

  • iOS:
    • TODO: Figure out testflight for iOS
  • macOS:

Summary of Capabilities

  • All features implemented in a crossplatform way using SwiftUI
    • Except toolbars. The "Unified Toolbar API" introduced in iOS14/macOS11 is pretty challenging to use well. So I ended up making different toolbars for macOS and iOS AND iPadOS. Hoping this is improved by Apple next round.
  • Add Bookmark into the application by using macOS and iOS system share sheet.
    • Can also add via + toolbar icon in the application.
  • Basic tagging functionality.
  • Search, filter, and sort items in the application.
  • Data sync via iCloud

Why Did I Write This?

  • I wanted to learn how to use SwiftUI.
  • I wanted to learn how to use Core Data Sync.
  • I wanted to learn how to isolate my data layer from my UI layer.
    • Core Data could easily be swapped for Realm or SQLite or anything else with the way its abstracted.

Known Issues

  • Crashes when deleting a tag (iOS)
    • There is an issue with List in SwiftUI that is causing this crash.
    • For the WebsiteList, I wrote a workaround but for sidebar lists there is too much detail to rewrite.
  • Can't rename tags
  • Performance is bad for large lists.
    • Once the list exceeds 1000 items or so, the performance really slows down
    • This is mostly due to how SwiftUI implements List and LazyVStack. They are lazy but not fully lazy. SwiftUI still tends to read all the items in the list, especially as you scroll down.
  • Toolbar for macOS browser doesn't work properly in SwiftUI yet
  • Window size is forgotten when closing the window on macOS. Interestingly it is preserved if quitting the app.

Contribution Guidelines

I am happy to accept contributions. Please note that I always intend to be build safe and inclusive communities. I have a 0 tolerance policy towards harassment, meanness, sarcastic-ness toward any other member. Read the code of conduct for full details.

Please refer to an existing issue or create a new issue before beginning to work on a contribution.

Top Issues

How to Clone and Run

Requirements

  • Xcode 12.4 or higher

Instructions

This project runs entirely in Xcode with any external dependencies handled by Swift Package Manager. Note that there may be issues running on physical devices because this project relies on iCloud entitlements.

  1. Clone the Repo
  2. Open in Xcode
  3. Build and Run

hipstapaper's People

Contributors

jeffreybergier avatar

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.