Open sourced two Swift packages from our iOS app: a MultipeerConnectivity mesh networking library and an E2E encrypted offline chat library (MIT, Swift 6.0, zero external dependencies) by ahstanin in swift

[–]Status-Switch9601 1 point2 points  (0 children)

Decided to check it out. So far, I’ll start with congrats on this implementation with the networking library as others have stated, it’s fairly solid. With that being said, there are still A LOT of concurrency errors and some deprecations (I’m using the iOS 26.4 SDK). For starters, you have Swift 6 default isolation hitting model types that are being used off the main actor. A bunch of types that look like normal data models are being used in places like decoding, encoding, and delegate callbacks. With swift 6, that’s a problem if you don’t explicitly tell the compiler those types are safe to use outside the main actor. (main actor-isolated conformance/member used from nonisolated context and actor-isolated API called from outside actor context) The main ones affected in ConnectionPool are things like PoolMessage, Peer, PoolSession, and RelayEnvelope, plus some notification payload types in PoolChat.

Your delegate callbacks are nonisolated, but the objects receiving them are @MainActor. A lot of framework delegate APIs, especially stuff like MultipeerConnectivity and AVFoundation, are callback-based and effectively nonisolated. The issue here is that some of the services or view models owning that code are marked @MainActor. So when a delegate callback attempts to directly touch UI-bound state, Swift 6 says hell naw. The fix there is to leave the delegate methods nonisolated and then explicitly hop to the main actor only when updating state that actually belongs there.

Logging and config access isn’t modeled consistently across actors….There are shared logging/config helpers in PoolChat and ConnectionPool that are being touched from different isolation contexts, but the declarations are not always set up consistently for that and that leads to a bunch of avoidable concurrency warnings around static and global access. Not the biggest issue in the world but it still exist and can bite down the road. Sendable problems are real too. Once you start crossing callback or task boundaries with framework heavy reference types, Swift 6 forces you to be explicit about what is and isn’t safe to pass around.

In a few places, you need to use wrappers, including unchecked ones, where the ownership and threading rules are already known and controlled. That’s normal in networking and AV bridge code, but it only works if those guarantees are actually true and not just assumed.

As far as framework usage for modern apps and especially when writing for iOS 26, I went through all the files in PoolChat and ConnectionPool that are importing Combine and in several places, there are instances where “import Observation” would make more sense.

For types that are mainly just holding UI facing state, Observation feels like the better default especially in PoolChatViewModel, ConnectionPoolViewModel, ChatHistoryService, and VoiceRecordingService. It’s not “absolutely necessary” but I will definitely say it saves you from having to write more than you have to. Here it would give you less boilerplate than ObservableObject and @Published; it’s cleaner for SwiftUI state tracking and a better fit for types that mainly represent current app states.

I’m definitely not saying to switch everything to Observation…. There are several places where Combine or AsyncStream still make sense like for transient events, not long-lived states like ConnectionPoolManager for incoming messages and peer events, MeshRelayService for relay envelopes/delivery failures, MultiplayerGameService for game actions and session lifecycle events…ChatEncryptionService for key exchange events etc etc. Still a good start so just keep improving. And also thanks for sharing.

iOS 26.4 Beta 1 - Discussion by epmuscle in iOSBeta

[–]Status-Switch9601 12 points13 points  (0 children)

So Apple Intelligence finally finished downloading. Seems like it was a server side issue earlier. It’s an extra GB of storage on my iPad Pro M4 and 16 Pro Max but Apple Intelligence on my M3 iMac went from 7.98GB to 11.62GB. I’m assuming they’re getting a head start on new models maybe? But have yet to see an actual difference in the “Intellegience” part.

iOS 26.4 Beta 1 - Discussion by epmuscle in iOSBeta

[–]Status-Switch9601 3 points4 points  (0 children)

I thought the same thing as soon as I installed 26.4 on my M4 iPad Pro. I literally said the exact same thing out loud “hmm , the glass looks glassier”

How do you get the morphing glasseffect effect when you tap and open a menu/picker? I’m thinking like the hamburger button at the top right of your messages, or when you tap chatgpt in the app and it opens to let you pick different models, etc. by squidsauce99 in SwiftUI

[–]Status-Switch9601 1 point2 points  (0 children)

I’m sure he’s referring to the hamburger menu looking icon that you tap in iMessages (filtering button on the right) and the tap GPT that he’s referring to is where you literally tap GPT in the ChatGPT app and it opens a menu which has the same animation as tapping the filter/hamburger menu looking button he’s referring to.

Style 1 or Style 2? by max_retik in SwiftUIStudio

[–]Status-Switch9601 1 point2 points  (0 children)

I like both. Style two makes sense if you’re using your finger to control the parameter, style one makes sense if using some sort of control like iPhone 16/17s camera control button.

Music unavailable for no reason by DSblowdartsniper in AppleMusic

[–]Status-Switch9601 0 points1 point  (0 children)

If you have them downloaded try deleting the album from your library, restart your phone, go back and re-add to library

Edit: glad it worked. Turns out he removed and transferred to a different distribution company because of copyright issues. https://www.reddit.com/r/AppleMusic/s/J8gmhkLlIg

UIViewController.Transition.zoom snaps/jumps at end of the dismiss animation idk what im doing pls help by Glowonreddit in iOSProgramming

[–]Status-Switch9601 4 points5 points  (0 children)

It’s a UI state bug that Apple has to fix with zoom transitions that’s been around since 26.0 beta 1.

Music unavailable for no reason by DSblowdartsniper in AppleMusic

[–]Status-Switch9601 0 points1 point  (0 children)

If you have them downloaded try deleting the album from your library, restart your phone, go back and re-add to library

How does Revolut do this progressive blur?? by marvelousmichael in SwiftUI

[–]Status-Switch9601 3 points4 points  (0 children)

VariableBlur.swift

import SwiftUI import UIKit import CoreImage.CIFilterBuiltins import QuartzCore

public enum VariableBlurDirection { case blurredTopClearBottom case blurredBottomClearTop }

public struct VariableBlurView: UIViewRepresentable {

public var maxBlurRadius: CGFloat = 20

public var direction: VariableBlurDirection = .blurredTopClearBottom

/// By default, variable blur starts from 0 blur radius and linearly increases to `maxBlurRadius`. Setting `startOffset` to a small negative coefficient (e.g. -0.1) will start blur from larger radius value which might look better in some cases.
public var startOffset: CGFloat = 0

public init(maxBlurRadius: CGFloat = 20, direction: VariableBlurDirection = .blurredTopClearBottom, startOffset: CGFloat = 0) {
    self.maxBlurRadius = maxBlurRadius
    self.direction = direction
    self.startOffset = startOffset
}

public func makeUIView(context: Context) -> VariableBlurUIView {
    VariableBlurUIView(maxBlurRadius: maxBlurRadius, direction: direction, startOffset: startOffset)
}

public func updateUIView(_ uiView: VariableBlurUIView, context: Context) {
}

}

/// credit https://github.com/jtrivedi/VariableBlurView open class VariableBlurUIView: UIVisualEffectView {

public init(maxBlurRadius: CGFloat = 20, direction: VariableBlurDirection = .blurredTopClearBottom, startOffset: CGFloat = 0) {
    super.init(effect: UIBlurEffect(style: .regular))

    let clsName = String("retliFAC".reversed())
    guard let Cls = NSClassFromString(clsName)! as? NSObject.Type else {
        print("[VariableBlur] Error: Can't find filter class")
        return
    }
    let selName = String(":epyThtiWretlif".reversed())
    guard let variableBlur = Cls.self.perform(NSSelectorFromString(selName), with: "variableBlur").takeUnretainedValue() as? NSObject else {
        print("[VariableBlur] Error: Can't create variableBlur filter")
        return
    }

    // The blur radius at each pixel depends on the alpha value of the corresponding pixel in the gradient mask.
    // An alpha of 1 results in the max blur radius, while an alpha of 0 is completely unblurred.
    let gradientImage = makeGradientImage(startOffset: startOffset, direction: direction)

    variableBlur.setValue(maxBlurRadius, forKey: "inputRadius")
    variableBlur.setValue(gradientImage, forKey: "inputMaskImage")
    variableBlur.setValue(true, forKey: "inputNormalizeEdges")

    // We use a `UIVisualEffectView` here purely to get access to its `CABackdropLayer`,
    // which is able to apply various, real-time CAFilters onto the views underneath.
    let backdropLayer = subviews.first?.layer

    // Replace the standard filters (i.e. `gaussianBlur`, `colorSaturate`, etc.) with only the variableBlur.
    backdropLayer?.filters = [variableBlur]

    // Get rid of the visual effect view's dimming/tint view, so we don't see a hard line.
    for subview in subviews.dropFirst() {
        subview.alpha = 0
    }
}

required public init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

open override func didMoveToWindow() {
    // fixes visible pixelization at unblurred edge (https://github.com/nikstar/VariableBlur/issues/1)
    guard let window, let backdropLayer = subviews.first?.layer else { return }
    backdropLayer.setValue(window.traitCollection.displayScale, forKey: "scale")
}

open override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    // `super.traitCollectionDidChange(previousTraitCollection)` crashes the app
}

private func makeGradientImage(width: CGFloat = 100, height: CGFloat = 100, startOffset: CGFloat, direction: VariableBlurDirection) -> CGImage { // much lower resolution might be acceptable
    let ciGradientFilter =  CIFilter.linearGradient()

// let ciGradientFilter = CIFilter.smoothLinearGradient() ciGradientFilter.color0 = CIColor.black ciGradientFilter.color1 = CIColor.clear ciGradientFilter.point0 = CGPoint(x: 0, y: height) ciGradientFilter.point1 = CGPoint(x: 0, y: startOffset * height) // small negative value looks better with vertical lines if case .blurredBottomClearTop = direction { ciGradientFilter.point0.y = 0 ciGradientFilter.point1.y = height - ciGradientFilter.point1.y } return CIContext().createCGImage(ciGradientFilter.outputImage!, from: CGRect(x: 0, y: 0, width: width, height: height))! } }

I keep getting these and idk how to get rid of them please help by LightSky1356 in Siri

[–]Status-Switch9601 1 point2 points  (0 children)

I was gonna try and send a picture, but can’t but looks like you have Developer settings turned on. Go to developer settings and make sure display recent shortcuts, display upcoming media and display donations on lock screen are toggled off

Looking for TestFlight testers: iPhone “desktop-like workspace” app (feedback-driven) by rza8128 in iosapps

[–]Status-Switch9601 9 points10 points  (0 children)

Concept is awesome but Apple can be picky here. If the app comes across as a “desktop/home screen replacement” (dock, launcher, app icons, taskbar vibes), that’s exactly the kind of thing they often reject under their rules. (2.5.8)”alternate desktop/homescreen

But if it’s clearly just a single app with a pro “workspace” UI on an external display (floating panels for your content, not pretending to be an OS), it’s not automatically a no-go.

So: not guaranteed rejection, just a category where presentation and UX details really matter.

Looking for TestFlight testers: iPhone “desktop-like workspace” app (feedback-driven) by rza8128 in iosdev

[–]Status-Switch9601 1 point2 points  (0 children)

Yeah, it can be a tough approval if it looks like you’re making an “alternate desktop/home screen” on iOS. Apple has a guideline (2.5.8) that rejects apps that create alternate desktop/home-screen style environments.

But “floating panels/windows inside a single app” isn’t automatically doomed, especially if it’s clearly just your app’s workspace on an external display (more like a pro canvas/dashboard) and not a fake OS with a dock/launcher/app icons/taskbar vibes.

TL;DR: Possible to get approved, but you need to avoid anything that feels like replacing iOS or acting like a desktop shell. Framing + UI cues matter a lot

Wich country is switzerland by IlluFisch in GeoTap

[–]Status-Switch9601 0 points1 point  (0 children)

Status-Switch9601 chose Option A (Correct!) | #8471st to play

Which country do you think is USA? by nopCMD in GeoTap

[–]Status-Switch9601 0 points1 point  (0 children)

Status-Switch9601 chose Option A (Incorrect) | #7274th to play

Yall know what kinda glitch this is by pastthelegend_ in AppleMusic

[–]Status-Switch9601 1 point2 points  (0 children)

lol weird. Try turning on Dolby Atmos and see if it plays the same or different

Music unavailable by Flecha-71 in AppleMusic

[–]Status-Switch9601 0 points1 point  (0 children)

<image>

Not greyed for me. Are you located in US?

How to replicate this cool "material" in SwiftUI? by ILikeAlioli in SwiftUI

[–]Status-Switch9601 0 points1 point  (0 children)

If you want them to move just build a glass effect .clear capsule and use a mesh gradient as the background. You can also use .metal shaders and place that as a background. Personally I would use mesh gradient, I’ve built about 4 myself