Annexe · Setup & Outils

Setup & Outils

HUD (heads-up display)

Pour afficher le Metal Performance HUD d'Apple, l'outil de suivi des performances intégré à macOS, iOS & iPadOS qui permet d'analyser en temps réel l'utilisation du GPU et les données graphiques, rendez-vous dans Xcode uniquement, trouves Edit Scheme… pour la plateforme que tu veux tester comme sur cette capture d'écran :

Ensuite Run → Diagnostics → sélectionne Show Graphics Overview & Log

Commandes shell pour personnaliser ton environnement

Créer des fichiers avec header personnalisé!

En tant que bon développeur, tu aimes simplifier/automatiser les choses.

Dans Xcode :

Code Snippet
⌘command
+
⇧shift
+
L
→Ça se passe dans l'onglet "Édition"→"Créer un extrait de code" (le dernier)→Colle simplement ton modèle/texte avec à la place des variables :
Aller à
⌘command
+
⇧shift
+
G
<#placeholder name#>

Voir editing source files in xcode

Dans le Terminal :

Ouvre le terminal
⌘command
+
espace
+
TERMI…
+
↵return
→Command Directory && lance VIM sur le fichier .zshrc

Configuration .zshrc

.zshrc → script de configuration du dossier personnel de l'utilisateur qui s'exécute à chaque ouverture du terminal Zsh
cd && vim .zshrc

Celui-ci est précédé d'un point car il s'agit d'un fichier caché, nous en croisseront d'autres tels que .vimrc, .env, .git ou encore .gitignore

Ajoute ça dans ton fichier ~/.zshrc via vim (éditeur de texte dans le terminal) :
~/ = la racine de ton Mac
PROMPT='%F{blue}%n%f %F{cyan}%~%f %#'
ZSH_THEME="agnoster"

export CLICOLOR=1                           # Active la coloration des commandes
export LSCOLORS=ExFxBxDxCxegedabagacad      # Définit les couleurs pour 'ls'

E_C()
{
        local user=$(whoami)
        local filename=$1
        local current_date=$(date +"%d/%m/%Y %H:%M:%S")
        local basefilename=$(basename "$filename")
        local len=${#basefilename}
        local tabs="    "
        if [ $len -lt 6 ]; then tabs="                                  "
        elif [ $len -lt 10 ]; then tabs="                               "
        elif [ $len -lt 14 ]; then tabs="                       "
        elif [ $len -lt 18 ]; then tabs="               "
        else tabs="     "
        fi
        cat > "$filename" << EOF
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*                                        +       +          */
/*      File: $basefilename            +++     +++$tabs**/
/*                                        +       +          */
/*      By: $user      **        +       +        **/
/*                                       +           +       */
/*      Created: $current_date      + + + + + +   * ****/
/*                                                           */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

EOF
        echo "Fichier $filename créé avec entête !"
        printf "\e[0;92mAdmirez comment il vous regarde \e[1;33m*_*\e[0m\n"
        ls -la
        vim "$filename"
}
4 utilisations du fichier caché .zshrc

alias → créer la commande zsh "ftpp"

# Usage : ftpp main.cpp

# effect : clang++ -std=c++17 -Wall -Wextra -Werror -O2 -o unNouveauSuperProgrammeExtraOrdinaire main.cpp

local → créer la variable user et lui donne la valeur de l'utilitaire 'whoami'.

# Usage : On l'utilise dans notre fonction () E_C, récupérée grâce au '$'

PROMPT → définit l’apparence du prompt Zsh

%n : nom de l’utilisateur %~ : dossier courant (raccourci avec ~) %# : # si root, % sinon %F{color} / %f : début/fin de couleur (voir si j'ai ça dans Makefile full)

ZSH_THEME → définit un thème visuel (voir ohmyz.sh sur le web)

export → rend une variable disponible pour tous les programmes lancés depuis ton shell

E_C → ta nouvelle fonction/fonctionnalité shell

# Usage : E_C fichieracreer.cpp

>> EOF → écris dans le fichier → bloc multi-lignes (heredoc())

Une fois que tu modifies un fichier de configuration, il faut ouvrir un nouveau terminal pour voir les changements.

Alias utiles pour ce projet

# Dans ~/.zshrc
# Compiler un .metal rapidement pour tester la syntaxe
metalcheck()
{
    xcrun -sdk macosx metal -c "$1" -o /tmp/test.air && echo "✓ OK" || echo "✗ Erreur"
}
# Usage
metalcheck 4D.metal

alias ftclang='clang -Wall -Wextra -Werror'
alias ftpp='clang++ -std=c++17 -Wall -Wextra -Werror -O2 -o unNouveauSuperProgrammeExtraOrdinaire'
alias ftdsa='find . -name ".DS_Store" -print && find . -name "a.out" -print' #-delete

alias nyan='curl -s https://ascii.live/nyan'
alias earth='curl -s https://ascii.live/earth'

Configuration .vimrc

Si tu veux personnaliser ton vim comme dans le cours :

# Ajoute le même style à ton éditor VIM ~/.vimrc : → cd && vim .vimrc
set number
set relativenumber
syntax on
set smartindent
set ruler
set guifont=Fira\ Code\ Retina\ 12
set showmatch
set wildmenu
if has("gui_running")
        set guifont=Menlo\ Regular:h14
endif
set nocompatible
set laststatus=2
set mouse=a
set statusline=%F%m%r%h%w\ [Pos=%l,%v][%p%%]\ [Buffer=%n]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
hi StatusLine ctermfg=White ctermbg=DarkGray cterm=NONE
set backspace=indent,eol,start
set clipboard^=unnamed,unnamedplus

L'icon de ton application.

Pour créer ton icon d'application, il te faut une image de 72 PPI (pixels par pouce) au maximum (prévue pour les écrans) et une résolution de ~1024x1024 (toujours carré) c'est largement suffisant. Je te conseille le format de pixel dans l'ordre : RGB, Adobe RGB, P3, Rect. 2020, …

Tu peux ensuite utiliser ce script qui va générer les différentes tailles possibles (App Store, Dock, …) et créer le fichier à l'extension .icns (Apple icon image).

Il doit être placé dans le même dossier que ton fichier Icon.png. Pas de canal alpha.

#!/bin/bash
mkdir -p AppIcon.iconset
echo "Generating icon sizes.."
sips -z 16 16     Icon.png --out AppIcon.iconset/icon_16x16.png > /dev/null 2>&1
sips -z 32 32     Icon.png --out AppIcon.iconset/icon_16x16@2x.png > /dev/null 2>&1
sips -z 32 32     Icon.png --out AppIcon.iconset/icon_32x32.png > /dev/null 2>&1
sips -z 64 64     Icon.png --out AppIcon.iconset/icon_32x32@2x.png > /dev/null 2>&1
sips -z 128 128   Icon.png --out AppIcon.iconset/icon_128x128.png > /dev/null 2>&1
sips -z 256 256   Icon.png --out AppIcon.iconset/icon_128x128@2x.png > /dev/null 2>&1
sips -z 256 256   Icon.png --out AppIcon.iconset/icon_256x256.png > /dev/null 2>&1
sips -z 512 512   Icon.png --out AppIcon.iconset/icon_256x256@2x.png > /dev/null 2>&1
sips -z 512 512   Icon.png --out AppIcon.iconset/icon_512x512.png > /dev/null 2>&1
sips -z 1024 1024 Icon.png --out AppIcon.iconset/icon_512x512@2x.png > /dev/null 2>&1
echo "Creating .icns file.."
iconutil -c icns AppIcon.iconset
rm -rf AppIcon.iconset
echo "AppIcon.icns created successfully!"
# Usage (terminal) dans ton dossier contenant le .png
user ~/Application/macOS % ./create_icns.sh

Tu peux le mettre dans ton dossier Application/macOS/ et vérifier que le nom (ici AppIcon.icns) corresponde dans ton/tes .plist (Icon file)

Icon Composer d'Apple
Tu peux réaliser un logo à l'aide de ces outils : Icon Composer.

C'est juste une image.

Les arguments de ton bundle application.

Exemple avec le sélecteur d'arrêt de ta boucle d'application :

/// Objective-C++ — AppViewController.mm — update:18/05/26 — ApplicationController
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    [self createWindow];
    [self createView];
    [self evaluateCommandLine]; // on appelle notre fonction lorsque l'app a terminé son lancement
}
/// Objective-C++ — AppViewController.mm — update:18/05/26 — avant: drawInMTKView
- (void)evaluateCommandLine // si le bundle .app contient un argument (pas les .exe)
{
    NSArray<NSString *>* args = [[NSProcessInfo processInfo] arguments];
    BOOL exitAfterOneFrame = [args containsObject:@"--auto-close"];
    if (exitAfterOneFrame)
    {
        NSLog(@"Automatically terminating in 2 hours...");
        [[NSApplication sharedApplication] performSelector:@selector(terminate:)
                                                withObject:self // AppKit / NSApplication / terminate:
                                                afterDelay:23]; // temps en seconde
    }
}
# Ouvrir l'application avec argument(s)
open LearnMSL.app --args "--auto-close" "Hello"
  • NSArray de NSString → tableau (array) de chaine de caractères.
  • [[NSProcessInfo processInfo] arguments] → créer un array de string de size argument count et les récupère. Lien vers argv pour binaire + argv sur Xcode. MacOS est en Objective-C, il va chercher le selector ObjC 'terminate:' et met fin à la boucle de notre application.
  • Calculatrice MacOS

    1. Elle permet les calculs scientifiques.

    2. Tu peux l'utiliser comme calculatrice "Programmer" afin d'utiliser les opérations XOR et calculer en base 8, 10, 16, etc, …

    3. Dans "Convert", tu peux absolument tout convertir : angle, area, data, force, length, speed, presure, time, …

    Recommandations AI

    Si tu souhaites être aidé par l'IA, je te recommande fortement d'utiliser Claude pour MSL.