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

Related tags

Utility Hipstapaper
Overview

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
You might also like...
Ello's open source iOS app
Ello's open source iOS app

Ello iOS App Open source, but not open API Our API requires an application key and secret, which are currently being kept private. You can browse the

Open Source project for watching YouTube channel playlists.
Open Source project for watching YouTube channel playlists.

YouTube Channel Watcher An open source project build using SwiftUI and Combine that lets you monitor a variety of different YouTube channels and their

Customize and resize sheets in SwiftUI with SheeKit. Utilise the power of `UISheetPresentationController` and other UIKit features.
Customize and resize sheets in SwiftUI with SheeKit. Utilise the power of `UISheetPresentationController` and other UIKit features.

SheeKit Customize and resize sheets in SwiftUI with SheeKit. Utilise the power of UISheetPresentationController and other UIKit features. Overview She

Butterfly is a lightweight library for integrating bug-report and feedback features with shake-motion event.
Butterfly is a lightweight library for integrating bug-report and feedback features with shake-motion event.

Butterfly is a lightweight library for integrating bug-report and feedback features with shake-motion event. Goals of this project One of th

Showcase new features after an app update similar to Pages, Numbers and Keynote.
Showcase new features after an app update similar to Pages, Numbers and Keynote.

WhatsNew Description WhatsNew automatically displays a short description of the new features when users update your app. This is similar to what happe

WhatsNewKit enables you to easily showcase your awesome new app features.
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

Easier sharing of structured data between iOS applications and share extensions
Easier sharing of structured data between iOS applications and share extensions

XExtensionItem XExtensionItem is a tiny library allowing for easier sharing of structured data between iOS applications and share extensions. It is ta

Helpful extensions for iOS app development 🚀
Helpful extensions for iOS app development 🚀

ExtensionKit includes many extensions, from getting the user location with a deterministic Combine API to a shimmer loading animation, to keyboard notification updates, bottom sheet and much much more. Check out the docs below or install the library with SPM to try it out.

Personally useful Swift Extensions for iOS Development

Useful-Swift-Extensions Personally useful Swift Extensions for iOS Development; cobbled together from a variety of development projects and StackOverf

Comments
  • 2022/09/21 - ToDo

    2022/09/21 - ToDo

    • The Done and Archive button switched around again on iPad
    • Change Open button to also show Safari Icon
    • Change Deselect All Button to text (I think)
    • Change Share menu to be primary action
    opened by jeffreybergier 0
  • [Rewrite] Fix ListProtocol

    [Rewrite] Fix ListProtocol

    SwiftUI doesn't like Lists that are classes. Also it makes sense to have the list observer and the list itself be two separate items.

    Introducing ListObserver and ElementObserver. This way Both the List and the individual item can stay Structs.

    opened by jeffreybergier 0
Owner
Jeffrey Bergier
iOS & Mac Developer & Teacher in Tokyo 🇯🇵 UX Designer in a previous life
Jeffrey Bergier
Message passing between iOS apps and extensions.

MMWormhole MMWormhole creates a bridge between an iOS or OS X extension and its containing application. The wormhole is meant to be used to pass data

Mutual Mobile 3.9k Dec 28, 2022
A Swift package for rapid development using a collection of micro utility extensions for Standard Library, Foundation, and other native frameworks.

ZamzamKit ZamzamKit is a Swift package for rapid development using a collection of micro utility extensions for Standard Library, Foundation, and othe

Zamzam Inc. 261 Dec 15, 2022
Collection of native Swift extensions to boost your development. Support tvOS and watchOS.

SparrowKit Collection of native Swift extensions to boost your development. Support iOS, tvOS and watchOS. If you like the project, don't forget to pu

Ivan Vorobei 119 Dec 20, 2022
A handy collection of more than 500 native Swift extensions to boost your productivity.

SwifterSwift is a collection of over 500 native Swift extensions, with handy methods, syntactic sugar, and performance improvements for wide range of

SwifterSwift 12k Jan 7, 2023
BFKit-Swift is a collection of useful classes, structs and extensions to develop Apps faster.

Features • Classes and Extensions Compatibility • Requirements • Communication • Contributing • Installing and Usage • Documentation • Changelog • Exa

Fabrizio Brancati 992 Dec 2, 2022
SharkUtils is a collection of Swift extensions, handy methods and syntactical sugar that we use within our iOS projects at Gymshark.

SharkUtils is a collection of Swift extensions, handy methods and syntactical sugar that we use within our iOS projects at Gymshark.

Gymshark 1 Jul 6, 2021
Useful Swift code samples, extensions, functionalities and scripts to cherry-pick and use in your projects

SwiftyPick ?? ?? Useful Swift code samples, extensions, functionalities and scripts to cherry-pick and use in your projects. Purpose The idea behind t

Manu Herrera 19 May 12, 2022
SwiftExtensionsPlayground - This playground includes some extensions that I like to use

This playground includes some extensions that I like to use. You can find exampl

Fırat Yenidünya 0 Jan 6, 2022
WholesomeExtensions - A SPM package that provides some extensions that I like to use

WholesomeExtensions This package includes some extensions that I like to use. Yo

Fırat Yenidünya 2 Dec 30, 2022
📘A library for isolated developing UI components and automatically taking snapshots of them.

A library for isolated developing UI components and automatically taking snapshots of them. Playbook Playbook is a library that provides a sandbox for

Playbook 969 Dec 27, 2022