Skip to content

Instantly share code, notes, and snippets.

View Czajnikowski's full-sized avatar
🚀

Maciek Czarnik Czajnikowski

🚀
View GitHub Profile
@Czajnikowski
Czajnikowski / AppleMusicPlayer.swift
Last active May 5, 2023 08:17
A problematic implementation (FB12168694) that doesnt seem to respect changing the ApplicationMusicPlayer.state.playbackRate on iOS 16.4.1 (and possibly other iOS versions). Related discussion here: https://developer.apple.com/forums/thread/702397?answerId=752470022#752470022
import MusicKit
import Foundation
public class AppleMusicPlayer {
private let musicPlayer = ApplicationMusicPlayer.shared
public init() {}
@Sendable public func prepareToPlay(songID: String) async throws {
guard let item = await MusicCatalog.song(withID: songID) else {

RPLY Privacy Policy

Information collected

This app does not collect any information from you. All data you add is stored on your device, and synced to your private iCloud account.

The app does use third-party services that may collect information used to identify you.

Links to the privacy policy of third-party service providers used by the app:

import Foundation
import Combine
extension URLSession {
func cacheThenDataTaskPublisher(
for urlRequest: URLRequest
) -> some Publisher {
let cacheDataTaskPublisher = configuration.urlCache?
.cachedResponse(for: urlRequest)
.map {
@Czajnikowski
Czajnikowski / Example.swift
Last active September 23, 2021 13:48
Solution for propagating changes from nested ObservableObjects
class TrackViewModel {
private let nestedViewModel: PlaybackViewModel
private var propagation: Any?
init(nestedViewModel: PlaybackViewModel) {
self.nestedViewModel = nestedViewModel
propagation = nestedViewModel.propagateWeakly(to: self)
}
@Czajnikowski
Czajnikowski / UndoManagerActionButton.swift
Last active May 13, 2022 09:55
Standalone button handling and affording undo/redo actions (implemented without overgeneralizing the implementation above my own needs). An answer to https://stackoverflow.com/questions/60647857/undomanagers-canundo-property-not-updating-in-swiftui/67354446#67354446
import SwiftUI
import Combine
struct UndoManagerActionButton: View {
enum Action {
case
undo,
redo
}
@Czajnikowski
Czajnikowski / ConfiguredInstance.swift
Last active November 27, 2020 16:35
Configured instance
private func configured<Instance>(
_ instance: Instance,
configure: (Instance) -> Void
) -> Instance where Instance: AnyObject {
configure(instance)
return instance
}
infix operator <~
@Czajnikowski
Czajnikowski / Example.swift
Last active December 3, 2020 20:11
A couple of abstractions useful in situations where you want to display some loadable content (whatever it is - news feed, image loaded from a URL or an output image from a filter or anything else)
import SwiftUI
LoadableResourceView(resourceProvider) { loadableResource in
SomeView(loadableResource)
}
import SwiftUI
extension View {
func propagate<Key>(
_ transform: @escaping (CGRect) -> Key.Value,
of source: Anchor<CGRect>.Source = .bounds,
using key: Key.Type
) -> some View where Key: PreferenceKey {
_propagate(transform, of: source, using: key)
}
// Run any SwiftUI view as a Mac app.
import Cocoa
import SwiftUI
NSApplication.shared.run {
VStack {
Text("Hello, World")
.padding()
.background(Capsule().fill(Color.blue))
@Czajnikowski
Czajnikowski / advanced-swiftui-animations.swift
Last active October 30, 2020 12:29 — forked from swiftui-lab/advanced-swiftui-animations.swift
@swiftui-lab's solution adjusted to use 3 (instead fo 5) Texts per digit
//------------------------------------------------------------------------
// The SwiftUI Lab: Advanced SwiftUI Animations
// https://swiftui-lab.com/swiftui-animations-part1 (Animating Paths)
// https://swiftui-lab.com/swiftui-animations-part2 (GeometryEffect)
// https://swiftui-lab.com/swiftui-animations-part3 (AnimatableModifier)
//------------------------------------------------------------------------
import SwiftUI
struct ContentView: View {