Tutorial

Nuevas actualizaciones y mejoras para Macfleet.

Aviso importante

Los ejemplos de código y scripts proporcionados en estos tutoriales son solo para propósitos educativos. Macfleet no es responsable de ningún problema, daño o vulnerabilidad de seguridad que pueda surgir del uso, modificación o implementación de estos ejemplos. Siempre revisa y prueba el código en un entorno seguro antes de usarlo en sistemas de producción.

Hide and Unhide Files and Folders on macOS

Learn how to control the visibility of files and folders on Mac devices. Essential for protecting sensitive data, organizing workspaces, and managing system file access in enterprise environments.

Hide Specific Files or Folders

Hide individual files or folders from Finder view:

#!/bin/bash

# Configuration
TARGET_PATH="/Users/$(stat -f "%Su" /dev/console)/Desktop/sensitive-file.txt"

echo "Hiding file/folder: $TARGET_PATH"

# Hide the specified file or folder
if [[ -e "$TARGET_PATH" ]]; then
    chflags hidden "$TARGET_PATH"
    echo "✅ Successfully hidden: $TARGET_PATH"
else
    echo "❌ File/folder not found: $TARGET_PATH"
    exit 1
fi

Unhide Specific Files or Folders

Reveal previously hidden files or folders:

#!/bin/bash

# Configuration
TARGET_PATH="/Users/$(stat -f "%Su" /dev/console)/Desktop/sensitive-file.txt"

echo "Unhiding file/folder: $TARGET_PATH"

# Unhide the specified file or folder
if [[ -e "$TARGET_PATH" ]]; then
    chflags nohidden "$TARGET_PATH"
    echo "✅ Successfully unhidden: $TARGET_PATH"
else
    echo "❌ File/folder not found: $TARGET_PATH"
    exit 1
fi

Reveal All Hidden Files

Show all hidden files and folders in Finder (including system files):

#!/bin/bash

# Get current user context
CURRENT_USER=$(stat -f "%Su" /dev/console)
CURRENT_USER_UID=$(id -u "$CURRENT_USER")

echo "Revealing all hidden files for user: $CURRENT_USER"

# Enable showing all hidden files in Finder
launchctl asuser $CURRENT_USER_UID sudo -iu "$CURRENT_USER" \
    defaults write com.apple.finder AppleShowAllFiles -boolean true

# Restart Finder to apply changes
launchctl asuser $CURRENT_USER_UID sudo -iu "$CURRENT_USER" \
    killall Finder

echo "✅ All hidden files are now visible"
echo "⚠️  Hidden files appear faded in Finder"

Hide All Revealed Files

Hide all previously revealed hidden files and folders:

#!/bin/bash

# Get current user context
CURRENT_USER=$(stat -f "%Su" /dev/console)
CURRENT_USER_UID=$(id -u "$CURRENT_USER")

echo "Hiding all revealed hidden files for user: $CURRENT_USER"

# Disable showing hidden files in Finder
launchctl asuser $CURRENT_USER_UID sudo -iu "$CURRENT_USER" \
    defaults write com.apple.finder AppleShowAllFiles -boolean false

# Restart Finder to apply changes
launchctl asuser $CURRENT_USER_UID sudo -iu "$CURRENT_USER" \
    killall Finder

echo "✅ Hidden files are now concealed"
echo "🔒 System files are protected from view"

Bulk File Hide/Unhide Management

Script to manage multiple files and folders:

#!/bin/bash

# Function to hide multiple items
hide_multiple_items() {
    local items=("$@")
    local hidden_count=0
    
    echo "🔒 Hiding multiple files and folders..."
    
    for item in "${items[@]}"; do
        if [[ -e "$item" ]]; then
            chflags hidden "$item"
            echo "  ✅ Hidden: $item"
            ((hidden_count++))
        else
            echo "  ❌ Not found: $item"
        fi
    done
    
    echo "📊 Successfully hidden $hidden_count items"
}

# Function to unhide multiple items
unhide_multiple_items() {
    local items=("$@")
    local unhidden_count=0
    
    echo "👁️  Unhiding multiple files and folders..."
    
    for item in "${items[@]}"; do
        if [[ -e "$item" ]]; then
            chflags nohidden "$item"
            echo "  ✅ Unhidden: $item"
            ((unhidden_count++))
        else
            echo "  ❌ Not found: $item"
        fi
    done
    
    echo "📊 Successfully unhidden $unhidden_count items"
}

# Configuration - Add your file/folder paths here
CURRENT_USER=$(stat -f "%Su" /dev/console)
ITEMS_TO_MANAGE=(
    "/Users/$CURRENT_USER/Desktop/confidential"
    "/Users/$CURRENT_USER/Documents/private-notes.txt"
    "/Users/$CURRENT_USER/Desktop/temp-folder"
)

# Choose operation: hide or unhide
OPERATION="hide"  # Change to "unhide" to reveal items

case "$OPERATION" in
    "hide")
        hide_multiple_items "${ITEMS_TO_MANAGE[@]}"
        ;;
    "unhide")
        unhide_multiple_items "${ITEMS_TO_MANAGE[@]}"
        ;;
    *)
        echo "❌ Invalid operation. Use 'hide' or 'unhide'"
        exit 1
        ;;
esac

Enterprise File Visibility Management

Comprehensive script for enterprise file management:

#!/bin/bash

# Enterprise file visibility configuration
COMPANY_NAME="MacFleet"
POLICY_TYPE="security"  # Options: security, organization, compliance

# Define policy-specific file patterns
case "$POLICY_TYPE" in
    "security")
        HIDE_PATTERNS=(
            "*/confidential*"
            "*/private*"
            "*/.ssh*"
            "*/credentials*"
        )
        ;;
    "organization")
        HIDE_PATTERNS=(
            "*/temp*"
            "*/cache*"
            "*/.DS_Store"
            "*/thumbs.db"
        )
        ;;
    "compliance")
        HIDE_PATTERNS=(
            "*/audit*"
            "*/logs*"
            "*/backup*"
            "*/archive*"
        )
        ;;
esac

# Function to apply enterprise visibility policy
apply_enterprise_visibility_policy() {
    local current_user=$(stat -f "%Su" /dev/console)
    local current_user_uid=$(id -u "$current_user")
    
    echo "🏢 Applying Enterprise File Visibility Policy"
    echo "============================================="
    echo "Policy: $POLICY_TYPE"
    echo "Device: $(hostname)"
    echo "User: $current_user"
    echo "Timestamp: $(date)"
    
    local hidden_count=0
    
    # Process each pattern
    for pattern in "${HIDE_PATTERNS[@]}"; do
        echo "🔍 Processing pattern: $pattern"
        
        # Find files matching pattern in user directories
        while IFS= read -r -d '' file; do
            if [[ -e "$file" ]]; then
                chflags hidden "$file"
                echo "  🔒 Hidden: $file"
                ((hidden_count++))
            fi
        done < <(find "/Users/$current_user" -name "${pattern#*/}" -print0 2>/dev/null)
    done
    
    echo "✅ Enterprise visibility policy applied"
    echo "📊 Hidden $hidden_count items on $(hostname)"
}

# Execute enterprise policy
apply_enterprise_visibility_policy

Check File Visibility Status

Script to check if files or folders are hidden:

#!/bin/bash

# Function to check visibility status
check_visibility_status() {
    local target_path="$1"
    
    if [[ ! -e "$target_path" ]]; then
        echo "❌ File/folder does not exist: $target_path"
        return 1
    fi
    
    # Check hidden flag
    local flags=$(ls -lO "$target_path" 2>/dev/null | awk '{print $5}')
    
    if [[ "$flags" == *"hidden"* ]]; then
        echo "🔒 HIDDEN: $target_path"
    else
        echo "👁️  VISIBLE: $target_path"
    fi
}

# Function to scan directory for hidden items
scan_directory_visibility() {
    local scan_dir="$1"
    local hidden_count=0
    local visible_count=0
    
    echo "📊 Scanning directory: $scan_dir"
    echo "=================================="
    
    if [[ ! -d "$scan_dir" ]]; then
        echo "❌ Directory does not exist: $scan_dir"
        return 1
    fi
    
    # Scan all items in directory
    while IFS= read -r -d '' item; do
        local flags=$(ls -lO "$item" 2>/dev/null | awk '{print $5}')
        local basename_item=$(basename "$item")
        
        if [[ "$flags" == *"hidden"* ]]; then
            echo "  🔒 $basename_item (hidden)"
            ((hidden_count++))
        else
            echo "  👁️  $basename_item (visible)"
            ((visible_count++))
        fi
    done < <(find "$scan_dir" -maxdepth 1 -print0 2>/dev/null)
    
    echo ""
    echo "Summary:"
    echo "  Hidden items: $hidden_count"
    echo "  Visible items: $visible_count"
    echo "  Total items: $((hidden_count + visible_count))"
}

# Configuration
CURRENT_USER=$(stat -f "%Su" /dev/console)
CHECK_PATH="/Users/$CURRENT_USER/Desktop"

# Check specific file or scan directory
if [[ -f "$CHECK_PATH" ]]; then
    check_visibility_status "$CHECK_PATH"
elif [[ -d "$CHECK_PATH" ]]; then
    scan_directory_visibility "$CHECK_PATH"
else
    echo "❌ Path does not exist: $CHECK_PATH"
fi

Usage with MacFleet

  1. Configure target files/folders or patterns in script variables
  2. Choose between individual or bulk operations
  3. Deploy through MacFleet's remote script execution
  4. Verify visibility changes in Finder

Common Use Cases

ScenarioCommandPurpose
Hide sensitive filechflags hidden file.txtData protection
Hide temp folderchflags hidden temp/Workspace cleanup
Show system filesAppleShowAllFiles trueTroubleshooting
Hide system filesAppleShowAllFiles falseUser protection

File Visibility Levels

TypeVisibilityDescription
Normal filesAlways visibleStandard user files
Hidden filesInvisibleFiles hidden by chflags
System filesHidden by defaultmacOS system files
Dot filesHidden in FinderUnix-style hidden files

Important Notes

System files: Cannot unhide system files hidden by macOS default Persistence: Hidden flags persist across reboots and file moves Security: Hidden ≠ secure - files are still accessible via Terminal Finder restart: Required when changing AppleShowAllFiles setting

Troubleshooting

Permission denied: Ensure proper file ownership and permissions Finder not updating: Try killall Finder to force refresh Files still visible: Check if system-level hiding is required

Tutorial

Nuevas actualizaciones y mejoras para Macfleet.

Configurando un Runner de GitHub Actions en un Mac Mini (Apple Silicon)

Runner de GitHub Actions

GitHub Actions es una plataforma poderosa de CI/CD que te permite automatizar tus flujos de trabajo de desarrollo de software. Aunque GitHub ofrece runners hospedados, los runners auto-hospedados proporcionan mayor control y personalización para tu configuración de CI/CD. Este tutorial te guía a través de la configuración y conexión de un runner auto-hospedado en un Mac mini para ejecutar pipelines de macOS.

Prerrequisitos

Antes de comenzar, asegúrate de tener:

  • Un Mac mini (regístrate en Macfleet)
  • Un repositorio de GitHub con derechos de administrador
  • Un gestor de paquetes instalado (preferiblemente Homebrew)
  • Git instalado en tu sistema

Paso 1: Crear una Cuenta de Usuario Dedicada

Primero, crea una cuenta de usuario dedicada para el runner de GitHub Actions:

# Crear la cuenta de usuario 'gh-runner'
sudo dscl . -create /Users/gh-runner
sudo dscl . -create /Users/gh-runner UserShell /bin/bash
sudo dscl . -create /Users/gh-runner RealName "GitHub runner"
sudo dscl . -create /Users/gh-runner UniqueID "1001"
sudo dscl . -create /Users/gh-runner PrimaryGroupID 20
sudo dscl . -create /Users/gh-runner NFSHomeDirectory /Users/gh-runner

# Establecer la contraseña para el usuario
sudo dscl . -passwd /Users/gh-runner tu_contraseña

# Agregar 'gh-runner' al grupo 'admin'
sudo dscl . -append /Groups/admin GroupMembership gh-runner

Cambia a la nueva cuenta de usuario:

su gh-runner

Paso 2: Instalar Software Requerido

Instala Git y Rosetta 2 (si usas Apple Silicon):

# Instalar Git si no está ya instalado
brew install git

# Instalar Rosetta 2 para Macs Apple Silicon
softwareupdate --install-rosetta

Paso 3: Configurar el Runner de GitHub Actions

  1. Ve a tu repositorio de GitHub
  2. Navega a Configuración > Actions > Runners

Runner de GitHub Actions

  1. Haz clic en "New self-hosted runner" (https://github.com/<username>/<repository>/settings/actions/runners/new)
  2. Selecciona macOS como imagen del runner y ARM64 como arquitectura
  3. Sigue los comandos proporcionados para descargar y configurar el runner

Runner de GitHub Actions

Crea un archivo .env en el directorio _work del runner:

# archivo _work/.env
ImageOS=macos15
XCODE_15_DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
  1. Ejecuta el script run.sh en tu directorio del runner para completar la configuración.
  2. Verifica que el runner esté activo y escuchando trabajos en la terminal y revisa la configuración del repositorio de GitHub para la asociación del runner y el estado Idle.

Runner de GitHub Actions

Paso 4: Configurar Sudoers (Opcional)

Si tus acciones requieren privilegios de root, configura el archivo sudoers:

sudo visudo

Agrega la siguiente línea:

gh-runner ALL=(ALL) NOPASSWD: ALL

Paso 5: Usar el Runner en Flujos de Trabajo

Configura tu flujo de trabajo de GitHub Actions para usar el runner auto-hospedado:

name: Flujo de trabajo de muestra

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: [self-hosted, macOS, ARM64]
    steps:
      - name: Instalar NodeJS
        run: brew install node

El runner está autenticado en tu repositorio y etiquetado con self-hosted, macOS, y ARM64. Úsalo en tus flujos de trabajo especificando estas etiquetas en el campo runs-on:

runs-on: [self-hosted, macOS, ARM64]

Mejores Prácticas

  • Mantén tu software del runner actualizado
  • Monitorea regularmente los logs del runner para problemas
  • Usa etiquetas específicas para diferentes tipos de runners
  • Implementa medidas de seguridad apropiadas
  • Considera usar múltiples runners para balanceo de carga

Solución de Problemas

Problemas comunes y soluciones:

  1. Runner no conectando:

    • Verifica conectividad de red
    • Verifica validez del token de GitHub
    • Asegúrate de permisos apropiados
  2. Fallas de construcción:

    • Verifica instalación de Xcode
    • Verifica dependencias requeridas
    • Revisa logs del flujo de trabajo
  3. Problemas de permisos:

    • Verifica permisos de usuario
    • Verifica configuración de sudoers
    • Revisa permisos del sistema de archivos

Conclusión

Ahora tienes un runner auto-hospedado de GitHub Actions configurado en tu Mac mini. Esta configuración te proporciona más control sobre tu entorno de CI/CD y te permite ejecutar flujos de trabajo específicos de macOS de manera eficiente.

Recuerda mantener regularmente tu runner y mantenerlo actualizado con los últimos parches de seguridad y versiones de software.

Aplicación Nativa

Aplicación nativa de Macfleet

Guía de Instalación de Macfleet

Macfleet es una solución poderosa de gestión de flota diseñada específicamente para entornos de Mac Mini alojados en la nube. Como proveedor de hosting en la nube de Mac Mini, puedes usar Macfleet para monitorear, gestionar y optimizar toda tu flota de instancias Mac virtualizadas.

Esta guía de instalación te llevará a través de la configuración del monitoreo de Macfleet en sistemas macOS, Windows y Linux para asegurar una supervisión integral de tu infraestructura en la nube.

🍎 macOS

  • Descarga el archivo .dmg para Mac aquí
  • Haz doble clic en el archivo .dmg descargado
  • Arrastra la aplicación Macfleet a la carpeta Aplicaciones
  • Expulsa el archivo .dmg
  • Abre Preferencias del Sistema > Seguridad y Privacidad
    • Pestaña Privacidad > Accesibilidad
    • Marca Macfleet para permitir el monitoreo
  • Inicia Macfleet desde Aplicaciones
  • El seguimiento comienza automáticamente

🪟 Windows

  • Descarga el archivo .exe para Windows aquí
  • Haz clic derecho en el archivo .exe > "Ejecutar como administrador"
  • Sigue el asistente de instalación
  • Acepta los términos y condiciones
  • Permite en Windows Defender si se solicita
  • Concede permisos de monitoreo de aplicaciones
  • Inicia Macfleet desde el Menú Inicio
  • La aplicación comienza el seguimiento automáticamente

🐧 Linux

  • Descarga el paquete .deb (Ubuntu/Debian) o .rpm (CentOS/RHEL) aquí
  • Instala usando tu gestor de paquetes
    • Ubuntu/Debian: sudo dpkg -i Macfleet-linux.deb
    • CentOS/RHEL: sudo rpm -ivh Macfleet-linux.rpm
  • Permite permisos de acceso X11 si se solicita
  • Agrega el usuario a los grupos apropiados si es necesario
  • Inicia Macfleet desde el menú de Aplicaciones
  • La aplicación comienza el seguimiento automáticamente

Nota: Después de la instalación en todos los sistemas, inicia sesión con tus credenciales de Macfleet para sincronizar datos con tu panel de control.