applications 0.2.2

A cross-platform library for finding installed applications.
Documentation
# apps-rs

> This crate is used to
>
> - get a list of installed applications on the system
> - get the frontmost application
> - get a list of running applications

## Platforms

- [x] Mac
- [ ] Linux
- [ ] Windows

## Usage

```rust
use applications::{AppInfoContext, AppInfo};

fn main() {
    let mut ctx = AppInfoContext::new();
    ctx.refresh_apps().unwrap(); // must refresh apps before getting them

    let apps = ctx.get_all_apps();
    println!("Apps: {:#?}", apps);

    let frontmost_app = ctx.get_frontmost_application().unwrap();
    println!("Frontmost App: {:#?}", frontmost_app);

    let running_apps = ctx.get_running_apps();
    println!("Running Apps: {:#?}", running_apps);
}
```

## How?

> How and where to search for available desktop applications on each platform?

### Linux

Desktop applications are specified in files that ends with `.desktop`. `echo $XDG_DATA_DIRS` to see a list of paths where these desktop files could reside in.

The `.desktop` files are in toml format. Parse them with [toml](https://crates.io/crates/toml) crate.

The `Exec` can be used to launch the app, and `Icon` field contains the app icon.

### MacOS

The simplest way is to search in `/Applications` folder. The app icon is in `.icns` format.
Apple silicon macs can now run iOS apps. iOS app icons are in `.png` format.

`system_profiler` command can be used to get installed applications.

`system_profiler SPApplicationsDataType` is the command to use to get a full list of applications.

### Windows

https://crates.io/crates/winreg could be useful. Ask chatgpt for sample code.

## Libraries

- https://crates.io/crates/icns: Read and write icns files, convert into PNG format.