https://github.com/vdhamer/swiftlee-aggregator
This iOS/SwiftUI app collects blog postings by SwiftLee on Swift and related topics. Note that the app is only a SwiftLee aggregator and not an app developed by SwiftLee.
https://github.com/vdhamer/swiftlee-aggregator
aggregator coredata ios swift swift-ui swiftlee xcode
Last synced: 2 months ago
JSON representation
This iOS/SwiftUI app collects blog postings by SwiftLee on Swift and related topics. Note that the app is only a SwiftLee aggregator and not an app developed by SwiftLee.
- Host: GitHub
- URL: https://github.com/vdhamer/swiftlee-aggregator
- Owner: vdhamer
- License: mit
- Created: 2022-06-04T18:08:01.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-10-14T14:08:14.000Z (over 1 year ago)
- Last Synced: 2025-01-15T19:55:02.284Z (4 months ago)
- Topics: aggregator, coredata, ios, swift, swift-ui, swiftlee, xcode
- Language: Swift
- Homepage:
- Size: 7.85 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: .github/README.md
Awesome Lists containing this project
README
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]Table of Contents
About The Project
Getting Started
- Usage and Features
- Roadmap
- Contributing
- License
- Contact
- Acknowledgments
## About The Project
[![Product Name Screen Shot][product-screenshot]](https://github.com/vdhamer/SwiftLeeAggregator)This iOS app aggregates blog posts written by [SwiftLee](https://www.avanderlee.com) (Antoine van der Lee). SwiftLee has a weekly blog on Swift and iOS software development.
Note that this app is only a **SwiftLee aggregator** and ***not* an app developed by SwiftLee**. The author of the blog posts (SwiftLee) has no responsibility for the aggregator app. And the developer of the app (vdHamer) has no control over the postings. In case you are wondering, both parties did align :slightly_smiling_face:.
The aggregator uses a small database containing the metadata (title, date, URLs) of the postings on the SwiftLee site. It does not contain the blog posts themselves. When the app launches, the database is updated in background by fetching the SwiftLee website's RSS feed, passing the RSS through an online RSS-to-JSON convertor, decoding the JSON to memory, and merging the in-memory data with existing data in the database. The database (Apple's Core Data framework) improves app startup time, and furthermore tracks which posts have been viewed or labelled with a :star: by the user.
The minimum required iOS version is 17.0 (which is in beta as of Jun 2023, use an older commit if you need iOS 16.0 support).
### Built With
* [Swift](https://www.swift.org)
* [Core Data](https://developer.apple.com/documentation/coredata)
* [SwiftUI](https://developer.apple.com/xcode/swiftui/)
* [RSS to JSON convertor](https://rss2json.com/)### Distribution
The app is available via GitHub.
It is deliberately *not* distributed via the Apple App Store to avoid confusion.
And, frankly, the app doesn’t provide provide that much functionality compared to the
SwiftLee's own website: the app is partly used as a lightweight testbed to try out some
programming techniques (like JSON decoding, concurrency and Core Data).## Getting Started
To get a local copy up and running, use GitHub’s `Open with Xcode` feature,
compile and run on a simulator or physical device.
Those who prefer running git from the command line will probably manage on their own.### Installation
1. Get your personal API key at [rss2json.com](https://rss2json.com/docs). This involves signing up for an account with rss2json. The free `rss2json` plan should have more than enough quota to view the feed as often as you like. Please carefully save the API key code.
It allows you to generate a fair amount of traffic via `rss2json.com` without having to worry about traffic generated by others.
2. Clone the repository to your development environment: `Code`, `Code`, `Open with Xcode`, allow GitHub to launch Xcode, select a location for the directory, and press `Clone`.
3. Enter your personal API key in the file `Utilities`/`ApiKey.swift`
Don’t forget to uncomment the `let apiKey` line of code. By default it reads:
```
// insert your rss2json.com API key and uncomment
// let apiKey = "thisisthespotwhereyouinsertyourownapikey"
```
The line is commented out because I have a second file containing my own `let apiKey` line. That second file is not on GitHub.
4. You can now compile the project to install it on an actual device (you may need to deploy it again after half a year) or run the code on a device simulator in the usual way.## Usage and features
When you launch the app, it will list all posts on SwiftLee's site. The first time may take a few seconds.The Search field allows you to filter the list of posts. It searches the title fields only; it does not search the post's full text or keywords.
If you click on an post's entry on the list, it will load the actual post in a browser tab. It will also mark the entry as "read" (using Core Data).
You can toggle the read/unread status by swiping the entry to the left and tapping the opened/closed envelope button.
You can mark interesting items with a star (swipe to the left). And you can remove the star rating at any time in a similar way.
## Roadmap
- [x] Complete the readme
- [x] Automatically fetch older posts via extra fetch requests (at 10 posts per request)
- [x] Add a search bar to filter the list (needed if there are hundreds of posts)
- [x] Minor bug fixing and cleanup
- [x] Store the posts on-device
- [x] Keep track of which posts have been clicked on, and visualize this using the `mail` icon to the left of the title
- [x] Unread functionality: it is easy to open a post, but takes time to seriously read it.
- [ ] Button to clear the database without uninstall/install
- [x] Ability to mark a posting with a Star (locally). For whatever reason.
- [ ] Clean up the loose ends of Core Data (various warnings in the log)See the [open issues](https://github.com/vdhamer/SwiftLeeAggregator/issues) for a full list of proposed features (and known issues).
## Contributing
Contributions are appreciated. If you have an idea for an improvement, you can fork the repo and create a pull request. The command line `git` commands to do this (but the Xcode IDE has equivalent commands under `Source Control`):1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull RequestYou can alternatively submit an `issue` with a tag like ”enhancement" or “bug”
without having to do the code changes yourself.
Don't forget to give the project a star in GitHub!## License
Distributed under the MIT License. See `LICENSE.txt` for more information.## Contact
Peter van den Hamer - [email protected]Project Link: [https://github.com/vdhamer/SwiftLeeAggregator](https://github.com/vdhamer/SwiftLeeAggregator)
## Acknowledgments
* [A weekly Swift Blog on Xcode and iOS Development - SwiftLee](https://www.avanderlee.com)
* ["JSON Parsing in Swift explained with code examples" - SwiftLee](https://www.avanderlee.com/swift/json-parsing-decoding/)
* [RSS to JSON Converter online - rss2json.com](https://rss2json.com/#rss_url=https%3A%2F%2Fwww.avanderlee.com%2Ffeed)[contributors-shield]: https://img.shields.io/github/contributors/vdhamer/SwiftLeeAggregator.svg?style=for-the-badge
[contributors-url]: https://github.com/vdhamer/SwiftLeeAggregator/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/vdhamer/SwiftLeeAggregator.svg?style=for-the-badge
[forks-url]: https://github.com/vdhamer/SwiftLeeAggregator/network/members
[stars-shield]: https://img.shields.io/github/stars/vdhamer/SwiftLeeAggregator.svg?style=for-the-badge
[stars-url]: https://github.com/vdhamer/SwiftLeeAggregator/stargazers
[issues-shield]: https://img.shields.io/github/issues/vdhamer/SwiftLeeAggregator.svg?style=for-the-badge
[issues-url]: https://github.com/vdhamer/SwiftLeeAggregator/issues
[license-shield]: https://img.shields.io/github/license/vdhamer/SwiftLeeAggregator.svg?style=for-the-badge
[license-url]: https://github.com/vdhamer/SwiftLeeAggregator/blob/main/.github/LICENSE.txt
[product-screenshot]: images/screenshot.png