Open Source Updates for Swift Projects - Issue #2 - The Kid Is Hot Tonite

Welcome to the second issue of the bi-weekly newsletter "Open Source Updates for Swift Projects". Learn about new projects and innovations of popular projects that help you as a Swift / iOS developer.

I'd love to receive your input and suggestions to include in this newsletter. Please share them with me via email.

Better Code Generation with Stencil 0.15.x

Stencil is a simple and powerful template language for Swift. It provides a syntax similar to Django and Mustache. And it is the foundation for prominent open-source tools like Sourcery, SwiftGen, Weaver or Genesis.

Dropping support for Swift < 5 can be neglected by many consumers. And for those who need to support Swift 4.2 support, they can still stay on Stencil 0.14.2.

There are several cool additions like

  • Blocks can now be used repeatedly in the template. When a block is rendered for the first time, its content will be cached, and it can be rendered again later using .

  • Added break and continue tags to break or continue the current loop.

  • Boolean expressions can now be rendered, i.e will render true or false depending on the evaluation result.

  • Allow providing lazily evaluated context data, using the LazyValueWrapper structure, helpful when for heavier metadata parsing.

Stencil is a simple and powerful template language for Swift. - Release 0.15.0 · stencilproject/Stencil

More Extensions with SwifterGen 5.3.0

SwifterGen, a collection of over 500 native Swift extensions, is not necessarily meant to be used as a library. Copy-pasting any single extension into another codebase should be possible as the contributors

  • do not allow 3rd party dependencies in SwifterSwift.

  • prefer code duplication over abstraction in this project.

The CHANGELOG is well maintained, and you'll find a bunch of additions.

A handy collection of more than 500 native Swift extensions to boost your productivity. - Release 5.3.0 · SwifterSwift/SwifterSwift

No more bitcode - reminder by apollo-ios 0.53.0

The latest release of Apollo iOS, a strongly-typed, caching GraphQL client written in Swift, is a reminder that Apple deprecated Bitcode with the beta release of Xcode 14.

Remove all instances of bitcode as not supported in Xcode 14: Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14. #2398 - Thanks to @stareque-atlassian for the contribution!

Bitcode was an Apple technology that enabled you to recompile your app to reduce its size. The recompilation happened when you uploaded your app to App Store Connect or exported it for Ad Hoc, Development, or Enterprise distribution.

📱 A strongly-typed, caching GraphQL client for iOS, written in Swift. - Release Release 0.53.0 · apollographql/apollo-ios

Hot reloading with Inject

It's great to see that Inject, a Swift Package that allows hot reloading, gets continuous support. Version 1.2.0 and 1.2.1 were recently released. For those who don't know about hot reloading:

Hot reloading is a technique allowing you to get rid of compiling your whole application and avoiding deploy/restart cycles as much as possible, all while allowing you to edit your running application code and see changes reflected as close as possible to real-time.

This makes you significantly more productive by reducing the time you spend waiting for apps to rebuild, restart, re-navigate to the previous location where you were in the app itself, re-produce the data you need.

Here is a shameless plug of a blog post that I wrote to introduce you to the topic.

Change code and instantly see the updates in the iOS simulator without compiling your SwiftUI app! Using Inject (Swift Package) and InjectionIII (macOS app)

The required macOS app InjectionIIIprovides Xcode 14 support with its recent version 4.3.1

Re-write of Injection for Xcode in (mostly) Swift. Contribute to johnno1962/InjectionIII development by creating an account on GitHub.

Modeling network requests with Get

Get is lean Swift web API client built using async/await.

Version 1.0 is a big release that brings it on par with Moya+Alamofire while still keeping its API surface small and focused. This release also includes new reworked documentation generated using DocC, and many other improvements.

Be musical with AudioKit's new Swift Packages

The folks behind AudioKit, a Swift audio synthesis, processing, & analysis platform for iOS, macOS and tvOS, released two neat Swift Packages.

Keyboard aims to be an easy-to-use musical keyboard with:

  • multi-touch interface

  • accurate note name labels on the piano keys given the musical key

  • stylized keys in any color

  • any number of notes, not just limited to octaves

And there is Tonic, a Swift library for music theory, focused on chords/harmony. Tonic answers musical questions, such as:

  • What's the note for this pitch in this key? => Note(pitch: Pitch(midiNoteNumber), key: .Bb)

  • What's the name of a chord? => Chord(notes: notes).description

  • What chords are in this key? => Key.Cm.chords

  • ...

A fancy cache for everyone with Boutique

Do you want easy-to-use offline storage, then you might want to look at Boutique from Joe Fabisevich.

Release Candidate 1 of Version 2.0.0 comes with quite some additions and for me the highlights are

  • Bring your own database: no longer are you restricted by the file system

  • AppKit/UIKit support: the library is now usable for all sorts of developers and not just SwiftUI developers.

A simple but surprisingly fancy cache. Contribute to mergesort/Boutique development by creating an account on GitHub.

P.S.: I am immensely impressed by the level of detail in the release notes, especially for a project that a single developer maintains!