Category: Xcode

Xcode is Apple’s integrated development environment for macOS, used to develop software for macOS, iOS, iPadOS, watchOS, and tvOS.

  • macOS app basic entitlements file

    macOS app basic entitlements file

    Recently, I have submitted a macOS app on the app store where I used this entitlements file. This uses sandbox, allowing the app to call API to a remote server and select files from the user computer.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>com.apple.security.app-sandbox</key>
    	<true/>
    	<key>com.apple.security.files.user-selected.read-only</key>
    	<true/>
    	<key>com.apple.security.network.client</key>
    	<true/>
    	<key>com.apple.security.personal-information.photos-library</key>
    	<false/>
    </dict>
    </plist>
    
    Spread the love
  • SwiftUI combine rectangle and triangle in shape

    SwiftUI combine rectangle and triangle in shape

    SwiftUI combine rectangle and triangle in shape

    Making custom shape is not hard in SwiftUI by implementing func path(in rect: CGRect) -> Path. You just have to draw points in your desired location in 2D coordinate space by path.move() and path.addLine() func, a line will be drawn automatically.

    struct MomentumArrow: Shape {
        
        func path(in rect: CGRect) -> Path {
            var path = Path()
            
            let squareHeight = rect.height * 0.65
            
            // Rect
            path.move(to: CGPoint(x: 0, y: 0))
            path.addLine(to: CGPoint(x: 0, y: squareHeight))
            path.addLine(to: CGPoint(x: rect.width, y: squareHeight))
            path.addLine(to: CGPoint(x: rect.width, y: 0))
            path.addLine(to: CGPoint(x: 0, y: 0))
            
            // Triangle
            path.move(to: CGPoint(x: 0, y: squareHeight))
            path.addLine(to: CGPoint(x: rect.midX, y: rect.height))
            path.addLine(to: CGPoint(x: rect.width, y: squareHeight))
        
            return path
        }
        
    }
    Spread the love
  • Capture first frame of the video as an image on iOS and macOS in swift

    Capture first frame of the video as an image on iOS and macOS in swift

    import Foundation
    import Cocoa
    import AVKit
    import AVFoundation
    
    let asset: AVURLAsset = AVURLAsset.init(url: "URL OF ANY VIDEO local/remote")
    let imgGenerator: AVAssetImageGenerator = AVAssetImageGenerator.init(asset: asset)
    imgGenerator.appliesPreferredTrackTransform = true
                
    imgGenerator.generateCGImagesAsynchronously(forTimes: [NSValue(time: CMTime.zero)]) { (_, image, _, res, error) in
                    
                    if error == nil {
                        DispatchQueue.main.async {
                               let imageView = NSImage.init(cgImage: image!, size: NSSize.init(width: 180.0, height: 180.0));
                        }
                    } else {
                        DispatchQueue.main.async {
                            // Some other fallback image
                        }
                    }
    }
    
    Spread the love