An RSS, Atom and JSON Feed parser written in Swift

Overview

FeedKit

build status cocoapods compatible carthage compatible language swift

Features

Requirements

xcode ios tvos watchos mac os mac os

Installation >> instructions <<

Usage

Build a URL pointing to an RSS, Atom or JSON Feed.

let feedURL = URL(string: "http://images.apple.com/main/rss/hotnews/hotnews.rss")!

Get an instance of FeedParser

let parser = FeedParser(URL: feedURL) // or FeedParser(data: data) or FeedParser(xmlStream: stream)

Then call parse or parseAsync to start parsing the feed...

A common scenario in UI environments would be parsing a feed asynchronously from a user initiated action, such as the touch of a button. e.g.

// Parse asynchronously, not to block the UI.
parser.parseAsync(queue: DispatchQueue.global(qos: .userInitiated)) { (result) in
    // Do your thing, then back to the Main thread
    DispatchQueue.main.async {
        // ..and update the UI
    }
}

Remember, you are responsible to manually bring the result closure to whichever queue is apropriate. Usually to the Main thread, for UI apps, by calling DispatchQueue.main.async .

Alternatively, you can also parse synchronously.

let result = parser.parse()

Parse Result

FeedKit adopts Swift 5 Result type, as Result<Feed, ParserError>, and as such, if parsing succeeds you should now have a Strongly Typed Model of an RSS, Atom or JSON Feed, within the Feed enum:

switch result {
case .success(let feed):
    
    // Grab the parsed feed directly as an optional rss, atom or json feed object
    feed.rssFeed
    
    // Or alternatively...
    switch feed {
    case let .atom(feed):       // Atom Syndication Format Feed Model
    case let .rss(feed):        // Really Simple Syndication Feed Model
    case let .json(feed):       // JSON Feed Model
    }
    
case .failure(let error):
    print(error)
}

Model Preview

The RSS and Atom feed Models are rather extensive throughout the supported namespaces. These are just a preview of what's available.

RSS

feed.title
feed.link
feed.description
feed.language
feed.copyright
feed.managingEditor
feed.webMaster
feed.pubDate
feed.lastBuildDate
feed.categories
feed.generator
feed.docs
feed.cloud
feed.rating
feed.ttl
feed.image
feed.textInput
feed.skipHours
feed.skipDays
//...
feed.dublinCore
feed.syndication
feed.iTunes
// ...

let item = feed.items?.first

item?.title
item?.link
item?.description
item?.author
item?.categories
item?.comments
item?.enclosure
item?.guid
item?.pubDate
item?.source
//...
item?.dublinCore
item?.content
item?.iTunes
item?.media
// ...

Atom

feed.title
feed.subtitle
feed.links
feed.updated
feed.authors
feed.contributors
feed.id
feed.generator
feed.icon
feed.logo
feed.rights
// ...

let entry = feed.entries?.first

entry?.title
entry?.summary
entry?.authors
entry?.contributors
entry?.links
entry?.updated
entry?.categories
entry?.id
entry?.content
entry?.published
entry?.source
entry?.rights
// ...

JSON

feed.version
feed.title
feed.homePageURL
feed.feedUrl
feed.description
feed.userComment
feed.nextUrl
feed.icon
feed.favicon
feed.author
feed.expired
feed.hubs
feed.extensions
// ...

let item = feed.items?.first

item?.id
item?.url
item?.externalUrl
item?.title
item?.contentText
item?.contentHtml
item?.summary
item?.image
item?.bannerImage
item?.datePublished
item?.dateModified
item?.author
item?.url
item?.tags
item?.attachments
item?.extensions
// ...

License

FeedKit is released under the MIT license. See LICENSE for details.

Comments
  • Issue with ESPN's standard feeds?

    Issue with ESPN's standard feeds?

    It seems that ESPN's RSS feed (https://www.espn.com/espn/rss/news) cannot be used to instantiate a FeedParser. I've validated that this feed url is correct and works well with other readers. Any idea as to what could cause this?

    opened by havenbarnes 14
  • parseAsync will now use the global queue as the default queue and cor…

    parseAsync will now use the global queue as the default queue and cor…

    Changes the method parseAsync to default to the global queue, but also bring back the result to the main thread.

    The reason for this change, is that the method parse() is essentially the same as parseAsync() (when not providing any queue) because they both run on the main thread. The problem then is, that you can specify another queue to run this on, but even still, you have to parse the data asynchronously, then bring that data back to the main thread and continue. This is essentially the same as just using parse() in your own async closure and then bringing it back to the main thread, eliminating the need of parseAsync().

    I think this is much more user friendly and intuitive, as the intention of parseAsync seems ambiguous.

    opened by dkcas11 9
  • Trying to run Conversion to Swift 4.2

    Trying to run Conversion to Swift 4.2

    I get this error when trying to run the Conversion to Swift 4.2 and I am using pod install to install.

    :0: error: module map file 'build/Release-iphoneos/FeedKit/FeedKit.modulemap' not found :0: error: module map file 'build/Release-iphoneos/FeedKit/FeedKit.modulemap' not found :0: error: missing required module 'SwiftShims'

    opened by dbadmin 7
  • Media namespace not available on AtomFeed

    Media namespace not available on AtomFeed

    Currently, media attributes are parsed only as part of an RSSFeedItem.

    I may be wrong, but perhaps it should be possible for something like this:

    <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1234"/>
    

    to be contained inside an AtomFeedEntry.

    enhancement 
    opened by valeriomazzeo 7
  • How to exted RSS feed with custom tags?

    How to exted RSS feed with custom tags?

    I have specific tags in a feed adn I want to exted "RSSPath" enum and "RSSFeed + Attributes Mapper" according to my requirements. My tags aren't confirm to RSS 2.0 specifications. How I can do it easily without modifying source files? Is there any other ways?

    opened by NosovPavel 7
  • FeedParser.parse(_:) (and friends) take a closure callback, but work is synchronous?

    FeedParser.parse(_:) (and friends) take a closure callback, but work is synchronous?

    Why does FeedParser.parse(_:) take a closure when it could simply return a value?

    The gist of what it does is this:

    func parse(_ result: @escaping (Result) -> Void) {
        self.result = result
        self.parse()
        ...
        self.result?(someResult)
    }
    

    So... why not just do this and not confuse the user?

    func parse() -> Result {
        self.parse()
        ...
        return someResult
    }
    

    Better yet, dispatch your work to a background queue and make use of the interface you defined:

    func parse(_ result: @escaping (Result) -> Void) {
        self.result = result
        DispatchQueue.global().async {
            self.parse()
            ...
            self.result?(someResult)
        }
    }
    
    enhancement question 
    opened by NSExceptional 6
  • Issues Using FeedKit with Docker Ubuntu 18.04

    Issues Using FeedKit with Docker Ubuntu 18.04

    Hi,

    I'm using FeedKit in a server side vapor 4 app and I'm getting a weird error when using FeedKit and I was curious if you could shed any light on what this might be caused by and if there is anything I can do to resolve it.

    For reference I'm using a Swift 5.2.1.

    Thanks, J

    Fatal error: You must link or load module FoundationNetworking to load non-file: URL content using String(contentsOf:…), Data(contentsOf:…), etc.: file /home/buildnode/jenkins/workspace/oss-swift-5.2-package-linux-ubuntu-18_04/swift-corelibs-foundation/Foundation/NSSwiftRuntime.swift, line 397
    

    Full stack trace:

    api_1  | Fatal error: You must link or load module FoundationNetworking to load non-file: URL content using String(contentsOf:…), Data(contentsOf:…), etc.: file /home/buildnode/jenkins/workspace/oss-swift-5.2-package-linux-ubuntu-18_04/swift-corelibs-foundation/Foundation/NSSwiftRuntime.swift, line 397
    api_1  | 0x7fb0bb0eb88f
    api_1  | 0x7fb0bbc6f625
    api_1  | 0x7fb0bb75b4af
    api_1  | 0x7fb0bb6ab2d0
    api_1  | 0x7fb0bb6ab3c8
    api_1  | 0x7fb0bb6a5ea1
    api_1  | 0x556dd17549b2, Foundation.NSData.__allocating_init(contentsOf: Foundation.URL, options: Foundation.NSData.ReadingOptions) throws -> Foundation.NSData at /build/<compiler-generated>:0
    api_1  | 0x556dd17549b2, Foundation.Data.init(contentsOf: __shared Foundation.URL, options: Foundation.NSData.ReadingOptions) throws -> Foundation.Data at /build/<compiler-generated>:0
    api_1  | 0x556dd17549b2, FeedKit.FeedParser.parse() -> Swift.Result<FeedKit.Feed, FeedKit.ParserError> at /build/.build/checkouts/FeedKit/Sources/FeedKit/Parser/FeedParser.swift:74
    api_1  | 0x556dd13f45eb, function signature specialization <Arg[0] = Dead> of static App.RSSManager.checkForLatestRSSActivty() -> Swift.Result<FeedKit.Feed, FeedKit.ParserError> at /build/Sources/App/System Managers/RSSManager.swift:20
    api_1  | 0x556dd13f4b42, static App.RSSManager.checkForLatestRSSActivty() -> Swift.Result<FeedKit.Feed, FeedKit.ParserError> at /build/<compiler-generated>:0
    api_1  | 0x556dd13f4b42, static App.RSSManager.getLatestAlpineFeedItems() -> Swift.Result<Swift.Array<FeedKit.RSSFeedItem>, FeedKit.ParserError> at /build/Sources/App/System Managers/RSSManager.swift:24
    api_1  | 0x556dd13f4b42, function signature specialization <Arg[0] = Dead> of static App.RSSManager.getLatestAlpineFeedUrls() -> Swift.Result<Swift.Array<Foundation.URL>, FeedKit.ParserError> at /build/Sources/App/System Managers/RSSManager.swift:37
    api_1  | 0x556dd13eca8b, static App.RSSManager.getLatestAlpineFeedUrls() -> Swift.Result<Swift.Array<Foundation.URL>, FeedKit.ParserError> at /build/<compiler-generated>:0
    api_1  | 0x556dd13eca8b, static App.FISUpdateManager.checkForNewAlpinePointsListsForDownload(on: FluentKit.Database) -> NIO.EventLoopFuture<Swift.Array<Foundation.URL>> at /build/Sources/App/System Managers/FISUpdateManager.swift:74
    api_1  | 0x556dd13eb8e0, static App.FISUpdateManager.downloadNewAlpinePointsLists(on: FluentKit.Database) -> NIO.EventLoopFuture<Swift.Array<()>> at /build/Sources/App/System Managers/FISUpdateManager.swift:33
    api_1  | 0x556dd13eb6f8, static App.FISUpdateManager.downloadAndImportNewAlpinePointsLists(on: FluentKit.Database) -> NIO.EventLoopFuture<Swift.Array<()>> at /build/Sources/App/System Managers/FISUpdateManager.swift:20
    api_1  | 0x556dd140a6bb, closure #1 (NIO.RepeatedTask) -> NIO.EventLoopFuture<()> in App.configure(Vapor.Application) throws -> () at /build/Sources/App/configure.swift:42
    api_1  | 0x556dd1878744, closure #1 () -> NIO.EventLoopFuture<()> in NIO.RepeatedTask.(begin0 in _D5D78C61B22284700B9BD1ACFBC25157)(in: NIO.TimeAmount) -> () at /build/.build/checkouts/swift-nio/Sources/NIO/EventLoop.swift:88
    api_1  | 0x556dd1878744, partial apply forwarder for closure #1 () -> NIO.EventLoopFuture<()> in NIO.RepeatedTask.(begin0 in _D5D78C61B22284700B9BD1ACFBC25157)(in: NIO.TimeAmount) -> () at /build/<compiler-generated>:0
    api_1  | 0x556dd1878763, reabstraction thunk helper from @escaping @callee_guaranteed () -> (@owned NIO.EventLoopFuture<()>, @error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out NIO.EventLoopFuture<()>, @error @owned Swift.Error) at /build/<compiler-generated>:0
    api_1  | 0x556dd1878763, partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed () -> (@owned NIO.EventLoopFuture<()>, @error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out NIO.EventLoopFuture<()>, @error @owned Swift.Error) at /build/<compiler-generated>:0
    api_1  | 0x556dd187a128
    api_1  | 0x556dd18bea0b, closure #1 () -> () in NIO.SelectableEventLoop.scheduleTask<A>(deadline: NIO.NIODeadline, _: () throws -> A) -> NIO.Scheduled<A> at /build/.build/checkouts/swift-nio/Sources/NIO/SelectableEventLoop.swift:215
    api_1  | 0x556dd18c1430, reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_guaranteed () -> (@out ()) at /build/<compiler-generated>:0
    api_1  | 0x556dd18c1430, partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_guaranteed () -> (@out ()) at /build/<compiler-generated>:0
    api_1  | 0x556dd18bdd61, reabstraction thunk helper from @escaping @callee_guaranteed () -> (@out ()) to @escaping @callee_guaranteed () -> () at /build/.build/checkouts/swift-nio/Sources/NIO/SelectableEventLoop.swift:0
    api_1  | 0x556dd18bdd61, closure #3 () -> () in NIO.SelectableEventLoop.run() throws -> () at /build/.build/checkouts/swift-nio/Sources/NIO/SelectableEventLoop.swift:430
    api_1  | 0x556dd18bdd61, reabstraction thunk helper from @callee_guaranteed () -> (@error @owned Swift.Error) to @escaping @callee_guaranteed () -> (@out (), @error @owned Swift.Error) at /build/<compiler-generated>:0
    api_1  | 0x556dd18bdd61, generic specialization <()> of NIO.withAutoReleasePool<A>(() throws -> A) throws -> A at /build/.build/checkouts/swift-nio/Sources/NIO/SelectableEventLoop.swift:26
    api_1  | 0x556dd18bdd61, NIO.SelectableEventLoop.run() throws -> () at /build/.build/checkouts/swift-nio/Sources/NIO/SelectableEventLoop.swift:429
    api_1  | 0x556dd18753ea, closure #1 (NIO.NIOThread) -> () in static NIO.MultiThreadedEventLoopGroup.(setupThreadAndEventLoop in _D5D78C61B22284700B9BD1ACFBC25157)(name: Swift.String, selectorFactory: () throws -> NIO.Selector<NIO.NIORegistration>, initializer: (NIO.NIOThread) -> ()) -> NIO.SelectableEventLoop at /build/.build/checkouts/swift-nio/Sources/NIO/EventLoop.swift:753
    api_1  | 0x556dd1879e22, partial apply forwarder for closure #1 (NIO.NIOThread) -> () in static NIO.MultiThreadedEventLoopGroup.(setupThreadAndEventLoop in _D5D78C61B22284700B9BD1ACFBC25157)(name: Swift.String, selectorFactory: () throws -> NIO.Selector<NIO.NIORegistration>, initializer: (NIO.NIOThread) -> ()) -> NIO.SelectableEventLoop at /build/<compiler-generated>:0
    api_1  | 0x556dd18d6eee, reabstraction thunk helper from @escaping @callee_guaranteed (@guaranteed NIO.NIOThread) -> () to @escaping @callee_guaranteed (@in_guaranteed NIO.NIOThread) -> (@out ()) at /build/<compiler-generated>:0
    api_1  | 0x556dd1879e40, partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed (@guaranteed NIO.NIOThread) -> () to @escaping @callee_guaranteed (@in_guaranteed NIO.NIOThread) -> (@out ()) at /build/<compiler-generated>:0
    api_1  | 0x556dd18d8009, closure #1 (Swift.Optional<Swift.UnsafeMutableRawPointer>) -> Swift.Optional<Swift.UnsafeMutableRawPointer> in static NIO.ThreadOpsPosix.run(handle: inout Swift.Optional<Swift.UInt>, args: NIO.Box<(body: (NIO.NIOThread) -> (), name: Swift.Optional<Swift.String>)>, detachThread: Swift.Bool) -> () at /build/.build/checkouts/swift-nio/Sources/NIO/ThreadPosix.swift:97
    api_1  | 0x7fb0bb0e06da
    api_1  | 0x7fb0b906c88e
    api_1  | 0xffffffffffffffff
    psvaporv4_api_1 exited with code 132
    
    opened by daSkier 5
  • Custom Attributes + CDATA Encoding

    Custom Attributes + CDATA Encoding

    I apologize if this question is easily solvable,

    In my XML document I have a custom attribute dc:creator (which specifies the author) that is also encoded in CDATA. I was wondering how I would use FeedKit with custom attributes and when they're encoded in CDATA.

    opened by ts-co 5
  • Character encoding

    Character encoding

    Hi,

    I really like your pod, it's working great except for one issue.

    I'm having problems with parsing a Danish RSS feed. The strings are not coming back with correct encoding and therefore weird characters are showing up in the app.

    Help would be appreciated :)

    opened by cortnum 5
  • Load more than 10 feed items using an index

    Load more than 10 feed items using an index

    As far as I can tell, FeedKit only fetches the last 10 RSS items in a feed.

    Is it possible/would you consider adding an index to access, for example, posts 11-20? I think an index would be the best way to solve this because having just a number of items to load option would make the first load slower. I’d rather load more items as needed.

    opened by ryanoconnor7 5
  • Crashes when feed url returns html

    Crashes when feed url returns html

    OK I am using pod 6

    sometimes this url: http://www.newsbtc.com/feed/

    will return HTML and quickly crash 👍

            FeedParser(URL: feedURL)!.parseAsync { (result) in
    

    Normall it returns an RSS feed but through my testing it will block too many transactions and return HTML saying you need to talk to support.

    opened by jimijon 5
  • Bring documentation back

    Bring documentation back

    While literally speaking it made sense to close issue #141, this repo is still missing its documentation.

    @nmdias, do you have the old files published on the now defunct CocoaDocs handy?

    As a see it, there are at least two actions that need to be taken:

    1. Adopt GitHub Wikis: https://docs.github.com/en/communities/documenting-your-project-with-wikis/adding-or-editing-wiki-pages
    2. Remove the old docs link from the README file.

    I'm willing to help adapting the old docs into the wiki if time is a concern.

    opened by rafaelclaycon 3
  • Is there a way to access

    Is there a way to access "atom:link" in RSS feed?

    Hi! Thanks for a nice library!

    I would like to access atom links in RSS feeds. Is it possible? I can't find a way to do it.

    For instance look here: https://feeds.megaphone.fm/VMP9331026707

    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <atom:link href="https://feeds.megaphone.fm/VMP9331026707" rel="self" type="application/rss+xml"/>
            ...
    
    opened by algrid 0
  • Swift import Error,Those are error message

    Swift import Error,Those are error message

    Undefined symbol: nominal type descriptor for FeedKit.RSSFeedItem

    Undefined symbol: protocol conformance descriptor for FeedKit.ParserError : Swift.Error in FeedKit

    Undefined symbol: FeedKit.FeedParser.__allocating_init(URL: Foundation.URL) -> FeedKit.FeedParser

    Undefined symbol: type metadata accessor for FeedKit.RSSFeedItem

    Undefined symbol: type metadata accessor for FeedKit.FeedParser

    Undefined symbol: type metadata for FeedKit.ParserError

    opened by IosSuperman 1
  • feature request: support for Atom Entry Documents

    feature request: support for Atom Entry Documents

    I have an aging website whose backing store is a whole pile of Atom Entry Documents, and I'd like to replace the Python script that processes them with a Swift program. But it doesn't look like FeedKit supports these documents; I get a feedNotFound error when I try to parse one.

    opened by hober 1
Releases(9.1.2)
  • 9.0.0(Oct 10, 2019)

    Added

    • Support for Swift 5

    Updated

    • Usage of a custom Result type was deprecated in favor of Swift 5's Result type

    Fixed

    • Regression introduced in 7.1.1 affecting Linux build
      • #60
    • Extended permissive date formats to handle unparsed pubDate
    • FeedKit.Result collides with Swift 5 Result
    • JSONFeedParser date parsing can cause unexpected behaviour
    • Elements media:content/media:keywords not being picked up
    • Handle non initialized feed models
    • Build failure on Linux & Swift 5.1
    Source code(tar.gz)
    Source code(zip)
  • 8.1.1(Mar 15, 2019)

  • 8.1.0(Feb 23, 2019)

    Added

    • Support for Swift 4.2
    • Added public initializers to the RSS and Atom Feed Models
    • Added support for the media:title, media:description, media:player and media:thumbnails xml elements within the media:content element in the Media namespace Models
    • Added support for the itunes:type, ìtunes:episodeType, itunes:season, and itunes:episode elements
    • Added public initializers to the JSON Feed Model

    Updated

    • Adopted Codable conformance for mapping JSON feeds
    • Removed verbose output pod lib lint in travis

    Fixed

    • Update Package.swift to support Swift 4.2
    • Correct line endings and file permissions
    • Fixed date formatter strings
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0(Jun 10, 2018)

  • 7.1.1(Jun 8, 2018)

    Updated

    • Parse all RSS and ATOM dates permissively
    • Reattempt parsing of RFC822 dates without day prefix
    • Strip leading and trailing whitespace before parsing dates
    • Terminate XML parsing as soon as a complete feed is received
    • Allow parsing from an InputStream containing XML
    • Faster and more robust feed type determination

    Fixed

    • Detect existing data encoding and convert to UTF-8 before parsing
    Source code(tar.gz)
    Source code(zip)
  • 7.1.0(Apr 27, 2018)

  • 7.0.1(Nov 2, 2017)

  • 7.0.0(Sep 17, 2017)

  • 6.2.0(Sep 9, 2017)

  • 6.1.3(Sep 8, 2017)

  • 6.1.2(Sep 3, 2017)

  • 6.1.1(Jul 2, 2017)

  • 6.1.0(Jun 14, 2017)

    Added

    • Linux Support
    • FeedKit.paw

    Fixed

    • Support for Swift Package Manager
    • Reverted removal of Foundation imports
    • Fixed 'Error' is not convertible to 'NSError' on Linux
    • Fixed use of undeclared type 'DispatchQueue' on Linux

    Updated

    • Access control modifiers
    • Improved Documentation
    Source code(tar.gz)
    Source code(zip)
  • 6.0.2(Jun 13, 2017)

  • 6.0.1(Jun 13, 2017)

  • 6.0.0(Jun 13, 2017)

    Added

    • Asynchronous feed parsing
    • iTunes Podcasting Tags Namespace
    • Media Namespace
    • JSON Feed Support
    • Equatable Models (RSS, Atom and JSON)
    • Unit Tests

    Updated

    • Examples
    • Unit tests
    • Documentation

    Fixed

    • Fixed crashes when trying to parse a feed URL offline #4

    Removed

    • Support for Input Streams
    Source code(tar.gz)
    Source code(zip)
  • 5.1.0(Jan 28, 2017)

  • 5.0.0(Sep 25, 2016)

  • 4.1.0(Sep 18, 2016)

  • 4.0.0(Jul 17, 2016)

  • 3.1.0(Jul 17, 2016)

  • 3.0.0(Jul 17, 2016)

    Added

    • Support for Atom feeds according to RFC 4287
    • Unit tests for the Atom specification
    • Parse error handling
    • Parse error handling unit tests
    • NSData initializer
    • NSInputStream initializer
    • Parse performance unit tests

    Updated

    • Unit tests for the RSS specification
    • Unit tests for the Content Module specification
    • Unit tests for the Dublin Core Module specification
    • Unit tests for the Syndication Module specification
    • Tracking of the current XML DOM element being parsed with improved type safety
    • Consistent use of integer values to aid code interoperability
    • Syndication module Update Period mapping reliability
    • Consistency to the Given, When, Then unit test pattern

    Removed

    • Types of the RSS feed model dropped the explicit version 2
    • Internal helper Debug.log(_)
    • Usage of assertionFailure(_)

    Fixed

    • Issue where the module 'FeedParser' was not compiled for testing when testing Release builds
    • Issue where both Atom and RSS models were initialized despite the type of feed being parsed
    • Issue where the syndication namespace was not initialized properly causing child elements to also be nil
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jul 17, 2016)

    Focus on continuous integration for improved stability and reliability

    Added

    • watchOS Support
    • Automated Tests and Builds for Travic-CI
    • Copyright notices
    • Improved README instructions and readability

    Fixed

    • An issue where Tests would fail when running in release mode
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Jul 17, 2016)

  • 1.1.1(Jul 17, 2016)

    Added

    • Tests for the RSS2 model
    • Tests for the Content Module model
    • Tests for the DublinCore Module model
    • Tests for the Syndication Module model
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Jul 17, 2016)

  • 1.0.0(Jul 17, 2016)

Owner
Nuno Dias
Nuno Dias
Excel spreadsheet (XLSX) format parser written in pure Swift

CoreXLSX Excel spreadsheet (XLSX) format parser written in pure Swift CoreXLSX is a library focused on representing the low-level structure of the XML

null 684 Dec 21, 2022
Recursive Length Prefix encoding written in Swift

RLPSwift This is a basic Swift implementation of Recursive Length Prefix Encoding, a serialisation method for encoding arbitrarily structured binary d

bitfwd community 22 Oct 6, 2020
WKZombie is a Swift framework for iOS/OSX to navigate within websites and collect data without the need of User Interface or API, also known as Headless browser.

WKZombie WKZombie is an iOS/OSX web-browser without a graphical user interface. It was developed as an experiment in order to familiarize myself with

Mathias Köhnke 1.1k Dec 16, 2022
Erik is an headless browser based on WebKit. An headless browser allow to run functional tests, to access and manipulate webpages using javascript.

Erik Erik is a headless browser based on WebKit and HTML parser Kanna. An headless browser allow to run functional tests, to access and manipulate web

Eric Marchand 544 Dec 30, 2022
Swift wrappers for the tree-sitter incremental parsing system

SwiftTreeSitter Swift wrappers for the tree-sitter incremental parsing system. Remember that tree-sitter has both runtime and per-language dependencie

Chime 153 Dec 8, 2022
An RSS, Atom and JSON Feed parser written in Swift

Features Atom RSS 0.90, 0.91, 1.00, 2.00 JSON Namespaces Dublin Core Syndication Content Media RSS iTunes Podcasting Tags Documentation Unit Test Cove

Nuno Dias 1k Jan 7, 2023
RSS-Feed App template

RSS-Feed RSS-Feed App template This project is powered by DSKit a Design System Kit for iOS 13+, an iOS SDK written in Swift with a collection of reus

imodeveloperlab 3 Aug 28, 2022
Essential Feed App – Image Feed Feature

Essential Feed App – Image Feed Feature

Alexandre Gravelle 0 Jan 9, 2022
A JSON parser with concise API written in Swift.

A JSON parser with concise API written in Swift Maps JSON attributes to different Swift types with just two methods: map and mapArrayOfObjects. The li

Evgenii Neumerzhitckii 14 Aug 13, 2018
Simple RSS reader app written in Swift

Feeds4U Simple RSS reader app written in Swift. Contributions All PRs should be directed to 'develop' branch. Important Note Use code as you wish. Don

Evgeny Karkan 62 Nov 23, 2022
JSEN (JSON Swift Enum Notation) is a lightweight enum representation of a JSON, written in Swift.

JSEN /ˈdʒeɪsən/ JAY-sən JSEN (JSON Swift Enum Notation) is a lightweight enum representation of a JSON, written in Swift. A JSON, as defined in the EC

Roger Oba 8 Nov 22, 2022
Jay - Pure-Swift JSON parser & formatter. Fully streamable input and output. Linux & OS X ready.

Pure-Swift JSON parser & formatter. Fully streamable input and output. Linux & OS X ready. Replacement for NSJSONSerialization.

Danielle 132 Dec 5, 2021
This framework implements a strict JSON parser and generator in Objective-C.

SBJson 5 Chunk-based JSON parsing and generation in Objective-C. Overview SBJson's number one feature is stream/chunk-based operation. Feed the parser

null 3.8k Jan 5, 2023
RSS reader specific for Swift and SwiftUI based feeds.

Swift News Jam! Getting Started The idea behind this app was to provide the SwiftUI community a single app to curate the numerous RSS feeds that have

hallux 13 Nov 29, 2022
Functional JSON Parser - Linux Ready

Functional JSON Parser Feature Linux Ready Type-safe JSON parsing Functional value transformation Easy to parse nested value Dependency free No define

Ryo Aoyama 117 Sep 9, 2022
RSS reader for macOS and iOS.

NetNewsWire It’s a free and open-source feed reader for macOS and iOS. It supports RSS, Atom, JSON Feed, and RSS-in-JSON formats. More info: https://n

Ranchero Software 6.3k Dec 29, 2022
Swift Package for Decoding RSS Feeds.

SyndiKit Swift Package built on top of XMLCoder for Decoding RSS Feeds. Check out the DocC-Built Site! Table of Contents Introduction Features Install

BrightDigit 34 Dec 27, 2022
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
Headline News Widget for Better Touch Tool. You can display the articles fetched by rss.

BTTPluginHeadLineNews This is a headline news widget plugin for BTT(Better Touch Tool) You can display the articles fetched by rss. (Pock version is h

null 4 Jul 23, 2022
Headline News View Example App for iOS. You can display the articles fetched by rss.

HeadLineNews-ObjC Headline News View Example App for iOS. You can display the articles fetched by rss. PiP(Picture in Picture) is also supported DEMO

null 11 May 31, 2022