This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
actor SampleWriter { | |
// ... | |
var isCancelled = false | |
// ... | |
func cancel() async { | |
isCancelled = true | |
} | |
private func encodeAudioTracks() async { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public import AVFoundation | |
struct UniqueRef<Value>: ~Copyable, @unchecked Sendable { | |
private let lock = NSLock() | |
private var unsafeValue: Value? | |
init(value: sending Value) { | |
self.unsafeValue = value | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://iosdev.space/@andy/112714337582288785 | |
import AuthenticationServices | |
import SwiftUI | |
struct ContentView: View { | |
@State var url = URL(string: "https://example.net")! | |
@Environment(\.webAuthenticationSession) var webAuthenticationSession |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Old way | |
let session = VFAExportSession(asset: asset) | |
session.timeRange = CMTimeRange(start: .seconds(1), duration: .seconds(3)) | |
session.audioMix = audioMix | |
session.audioOutputConfiguration = [ | |
AVFormatIDKey: kAudioFormatMPEG4AAC, | |
AVNumberOfChannelsKey: NSNumber(value: 2), | |
AVSampleRateKey: NSNumber(value: 44_100.0), | |
] | |
session.videoComposition = videoComposition |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Created by Sami Samhuri on 2024-06-26. | |
// | |
import Foundation | |
final class SendableWrapper<T>: @unchecked Sendable { | |
private var unsafeValue: T | |
private let lock = NSLock() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import AVFoundation | |
/* | |
* In Swift 6 it’s not currently possible to directly load tracks from an AVAsset using a method like | |
* AVAsset.loadTracks(withMediaType:) from an actor-isolated context, because AVAssetTrack isn’t Sendable. Given | |
* that many AVFoundation types are not sendable / thread-safe it’s tempting to use an actor to work with | |
* compositions and that currently requires some work-arounds that shouldn’t be necessary and may not be obvious | |
* to everyone. | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class SendableWrapper<T>: @unchecked Sendable { | |
private var unsafeValue: T | |
private let lock = NSLock() | |
var value: T { | |
get { | |
lock.withLock { unsafeValue } | |
} | |
set { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import AVFoundation | |
/** | |
* AVAssetExportSession is initialized with an AVComposition, and that composition and all of its constituent | |
* components are not sendable. Because `composition` is isolated to the main actor here, the call to the | |
* non-isolated method `export(to:as:)` sends it across an isolation region and that is unsafe. | |
*/ | |
@MainActor | |
class UnsafeMovieExporter { | |
let composition = AVMutableComposition() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import AVFoundation | |
import Combine | |
import OSLog | |
private let log = Logger.forType(MovieExportSession.self) | |
actor MovieExportSession { | |
let composition: AVComposition | |
let audioMix: AVAudioMix? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'json' | |
require 'logger' | |
require 'net/http' | |
require 'stringio' | |
require 'zlib' | |
module Pronto | |
# Logs messages to Honeybadger's events API (Insights). The logger buffers messages and sends | |
# them to the API in batches. The logs are currently not structured and are sent as plain text, | |
# but if/when we actually move off of Papertrail then we can consider sending structured logs as |
NewerOlder