// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @dart = 2.6 import 'dart:convert'; import 'utils.dart'; class MacOSInfo { /// Print information collected from the operating system. /// /// Built in tools such as `system_profiler` and `defaults` are utilized. Future printInformation() async { try { await _printSafariApplications(); } catch (error) { print('Error thrown while getting Safari Applications: $error'); } try { await _printSafariDefaults(); } catch (error) { print('Error thrown while getting Safari defaults: $error'); } try { await _printUserLimits(); } catch (error) { print('Error thrown while getting user limits defaults: $error'); } } /// Print information on applications in the system that contains string /// `Safari`. Future _printSafariApplications() async { final String systemProfileJson = await evalProcess( 'system_profiler', ['SPApplicationsDataType', '-json']); final Map json = jsonDecode(systemProfileJson) as Map; final List systemProfile = json.values.first as List; for (int i = 0; i < systemProfile.length; i++) { final Map application = systemProfile[i] as Map; final String applicationName = application['_name'] as String; if (applicationName.contains('Safari')) { print('application: $applicationName ' 'fullInfo: ${application.toString()}'); } } } /// Print all the defaults in the system related to Safari. Future _printSafariDefaults() async { final String defaults = await evalProcess('/usr/bin/defaults', ['find', 'Safari']); print('Safari related defaults:\n $defaults'); } /// Print user limits (file and process). Future _printUserLimits() async { final String fileLimit = await evalProcess('ulimit', ['-n']); print('MacOS file limit: $fileLimit'); final String processLimit = await evalProcess('ulimit', ['-u']); print('MacOS process limit: $processLimit'); } }