Μεταβλητές περιβάλλοντος: τι είναι, χρήση και ρύθμιση σε έργα για κινητά

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-31 Χρόνος ανάγνωσης: 8 λεπ

Οι μεταβλητές περιβάλλοντος είναι δυναμικές τιμές που μεταβιβάζονται στην εφαρμογή κατά την εκκίνηση για τη διαμόρφωση της συμπεριφοράς χωρίς αλλαγή του κώδικα. Επιτρέπουν τον διαχωρισμό των ρυθμίσεων ανάπτυξης, δοκιμών και παραγωγής. Σύμφωνα με Twelve-Factor App, 2025, οι ρυθμίσεις πρέπει να αποθηκεύονται σε μεταβλητές περιβάλλοντος και όχι στον κώδικα. Οι μεταβλητές περιβάλλοντος εξασφαλίζουν την ασφαλή διαχείριση των API κλειδιών, του URL του backend και των σημαιών λειτουργικότητας.

Βασικά σημεία

  • Οι μεταβλητές περιβάλλοντος διαχωρίζουν τις ρυθμίσεις της εφαρμογής από τον πηγαίο κώδικα για διαφορετικά περιβάλλοντα εκτέλεσης
  • Τα αρχεία .env αποθηκεύουν μεταβλητές σε μορφή KEY=VALUE και εξαιρούνται από το αποθετήριο μέσω του .gitignore
  • Το iOS χρησιμοποιεί xcconfig και Build Settings για τη μεταβίβαση μεταβλητών στο στάδιο μεταγλώττισης
  • Το Android χρησιμοποιεί BuildConfig και gradle.properties για τη δημιουργία πεδίων ρυθμίσεων
  • Ασφάλεια: τα κλειδιά και τα token πρέπει να φορτώνονται μέσω CI/CD και όχι να αποθηκεύονται στον κώδικα ή στο αποθετήριο

Τι είναι οι μεταβλητές περιβάλλοντος

Οι μεταβλητές περιβάλλοντος είναι ένα ζεύγος κλειδιού-τιμής, διαθέσιμο στη διεργασία της εφαρμογής μέσω του API του λειτουργικού συστήματος. Μεταβιβάζονται στη διεργασία κατά τη δημιουργία της και υπάρχουν μόνο κατά τη διάρκεια της εκτέλεσής της. Σε αντίθεση με τις παραμέτρους ρυθμίσεων που είναι ενσωματωμένες στον πηγαίο κώδικα, οι μεταβλητές περιβάλλοντος δεν απαιτούν εκ νέου μεταγλώττιση για την αλλαγή των τιμών. Αυτή είναι μια θεμελιώδης αρχή του Twelve-Factor App, η οποία εξασφαλίζει σαφή διαχωρισμό μεταξύ κώδικα και ρυθμίσεων.

Στην ανάπτυξη εφαρμογών για κινητά, οι μεταβλητές περιβάλλοντος επιλύουν το πρόβλημα των διαφορετικών ρυθμίσεων για τα περιβάλλοντα: ο προγραμματιστής χρησιμοποιεί τον τοπικό διακομιστή, ο δοκιμαστής το staging, οι χρήστες το production. Αντί να αποθηκεύονται τρία URL backend στον κώδικα με υπό συνθήκη εντολές if-else, ο προγραμματιστής μεταβιβάζει ένα URL μέσω μεταβλητής περιβάλλοντος στο στάδιο κατασκευής. Αυτό απλοποιεί τον κώδικα και αποκλείει τον κίνδυνο τυχαίας χρήσης του διακομιστή παραγωγής στο περιβάλλον δοκιμών.

Το κύριο πλεονέκτημα είναι η ασφάλεια: τα ευαίσθητα δεδομένα δεν καταλήγουν στο αποθετήριο κώδικα. Τα API κλειδιά, τα μυστικά του Firebase, τα token πρόσβασης στο backend και τα πιστοποιητικά φορτώνονται μέσω CI/CD απευθείας στο περιβάλλον κατασκευής. Αν ένας εισβολέας αποκτήσει πρόσβαση στο αποθετήριο κώδικα, δεν θα βρει μυστικά εκεί, καθώς αυτά αποθηκεύονται σε προστατευμένες αποθήκες του συστήματος CI και μεταβιβάζονται μόνο στο στάδιο κατασκευής του δυαδικού αρχείου.

Γιατί χρειάζονται οι μεταβλητές περιβάλλοντος στην ανάπτυξη εφαρμογών για κινητά

Τα έργα για κινητά έχουν τουλάχιστον τρία περιβάλλοντα: development, staging και production. Κάθε περιβάλλον απαιτεί το δικό του σύνολο ρυθμίσεων: URL διακομιστή, όνομα πακέτου, σχήμα υπογραφής και πιστοποιητικά push ειδοποιήσεων. Χωρίς μεταβλητές περιβάλλοντος, ο προγραμματιστής πρέπει να αλλάζει χειροκίνητα τη ρύθμιση πριν από κάθε κατασκευή, κάτι που οδηγεί σε σφάλματα: ένα ξεχασμένο κλειδί παραγωγής σε μια δοκιμαστική κατασκευή μπορεί να προκαλέσει την αποστολή ειδοποιήσεων σε πραγματικούς χρήστες ή την κατανάλωση πληρωμένου API.

Διαχωρισμός περιβαλλόντων

Οι μεταβλητές περιβάλλοντος επιτρέπουν την εναλλαγή του backend χωρίς αλλαγή κώδικα: αρκεί να αντικατασταθεί η τιμή στη μεταβλητή API_BASE_URL. Οι σημαίες λειτουργικότητας (feature flags) διαχειρίζονται μέσω μεταβλητών τύπου FEATURE_CHAT_ENABLED=true, επιτρέποντας την ενεργοποίηση νέων δυνατοτήτων στο staging χωρίς να επηρεάζεται το production. Για κάθε περιβάλλον δημιουργείται ένα δικό του αρχείο .env, το οποίο φορτώνεται στο στάδιο κατασκευής.

dart
class AppConfig {
  static final String apiBaseUrl =
    const String.fromEnvironment('API_BASE_URL',
      defaultValue: 'http://localhost:8080');
}

Ασφάλεια κλειδιών

Τα σκληρά κωδικοποιημένα κλειδιά είναι μια συνηθισμένη ευπάθεια των εφαρμογών για κινητά. Ένας εισβολέας αποσυμπιέζει το APK ή το IPA με εργαλεία όπως το jadx ή το Hopper και εξάγει τα μυστικά από το δυαδικό αρχείο. Ακόμα και η συσκότιση δεν προστατεύει τα string literals — βρίσκονται εύκολα στον κώδικα μετά την αποσυμπίεση. Οι μεταβλητές περιβάλλοντος λύνουν αυτό το πρόβλημα μεταβιβάζοντας τα κλειδιά στο στάδιο κατασκευής μέσω CI/CD, όπου καλύπτονται στα αρχεία καταγραφής.

kotlin
object Config {
    val apiKey: String =
        System.getenv("API_KEY") ?: throw
            IllegalStateException("API_KEY not set")
}

Ενσωμάτωση CI/CD

Οι μεταβλητές περιβάλλοντος ενσωματώνονται στα pipelines κατασκευής: τα GitHub Actions, GitLab CI, Bitrise και CircleCI υποστηρίζουν μυστικές μεταβλητές που δεν εμφανίζονται στα αρχεία καταγραφής. Στο στάδιο κατασκευής, το CI αντικαθιστά τις κατάλληλες τιμές ανάλογα με τον κλάδο ή την ετικέτα: για τον κλάδο develop χρησιμοποιείται το staging, για την ετικέτα v* — το production. Αυτό αυτοματοποιεί τη διαδικασία και αποκλείει τον ανθρώπινο παράγοντα, διασφαλίζοντας ότι κάθε κατασκευή λαμβάνει το σωστό σύνολο ρυθμίσεων.

Αρχεία .env και βιβλιοθήκες διαχείρισης

Το αρχείο .env είναι ο τυπικός τρόπος αποθήκευσης μεταβλητών περιβάλλοντος σε μορφή KEY=VALUE. Δεν περιλαμβάνεται στο αποθετήριο, αντίθετα στο αποθετήριο προστίθεται το .env.example με το πρότυπο όλων των μεταβλητών και κενές τιμές. Κάθε προγραμματιστής δημιουργεί το δικό του αρχείο .env με τοπικές ρυθμίσεις, χωρίς να επηρεάζει τη διαμόρφωση των άλλων μελών της ομάδας. Για διαφορετικά περιβάλλοντα χρησιμοποιούνται ξεχωριστά αρχεία: .env.dev, .env.stage, .env.prod.

bash
# .env.example — πρότυπο για προγραμματιστές
API_BASE_URL=http://localhost:8080
FEATURE_CHAT_ENABLED=true
SENTRY_DSN=

Για έργα για κινητά υπάρχουν εξειδικευμένες βιβλιοθήκες για την εργασία με αρχεία .env:

  • flutter_dotenv (Flutter) — φορτώνει μεταβλητές από το .env στο runtime μέσω του dotenv.load()
  • BuildConfig (Android) — δημιουργεί τυποποιημένα πεδία από τις τιμές του build.gradle
  • xcconfig (iOS) — συνδέει αρχεία ρυθμίσεων με διαφορετικά σχήματα κατασκευής του Xcode
  • react-native-config (React Native) — διαχείριση μεταβλητών μέσω αρχείων .env

Οι ρυθμίσεις διακλάδωσης στο CI/CD επιτρέπουν την αντικατάσταση διαφορετικών αρχείων .env: .env.dev για διακομιστές δοκιμών, .env.stage για την προ-κυκλοφορία και .env.prod για τη δημοσίευση στα καταστήματα εφαρμογών. Τα αρχεία με μυστικά φορτώνονται από ασφαλή αποθήκη (Vault, AWS Secrets Manager) και δεν αποθηκεύονται στο αποθετήριο. Αυτό διασφαλίζει ότι ακόμα και σε περίπτωση παραβίασης του συστήματος ελέγχου εκδόσεων, τα μυστικά παραμένουν προστατευμένα.

Μεταβλητές περιβάλλοντος σε έργα iOS

Το οικοσύστημα iOS χρησιμοποιεί αρχεία xcconfig για τη διαχείριση μεταβλητών σε επίπεδο κατασκευής. Συνδέονται με τα σχήματα του Xcode και επιτρέπουν την αντικατάσταση τιμών για τις διαμορφώσεις Debug και Release. Τα αρχεία xcconfig υποστηρίζουν κληρονομικότητα: μπορείτε να δημιουργήσετε ένα βασικό αρχείο με κοινές ρυθμίσεις και ειδικά αρχεία για κάθε περιβάλλον.

Ρύθμιση αρχείων xcconfig

Τα αρχεία xcconfig αποθηκεύουν μεταβλητές σε μορφή KEY = VALUE και συνδέονται με το σχήμα κατασκευής στο Xcode μέσω των ρυθμίσεων Configuration. Οι μεταβλητές από το xcconfig είναι διαθέσιμες στο Info.plist μέσω της σύνταξης $(VARIABLE_NAME), επιτρέποντας τη χρήση διαφορετικών αναγνωριστικών bundle και ονομάτων εφαρμογής για διαφορετικά σχήματα. Για ταχύτερη αναγνώριση του περιβάλλοντος, στο όνομα της εφαρμογής προστίθεται το επίθημα Dev ή Staging.

bash
# Config/Dev.xcconfig — διαμόρφωση ανάπτυξης
API_BASE_URL = http://localhost:3000
BUNDLE_ID_SUFFIX = .dev
APP_DISPLAY_NAME = MyApp Dev

Κώδικας Swift για ανάγνωση μεταβλητών

Για πρόσβαση στις μεταβλητές στο runtime στο iOS χρησιμοποιείται το αρχείο Configuration.swift, το οποίο διαβάζει τιμές από το Info.plist μέσω του Bundle.main.object(forInfoDictionaryKey:). Αυτή η προσέγγιση διασφαλίζει ότι οι μεταβλητές ορίζονται στο στάδιο κατασκευής και είναι διαθέσιμες στην εφαρμογή αμέσως μετά την εκκίνηση. Οι τιμές διαβάζονται μία φορά κατά την αρχικοποίηση της μονάδας και αποθηκεύονται σε κρυφή μνήμη για γρήγορη πρόσβαση κατά τη διάρκεια του κύκλου ζωής της εφαρμογής.

swift
enum AppEnvironment {
    static var apiBaseURL: URL {
        guard let urlString = Bundle.main
            .object(forInfoDictionaryKey: "API_BASE_URL"),
              let url = URL(string: urlString as! String)
        else { fatalError("API_BASE_URL is not configured") }
        return url
    }

    static var isChatEnabled: Bool {
        Bundle.main.object(
            forInfoDictionaryKey: "FEATURE_CHAT_ENABLED"
        ) as? Bool ?? false
    }
}

Μεταβλητές περιβάλλοντος σε έργα Android

Το Android υποστηρίζει μεταβλητές περιβάλλοντος μέσω του BuildConfig — μιας αυτόματα δημιουργούμενης κλάσης, τα πεδία της οποίας ορίζονται στο αρχείο build.gradle της μονάδας. Το BuildConfig δημιουργείται στο στάδιο μεταγλώττισης για κάθε flavor και τύπο κατασκευής ξεχωριστά. Αυτό επιτρέπει να έχουμε διαφορετικές τιμές για debug και release χωρίς τη χρήση υπό συνθήκη εντολών στον κώδικα, αυξάνοντας την απόδοση και την ασφάλεια.

Ρύθμιση πεδίων BuildConfig

Τα πεδία BuildConfig ορίζονται μέσω του buildConfigField στο defaultConfig ή σε συγκεκριμένα buildTypes. Για κάθε περιβάλλον δημιουργείται ξεχωριστό buildType ή productFlavor. Αυτό εξασφαλίζει αυστηρή απομόνωση των ρυθμίσεων: το debug χρησιμοποιεί τον τοπικό διακομιστή, το release — το production. Τα πεδία BuildConfig είναι στατικά τυποποιημένα, γεγονός που αποκλείει σφάλματα κατά την πρόσβαση σε αυτά στον κώδικα.

groovy
// build.gradle (Module: app)
android {
    defaultConfig {
        buildConfigField "String", "API_BASE_URL",
            "\"http://localhost:8080\""
    }
    buildTypes {
        debug {
            buildConfigField "String", "API_BASE_URL",
                "\"http://dev.api.itsectr.com\""
        }
        release {
            buildConfigField "String", "API_BASE_URL",
                "\"https://api.itsectr.com\""
        }
    }
}

gradle.properties για κοινές τιμές

Το αρχείο gradle.properties στη ρίζα του έργου αποθηκεύει καθολικές μεταβλητές του Gradle. Είναι διαθέσιμες σε όλες τις μονάδες μέσω της σύνταξης $variableName και χρησιμοποιούνται για τον καθορισμό εκδόσεων εξαρτήσεων, σημαιών κατασκευής και API κλειδιών. Σε αντίθεση με το BuildConfig, το gradle.properties λειτουργεί μόνο στο στάδιο διαμόρφωσης του Gradle και όχι στο runtime της εφαρμογής. Γι' αυτό οι κωδικοί πρόσβασης και τα API κλειδιά που αναγράφονται στο gradle.properties δεν είναι ορατά στον αποσυμπιεσμένο κώδικα, καθώς χρησιμοποιούνται μόνο για τη δημιουργία του BuildConfig στο στάδιο μεταγλώττισης.

groovy
# gradle.properties
SENTRY_DSN=https://key@sentry.io/project
MAPS_API_KEY=AIzaSy...

Για την ασφαλή μεταβίβαση μυστικών σε έργα Android συνιστάται η χρήση του local.properties (εξαιρείται από το VCS) ή η φόρτωση τιμών από μεταβλητές CI/CD στο build.gradle μέσω του System.getenv(). Αυτό διασφαλίζει ότι τα κλειδιά δεν θα καταλήξουν στο αποθετήριο. Κατά τη δημοσίευση στο Google Play Console βεβαιωθείτε ότι όλα τα κλειδιά εντοπισμού σφαλμάτων έχουν αντικατασταθεί με εκδόσεις παραγωγής μέσω διαφορετικών buildTypes ή productFlavors με τις αντίστοιχες τιμές BuildConfig.

Συχνές ερωτήσεις

Μπορώ να χρησιμοποιήσω μεταβλητές περιβάλλοντος στο Flutter;

Ναι, το Flutter υποστηρίζει μεταβλητές περιβάλλοντος μέσω του πακέτου flutter_dotenv για πρόσβαση στο runtime ή μέσω native καναλιών για μεταβλητές πλατφόρμας. Στο Dart είναι επίσης διαθέσιμος ο κατασκευαστής String.fromEnvironment για τη μεταβίβαση τιμών στο στάδιο μεταγλώττισης μέσω του --dart-define, που είναι ο προτιμώμενος τρόπος για έργα Flutter.

Ποια είναι η διαφορά μεταξύ BuildConfig και gradle.properties;

Το BuildConfig είναι μια κλάση Java με τυποποιημένα πεδία, που δημιουργείται στο στάδιο μεταγλώττισης για κάθε buildType και flavor. Το gradle.properties είναι ένα αρχείο κειμένου με ζεύγη κλειδιού-τιμής, διαθέσιμο σε όλες τις μονάδες του Gradle στο στάδιο διαμόρφωσης της κατασκευής. Το BuildConfig λειτουργεί στο runtime της εφαρμογής, ενώ το gradle.properties — μόνο στα scripts του Gradle.

Πώς να αποτρέψω τη διαρροή του αρχείου .env στο αποθετήριο;

Προσθέστε το .env στο αρχείο .gitignore του αποθετηρίου σας. Στο αποθετήριο κάντε commit μόνο το .env.example με κενές τιμές και περιγραφή κάθε μεταβλητής. Για το CI/CD χρησιμοποιήστε κρυπτογραφημένα μυστικά στις ρυθμίσεις των GitHub Actions, GitLab CI ή Bitrise, τα οποία καλύπτονται στα αρχεία καταγραφής και δεν είναι προσβάσιμα για ανάγνωση μετά την ολοκλήρωση της κατασκευής.

Πώς να μεταβιβάσω μεταβλητές περιβάλλοντος μέσω CI/CD;

Τα περισσότερα συστήματα CI υποστηρίζουν μυστικές μεταβλητές περιβάλλοντος. Στο GitHub Actions είναι τα Secrets, στο GitLab CI — οι CI/CD Variables, στο Bitrise — τα Secrets. Στο στάδιο κατασκευής μεταβιβάζονται στο script κατασκευής μέσω του process.env ή του System.getenv(). Οι μυστικές μεταβλητές δεν εμφανίζονται στα αρχεία καταγραφής της κατασκευής και δεν είναι διαθέσιμες σε forks του αποθετηρίου.

Τι είναι τα feature flags μέσω μεταβλητών περιβάλλοντος;

Τα feature flags είναι δυαδικές μεταβλητές που ελέγχουν την ενεργοποίηση ή απενεργοποίηση λειτουργιών χωρίς εκ νέου μεταγλώττιση του κώδικα. Παράδειγμα: το FEATURE_NEW_PAYMENT=true ενεργοποιεί το νέο σύστημα πληρωμών στο staging για δοκιμές. Στο production το ίδιο flag έχει οριστεί σε false μέχρι την πλήρη ανάπτυξη του backend. Αυτό επιτρέπει την ασφαλή σταδιακή εφαρμογή αλλαγών και την ανάκλησή τους σε περίπτωση προβλημάτων.

Συμπεράσματα

  • Οι μεταβλητές περιβάλλοντος διαχωρίζουν τις ρυθμίσεις από τον πηγαίο κώδικα για διαφορετικά περιβάλλοντα ανάπτυξης
  • Τα αρχεία .env με το πρότυπο .env.example — το πρότυπο διαχείρισης μεταβλητών σε ομάδες με διαχωρισμό περιβαλλόντων
  • Το iOS xcconfig συνδέει αρχεία ρυθμίσεων με τα σχήματα του Xcode με υποστήριξη κληρονομικότητας και ενσωμάτωσης στο Info.plist
  • Το Android BuildConfig δημιουργεί τυποποιημένα πεδία από το build.gradle για κάθε buildType ξεχωριστά
  • Τα μυστικά CI/CD μεταβιβάζουν ευαίσθητα δεδομένα στο στάδιο κατασκευής χωρίς αποθήκευση στο αποθετήριο
  • Τα feature flags μέσω μεταβλητών επιτρέπουν την ενεργοποίηση λειτουργιών σε συγκεκριμένο περιβάλλον χωρίς εκ νέου μεταγλώττιση
  • Ασφάλεια: τα κλειδιά κρυπτογραφούνται στο CI και δεν καταλήγουν στο αποσυμπιέσιμο δυαδικό αρχείο της εφαρμογής

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης