1. Indholdsfortegnelse
2. Introduktion
2.1. Formål
Formålet med dette dokument, er at beskrive systemkrav og opsætning for udviklere på projektet. Desuden beskrive en række værktøjer, der hjælper med udviklingen, som er anvendt i projektet.
2.2. Sammenhæng med øvrige dokumenter
-
3. Udvikling
3.1. Krav for at bygge projektet
Xcode, min version 14.6
Swiftlint, min. version 0.41.0.: https://github.com/realm/SwiftLint
3.2. Headers
Da alle filer skal indeholde headers, jvf. NSP så skal følgende header indsættes øverst i alle filer i xcode projektet:
// The MIT License
//
// Original work sponsored and donated by The Danish Health Data Authority (http://www.sundhedsdatastyrelsen.dk)
//
// Copyright (C) 2020 The Danish Health Data Authority (http://www.sundhedsdatastyrelsen.dk)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
3.3. Tools
Projektet indeholder en række tools, der anvendes under projektudvikling. De ligger alle i Tools mappen i repositoryet.
3.3.1. Generering af Localization tools
Alle strings er oprettet i et Localizely projekt (Claus Leth Gregersen er Owner på projektet): https://app.localizely.com/projects/3278b0a4-b1a5-4277-ba70-3159fb9dac9b/main/dashboard
Localizely konfigurationen er defineret i localizely-cli.json filen i roden af repositoryet og kan justeres til Localizely branches osv.
Med følgende CLI kan man opdatere Localizable.strings så den svarer til seneste opdateringer i Localizely:
./localizely
Hvis macOS afviser, at køre CLI applikationen, kan du gå til System Preferences -> Security & Privacy og trykke "Open Anyway". CLI'en er et hjemmelavet Rust værktøj, der anvendes indtil Localizely kommer med deres eget officielle CLI (skulle være klar i løbet af august 2021). Det er altså ikke signeret korrekt, hvorfor macOS advarer imod programmet.
Desuden anvendes R.swift til at tilgå strings via et typealias: Localizable
3.3.2. Modeller
Modeller bygges manuelt ud fra swagger dokumentationen. Dokumentationen finder du her: https://api.gravidmappen-dev.tcs.trifork.dev/gm-bff/swagger-ui/index.html#/
3.3.3. Sortering af Xcode projekt fil
For at undgå merge konflikter i projekt-filen, anbefales det at man - inden oprettelse af PR - anvender et script, der sorterer projekt-filen alfabetisk:
./Tools/sort-xcode.sh
4. Konfiguration
Projektet anvender Xocde Build Configurations til at styre forskellige build konfigurationer med.
Der eksisterer følgende konfigurationer:
enum BuildConfiguration: String {
case debug = "Debug"
case internalTest = "InternalTest"
case clientTest = "ClientTest"
case clientTestMockMitID = "ClientTestMockMitID"
case release = "Release"
}
De forskellige konfigurationer udløser forskelligt setup af komponenter i app'en. Det ses i den statiske Configuration.build(for buildConfiguration: BuildConfiguration) -> Configuration metode.
5. Distribution
5.1. Distribution af test apps som IPA via Azure
Distribuering kræver at man opfylder kravene for at bygge projektet og at man har fastlane min. version 2.176.0: https://fastlane.tools/
Projektet distribueres som IPA via azure, hvor der er oprettet flere pipelines, hhv. "MinGraviditet iOS Appstore Release", "MinGraviditet iOS Test Release", "MinGraviditet iOS Test Mock MitId Release" og "MinGraviditet iOS Dev Release"
Se afsnit 5.3 ang. versionering af app'en.
5.2. App Store
Man skal være i besiddelse af Sundhedsdatastyrelsens Apple Distribution certifikat for at signere app'en til App Store. Dette certifikat må aldrig være den del af det public Git respository. Derudover skal man have adgang til App Store Connect kontoen.
For at sikre ens distribuering af apps med forskellige konfigurationer, anvendes fastlane med følgende lane: app_store. Denne lane anvender FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD som environment variabel for at forbinde til App Store Connect. Hvis dette ikke angives spørger den efter login information i stedet.
Se afsnit 5.3 ang. versionering af app'en.
5.3. Versionering
App'en kører efter en almindelig major.minor.patch versionering, som styres manuelt i xcodeproj-filen. Build nummeret opdateres automatisk med antallet git-commits, således at det altid ændrer sig, når man har lavet ændringer i koden.
Build nummeret opdateres ved at køre "bundle exec fastlane bump_release_version" lanen i fastlane, hvor den også tagger i git med den respektive version. Formatet er: release/VERSION_BUILDNUMMER (release/0.0.1_1000)
6. Branches
Der arbejdes efter en git-flow tankegang, hvor master-branchen indeholder det nyeste, der er godkendt af QA-teamet.
Der udvikles løbendes på develop-branchen via feature branches med pull requests til develop-branchen.
Når der skal sendes ændringer til QA review, merges developer til qa-branchen, hvorefter der oprettes pull request fra qa til master.