mödemlooper
banner
modemlooper.net
mödemlooper
@modemlooper.net
Pinned
The official Bluesky app is designed for iOS and is comically small on macOS and is not resizable. So, I made a macOS app that wraps the web app.

modemlooper.net/skyline/
Google paused as well.
December 24, 2025 at 3:27 PM
The entire US tech industry is currently funded with circle jerks.

Invest billions but require it gets spent on investors products.
a pyramid made out of playing cards with a red heart on the top card
ALT: a pyramid made out of playing cards with a red heart on the top card
media.tenor.com
December 23, 2025 at 5:33 PM
I made an API for Apple Intelligence
YouTube video by Xander Gouws
youtu.be
December 23, 2025 at 4:36 AM
YOLO
December 22, 2025 at 1:23 PM
Reposted by mödemlooper
Sometimes it might be a good idea to just #BuildInPrivate
December 21, 2025 at 3:04 PM
Who is implementing Age verification in their apps that is required in some US states and soon in the UK? What are your options?
December 21, 2025 at 4:44 PM
I heard you like Liquid Glass
December 20, 2025 at 9:40 PM
My new app CreatorCaps is live on the App Store.

A focused iOS utility for fast, clean auto-captions for short-form videos.
Built to do one thing well, without the usual video editing bloat.

Already iterating on the next update.

t.ly/1_m4v
December 20, 2025 at 12:41 AM
I started using Zed editor. It’s pretty.
December 19, 2025 at 8:32 PM
Reposted by mödemlooper
If you find that your SwiftUI views have too many .sheet modifiers, the following article shows a way to reduce the number of modifiers:

https://swiftdevjournal.com/posts/reducing-sheet-modifiers/

#swiftui
Reducing the Number of .sheet Modifiers in Your SwiftUI Views
Showing sheets is something most SwiftUI apps do. The most common way to show sheets is to have the following items in a SwiftUI view: * A `@State` property in the view that determines whether to show the sheet. * Code to set that property to `true` from the UI. * A `.sheet` modifier to show a view in a sheet. @State private var showSheet = false Button { showSheet = true } label: { Label("Add Page", systemImage: "plus") } .sheet(isPresented: $showSheet) { AddPageView() } This way of showing sheets works well if your app shows one or two sheets in a view. If your app shows more sheets in a view, you wind up with a `@State` property and a `.sheet` modifier for each sheet your app can show. Add enough sheets, and your code becomes a mess. You can reduce the number of Boolean sheet showing properties and `.sheet` modifiers by doing the following: * Create an enum for the sheets you want to show. * Create a sheet view to show the correct sheet based on the enum you create. * Create a focused value to show sheets from menu items. ## Creating an enum for the sheets Create an enum with one case for each sheet your app shows. The enum should conform to the `Identifiable` and `Hashable` protocols. enum Sheet: Identifiable, Hashable { case addBookmark case addChange case addRemote case editChangeDescription case push case clone var id: Self { self } } ## Creating a sheet view Start by creating a SwiftUI view. Add a constant that lets the sheet view know what sheet to know. The type for the constant should be the enum you created. In the `body` property, write a `switch` statement on the enum to show the correct sheet. struct SheetView: View { let sheet: Sheet var body: some View { switch sheet { case .addBookmark: AddBookmarkView() case .addChange: AddChangeView() case .addRemote: AddRemoteView() case .editChangeDescription: EditDescriptionView() case .push: PushView() case .clone: CloneView() } } } ## Creating a focused value If you want to show sheets from menu items, you must create a focused value that stores the sheet to show. Add an extension to the `FocusedValues` struct to create the focused value property. The type of the focused value should be an optional binding to the enum you created. extension FocusedValues { @Entry var sheetToShow: Binding<Sheet>? } The `@Entry` macro supports iOS 18+ and macOS 15+. In the views for your menu items that show sheets, add a `@FocusedValue` property so you can set the sheet to show. @FocusedValue(\.sheetToShow) private var sheet In your menu’s UI code, set the `sheet` property’s wrapped value to the enum for the sheet you want to show. Button(action: { sheet?.wrappedValue = .clone }, label: { Text("Clone") }) ## Showing a sheet To show a sheet from a SwiftUI view, you must do the following: * Add a `@State` property to store the sheet to show. * Add a `.focusedSceneValue` modifier if you want to show sheets from menus. * Set the sheet to show from the view’s UI. * Add a `.sheet` modifier to show the sheet. ### Add `@State` property Add a `@State` property to the SwiftUI view to store the enum for the sheet to show. @State private var sheetToShow: Sheet? = nil The type must be an optional value so you can pass the sheet enum to the `.sheet` modifier. ### Add `.focusedSceneValue` modifier If you are showing sheets from menus, add a `.focusedSceneValue` modifier to the view. The modifier takes two arguments. The name of the first argument must match the name of the variable you added as a `FocusedValues` extension. The second argument is a binding to the `@State` property you added to the view. .focusedSceneValue(\.sheetToShow, $sheetToShow.safeBinding(defaultValue: .addChange)) The `safeBinding` function is an extension to convert an optional binding to a non-optional binding. The `.focusedSceneValue` modifier cannot accept a binding to an optional value so you must convert the `sheetToShow` value to a non-optional value. extension Binding { // Convert an optional binding to a non-optional one. func safeBinding<T: Sendable>(defaultValue: T) -> Binding<T> where Value == Optional<T> { Binding<T>.init { self.wrappedValue ?? defaultValue } set: { newValue in self.wrappedValue = newValue } } } The code for the `safeBinding` function comes from the Stack Overflow question Converting optional Binding to non-optional Binding. ### Set the sheet to show Set the sheet to show from the view’s UI. Button(action: { sheetToShow = .push }, label: { Label("Push", systemImage:"square.and.arrow.up") }).accessibilityLabel("Push Changes") ### Add `.sheet` modifier Finally add a `.sheet` modifier to the view and pass a binding to the `@State` property as the `item` argument. Show the sheet view inside the closure. The argument you pass to the closure contains the enum value that tells the sheet view what sheet to show. .sheet(item: $sheetToShow) { sheet in SheetView(sheet: sheet) } ## Related reading Azam Sharp wrote the article Global Sheets Pattern in SwiftUI that covers how to show global sheets in SwiftUI apps. Azam’s article focuses more on iOS and using environment values while this article focuses more on Mac and focused values. His article also shows how to support older OS versions that don’t support the `@Entry` macro.
swiftdevjournal.com
December 19, 2025 at 6:35 PM
41 million subscribers and you ain’t profitable? Maybe your product sucks then. 😛
Peacock currently has 41 million subscribers and still isn’t profitable, which could partly explain why its ad policy has become so aggressive.
Peacock showing ads upon launch opens the door for more disruptive streaming ads
Subscribers will start seeing ads when selecting a user next year.
arstechnica.com
December 19, 2025 at 6:48 PM
When I turn Skyline: Bluesky web wrap into a real app I’m adding drafts as the first feature.
December 19, 2025 at 4:42 PM
When your old IPhone seems slow on new OS it’s not the OS, check battery life. Apple throttles CPU so you get “all day battery life”

Cheaper to get a new battery.
December 19, 2025 at 4:02 PM
Reposted by mödemlooper
Remember well, young Swift dev bold,
A lesson every pro is told:
Force-unwrap once — and death takes hold.
December 19, 2025 at 2:51 PM
Increase that bubble!
December 19, 2025 at 2:24 PM
Of all the AI companies @anthropic.com has the best branding.
December 19, 2025 at 2:15 AM
Reposted by mödemlooper
"First and foremost, and I can’t say this often enough: Don’t click on sponsored search results. We have seen so many cases where sponsored results lead to malware, that we recommend skipping them or make sure you never see them."
Google ads funnel Mac users to poisoned AI chats that spread the AMOS infostealer
Criminals make malicious ChatGPT and Grok conversations appear at the top of common searches—leading users straight to the Atomic macOS Stealer.
clicks.malwarebytes.com
December 19, 2025 at 12:29 AM
December 19, 2025 at 12:54 AM
Follow the money. I could guarantee you that the people who passed this law set up the financial incentive for themselves.
Zohran: "I mean, think about when you fly.  We have made it such a difficult experience to go through TSA that there's now a financial incentive to sign up for a separate program that can move you through it quicker. We have monetized the dysfunction."
December 18, 2025 at 7:38 PM
My only conclusion is that everyone’s been body snatched. Insanity!
Dr Oz: "The creation of a penis costs on average in America $150,000 per child ... if you add testicles, that's extra"
December 18, 2025 at 7:33 PM
Reposted by mödemlooper
I learned about Xcode archive post-actions last weekend.

Now all you need to do to automatically release your app update after archiving is add `amore release` to your archive post-actions.

This will export, codesign, create DMG, notarize, Sparkle sign, create appcast, and upload the app for you.
December 18, 2025 at 1:01 PM
Reposted by mödemlooper
My new app CreatorCaps is live on the App Store.

A focused iOS utility for fast, clean auto-captions for short-form videos.
Built to do one thing well, without the usual video editing bloat.

Already iterating on the next update.

t.ly/1_m4v
December 18, 2025 at 10:01 AM
We have a lot of apps on ionic / capacitor and Pods is ending. Lots of plugins that probably won’t get updated to swift package manager.

It might be easier just to redo the apps in native swift / kotlin instead of trying to fix busted plug-ins.
December 17, 2025 at 10:35 PM
The Apple / Google age verification is a mess. They are like here use this but we ain’t gonna help ya.
December 17, 2025 at 7:08 PM
I think it would be hilarious if they snatched Twitter away from Elon Musk.
December 17, 2025 at 2:49 PM