Author: Smin Rana

  • 3rd party software I use on my Mac

    I use a lot of software daily for different tasks I do. The more tools you have on your Mac the more the distractions are. I have been trying to reduce the number of software I use since 2o19, it really helps me a lot.

    Like I had a number of documents on Google Keep, OneNote, and Notes, also there were duplicate items. I am able to merge all of them in the Mac Notes app which also sync nicely with my iPhone. So no more 3 different apps for documents on my Mac and iPhone. Notes app is not perfect but it works for me.

    Also, I have canceled my Office 365 subscriptions, no longer using Word and Excel, I completely moved to Apple Pages and Numbers. Apple Pages and Number are not close to Microsoft Word and Excel but again it works for me.

    I also purchased iCloud 200GB plan and moved all my OneDrive files there, Office 365 really good it offers 1TB but I wanted to get rid of all 3rd party apps from my Mac for better productivity and removing redundant software.

    Here is the list of 3rd party software I use on my Mac

    Spread the love
  • SwiftUI Know When Entering Landscape Mode

    SwiftUI Know When Entering Landscape Mode

    Create a ObservableObject Object like this

    final class UserAndDeviceSettings: ObservableObject {
        @Published var userInterfaceOrientationChanges:Bool = false
        @Published var userInterfaceOrientationLandscape:Bool = false
    }

    Now go to your SceneDelegate and add a var on top and pass your settings var in UIHostingController in willConnectTo method.

    var settings = UserAndDeviceSettings()
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
            // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
            // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    
            // Get the managed object context from the shared persistent container
            let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
            // Create the SwiftUI view and set the context as the value for the managedObjectContext environment keyPath
            let contentView = ContentView().environment(\.managedObjectContext, context)
    
            // Use a UIHostingController as window root view controller.
            if let windowScene = scene as? UIWindowScene {
                let window = UIWindow(windowScene: windowScene)
                
                // read the initial device orientation here
                self.settings.userInterfaceOrientationLandscape = (windowScene.interfaceOrientation.isLandscape == true)
                
                window.rootViewController = UIHostingController(rootView: contentView.environmentObject(self.settings))
                self.window = window
                window.makeKeyAndVisible()
            }
        }

    and in didUpdate delegate method, add this code.

    
    func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection) {
            print(">> previous tratis  \(previousTraitCollection)")
            print(">> previous coordinateSpace \(previousCoordinateSpace)")
            print(">> previous orientation \(previousInterfaceOrientation)")
            
            self.settings.userInterfaceOrientationChanges = true
            
            if previousInterfaceOrientation == .portrait || previousInterfaceOrientation == .portraitUpsideDown {
                self.settings.userInterfaceOrientationLandscape = true
            } else {
                self.settings.userInterfaceOrientationLandscape = false
            }
        }

    Now you can use this @EnvironmentObject in any View

    @EnvironmentObject var settings:UserAndDeviceSettings
    
    if self.settings.userInterfaceOrientationLandscape {
        
    }
    Spread the love
  • How top open Facebook group page in Facebook app on iPhone using Swift and Xcode.

    Opening a Facebook group page in the Facebook app on the iPhone using Swift is really easy. I’m using Swift 5 and Xcode 11.6.

    You must need your Facebook Page integer id which looks like this 8794208798015.

    let fbPage = "fb://profile/" + FB_GROUP_ID // Your Facebook group id e.g 8794808798015
    let fbURL = URL(string:fbPage)
    let canOpenURL = UIApplication.shared.canOpenURL(fbURL!)
    if (canOpenURL) {
        UIApplication.shared.open(fbURL!, completionHandler: nil)
    }

    Also update your Info.plist file otherwise you will get error like this

    This app is not allowed to query for scheme
    Spread the love