Skip to content

Instantly share code, notes, and snippets.

View sindresorhus's full-sized avatar

Sindre Sorhus sindresorhus

View GitHub Profile
@sindresorhus
sindresorhus / PHImageManager-requestImage-async.swift
Created November 3, 2021 05:46
How to use `PHImageManager#requestImage` with async/await in Swift.
import Photos
struct UnexpectedNilError: Error {}
extension PHImageManager {
func requestImage(
for asset: PHAsset,
targetSize: CGSize,
contentMode: PHImageContentMode,
options: PHImageRequestOptions?
@sindresorhus
sindresorhus / swiftui-shape-extensions.swift
Created November 2, 2021 05:53
Nicer `Shape` access in SwiftUI
/**
Before:
```
.clipShape(Rectangle())
```
After:
```
extension UIImage {
private final class UIImageActivityItemSource: NSObject, UIActivityItemSource {
var image = UIImage()
var title: String?
var url: URL?
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
UIImage()
}
@sindresorhus
sindresorhus / machine-learning-for-my-apps.md
Last active July 14, 2022 21:47
Ideas for machine learning usage in my apps

Machine learning for my apps

I'm trying to think of ways I could use machine learning to enhance my apps. Feedback wanted!

You can find my apps here.

Dato

  • Natural language processing to parse a new event title, like Fantastical.
@sindresorhus
sindresorhus / IdentifiableByHashable.swift
Created March 10, 2021 10:30
Make a type `Identifiable` based on its `Hashable` hash value.
/**
Make a type `Identifiable` based on its `Hashable` hash value.
This can be useful when all the properties are required to represent its identifier.
```
struct Item: Hashable, IdentifiableByHashable {
let title: String
var message: String?
}
extension Image {
/**
```
Image(nsImageNamed: NSImage.addTemplateName)
```
- Note: The `size` parameter is there as resizing in SwiftUI creates a blurry image. Seems like a bug:
```
Image(nsImageNamed: NSImage.addTemplateName)
@sindresorhus
sindresorhus / esm-package.md
Last active October 13, 2025 05:46
Pure ESM package

Pure ESM package

The package that linked you here is now pure ESM. It cannot be require()'d from CommonJS.

This means you have the following choices:

  1. Use ESM yourself. (preferred)
    Use import foo from 'foo' instead of const foo = require('foo') to import the package. You also need to put "type": "module" in your package.json and more. Follow the below guide.
  2. If the package is used in an async context, you could use await import(…) from CommonJS instead of require(…).
  3. Stay on the existing version of the package until you can move to ESM.
@sindresorhus
sindresorhus / MenuBarApp.swift
Last active March 18, 2025 23:34
Dream API for macOS menu bar apps
@main
struct MyApp: App {
var body: some Scene {
StatusBar {
StatusItem(id: "foo", systemImage: "gear") {
Menu {
Button("Toggle") {}
Divider()
Button("Quit") {}
}
import Combine
import SwiftUI
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
@propertyWrapper
public struct Model<Value>: DynamicProperty {
private final class _Box: ObservableObject {
let objectWillChange = ObservableObjectPublisher()
var value: Value {