How do I access the directory structure for my iOS simulator?

Adgang til App-filer på iOS-simulatoren

19/03/2025

Rating: 4.68 (8651 votes)

Som iOS-udvikler er det afgørende at have fuld kontrol over dit udviklingsmiljø, og en central del af dette er at kunne tilgå og administrere de filer, din app skaber eller bruger på iOS-simulatoren. Uanset om du skal debugge, verificere data, der er gemt af din app, eller tilføje specifikke filer til testformål, er viden om filhåndtering på simulatoren en uvurderlig færdighed. Denne guide vil dykke ned i de forskellige metoder, du kan bruge til at navigere i din apps mappestruktur på simulatoren, fra de grundlæggende teknikker til mere avancerede kommandoer, der kan strømline din arbejdsgang. Vi vil dække alt fra at finde din apps rodmappe til at oprette simulator-builds klar til indsendelse.

Where are iOS simulator builds located?
iOS Simulator builds are not somewhere underneath ~/Library/Developer/Xcode/DerivedData anymore, but in ~/Library/Developer/CoreSimulator/Devices. If you build an iOS or Android app that integrates with the Facebook SDK, you need to have your app reviewed before being able to go live.

Find stien til din apps rodmappe

Den mest ligetil måde at finde ud af, hvor din app gemmer sine filer på simulatoren, er ved at udskrive dens rodmappe direkte fra din applikationskode. Dette giver dig den præcise sti, som du derefter kan bruge til at navigere til i Finder. Denne metode er især nyttig under udvikling, da den giver dig en øjeblikkelig reference til din apps sandkasse.

For at gøre dette skal du blot tilføje en print-udskrift inde i application(_:didFinishLaunchingWithOptions:)-metoden i din AppDelegate-klasse. Denne metode kaldes, når din app er blevet lanceret, hvilket gør den til et ideelt sted at udskrive oplysninger om dens miljø.

class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchKey: Any]?) -> Bool { print("Applikationsmappe: \(NSHomeDirectory())") return true } } 

Når du kører din app på simulatoren, vil stien til din applikations rodmappe blive udskrevet i Xcode-konsollen. Denne sti repræsenterer den såkaldte "sandkasse" (sandbox), hvor din app har tilladelse til at læse og skrive filer. Det er vigtigt at forstå, at hver app på iOS kører i sin egen isolerede sandkasse for sikkerhedens skyld, og NSHomeDirectory() giver dig roden af denne specifikke sandkasse for din app på simulatoren.

Åbn app-mappen i Finder

Når du har kopieret stien fra Xcode-konsollen, er det næste skridt at åbne denne mappe i Finder på din Mac. Dette er en hurtig og visuel måde at udforske din apps filsystem på.

  1. Kopiér stien: Marker og kopiér den komplette sti, der blev udskrevet i Xcode-konsollen (f.eks. /Users/dinbruger/Library/Developer/CoreSimulator/Devices/C0DEBEEF-CAFE-D00D-BEEF-1234567890AB/data/Containers/Data/Application/ANOTHER-UUID-FOR-YOUR-APP/).
  2. Åbn "Gå til mappe": I Finder skal du klikke på "Gå" (Go) i menulinjen øverst på skærmen og derefter vælge "Gå til mappe..." (Go to Folder...). Du kan også bruge genvejen Shift + Command + G.
  3. Indsæt stien: Indsæt den kopierede sti i tekstfeltet, der vises, og tryk på Enter.

Nu vil du have direkte adgang til din applikations sandkassemappe på simulatoren. Herfra kan du navigere gennem undermapper som Documents, Library og tmp for at inspicere filer, der er gemt af din app, eller tilføje nye filer til testformål. Denne metode er utrolig effektiv til hurtigt at få et overblik over din apps data og til at udføre manuelle tests, der kræver filmanipulation.

Administrer filer i Dokumenter-mappen

En af de vigtigste undermapper inden for din apps sandkasse er Documents-mappen. Dette er den primære placering, hvor din app bør gemme brugergenererede data og andre vigtige filer, der skal bevares mellem app-lanceringer og sikkerhedskopier. Filer, som din app gemmer ved hjælp af .documentDirectory som en del af FileManager API'et, vil dukke op her.

At kunne tilgå Documents-mappen direkte i Finder giver dig mulighed for at:

  • Kontrollere indhold: Verificere, at din app gemmer data korrekt, og at filformaterne er som forventet. Dette er afgørende for debugging af lagringsrelaterede problemer.
  • Tilføje testfiler: Du kan manuelt placere filer (f.eks. billeder, JSON-data, tekstfiler) i denne mappe for at simulere specifikke scenarier. Dette er yderst nyttigt for at teste, hvordan din app håndterer eksisterende data eller forskellige inputformater uden at skulle tilføje dem programmatisk.
  • Rydde op: Hvis din app har oprettet mange testfiler, kan du nemt slette dem for at nulstille appens tilstand.

For eksempel, hvis din app gemmer brugerprofiler som JSON-filer, kan du åbne disse filer for at inspicere dataene. Hvis din app behandler billeder, kan du tilføje billeder til Documents-mappen og teste, hvordan din app reagerer på forskellige billedstørrelser eller formater.

How to access and manage application files on iOS simulator?
In this article we will see how we can access and manage application files on the iOS simulator. To get the path to our application directory on the simulator, we will add a print statement inside application(_:didFinishLaunchingWithOptions:) method in AppDelegate class. This will print NSHomeDirectory() in Xcode console on app launch.

Gennemse Core Data SQLite-database

For apps, der bruger Core Data til vedvarende lagring, gemmes databasen typisk som en SQLite-fil. Disse filer findes normalt i Library/Application Support-undermappen inden for din apps sandkasse, selvom den præcise placering kan variere lidt afhængigt af din Core Data-opsætning.

Ved at navigere til denne mappe kan du finde .sqlite-filen (og ofte også .sqlite-wal og .sqlite-shm filer). Du kan derefter kopiere denne databasefil og åbne den med et SQLite-browserprogram (f.eks. DB Browser for SQLite) for at inspicere dataene direkte. Dette er et utroligt kraftfuldt værktøj til debugging af Core Data-relaterede problemer, såsom manglende data, forkert dataformatering eller relationer, der ikke fungerer som forventet. Det giver et dybt indblik i, hvordan dine objekter faktisk er gemt i databasen.

Avanceret adgang via Terminal og placering af simulator-builds

Mens NSHomeDirectory()-metoden er fremragende til at finde den aktive sandkasse for din app, er der tidspunkter, hvor du måske har brug for at finde selve app-bundtet (.app-filen) eller andre filer relateret til simulatoren, som ikke er en del af den aktive sandkasse. Især efter Xcode 14 er placeringen af simulator-builds flyttet fra ~/Library/Developer/Xcode/DerivedData til ~/Library/Developer/CoreSimulator/Devices.

Hver iOS-simulator-enhed har sin egen unikke hash (en lang streng af bogstaver og tal), og inden for denne mappe findes data for de apps, der er installeret på den pågældende simulator. At finde den specifikke app-bundle manuelt kan være besværligt, men Terminalen tilbyder en kraftfuld en-linje kommando til at lokalisere den senest kørte app-bundle:

open -R `find ~/Library/Developer/CoreSimulator/Devices \ -type d -depth 5 -name "*.app" -print0 | xargs -0 stat -f \ "%m %N" | sort -rn | head -1 | cut -f2- -d" "` 

Lad os nedbryde denne kommando:

  • find ~/Library/Developer/CoreSimulator/Devices: Starter søgningen i den overordnede mappe for alle simulator-enheder.
  • -type d -depth 5 -name "*.app": Søger efter mapper (-type d) op til 5 niveauer dybt (-depth 5), hvis navn slutter med .app (dvs. app-bundler).
  • -print0 | xargs -0 stat -f "%m %N": Sender de fundne stier sikkert til xargs, som derefter udfører stat-kommandoen for hver fil. %m udskriver sidste ændringstidspunkt, og %N udskriver filnavnet.
  • | sort -rn: Sorterer resultaterne numerisk (-n) i omvendt rækkefølge (-r), så den senest ændrede fil (din nyligt kørte app) kommer øverst.
  • | head -1: Tager kun den første linje (den senest ændrede app-bundle).
  • | cut -f2- -d" ": Fjerner timestamp'et og efterlader kun stien.
  • open -R `...`: Åbner den fundne sti i Finder og viser den i Finder-vinduet.

Denne kommando er ideel, når du hurtigt skal finde den faktiske .app-bundle, for eksempel til at inspicere dens indhold eller til at forberede den til indsendelse til en tjeneste, der kræver en simulator-build.

Opret en Zip-fil af din simulator-build til indsendelse

Nogle gange, især når du integrerer med tredjeparts-SDK'er som Facebook SDK, skal du indsende en simulator-binær pakke af din app til gennemgang. Dette kan virke forvirrende, da Facebooks dokumentation måske ikke altid er opdateret med de seneste Xcode-ændringer. Heldigvis kan du med en simpel Terminal-kommando oprette en komprimeret zip-fil af din simulator-build, som er klar til indsendelse.

Først skal du sørge for, at din app er blevet kørt på simulatoren mindst én gang for at sikre, at den seneste build er tilgængelig i CoreSimulator-mappen.

Kør derefter følgende kommando i din Terminal:

ditto -ck --sequesterRsrc --keepParent `ls -1 -d -t ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/\*.app | head -n 1` ~/Desktop/din_app_$(date +"%Y%m%d_%H%M").zip 

Lad os se på, hvad denne kommando gør:

  • ditto -ck --sequesterRsrc --keepParent: Dette er kommandoen til at oprette en komprimeret arkivfil.
    • -c: Opretter et arkiv.
    • -k: Opretter et zip-arkiv.
    • --sequesterRsrc: Bevarer ressourcegafler og metadatainformationer, hvilket er vigtigt for macOS-app-bundter.
    • --keepParent: Bevarer den overordnede mappestruktur, så .app-bundtet ikke bare "dumpes" direkte i zip-filen.
  • `ls -1 -d -t ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/\*.app | head -n 1`: Denne del finder den senest modificerede .app-bundle i simulator-mappen. Den fungerer på samme måde som find-kommandoen beskrevet tidligere, men bruger ls -t til at sortere efter ændringsdato og head -n 1 til at vælge den nyeste.
  • ~/Desktop/din_app_$(date +"%Y%m%d_%H%M").zip: Dette er destinationen for den oprettede zip-fil. Den gemmes på dit skrivebord med et dynamisk navn, der inkluderer et tidsstempel (f.eks. din_app_20231027_1030.zip), hvilket er praktisk, hvis du genererer flere builds.

Når zip-filen er oprettet, er det en god idé at teste den for at sikre, at den fungerer korrekt, før du sender den til gennemgang. Du kan gøre dette ved at installere ios-sim, et kommandolinjeværktøj til at interagere med iOS-simulatoren:

  1. Installer ios-sim: Hvis du ikke allerede har det, kan du installere det via npm: npm install -g ios-sim. (Kræver Node.js og npm installeret.)
  2. Udpak zip-filen: Udpak den zip-fil, du lige har oprettet, til en ny mappe. Du vil finde din .app-bundle indeni.
  3. Test med ios-sim: Kør følgende kommando, hvor du erstatter iPhone-14 med den simulator-enhedstype, du vil teste på, og ~/Desktop/Runner.app med den faktiske sti til din udpakkede .app-bundle:
    ios-sim launch --devicetypeid com.apple.CoreSimulator.SimDeviceType.iPhone-14 ~/Desktop/Runner.app

    Dette vil starte din app på den specificerede simulator, hvilket bekræfter, at din build er gyldig og kan køres.

Denne proces er uundværlig for at sikre en gnidningsfri app-gennemgang og for at dele test-builds, der er kompatible med simulator-miljøer.

How do I build an app in Xcode?

Sammenligning af metoder til filadgang

Her er en hurtig oversigt over de diskuterede metoder og deres bedste anvendelser:

MetodeBeskrivelseBedst tilFordeleUlemper
NSHomeDirectory() i Xcode-konsolUdskriver stien til din apps sandkassemappe.Hurtigt at finde den aktive apps data, debugging af filoprettelse/læsning.Enkel, direkte fra appen, viser den *aktive* sandkasse.Kræver ændring af kode, viser ikke den faktiske .app-bundle.
Manuel navigation i Finder ("Gå til mappe...")Bruger den kopierede sti til at åbne mappen visuelt.Gennemse, tilføje/fjerne filer i Documents eller Library.Visuel, nem at bruge for filhåndtering.Kræver først at få stien, ingen automatik.
Terminal-kommando (open -R `find ...`)Finder og åbner den senest kørte .app-bundle i Finder.Lokalisering af selve app-bundtet, systemdækkende søgning.Automatiseret, hurtig adgang til den faktiske app-bundle.Kræver Terminal-kendskab, ikke direkte for app-data (Documents/Library).
Terminal-kommando (ditto -ck ...)Opretter en zip-fil af den seneste simulator-build.Forberede builds til indsendelse (f.eks. App Review), dele test-builds.Automatiseret, optimeret zip-fil, tidsstemplet output.Kræver Terminal-kendskab, kun til build-arkivering.

Ofte Stillede Spørgsmål (FAQ)

Hvor gemmes iOS simulator builds?
iOS simulator builds er gemt under ~/Library/Developer/CoreSimulator/Devices/<hash af din enhed>/data/Containers/Bundle/Application/<hash af din app>/<navn på target>.app. Tidligere var de i ~/Library/Developer/Xcode/DerivedData, men dette er ændret med nyere Xcode-versioner (fra Xcode 14 og frem).

Hvordan finder jeg specifikke filer i simulator?
Hvis filen er gemt af din app inden for dens sandkasse (f.eks. i Documents-mappen), kan du udskrive NSHomeDirectory() i din Xcode-konsol for at få stien til rodmappen for din apps sandkasse. Derefter kan du bruge Finder's "Gå til mappe..."-funktion til at navigere dertil og finde dine filer. Hvis du leder efter selve .app-bundtet, kan du bruge Terminal-kommandoen open -R `find ~/Library/Developer/CoreSimulator/Devices ...` for at åbne mappen for den senest kørte app-bundle direkte.

Kan jeg tilføje filer til min simulator-app for at teste?
Ja, absolut! Når du har åbnet din apps sandkassemappe i Finder (f.eks. ved hjælp af NSHomeDirectory()-metoden), kan du navigere til Documents-mappen (eller andre relevante undermapper) og manuelt trække og slippe filer ind i den. Din app vil derefter kunne læse disse filer, når den kører på simulatoren, hvilket er en fantastisk måde at teste forskellige input-scenarier på.

Hvad er forskellen mellem NSHomeDirectory og CoreSimulator-mappen?
NSHomeDirectory() giver dig stien til den *aktive sandkasse* for din app, som inkluderer mapper som Documents, Library og tmp, hvor din app gemmer data. Dette er din apps arbejdsområde. ~/Library/Developer/CoreSimulator/Devices er den overordnede mappe, hvor *alle simulator-enheder* og deres installerede app-bundter (.app-filer) er gemt. En app-bundle er selve den kompilerede applikation, mens sandkassen er det miljø, den kører i og gemmer sine data. Du vil finde din apps sandkassemappe inde i en specifik simulator-enheds mappe under CoreSimulator/Devices.

Hvorfor skal jeg oprette en zip-fil af min simulator-build til App Review?
Nogle tredjeparts-tjenester, især sociale medie-SDK'er som Facebook, kræver en simulator-build til deres App Review-proces. Dette giver dem mulighed for at teste din app i et kontrolleret simulator-miljø for at verificere integrationen med deres SDK, uden at skulle installere appen på en fysisk enhed. En zip-fil er en bekvem måde at pakke hele app-bundtet på og sikre, at alle nødvendige ressourcer er inkluderet.

Konklusion

At mestre adgangen til og administrationen af app-filer på iOS-simulatoren er en fundamental færdighed for enhver iOS-udvikler. Fra simpel debugging af gemte data til forberedelse af builds til App Review, giver de beskrevne metoder dig den nødvendige kontrol over dit udviklingsmiljø. Ved at udnytte både indbyggede Swift-funktioner og kraftfulde Terminal-kommandoer kan du optimere din arbejdsgang, hurtigt identificere og løse problemer, og sikre, at dine apps fungerer præcis som forventet. Disse teknikker vil utvivlsomt spare dig tid og frustration i din daglige udvikling.

Hvis du vil læse andre artikler, der ligner Adgang til App-filer på iOS-simulatoren, kan du besøge kategorien Teknologi.

Go up