Développer sur Mac des applications client-serveur suppose de configurer l’environnement de développement à la fois dans Xcode pour l’application iPhone et dans VS Code pour la partie serveur que nous développerons avec le langage Elixir/Phoenix.
Nous souhaitons préparer notre poste de travail pour developper avec VS Code pour Elixir PostgreSQL et Docker pour créer un serveur et avec Xcode et Swift swiftUI pour l’application client sur iPhone.
Nous utilisons donc Elixir et Phoenix côté serveur et Swift SwiftUI côté iPhone.
Environnement pour developper sur Mac la partie Serveur
Développer sur Mac la partie serveur en langage Elixir et Phoenix suppose d’utiliser VS Code sur MacBookPro.
Création du projet dans Github
Nous sauvegardons notre code sur github dans notre dossier copier-coder.
Commençons par créer un dossier chatracs dans github avec la Licence et un ReadMe. Puis avec clone dans VS Code nous créons notre nouveau projet. Clone Git Repository nous demande l’url de github, puis le dossier dans lequel nous souhaitons créer le projet.
Vérification des versions installées
Nous pouvons commencer à réaliser notre code. Vérifions les environnements que nous avons sur notre MacBookPro. Dans Terminal saisissons les instructions suivantes :
- PS1= »$ » ‘prompt de commande simplifié
- elixir -v ‘version d’elixir
- brew update ‘mettre à jour brew pour télécharger les dernières version
- brew upgrade elixir ‘mettre à jour elixir dans la dernière version
- mix local.hex ‘mise à jour des outils hex
- mix archive.install hex phx_new ‘mise à jour de phoenix
- psql -V ‘version de postgres
- erl –version ‘pour vérifier la version d’erlang et « halt(). » pour sortir
$ erl --version Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Eshell V14.0.2 (press Ctrl+G to abort, type help(). for help) 1> halt(). $ elixir -v Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Elixir 1.15.5 (compiled with Erlang/OTP 26) $
Nous réalisons une mise à jour d’Elixir pour passer dans la dernière version.
$ erl --version Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Eshell V14.0.2 (press Ctrl+G to abort, type help(). for help) 1> halt(). $ elixir -v Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Elixir 1.15.5 (compiled with Erlang/OTP 26) $ brew update ==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:d783cbeb6e6ef0d71c0b442317b54554370decd6fac66bf2d4938c07a63f67be ############################################################################################################################################################ 100.0% ==> Pouring portable-ruby-3.1.4.arm64_big_sur.bottle.tar.gz Updated 3 taps (homebrew/services, homebrew/core and homebrew/cask). ==> New Formulae abi3audit direwolf kubetui php@8.2 sigma-cli action-validator dockerfile-language-server lager phylum-cli signmykey actions-batch dockly ldeep pivit sigstore ain doltgres libconfini pkl skate ali doppler libcyaml pmix sloth amass dotslash libdicom podman-tui smlfmt ansible@8 dotter libdpp postgresql@16 snakeviz apkleaks dovi_tool libgit2@1.6 powerlevel10k snyk-cli apprise drogon libimobiledevice-glue presenterm solo2-cli appstream eatmemory libjuice prjtrellis spacer appwrite edbrowse libmapper proto spglib argc edgevpn libnghttp3 pter spicetify-cli asitop envio libnsbmp purr spidermonkey@91 asmfmt eza libnsgif pwned sqlboiler asn faircamp liborigin pyspelling sqlfmt auditwheel falco libsail pystring sqlsmith authz0 falcoctl libspelling python-argcomplete squealer autobrr favirecon libsql python-brotli squiid awscli-local flowpipe libwapcaplet python-chardet ssh-mitm badkeys flyscrape limesuite python-charset-normalizer ssh3 bandicoot frozen llvm@16 python-cycler sshpass bao fwupd lsusb-laniksj python-dateutil sshportal bashunit g-ls magic-wormhole.rs python-gdbm@3.12 steamguard-cli biodiff gdrive@2 mariadb@11.1 python-hatchling sugarjar biome geoip2fast mariadb@11.2 python-idna sui bkcrack ggshield mdsh python-kiwisolver surelog blake3 ghc@9.4 mediamtx python-mako tailspin bluez ghc@9.6 memray python-matplotlib tailwindcss bob gickup mentat python-networkx talhelper bomber gimmecert mfem python-pathspec taskopen bounceback gismo minder python-pluggy telegram-downloader bozohttpd git-grab mlx python-ply terraform-local bpftop git-mediate mmdbinspect python-psutil terrapin-scanner build2 gitea modsecurity python-pyproject-hooks texi2mdoc c3c gitsign modsurfer python-requests texttest caracal gittuf moon python-setuptools tf-profile cargo-docset glasskube mtbl python-setuptools-scm tfautomv cargo-fuzz glbinding@2 mtm python-tk@3.12 three-body cargo-llvm-cov go@1.21 mubeng python-trove-classifiers tlrc cargo-sweep goresym ncmdump python-urllib3 tomlplusplus cariddi gossip neosync python@3.12 trafilatura cekit gotestwaf netaddr qalculate-qt typstfmt certgraph gotpm netlistsvg qbittorrent-cli uffizzi certsync gptline netsurf-buildsystem rapidfuzz-cpp uhdm cf2tf gptscript nmail rathole urlscan cfripper graphqlviz node@20 rattler-build uv chainloop-cli greenmask noir raven uvicorn chainsaw haiti noseyparker rawdog veilid changie halp nowplaying-cli rdap vet chaoskube helidon npm-check-updates recoverpy virtctl checkdmarc helm-docs numbat redress vrc-get cherrybomb helm-ls nvimpager redwax-tool vulkan-profiles chisel-tunnel hopscotch-map ocaml@4 reflex vulkan-utility-libraries cidr icloudpd onionprobe regclient vulkan-volk cliam ignite open-simh rekor-cli vulsio-gost cloudfox immer openjph retire wasmedge cloudsplaining incus opensca-cli retry web-ext cmake-language-server instaloader opentofu richgo whisper-cpp colmap intercept orbuculum robin-map witness crunchy-cli invoice orcania rsyncy woodpecker-cli cryptopp iocextract orogene ruby@3.2 wormhole-william csprecon jot osctrl-cli ruler wstunnel csvlens jprq oslo saf-cli xcode-build-server cyclonedx-gomod jr overtls scala@3.3 xeol cyclonedx-python json2ts pan scarb xnvme daktilo jupyter-r pass-import scikit-image yatas dalfox k8sgpt patat scilla yder dcp karmadactl patch-package scnlib zigmod deadfinder kew pawk scoutsuite zipkin der-ascii kin pciutils seam zix dezoomify-rs kiota pdfalyzer senpai zug dhall-toml kosli-cli pdfrip shell2http dicebear ktfmt perl-xml-parser shellspec diffoci kubeshark phodav sigi ==> New Casks acreom domzilla-caffeine ia-presenter nightshade senabluetoothdevicemanager affine dosbox-staging imazing-profile-editor notes-better sf aifun douyin-chat insomnium notesollama shadow-bot akuity draw-things jamie nrfutil simplex amie dropbox-dash jan nvs songkong amneziavpn dropshelf jazz2-resurrection nx-studio space-capsule anka-build-cloud-controller easydevo jordanbaird-ice october spacedrive anka-build-cloud-registry ecodms-client jyutping ok-json spundle apidog-europe effect-house keyboard-cowboy ollama stashpad aqua egovframedev keymapp ollamac streammusic ava elecom-mouse-util kit opencat taccy batchoutput-pdf emby kreya openthesaurus-deutsch telegram-a batteryboi endless-sky-high-dpi kuaitie orka3 theiaide bezel expo-orbit libndi overlayed timemachinestatus bitbox finbar lightburn ovito to-audio-converter blockstream-green fixkey low-profile ovito-pro truhu brickstore floorp lunarbar paulxstretch tunetag brightintosh focusrite-control-2 lw-scanner pile twelite-stage btp fossa lyricsfinder playdate-mirror upscayl bugdom2 free-podcast-transcription markedit prettyclean vimcal cardo-update freeshow mdb-accdb-viewer proton-drive wakatime chainner garmin-basecamp mediamate proxy-audio-device wave cleanclip geekbench-ml meld-studio qdirstat wetype cleanupbuddy gitbutler metamer reader wifiman clibor greenery mindmac recipeui wiso-steuer-2022 clickhouse gstreamer-development mitmproxy reqable wiso-steuer-2023 cloudnet gstreamer-runtime modrinth rippling wiso-steuer-2024 codewhisperer hancom-docs monotype roam writerside commandpost hapigo motion rode-central xact creality-print heynote mumuplayer routine xliff-editor deelay hhkb music-decoy rustrover xsplit-vcam deskpad hides mutedeck sakura youlean-loudness-meter deveco-studio hoppscotch muyu salt znote devtunnel hp-easy-admin navigraph-charts screens-assist zui dnsmonitor ia-markdown-dictionary navigraph-simlink segger-ozone ==> Outdated Formulae ca-certificates erlang icu4c libpng nvm pcre2 readline xz elixir gettext jpeg-turbo libtiff openssl@3 postgresql@15 wxwidgets You have 15 outdated formulae installed. You can upgrade them with brew upgrade or list them with brew outdated. $ brew upgrade elixir ==> Upgrading 1 outdated package: elixir 1.15.5 -> 1.16.1 ==> Downloading https://ghcr.io/v2/homebrew/core/elixir/manifests/1.16.1 ############################################################################################################################################################ 100.0% ==> Fetching dependencies for elixir: ca-certificates, openssl@3, jpeg-turbo, libpng, xz, libtiff, wxwidgets and erlang ==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2023-12-12 ############################################################################################################################################################ 100.0% ==> Fetching ca-certificates ==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/blobs/sha256:5c99ffd0861f01adc19cab495027024f7d890e42a9e7b689706b85c8e2b9c9b3 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.2.1-1 ############################################################################################################################################################ 100.0% ==> Fetching openssl@3 ==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:020785e015f7b8ef638abc5835890bf3f0273c1eecba54b2f749e82cab0ddeec ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/jpeg-turbo/manifests/3.0.1 ############################################################################################################################################################ 100.0% ==> Fetching jpeg-turbo ==> Downloading https://ghcr.io/v2/homebrew/core/jpeg-turbo/blobs/sha256:0673df94b246dd4e63e8d80e942fd32e6bbd662eba0134b262e9eb6c5e1e2d88 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/libpng/manifests/1.6.43 ############################################################################################################################################################ 100.0% ==> Fetching libpng ==> Downloading https://ghcr.io/v2/homebrew/core/libpng/blobs/sha256:a94e8b28177fa5015a8799b5147aa4ac28ec07bd0d8f913d33a67f155e442301 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.6.0-1 ############################################################################################################################################################ 100.0% ==> Fetching xz ==> Downloading https://ghcr.io/v2/homebrew/core/xz/blobs/sha256:f4b2dfaa60525765aae78c823f600ab9bff4232798e4f3e0d984d8056b27f420 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/libtiff/manifests/4.6.0 ############################################################################################################################################################ 100.0% ==> Fetching libtiff ==> Downloading https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:12f3e1b0e5cd225a05d914692cf6de0f86f29ba1f51b806723237da2f85a7b13 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/wxwidgets/manifests/3.2.4 ############################################################################################################################################################ 100.0% ==> Fetching wxwidgets ==> Downloading https://ghcr.io/v2/homebrew/core/wxwidgets/blobs/sha256:0e61e20b856bffc27ff7666e720b0e75e3acffb55179aea7b978d3f2549e662d ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/erlang/manifests/26.2.2 ############################################################################################################################################################ 100.0% ==> Fetching erlang ==> Downloading https://ghcr.io/v2/homebrew/core/erlang/blobs/sha256:3e35b0b9597f449a97adacecb6f9a7ad1c4c6cf48a7cf7be02def96a8da5192d ############################################################################################################################################################ 100.0% ==> Fetching elixir ==> Downloading https://ghcr.io/v2/homebrew/core/elixir/blobs/sha256:2d50c979816750fcc1d01b0077adcbbdb67733fdab20b93ab8df31cd36cdd51a ############################################################################################################################################################ 100.0% ==> Upgrading elixir 1.15.5 -> 1.16.1 ==> Installing dependencies for elixir: ca-certificates, openssl@3, jpeg-turbo, libpng, xz, libtiff, wxwidgets and erlang ==> Installing elixir dependency: ca-certificates ==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2023-12-12 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/13aa86e429e05d02a76005d1881eaf625091a5ac4dc7d7674c706d12ba48796a--ca-certificates-2023-12-12.bottle_manifest.json ==> Pouring ca-certificates--2023-12-12.all.bottle.tar.gz ==> Regenerating CA certificate bundle from keychain, this may take a while... 🍺 /opt/homebrew/Cellar/ca-certificates/2023-12-12: 3 files, 226.7KB ==> Installing elixir dependency: openssl@3 ==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.2.1-1 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/f7b6e249843882452d784a8cbc4e19231186230b9e485a2a284d5c1952a95ec2--openssl@3-3.2.1-1.bottle_manifest.json ==> Pouring openssl@3--3.2.1.arm64_ventura.bottle.1.tar.gz 🍺 /opt/homebrew/Cellar/openssl@3/3.2.1: 6,874 files, 32MB ==> Installing elixir dependency: jpeg-turbo ==> Downloading https://ghcr.io/v2/homebrew/core/jpeg-turbo/manifests/3.0.1 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/abe7baf77a474e831f940214d72e8d72182373e6ea726884670f2d90f47525a7--jpeg-turbo-3.0.1.bottle_manifest.json ==> Pouring jpeg-turbo--3.0.1.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/jpeg-turbo/3.0.1: 44 files, 3.4MB ==> Installing elixir dependency: libpng ==> Downloading https://ghcr.io/v2/homebrew/core/libpng/manifests/1.6.43 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/dd618b09b8d6d4b89203b771528951e5309631cc3afd8dc1236f0e98965f2b67--libpng-1.6.43.bottle_manifest.json ==> Pouring libpng--1.6.43.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/libpng/1.6.43: 27 files, 1.3MB ==> Installing elixir dependency: xz ==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.6.0-1 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/e9f33a81b51bb70f8ec2b26797ab0647427b08f7484b20a9249903e6ab3eaba9--xz-5.6.0-1.bottle_manifest.json ==> Pouring xz--5.6.0.arm64_ventura.bottle.1.tar.gz 🍺 /opt/homebrew/Cellar/xz/5.6.0: 166 files, 2.7MB ==> Installing elixir dependency: libtiff ==> Downloading https://ghcr.io/v2/homebrew/core/libtiff/manifests/4.6.0 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/9c8455a2f6bcea7bf3e3461218fba309141b0b0553b6e1afc5fe64e63caccff3--libtiff-4.6.0.bottle_manifest.json ==> Pouring libtiff--4.6.0.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/libtiff/4.6.0: 414 files, 6.7MB ==> Installing elixir dependency: wxwidgets ==> Downloading https://ghcr.io/v2/homebrew/core/wxwidgets/manifests/3.2.4 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/331a4f827ded4a89c8ca9d9c1ed8472a7aeda024433c81b127c080a320f4abf4--wxwidgets-3.2.4.bottle_manifest.json ==> Pouring wxwidgets--3.2.4.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/wxwidgets/3.2.4: 834 files, 25.2MB ==> Installing elixir dependency: erlang ==> Downloading https://ghcr.io/v2/homebrew/core/erlang/manifests/26.2.2 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/4c8483e2c9a3f1f028c2898e39cd5635f3b4a118aa394f31781ec158c1b60dc4--erlang-26.2.2.bottle_manifest.json ==> Pouring erlang--26.2.2.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/erlang/26.2.2: 7,946 files, 494.2MB ==> Installing elixir ==> Pouring elixir--1.16.1.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/elixir/1.16.1: 447 files, 7.2MB ==> Running `brew cleanup elixir`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). Removing: /opt/homebrew/Cellar/elixir/1.15.5... (445 files, 6.9MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/elixir--1.15.5... (5MB) ==> Upgrading 1 dependent of upgraded formulae: Disable this behaviour by setting HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). postgresql@15 15.4 -> 15.6_1 ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/15/manifests/15.6_1 ############################################################################################################################################################ 100.0% ==> Fetching dependencies for postgresql@15: gettext, icu4c and readline ==> Downloading https://ghcr.io/v2/homebrew/core/gettext/manifests/0.22.5 ############################################################################################################################################################ 100.0% ==> Fetching gettext ==> Downloading https://ghcr.io/v2/homebrew/core/gettext/blobs/sha256:06ee5992f8a7dbf85a1b0e4c6311029cefda6d70852e5abd28f2e8e30d27cfcf ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/manifests/74.2 ############################################################################################################################################################ 100.0% ==> Fetching icu4c ==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/blobs/sha256:3c707a483df52f58010f3ab48f14e6e875cd99aefbac58ed6abf67f59b0a58d8 ############################################################################################################################################################ 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/readline/manifests/8.2.10 ############################################################################################################################################################ 100.0% ==> Fetching readline ==> Downloading https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:90351660d5ceca72a4c0a287555f2045db95f78aa5f65011b94213429f729cde ############################################################################################################################################################ 100.0% ==> Fetching postgresql@15 ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:328bcd13c829c6fe759a038e7dfb17c7af75fd242452a09cb77915a78fa233a4 ############################################################################################################################################################ 100.0% ==> Upgrading postgresql@15 15.4 -> 15.6_1 ==> Installing dependencies for postgresql@15: gettext, icu4c and readline ==> Installing postgresql@15 dependency: gettext ==> Downloading https://ghcr.io/v2/homebrew/core/gettext/manifests/0.22.5 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/447e45b77bb47ede0377f7eab1863825298ecaaaeed0bbd84aca3bd300b00508--gettext-0.22.5.bottle_manifest.json ==> Pouring gettext--0.22.5.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/gettext/0.22.5: 2,043 files, 24.4MB ==> Installing postgresql@15 dependency: icu4c ==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/manifests/74.2 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/3e5230e726e5548db28bc0cf75710d6405903b742f941113d3dbe7483fad72a4--icu4c-74.2.bottle_manifest.json ==> Pouring icu4c--74.2.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/icu4c/74.2: 270 files, 77.9MB ==> Installing postgresql@15 dependency: readline ==> Downloading https://ghcr.io/v2/homebrew/core/readline/manifests/8.2.10 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/4ddd52803319828799f1932d4c7fa8d11c667049b20a56341c0c19246a1be93b--readline-8.2.10.bottle_manifest.json ==> Pouring readline--8.2.10.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/readline/8.2.10: 50 files, 1.7MB ==> Installing postgresql@15 ==> Pouring postgresql@15--15.6_1.arm64_ventura.bottle.tar.gz ==> Caveats This formula has created a default database cluster with: initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@15 For more details, read: https://www.postgresql.org/docs/15/app-initdb.html postgresql@15 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. If you need to have postgresql@15 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/postgresql@15/bin:$PATH"' >> ~/.zshrc For compilers to find postgresql@15 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/postgresql@15/lib" export CPPFLAGS="-I/opt/homebrew/opt/postgresql@15/include" To restart postgresql@15 after an upgrade: brew services restart postgresql@15 Or, if you don't want/need a background service you can just run: LC_ALL="C" /opt/homebrew/opt/postgresql@15/bin/postgres -D /opt/homebrew/var/postgresql@15 ==> Summary 🍺 /opt/homebrew/Cellar/postgresql@15/15.6_1: 3,702 files, 63.1MB ==> Running `brew cleanup postgresql@15`... Removing: /opt/homebrew/Cellar/postgresql@15/15.4... (3,698 files, 61.5MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/postgresql@15--15.4... (16.2MB) ==> Checking for dependents of upgraded formulae... ==> No broken dependents found! ==> `brew cleanup` has not been run in the last 30 days, running now... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). Removing: /opt/homebrew/Cellar/ca-certificates/2023-08-22... (3 files, 221.6KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/ca-certificates--2023-08-22... (125.2KB) Removing: /opt/homebrew/Cellar/erlang/26.0.2... (7,936 files, 492.9MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/erlang--26.0.2... (109.9MB) Removing: /opt/homebrew/Cellar/gettext/0.21.1... (1,983 files, 20.9MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/gettext--0.21.1... (8.8MB) Removing: /opt/homebrew/Cellar/icu4c/73.2... (268 files, 80.1MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/icu4c--73.2... (29.3MB) Removing: /opt/homebrew/Cellar/jpeg-turbo/3.0.0... (44 files, 3.4MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/jpeg-turbo--3.0.0... (1.1MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/krb5--1.21.2... (1.3MB) Removing: /opt/homebrew/Cellar/libpng/1.6.40... (27 files, 1.3MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libpng--1.6.40... (447.9KB) Removing: /opt/homebrew/Cellar/libtiff/4.5.1... (473 files, 8MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libtiff--4.5.1... (1.7MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libtool--2.4.7... (1MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/lz4--1.9.4... (251.0KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/m4--1.4.19... (255.7KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/nvm--0.39.5... (47.8KB) Removing: /opt/homebrew/Cellar/openssl@3/3.1.2... (6,495 files, 28.4MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/openssl@3--3.1.2... (7.7MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/pcre2--10.42... (2.0MB) Removing: /opt/homebrew/Cellar/readline/8.2.1... (50 files, 1.7MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/readline--8.2.1... (573.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/unixodbc--2.3.12... (588.5KB) Removing: /opt/homebrew/Cellar/wxwidgets/3.2.2.1_1... (834 files, 25.2MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/wxwidgets--3.2.2.1_1... (7.5MB) Removing: /opt/homebrew/Cellar/xz/5.4.4... (163 files, 2.6MB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/xz--5.4.4... (660.5KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/zstd--1.5.5... (742.6KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/elixir_bottle_manifest--1.15.5... (20.6KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/elixir_bottle_manifest--1.15.4... (20.7KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/lz4_bottle_manifest--1.9.4... (8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/gettext_bottle_manifest--0.21.1... (10.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libtiff_bottle_manifest--4.5.1... (9.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/readline_bottle_manifest--8.2.1... (8.6KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/icu4c_bottle_manifest--73.2... (8.4KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/m4_bottle_manifest--1.4.19... (8.7KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/ca-certificates_bottle_manifest--2023-08-22... (7.3KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/openssl@3_bottle_manifest--3.1.2-1... (8.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libtool_bottle_manifest--2.4.7-1... (8.2KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/postgresql@15_bottle_manifest--15.4... (16.4KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/pcre2_bottle_manifest--10.42... (8.5KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/unixodbc_bottle_manifest--2.3.12... (9.2KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/xz_bottle_manifest--5.4.4... (7.5KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/krb5_bottle_manifest--1.21.2... (11.4KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/wxwidgets_bottle_manifest--3.2.2.1_1... (17.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/zstd_bottle_manifest--1.5.5-1... (8.6KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/jpeg-turbo_bottle_manifest--3.0.0... (11.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/nvm_bottle_manifest--0.39.5... (1.8KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/erlang_bottle_manifest--26.0.2... (23.2KB) Removing: /Users/bertrandroussel/Library/Caches/Homebrew/libpng_bottle_manifest--1.6.40... (7.9KB) Removing: /Users/bertrandroussel/Library/Logs/Homebrew/postgresql@15... (1.3KB) Removing: /Users/bertrandroussel/Library/Logs/Homebrew/openssl@3... (64B) Removing: /Users/bertrandroussel/Library/Logs/Homebrew/ca-certificates... (64B) Pruned 0 symbolic links and 3 directories from /opt/homebrew ==> Caveats ==> postgresql@15 This formula has created a default database cluster with: initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@15 For more details, read: https://www.postgresql.org/docs/15/app-initdb.html postgresql@15 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula. If you need to have postgresql@15 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/postgresql@15/bin:$PATH"' >> ~/.zshrc For compilers to find postgresql@15 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/postgresql@15/lib" export CPPFLAGS="-I/opt/homebrew/opt/postgresql@15/include" To restart postgresql@15 after an upgrade: brew services restart postgresql@15 Or, if you don't want/need a background service you can just run: LC_ALL="C" /opt/homebrew/opt/postgresql@15/bin/postgres -D /opt/homebrew/var/postgresql@15 $ elixir -v Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Elixir 1.16.1 (compiled with Erlang/OTP 26) $ erl --version Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Eshell V14.2.2 (press Ctrl+G to abort, type help(). for help) 1> halt(). $
Mise en place des extensions sur VS Code
Les extensions installées sur VS Code :
- Phoenix Framework
- ElixirLS
- Elixir Snippets
Elixir Snippet donne une liste de raccourcis permettant de saisir le code facilement :
prefix | description |
---|---|
case | case |
cond | cond |
def | def |
df | def (one line) |
defc | defcallback |
defd | defdelegate |
defe | defexception |
defi | defimpl |
dmod | defmodule |
defmc | defmacrocallback |
defmp | defmacrop |
describe | describe .. do .. |
dmac | defmacro |
defp | defp |
defpro | defprotocol |
defs | defstruct |
do | do |
doc | doc |
ee | embed_eex |
ok | {:ok, ..} … |
err | {:error, ..} … |
oke | {:ok, ..} = … |
erre | {:error, ..} = … |
trc | try do catch |
exu, ex_unit | ExUnit template |
trr | try do rescue (everything!) |
fn | fn |
for | for |
fori | for into |
if | if |
ife | if else |
ife: | if else (one line) |
if: | if (one line) |
imp | import |
i | inspect |
ii | IO.inspect |
iib | IO.inspect(binding(), module:line) |
iil | IO.inspect(label: ..) |
iill | IO.inspect with label incl. the line number |
iins | IO.inspect with a label containing relative path and line number. Label string can easily be discarded |
ist | IO.inspect the current stacktrace |
iip | pipe to IO.inspect(module:line) |
ip | IO.puts( ..) |
p | the pipeline operator |
pry | IEx.pry |
% | map/struct |
mdoc | moduledoc |
mfs | map from struct |
msan | sanitize a Map by dropping some of its keys |
pe | print_eex |
rec | receive |
req | require |
test | test .. do .. |
unless | unless |
unlesse | unless else |
unlesse: | unless else (one line) |
unless: | unless (one line) |
supervisor | OTP Supervisor module |
gen_server | OTP GenServer module |
dynamic_supervisor | Elixir DynamicSupervisor module |
wt | with .. do .. |
wte | with .. do .. else .. |
Utilisation de ASDF
Asdf permet de gérer des versions différentes d’Elixir pour gérer des configurations différentes en fonction des projets.
pour vérifier si asdf est installé :
- asdf –version
Et pour vérifié s’il existe asdf pour brew :
- brew search asdf
On peut aussi aller sur le site de brew pour copier-coller la commande d’installation d’asdf :
- brew install asdf
§ brew search asdf ==> Formulae asdf § clear § brew install asdf ==> Downloading https://formulae.brew.sh/api/formula.jws.json ######################################################################### 100.0% ==> Downloading https://formulae.brew.sh/api/cask.jws.json ######################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/asdf/manifests/0.14.0 ######################################################################### 100.0% ==> Fetching dependencies for asdf: autoconf, automake, gmp, coreutils and libyaml ==> Downloading https://ghcr.io/v2/homebrew/core/autoconf/manifests/2.72 ######################################################################### 100.0% ==> Fetching autoconf ==> Downloading https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:bb39057e8 ######################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/automake/manifests/1.16.5 ######################################################################### 100.0% ==> Fetching automake ==> Downloading https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:f68481d06 ######################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/gmp/manifests/6.3.0 ######################################################################### 100.0% ==> Fetching gmp ==> Downloading https://ghcr.io/v2/homebrew/core/gmp/blobs/sha256:98c163edfbe7bd ######################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/coreutils/manifests/9.4 ######################################################################### 100.0% ==> Fetching coreutils ==> Downloading https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:3707a174 ######################################################################### 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/libyaml/manifests/0.2.5 ######################################################################### 100.0% ==> Fetching libyaml ==> Downloading https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:11239e8f50 ######################################################################### 100.0% ==> Fetching asdf ==> Downloading https://ghcr.io/v2/homebrew/core/asdf/blobs/sha256:2aa1302895c89 ######################################################################### 100.0% ==> Installing dependencies for asdf: autoconf, automake, gmp, coreutils and libyaml ==> Installing asdf dependency: autoconf ==> Downloading https://ghcr.io/v2/homebrew/core/autoconf/manifests/2.72 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/b73cdb320c4261bbf8d02d03e50dc755c869c5859c1d4e93616898fc7cd939ff--autoconf-2.72.bottle_manifest.json ==> Pouring autoconf--2.72.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/autoconf/2.72: 71 files, 3.6MB ==> Installing asdf dependency: automake ==> Downloading https://ghcr.io/v2/homebrew/core/automake/manifests/1.16.5 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/6863d3ffa73c5a5cbf1f1ea9e47b60784d09b232ac9e56149c1b931d9ec44d8b--automake-1.16.5.bottle_manifest.json ==> Pouring automake--1.16.5.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/automake/1.16.5: 131 files, 3.5MB ==> Installing asdf dependency: gmp ==> Downloading https://ghcr.io/v2/homebrew/core/gmp/manifests/6.3.0 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/70a72a71216843d66a953c06ff6337445ce9bc94fae9f0e301e2f59005274a8e--gmp-6.3.0.bottle_manifest.json ==> Pouring gmp--6.3.0.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/gmp/6.3.0: 21 files, 3.3MB ==> Installing asdf dependency: coreutils ==> Downloading https://ghcr.io/v2/homebrew/core/coreutils/manifests/9.4 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/03ccc608c8aa32206068c01a0851d46905841391780c77bf9fa216a0b8e6f2df--coreutils-9.4.bottle_manifest.json ==> Pouring coreutils--9.4.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/coreutils/9.4: 476 files, 13.5MB ==> Installing asdf dependency: libyaml ==> Downloading https://ghcr.io/v2/homebrew/core/libyaml/manifests/0.2.5 Already downloaded: /Users/bertrandroussel/Library/Caches/Homebrew/downloads/5f6b0af1730aa1bc02f8021c90ed7ffe988eeba95eec83e6c828f77332ba6406--libyaml-0.2.5.bottle_manifest.json ==> Pouring libyaml--0.2.5.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/libyaml/0.2.5: 10 files, 351.3KB ==> Installing asdf ==> Pouring asdf--0.14.0.all.bottle.tar.gz ==> Caveats To use asdf, add the following line (or equivalent) to your shell profile e.g. ~/.profile or ~/.zshrc: . /opt/homebrew/opt/asdf/libexec/asdf.sh e.g. ~/.config/fish/config.fish source /opt/homebrew/opt/asdf/libexec/asdf.fish Restart your terminal for the settings to take effect. zsh completions have been installed to: /opt/homebrew/share/zsh/site-functions ==> Summary 🍺 /opt/homebrew/Cellar/asdf/0.14.0: 192 files, 763KB ==> Running `brew cleanup asdf`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). ==> Caveats ==> asdf To use asdf, add the following line (or equivalent) to your shell profile e.g. ~/.profile or ~/.zshrc: . /opt/homebrew/opt/asdf/libexec/asdf.sh e.g. ~/.config/fish/config.fish source /opt/homebrew/opt/asdf/libexec/asdf.fish Restart your terminal for the settings to take effect. zsh completions have been installed to: /opt/homebrew/share/zsh/site-functions §
Asdf permet de gérer des versions d’outils de développement (Erlang/Elixir) soit locales à un projet soit globales sur le poste.
avec la commande asdf list all erlang, nous avons la liste des versions d’Erlang. Si la réponse est No such plugin: erlang, nous devons charger le plugin par asdf plugin add erlang.
§ asdf list all erlang No such plugin: erlang § asdf plugin add erlang initializing plugin repository...Cloning into '/Users/bertrandroussel/.asdf/repository'... remote: Enumerating objects: 5710, done. remote: Counting objects: 100% (1516/1516), done. remote: Compressing objects: 100% (16/16), done. remote: Total 5710 (delta 1508), reused 1500 (delta 1500), pack-reused 4194 Receiving objects: 100% (5710/5710), 1.29 MiB | 13.92 MiB/s, done. Resolving deltas: 100% (3120/3120), done. warning: the following paths have collided (e.g. case-sensitive paths on a case-insensitive filesystem) and only one from the same colliding group is in the working tree: 'plugins/luaJIT' 'plugins/luajit' 'plugins/R' 'plugins/r' § asdf list all erlang R13B03 R13B04 .... la liste est très longue 26.0-rc3 26.0 26.0.1 26.0.2 26.1 26.1.1 26.1.2 26.2 26.2.1 26.2.2 26.2.3 27.0-rc1 §
puis nous installons la dernière version qui n’est pas release-candidate (rc) avec :
- asdf install <name> <version>
- asdf install erlang 26.2.3
- asdf global erlang 26.2.3. ‘global pour tous le PC et par défaut si pas de local défini
- asdf local erlang 26.2.3 ‘ spécifique au projet commande dans le repertoire du projet
Installation d’elixir :
- asdf list all elixir
- asdf plugin add elixir
§ asdf plugin add elixir § asdf list all elixir 0.12.4 0.12.5 0.13.0 0.13.1 0.13.2 0.13.3 0.14.0 0.14.1 0.14.2 0.14.3 0.15.0 0.15.1 1.0.0 1.0.0-otp-17 1.0.0-rc1 1.0.0-rc1-otp-17 ... la liste est très longue 1.16.0 1.16.0-otp-24 1.16.0-otp-25 1.16.0-otp-26 1.16.0-rc.0 1.16.0-rc.0-otp-24 1.16.0-rc.0-otp-25 1.16.0-rc.0-otp-26 1.16.0-rc.1 1.16.0-rc.1-otp-24 1.16.0-rc.1-otp-25 1.16.0-rc.1-otp-26 1.16.1 1.16.1-otp-24 1.16.1-otp-25 1.16.1-otp-26 main main-otp-22 main-otp-23 main-otp-24 main-otp-25 main-otp-26 master master-otp-21 master-otp-22 master-otp-23 master-otp-24 §
- asdf install elixir 1.16.1-otp-26
- asdf global elixir 1.16.1-otp-26
- asdf local elixir 1.16.1-otp-26
§ asdf install elixir 1.16.1-otp-26 ==> Checking whether specified Elixir release exists... ==> Downloading 1.16.1-otp-26 to /Users/bertrandroussel/.asdf/downloads/elixir/1.16.1-otp-26/elixir-precompiled-1.16.1-otp-26.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7029k 100 7029k 0 0 36.9M 0 --:--:-- --:--:-- --:--:-- 37.9M ==> Copying release into place § asdf global elixir 1.16.1-otp-26 § elixir --version Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Elixir 1.16.1 (compiled with Erlang/OTP 26) §
nous pouvons regarder notre installation :
§ asdf current elixir 1.16.1-otp-26 /Users/bertrandroussel/.tool-versions erlang 26.2.3 /Users/bertrandroussel/.tool-versions §
Nous pouvons vérifier par :
- elixir -v
- erl –version ‘halt(). pour quitter
§ elixir -v Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Elixir 1.16.1 (compiled with Erlang/OTP 26) § erl --version Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit] [dtrace] Eshell V14.2.2 (press Ctrl+G to abort, type help(). for help) 1> halt(). §
Configuration de VS Code pour développer sur Mac
Dans VS Code, nous installons les extensions suivantes :
- ElixirLS
- Phoenix Framework
- Elixir Snippets
Et dans le dossier « .vscode » à la racine du projet on créer le fichier tasks.json qui permet d’ajouter dans Terminal/Run Task…/ la liste des tâche que nous définissons :
- Run Focused Test
- Run Current Test File
- Debug Focused Test
tasks.json :
{ "version": "2.0.0", "tasks": [ { "label": "Run Current Test File", "type": "shell", "command": "mix", "args": [ "test", "${relativeFile}" ], "options": { "cwd": "${workspaceRoot}" }, "problemMatcher": [ "$mixCompileError", "$mixCompileWarning", "$mixTestFailure" ], "presentation": { "focus": true } }, { "label": "Run Focused Test", "type": "shell", "command": "mix", "args": [ "test", "${relativeFile}:${lineNumber}" ], "options": { "cwd": "${workspaceRoot}" }, "problemMatcher": [ "$mixCompileError", "$mixCompileWarning", "$mixTestFailure" ], "presentation": { "focus": true } }, { "label": "Debug Focused Test", "type": "shell", "command": [ "iex" ], "args": [ "-S", "mix", "test", "--trace", "${relativeFile}:${lineNumber}" ], "options": { "cwd": "${workspaceRoot}" }, "problemMatcher": [ "$mixCompileError", "$mixCompileWarning", "$mixTestFailure" ], "presentation": { "focus": true } } ] }
Mettre des raccourcis clavier dans VS Code. On ouvre Keybinding.json avec [CMD]+[MAJ]+P. Une liste s’ouvre et on choisi Preference:Open Keyboard Shortcuts (JSON).
// Place your key bindings in this file to override the defaults [ {}, { "key": "cmd+l", "command": "workbench.action.tasks.runTask", "args": "Run Focused Test" }, { "key": "cmd+shift+c", "command": "workbench.action.tasks.runTask", "args": "Format Current File" }, { "key": "cmd+shift+d", "command": "workbench.action.tasks.runTask", "args": "Debug Focused Test" }, { "key": "cmd+shift+f", "command": "workbench.action.tasks.runTask", "args": "Format Current File" }, ]
Installation de la base de données PostgrSQL avec Docker
Nous allons utiliser PostgreSQL dans Docker.
Bibliographie pour développer sur Mac en utilisant Docker
Commençons par vérifier la version actuelle qui est installée :
- docker –version
- docker compose version
$ docker --version Docker version 24.0.2, build cb74dfc $ docker compose version Docker Compose version v2.19.1 $
Pour mettre à jour docker et docker compose, nous ouvrons spotlight avec CMD + Enter et saisissons « Docker ». La version desktop graphique de Docker s’ouvre. Un bouton [update to latest] lance la mise à jour.
$ docker --version Docker version 25.0.3, build 4debf41 $ docker compose version Docker Compose version v2.24.6-desktop.1 $
On peut installer la dernière version de PostgreSQL à travers l’outil de recherche en haut de l’écran.
Pour créer la base de données pour le projet nous ouvrons le terminal dans VS Code. Nous créons à la racine du projet un fichier appelé docker-compose.yml,
Le format yaml est utilisé pour décrire la création de la base de données sous docker :
version: "3.8" services: postgres: image: postgres:latest ports: - '5432:5432' environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres
Pour activer la base de données dans docker, maintenant que nous avons spécifié le fichier docker-compose.yml, nous exécutons la commande suivante dans le dossier /project/chatracs :
- docker compose up -d
$ docker compose up -d [+] Running 15/1 ✔ postgres 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 6.8s [+] Running 1/2 ⠼ Network chatracserver_default Created 0.3s ✔ Container chatracserver-postgres-1 Started 0.3s $
Pour vérifier les docker en fonctionnement la commande docker ps est utilisée :
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cc819bfcde0 postgres:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5432->5432/tcp chatracserver-postgres-1
Comme nous avons perdu Docker Desktop, nous relançons l’installation par brew install –cask docker :
§ brew install --cask docker ==> Downloading https://formulae.brew.sh/api/cask.jws.json ######################################################################### 100.0% ==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/072fb88 ######################################################################### 100.0% ==> Downloading https://desktop.docker.com/mac/main/arm64/139021/Docker.dmg ######################################################################### 100.0% ==> Installing Cask docker ==> Purging files for version 4.28.0,139021 of Cask docker Error: It seems there is already an App at '/Applications/Docker.app'. §
On doit trouver un autre moyen. Nous n’avons pas réussi à trouver comment réinstaller Docker-Desktop sur Mac après ces interventions.
Mettre à jour l’environnement Phoenix pour développer sur Mac
Nous allons vérifier notre environnement :
- mix local.hex ‘mise à jour des outils hex
- mix archive.install hex phx_new ‘mise à jour de phoenix
Nous voyons que l’environnement de phx_new propose de passer à la version 1.7.11 :
§ mix local.hex Found existing entry: /Users/bertrandroussel/.mix/archives/hex-2.0.6 Are you sure you want to replace it with "https://builds.hex.pm/installs/1.16.0/hex-2.0.6.ez"? [Yn] n § mix archive.install hex phx_new Resolving Hex dependencies... Resolution completed in 0.008s New: phx_new 1.7.11 * Getting phx_new (Hex package) All dependencies are up to date Compiling 11 files (.ex) Generated phx_new app Generated archive "phx_new-1.7.11.ez" with MIX_ENV=prod Found existing entry: /Users/bertrandroussel/.mix/archives/phx_new-1.7.7 Are you sure you want to replace it with "phx_new-1.7.11.ez"? [Yn] Y * creating /Users/bertrandroussel/.mix/archives/phx_new-1.7.11 §
Vérifions les options proposées dans cette version :
§ mix phx.new mix phx.new Creates a new Phoenix project. It expects the path of the project as an argument. $ mix phx.new PATH [--module MODULE] [--app APP] A project at the given PATH will be created. The application name and module name will be retrieved from the path, unless --module or --app is given. ## Options • --umbrella - generate an umbrella project, with one application for your domain, and a second application for the web interface. • --app - the name of the OTP application • --module - the name of the base module in the generated skeleton • --database - specify the database adapter for Ecto. One of: • postgres - via https://github.com/elixir-ecto/postgrex • mysql - via https://github.com/elixir-ecto/myxql • mssql - via https://github.com/livehelpnow/tds • sqlite3 - via https://github.com/elixir-sqlite/ecto_sqlite3 Please check the driver docs for more information and requirements. Defaults to "postgres". • --adapter - specify the http adapter. One of: • cowboy - via https://github.com/elixir-plug/plug_cowboy • bandit - via https://github.com/mtrudel/bandit Please check the adapter docs for more information and requirements. Defaults to "bandit". • --no-assets - equivalent to --no-esbuild and --no-tailwind • --no-dashboard - do not include Phoenix.LiveDashboard • --no-ecto - do not generate Ecto files • --no-esbuild - do not include esbuild dependencies and assets. We do not recommend setting this option, unless for API only applications, as doing so requires you to manually add and track JavaScript dependencies • --no-gettext - do not generate gettext files • --no-html - do not generate HTML views • --no-live - comment out LiveView socket setup in assets/js/app.js. Automatically disabled if --no-html is given • --no-mailer - do not generate Swoosh mailer files • --no-tailwind - do not include tailwind dependencies and assets. The generated markup will still include Tailwind CSS classes, those are left-in as reference for the subsequent styling of your layout and components • --binary-id - use binary_id as primary key type in Ecto schemas • --verbose - use verbose output • -v, --version - prints the Phoenix installer version When passing the --no-ecto flag, Phoenix generators such as phx.gen.html, phx.gen.json, phx.gen.live, and phx.gen.context may no longer work as expected as they generate context files that rely on Ecto for the database access. In those cases, you can pass the --no-context flag to generate most of the HTML and JSON files but skip the context, allowing you to fill in the blanks as desired. Similarly, if --no-html is given, the files generated by phx.gen.html will no longer work, as important HTML components will be missing. ## Installation mix phx.new by default prompts you to fetch and install your dependencies. You can enable this behaviour by passing the --install flag or disable it with the --no-install flag. ## Examples $ mix phx.new hello_world Is equivalent to: $ mix phx.new hello_world --module HelloWorld Or without the HTML and JS bits (useful for APIs): $ mix phx.new ~/Workspace/hello_world --no-html --no-assets As an umbrella: $ mix phx.new hello --umbrella Would generate the following directory structure and modules: hello_umbrella/ Hello.Umbrella apps/ hello/ Hello hello_web/ HelloWeb You can read more about umbrella projects using the official Elixir guide (https://hexdocs.pm/elixir/dependencies-and-umbrella-projects.html#umbrella-projects) Location: .mix/archives/phx_new-1.7.11/phx_new-1.7.11/ebin §
Dans nos projets, nous allons maintenant utiliser l’option –binary-id – qui utilise UUID pour les clés primaires (use binary_id as primary key type in Ecto schemas).
Création du projet Phoenix
Nous allons créer notre application Phoenix dans le dossier /project/.
Nous utilisons la commande :
- mix phx.new chatracs –binary-id ‘ a executer dans le répertoire project
$ pwd /Users/bertrandroussel/project $ mix phx.new chatracs --binary-id The directory /Users/bertrandroussel/project/chatracs already exists. Are you sure you want to continue? [Yn] Y * creating chatracs/lib/chatracs/application.ex * creating chatracs/lib/chatracs.ex * creating chatracs/lib/chatracs_web/controllers/error_json.ex * creating chatracs/lib/chatracs_web/endpoint.ex * creating chatracs/lib/chatracs_web/router.ex * creating chatracs/lib/chatracs_web/telemetry.ex * creating chatracs/lib/chatracs_web.ex * creating chatracs/mix.exs * creating chatracs/README.md chatracs/README.md already exists, overwrite? [Yn] Y * creating chatracs/.formatter.exs * creating chatracs/.gitignore * creating chatracs/test/support/conn_case.ex * creating chatracs/test/test_helper.exs * creating chatracs/test/chatracs_web/controllers/error_json_test.exs * creating chatracs/lib/chatracs/repo.ex * creating chatracs/priv/repo/migrations/.formatter.exs * creating chatracs/priv/repo/seeds.exs * creating chatracs/test/support/data_case.ex * creating chatracs/lib/chatracs_web/controllers/error_html.ex * creating chatracs/test/chatracs_web/controllers/error_html_test.exs * creating chatracs/lib/chatracs_web/components/core_components.ex * creating chatracs/lib/chatracs_web/controllers/page_controller.ex * creating chatracs/lib/chatracs_web/controllers/page_html.ex * creating chatracs/lib/chatracs_web/controllers/page_html/home.html.heex * creating chatracs/test/chatracs_web/controllers/page_controller_test.exs * creating chatracs/lib/chatracs_web/components/layouts/root.html.heex * creating chatracs/lib/chatracs_web/components/layouts/app.html.heex * creating chatracs/lib/chatracs_web/components/layouts.ex * creating chatracs/priv/static/images/logo.svg * creating chatracs/lib/chatracs/mailer.ex * creating chatracs/lib/chatracs_web/gettext.ex * creating chatracs/priv/gettext/en/LC_MESSAGES/errors.po * creating chatracs/priv/gettext/errors.pot * creating chatracs/priv/static/robots.txt * creating chatracs/priv/static/favicon.ico * creating chatracs/assets/js/app.js * creating chatracs/assets/vendor/topbar.js * creating chatracs/assets/css/app.css * creating chatracs/assets/tailwind.config.js Fetch and install dependencies? [Yn] Y * running mix deps.get * running mix assets.setup * running mix deps.compile We are almost there! The following steps are missing: $ cd chatracs Then configure your database in config/dev.exs and run: $ mix ecto.create Start your Phoenix app with: $ mix phx.server You can also run your app inside IEx (Interactive Elixir) as: $ iex -S mix phx.server $
Suivons les instructions pour créer la base de données :
- cd chatracs. ‘pour aller dans le repertoire de l’application chatracs
- mix ecto.create ‘pour créer la base ed données du projet
- mix ecto.setup ‘pour créer la base de données et réaliser la migration
$ cd chatracs $ mix ecto.setup Compiling 15 files (.ex) Generated chatracs app The database for Chatracs.Repo has been created 17:36:42.811 [info] Migrations already up $
Vérifions que l’application est correctement installée en lançant le serveur et en consultant la page de l’application :
- iex -S mix phx.server
- mix phx.server
- http://localhost:4000
$ mix phx.server [info] Running ChatracsWeb.Endpoint with Bandit 1.3.0 at 127.0.0.1:4000 (http) [info] Access ChatracsWeb.Endpoint at http://localhost:4000 [debug] Downloading esbuild from https://registry.npmjs.org/@esbuild/darwin-arm64/0.17.11 Rebuilding... Done in 142ms. [watch] build finished, watching for changes... [info] GET / [debug] Processing with ChatracsWeb.PageController.home/2 Parameters: %{} Pipelines: [:browser] [info] Sent 200 in 44ms [info] GET /apple-touch-icon-precomposed.png [debug] ** (Phoenix.Router.NoRouteError) no route found for GET /apple-touch-icon-precomposed.png (ChatracsWeb.Router) (chatracs 0.1.0) deps/phoenix/lib/phoenix/router.ex:541: ChatracsWeb.Router.call/2 (chatracs 0.1.0) lib/chatracs_web/endpoint.ex:1: ChatracsWeb.Endpoint.plug_builder_call/2 (chatracs 0.1.0) deps/plug/lib/plug/debugger.ex:136: ChatracsWeb.Endpoint."call (overridable 3)"/2 (chatracs 0.1.0) lib/chatracs_web/endpoint.ex:1: ChatracsWeb.Endpoint.call/2 (phoenix 1.7.11) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.3.0) lib/bandit/pipeline.ex:103: Bandit.Pipeline.call_plug/2 (bandit 1.3.0) lib/bandit/pipeline.ex:24: Bandit.Pipeline.run/6 (bandit 1.3.0) lib/bandit/http1/handler.ex:33: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.3.0) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.3.0) /Users/bertrandroussel/project/chatracs/deps/thousand_island/lib/thousand_island/handler.ex:411: Bandit.DelegatingHandler.handle_continue/2 (stdlib 5.2) gen_server.erl:1085: :gen_server.try_handle_continue/3 (stdlib 5.2) gen_server.erl:995: :gen_server.loop/7 (stdlib 5.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 [info] GET /apple-touch-icon.png [debug] ** (Phoenix.Router.NoRouteError) no route found for GET /apple-touch-icon.png (ChatracsWeb.Router) (chatracs 0.1.0) deps/phoenix/lib/phoenix/router.ex:541: ChatracsWeb.Router.call/2 (chatracs 0.1.0) lib/chatracs_web/endpoint.ex:1: ChatracsWeb.Endpoint.plug_builder_call/2 (chatracs 0.1.0) deps/plug/lib/plug/debugger.ex:136: ChatracsWeb.Endpoint."call (overridable 3)"/2 (chatracs 0.1.0) lib/chatracs_web/endpoint.ex:1: ChatracsWeb.Endpoint.call/2 (phoenix 1.7.11) lib/phoenix/endpoint/sync_code_reload_plug.ex:22: Phoenix.Endpoint.SyncCodeReloadPlug.do_call/4 (bandit 1.3.0) lib/bandit/pipeline.ex:103: Bandit.Pipeline.call_plug/2 (bandit 1.3.0) lib/bandit/pipeline.ex:24: Bandit.Pipeline.run/6 (bandit 1.3.0) lib/bandit/http1/handler.ex:33: Bandit.HTTP1.Handler.handle_data/3 (bandit 1.3.0) lib/bandit/delegating_handler.ex:18: Bandit.DelegatingHandler.handle_data/3 (bandit 1.3.0) /Users/bertrandroussel/project/chatracs/deps/thousand_island/lib/thousand_island/handler.ex:379: Bandit.DelegatingHandler.handle_info/2 (stdlib 5.2) gen_server.erl:1095: :gen_server.try_handle_info/3 (stdlib 5.2) gen_server.erl:1183: :gen_server.handle_msg/6 (stdlib 5.2) proc_lib.erl:241: :proc_lib.init_p_do_apply/3 ^C BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution ^C% $
Maintenant que l’application fonctionne, nous pouvons l’arrêter avec [CTRL]+ c, et pousser notre code vers github.
Dans VS Ccode nous avons l’icône pour github, et la possibilité de sauver le code :
- commit ‘avec le message pour le commit (‘version initiale de l’application’)
- push. ‘synchronisation vers github
Et nous voyons bien le code dans github.
Nous pouvons créer une première version v-0.0.1 de notre projet avec version initiale créée par Phoenix.
Environnement pour développer sur Mac la partie Client
L’iPhone est notre premier mobile pour la réalisation de ce développement. Nous développons avec Xcode sur le MacBookPro. Les outils sont les suivantes :
- iOS : 17.2
- Swift et SwiftUI
- Xcode 15.2
Nous créons sur github le projet. Puis nous enregistrons dans Xcode le lien vers le répertoire github avec Integrate/clone.
Utilisation de Github pour développer sur Mac
Le projet est sauvegarder dans github. Nous appelons notre projet chatracm pour chatRACMobile. Nous mettons le nom en minuscule sans ‘_’ séparateur pour avoir une cohérence de nommage avec ce que nous faisons en Elixir, bien que ce ne soit pas une obbligation avec swift.
Création d’un token Github pour développer sur Mac
Pour configurer votre compte GitHub dans Xcode, en particulier pour la version 15.2, vous devez suivre ces étapes :
- Générer un token d’accès GitHub : Avant de pouvoir accéder à GitHub depuis Xcode, vous aurez besoin d’un token d’accès. Connectez-vous à votre compte GitHub, allez dans les paramètres de votre compte « Settings », puis dans la section « Developer settings » tout en bas de la liste. Sélectionnez « Personal access tokens » et cliquez sur « Generate new token ». Donnez un nom à votre token, définissez une date d’expiration et sélectionnez les scopes nécessaires pour les opérations que vous souhaitez effectuer depuis Xcode. Les scopes requis incluent généralement
repo
,admin:public_key
,write:discussion
, etuser
. Une fois généré, assurez-vous de copier votre token, car vous ne pourrez pas le voir à nouveau3. - Configurer Xcode avec GitHub : Ouvrez Xcode et allez dans les préférences (Xcode > Preferences ou utilisez le raccourci
Cmd + ,
). Sélectionnez l’onglet « Accounts », puis cliquez sur le bouton « + » en bas à gauche pour ajouter un nouveau compte. Choisissez « GitHub » dans la liste des fournisseurs de services. Au lieu de saisir votre nom d’utilisateur et mot de passe GitHub, utilisez votre nom d’utilisateur GitHub et le token d’accès comme mot de passe3. - Utiliser GitHub dans Xcode : Une fois votre compte GitHub configuré dans Xcode, vous pouvez cloner des dépôts, pousser des modifications, et effectuer d’autres opérations Git directement depuis l’interface de Xcode. Pour cloner un dépôt, allez dans « Source Control » > « Clone » et sélectionnez le dépôt souhaité parmi ceux disponibles sur votre compte GitHub3.
Ces étapes vous permettront de configurer et d’utiliser votre compte GitHub directement dans Xcode 15.2, facilitant la gestion de vos projets et le partage de votre code.
Création du projet dans Github et Xcode
Pour configurer GitHub avec Xcode, suivez ces étapes générales :
- Créez un dépôt sur GitHub : Commencez par créer un nouveau dépôt sur GitHub si vous n’en avez pas déjà un pour votre projet.
- Ouvrez votre projet dans Xcode : Lancez Xcode et ouvrez le projet que vous souhaitez versionner avec Git et GitHub.
- Initialisez un dépôt Git : Si votre projet n’est pas déjà un dépôt Git, vous pouvez l’initialiser en sélectionnant
Source Control
>Create Git Repositories
dans Xcode1. - Ajoutez le dépôt GitHub comme remote : Ouvrez le Terminal et naviguez jusqu’au dossier de votre projet. Utilisez la commande
git remote add origin URL_DU_DEPOT_GITHUB
pour ajouter votre dépôt GitHub comme dépôt distant. - Poussez votre projet sur GitHub : Toujours dans le Terminal, utilisez les commandes
git add .
pour ajouter tous les fichiers à votre dépôt,git commit -m "Initial commit"
pour effectuer votre premier commit, etgit push -u origin master
pour pousser votre projet sur GitHub. - Gestion des identifiants : Pour que Git mémorise vos identifiants GitHub, vous pouvez configurer l’assistant de connexion
osxkeychain
avec la commandegit config --global credential.helper osxkeychain
6. - Utilisez Xcode pour les opérations Git : Une fois que votre dépôt est configuré, vous pouvez utiliser les outils de contrôle de source intégrés dans Xcode pour effectuer des commits, des pushs, des pulls et d’autres opérations Git135.
Ces étapes vous permettront de connecter votre projet Xcode à un dépôt GitHub, vous permettant ainsi de gérer le versionnage de votre code directement depuis l’IDE d’Apple. Gardez à l’esprit que les détails exacts peuvent varier en fonction de la version de Xcode que vous utilisez et de la configuration spécifique de votre projet.
Pousser un projet existant dans Github la solution pour développer sur Mac avec Xcode
Nous avons déjà créé le projet dans Xcode, nous voulons seulement sauvegarder le projet dans Github. Cela suppose de créer un projet vide dans Github.
Pour pousser un projet existant dans Xcode sur GitHub lorsque le projet n’existe pas encore sur GitHub, vous pouvez suivre ces étapes en utilisant l’interface graphique de Xcode. Cette méthode est pratique et ne nécessite pas l’utilisation de la ligne de commande.
Étapes pour pousser un projet Xcode sur GitHub
- Ouvrez votre projet dans Xcode : Lancez Xcode et ouvrez le projet que vous souhaitez pousser sur GitHub.
- Activez la gestion de version pour votre projet (si ce n’est pas déjà fait) :
- Allez dans le menu
Source Control
et sélectionnezEnable Source Control
. Cela initialisera un dépôt Git pour votre projet si ce n’est pas déjà fait.
- Allez dans le menu
- Créez un nouveau dépôt sur GitHub :
- Connectez-vous à votre compte GitHub dans un navigateur web et créez un nouveau dépôt. Ne cochez pas l’option pour initialiser le dépôt avec un README, .gitignore, ou une licence puisque votre projet Xcode est déjà un dépôt Git.
- Configurez votre compte GitHub dans Xcode (si ce n’est pas déjà fait) :
- Dans Xcode, allez dans
Xcode
>Preferences
>Accounts
. - Cliquez sur le bouton
+
en bas à gauche et sélectionnezGitHub
. Connectez-vous avec votre nom d’utilisateur GitHub et le token d’accès personnel comme mot de passe.
- Dans Xcode, allez dans
- Ajoutez le dépôt GitHub comme remote à votre projet :
- Dans Xcode, avec votre projet ouvert, allez dans le menu
Source Control
et sélectionnezAdd Remote...
. - Entrez l’URL de votre dépôt GitHub que vous venez de créer et donnez-lui un nom.
- Dans Xcode, avec votre projet ouvert, allez dans le menu
- Poussez votre projet sur GitHub :
- Toujours dans le menu
Source Control
, sélectionnezPush...
. - Si demandé, sélectionnez la branche que vous souhaitez pousser (généralement
main
oumaster
) et assurez-vous que le remote correct (votre dépôt GitHub) est sélectionné. - Cliquez sur
Push
.
- Toujours dans le menu
- Vérifiez sur GitHub :
- Retournez sur la page de votre dépôt GitHub dans votre navigateur web pour vérifier que votre code a bien été poussé.
Cette méthode vous permet de pousser votre projet Xcode sur GitHub directement depuis l’interface graphique de Xcode, rendant le processus simple et intégré à votre environnement de développement.
Utiliser la création de release de github
Etape pour créer une nouvelle release sur Github
- Accédez à votre dépôt sur GitHub : Ouvrez le dépôt pour lequel vous souhaitez créer une release.
- Cliquez sur « Releases » : Dans la barre de navigation supérieure du dépôt, vous trouverez l’onglet « Releases » ou « Tags ». Cliquez dessus.
- Créez une nouvelle release : Cliquez sur le bouton « Create a new Release » qui se trouve généralement à droite de la page des releases.
- Configurez votre release :
- Tag version : Entrez le nom du tag pour votre release. Si le tag n’existe pas déjà, GitHub vous proposera de le créer à partir de la branche que vous spécifiez ensuite. Les tags sont généralement des versions sémantiques, comme
v1.0.0
. - Target : Sélectionnez la branche ou le tag à partir duquel vous souhaitez créer la release. Par défaut, cela peut être votre branche principale (par exemple,
main
oumaster
). - Release title : Entrez un titre pour votre release. Vous pouvez utiliser le même nom que le tag pour la cohérence.
- Description : Fournissez une description de ce qui est inclus dans la release. C’est une bonne pratique d’inclure des notes de mise à jour, des corrections de bugs, des améliorations ou d’autres informations pertinentes pour les utilisateurs de la release.
- Tag version : Entrez le nom du tag pour votre release. Si le tag n’existe pas déjà, GitHub vous proposera de le créer à partir de la branche que vous spécifiez ensuite. Les tags sont généralement des versions sémantiques, comme
- Ajoutez des binaires ou des assets : Vous pouvez glisser-déposer des fichiers binaires, des exécutables, des archives ou d’autres assets que vous souhaitez inclure avec la release. Cela peut être utile pour distribuer des builds compilés, des documents ou d’autres ressources nécessaires.
- Choisissez la visibilité de la release :
- Pre-release : Marquez la release comme une pré-release si elle n’est pas prête pour la production.
- Release : Laissez cette option décochée si la release est prête à être utilisée.
- Publiez la release : Une fois que vous avez configuré tous les détails, cliquez sur « Publish release » pour rendre votre release disponible sur GitHub.
En suivant ces étapes, vous créez une release officielle pour votre projet, qui sera accessible à tous les utilisateurs de votre dépôt GitHub. Les releases sont un excellent moyen de distribuer des versions stables de votre logiciel et de fournir des informations importantes aux utilisateurs sur chaque version.
Trouver les releases dans Github
Pour retrouver vos releases dans GitHub, suivez ces étapes simples :
- Accédez à la page principale de votre dépôt sur GitHub : Ouvrez votre navigateur web et naviguez jusqu’à la page de votre dépôt sur GitHub.
- Cliquez sur l’onglet « Releases » ou « Tags » : À droite de la liste des fichiers de votre dépôt, vous trouverez l’onglet « Releases » ou juste à côté, l’onglet « Tags ». Cliquez sur « Releases » pour voir la liste des releases publiées pour votre dépôt1.
- Visualisez vos releases : Sur la page des releases, vous verrez une liste de toutes les releases que vous avez créées pour ce dépôt. Chaque release inclut des informations telles que le nom de la release, la description, les assets téléchargeables (si vous en avez ajouté), et la date de publication1.
Si vous souhaitez modifier une release existante, vous pouvez le faire en cliquant sur le bouton « Edit » à côté de la release que vous souhaitez modifier. Vous pourrez alors changer le titre, la description, ajouter ou supprimer des assets, et même marquer la release comme pré-release si nécessaire1.Pour supprimer une release, vous devez d’abord cliquer sur la release que vous souhaitez supprimer pour ouvrir sa page de détails. Ensuite, cherchez l’option pour supprimer la release, qui se trouve généralement sous les détails de la release ou dans un menu d’options supplémentaires1.Ces étapes vous permettent de gérer efficacement les releases de votre projet sur GitHub, en vous donnant la possibilité de publier de nouvelles versions, de les modifier ou de les supprimer selon vos besoins.
Trouver le chemin vers le projet dans Xcode
Pour trouver le chemin vers votre projet depuis Xcode, vous pouvez utiliser la fonctionnalité « Show in Finder » qui vous permet de localiser rapidement le dossier de votre projet sur votre système de fichiers. Voici comment procéder :
- Ouvrez votre projet dans Xcode.
- Sélectionnez le projet dans le navigateur de projet : Cliquez sur le nom de votre projet en haut de la barre latérale « Project Navigator » (l’icône ressemble à un petit dossier bleu).
- Accédez aux informations du projet : Avec le projet sélectionné, regardez dans le panneau d’inspecteur sur la droite (si l’inspecteur n’est pas visible, vous pouvez l’activer en cliquant sur l’icône « View » dans la barre d’outils supérieure et en sélectionnant « Show Inspectors »).
- Utilisez le File Inspector : Dans le panneau d’inspecteur, assurez-vous que l’onglet « File Inspector » est sélectionné (l’icône ressemble à un petit tag).
- Trouvez le chemin du projet : Sous la section « Identity and Type » dans le File Inspector, vous verrez le chemin complet du dossier de votre projet dans le champ « Full Path ». Vous pouvez cliquer sur le petit icône à droite du chemin pour révéler le dossier du projet dans le Finder3.
Si vous avez besoin de copier le chemin, vous pouvez faire un clic droit sur le chemin dans le File Inspector et choisir « Copy » pour copier le chemin complet dans le presse-papiers.En suivant ces étapes, vous devriez pouvoir localiser et accéder au dossier de votre projet Xcode sur votre Mac sans avoir à quitter Xcode.
Mise en oeuvre du projet initial pour développer sur Mac
Nous ne pouvons pas créer un dossier dans github avec le projet. Xcode ne fonctionne pas avec des projets vide. Xcode se ferme. Nous devons détruire le projet sur github et recommencer. Pour supprimer le projet nous réalisons les actions ci-dessus.
Suppression d’un projet sur github
- Accédez à votre projet sur GitHub.
- En haut à droite, cliquez sur le bouton pour ouvrir le menu.
- Dans le menu, sélectionnez Paramètres pour accéder aux paramètres du projet.
- Dans la section Zone de danger, à côté de Supprimer un projet, cliquez sur Supprimer ce projet.
- Lisez les avertissements, puis tapez le nom de votre projet dans la zone de texte pour confirmer.
- Cliquez sur Je comprends les conséquences, supprimer ce projet pour finaliser la suppression1.
Créer le projet sur MacBookPro en premier
Nous créons un projet APP sur Xcode. Le code est généré avec SwiftUI et une page ContentView est créée.
Nous devons passer en mode terminal pour configurer le chemin vers github. Il n’y a pas d’option dans le menu Integrate pour le faire.
Verifier vers quel dépôt distant le projet est relié
Pour développer sur Mac en liason avec github, nous devon savoir sur quel dépôt distant le dépôt Git local est relié. La commande git remote -v
dans le terminal affiche les URLs des dépôts distants configurés pour la récupération (fetch) et la poussée (push) des changements vers github. Voici comment procéder :
- Ouvrez le Terminal sur votre ordinateur.
- Naviguez jusqu’au répertoire de votre projet local en utilisant la commande
cd chemin/vers/votre/projet
. - Tapez la commande suivante : «
git remote -v
« - Vous verrez une sortie similaire à ceci :
origin https://github.com/username/repository.git (fetch)
origin https://github.com/username/repository.git (push)
Dans cet exemple, origin
est le nom par défaut donné au dépôt distant à partir duquel le projet a été cloné ou auquel il a été ajouté manuellement. L’URL qui suit est l’adresse du dépôt distant sur GitHub. Si vous avez configuré plusieurs dépôts distants, ils seront tous listés ici135.
Vérification qu’on n’a pas déjà un depot distant
bertrandroussel@mbp-de-bertrand chatrac.xcodeproj % git config --local -l core.bare=false core.repositoryformatversion=0 core.filemode=true core.ignorecase=true core.precomposeunicode=true core.logallrefupdates=true bertrandroussel@mbp-de-bertrand chatrac.xcodeproj %
La sortie de la commande git config --local -l
que vous avez partagée montre la configuration locale de votre dépôt Git. Cependant, les informations fournies ne comprennent pas de détails sur les dépôts distants configurés. Les paramètres listés sont des configurations internes de Git qui définissent le comportement de votre dépôt local. Voici ce que signifient ces configurations :
core.bare=false
: Indique que votre dépôt n’est pas un dépôt nu (bare). Un dépôt nu est un dépôt Git qui ne contient pas de copie de travail des fichiers du projet. Il est généralement utilisé sur des serveurs.core.repositoryformatversion=0
: C’est la version du format du dépôt Git. La version 0 est le format standard.core.filemode=true
: Git surveillera les changements de mode des fichiers (par exemple, les permissions d’exécution).core.ignorecase=true
: Git ignorera la casse dans les noms de fichiers, ce qui est important sur des systèmes de fichiers qui ne font pas de distinction entre les majuscules et les minuscules, comme macOS.core.precomposeunicode=true
: Sur macOS, cela aide Git à gérer correctement les caractères Unicode en décomposant les caractères en leur forme la plus simple.core.logallrefupdates=true
: Git consignera toutes les mises à jour des références (branches, tags, etc.) dans le fichier de log des références.
Pour trouver les informations sur les dépôts distants, vous devriez chercher des entrées qui commencent par remote.
dans la configuration. Puisque ces informations ne sont pas présentes dans la sortie que vous avez fournie, cela confirme qu’aucun dépôt distant n’est configuré pour ce dépôt Git local.Pour ajouter un dépôt distant, vous pouvez utiliser la commande suivante dans le terminal :
git remote add origin URL_DU_DEPOT_DISTANT
Lorsque nous saisissons git remote -v, il n’y a pas de retour.
Mise en place de la connexion Xcode vers Github pour développer sur Mac
On crée un repository sur github vide de tout fichier. Dans github on récupere l’adresse du projet créé.
Pour ajouter le dépôt distant dans le dossier du projet sur MacBookPro :
git remote add origin https://github.com/copier-coder/chatracm.git
On vérifie avec
git remote -v
Le résultat suivant :
bertrandroussel@mbp-de-bertrand chatracm % ls chatracm chatracmTests chatracm.xcodeproj chatracmUITests bertrandroussel@mbp-de-bertrand chatracm % git config --local -l core.bare=false core.repositoryformatversion=0 core.filemode=true core.ignorecase=true core.precomposeunicode=true core.logallrefupdates=true bertrandroussel@mbp-de-bertrand chatracm % git remote add origin https://github.com/copier-coder/chatracm.git bertrandroussel@mbp-de-bertrand chatracm % git remote -v origin https://github.com/copier-coder/chatracm.git (fetch) origin https://github.com/copier-coder/chatracm.git (push) bertrandroussel@mbp-de-bertrand chatracm %
Utiliser les commande Xcode pour git
Nous pouvons maintenant utiliser les commandes Integrate de Xcode.
Étapes pour créer une version 0.0.1 dans GitHub
- Committez toutes les modifications en attente :
- Assurez-vous que toutes les modifications sont commitées et poussées sur la branche principale de votre dépôt GitHub.
- Taggez votre commit :
- Dans le terminal, naviguez jusqu’au répertoire de votre projet.
- Utilisez la commande suivante pour créer un tag annoté :
git tag -a v0.0.1 -m "Version initiale 0.0.1"
-
- Cette commande crée un tag local nommé
v0.0.1
avec un message « Version initiale 0.0.1 ».
- Cette commande crée un tag local nommé
- Poussez le tag sur GitHub :
- Poussez le tag sur votre dépôt distant en utilisant la commande :
git push origin v0.0.1
-
- Cela rendra votre tag disponible sur GitHub.
- Créez une release sur GitHub :
- Allez sur la page de votre dépôt GitHub.
- Cliquez sur l’onglet « Releases » ou « Tags ».
- À côté du tag que vous venez de pousser, cliquez sur « Create release » ou « Draft a new release ».
- Remplissez les détails de la release, tels que le titre et la description. Vous pouvez utiliser le même message que celui de votre tag ou fournir des informations supplémentaires sur la release.
- Publiez la release.
En suivant ces étapes, vous aurez créé une version 0.0.1 de votre projet sur GitHub, qui pourra être téléchargée et utilisée par d’autres. Les releases sont basées sur les tags Git et permettent de fournir des itérations logicielles déployables que vous pouvez empaqueter et rendre disponibles pour un public plus large 4.Pour plus d’informations sur les workflows Git et GitHub, vous pouvez consulter des ressources telles que la documentation officielle de GitHub 3 , des tutoriels en ligne 5, ou des vidéos éducatives 8 . Ces ressources peuvent vous aider à mieux comprendre comment utiliser Git et GitHub pour gérer les versions de votre projet.
Conclusion, les outils sont en place pour développer sur Mac
Pour développer sur Mac une application client/serveur, nous avons mis en place notre environnement de développement. La réalisation du client sur iPhone sera créé avec Swift et le Serveur SAAS sera une application Elixir/Phoenix.