Can iOS apps be developed on Windows?

React Native: iOS udvikling uden Mac

11/12/2021

Rating: 4.02 (5169 votes)
Indholdsfortegnelse

Introduktion til React Native og iOS-udvikling

Traditionelt har udvikling og distribution af iOS-apps været uløseligt forbundet med macOS. Tanken om at skabe applikationer til Apples økosystem uden en Mac har længe virket som en uoverstigelig barriere for mange udviklere. Men teknologiske fremskridt, især inden for cross-platform udvikling, har ændret dette landskab markant. Med introduktionen af React Native og kraftfulde CI/CD-værktøjer som Codemagic er det nu muligt at bryde fri af macOS-afhængigheden og udvikle og distribuere iOS-apps effektivt, selv fra et Linux-miljø.

How do I get my iOS app out?
You can buy a second-hand Mac and set up your development environment or you can use a free service like Codemagic to build the iOS binary that you can smoke test on an iOS device or share with your first users. This is a great way to move quickly and get your app out.

React Native, som blev lanceret i 2015, har hurtigt vundet popularitet blandt mobile udviklere. Rammeværket bygger på JavaScript og muliggør udvikling af både iOS- og Android-apps fra en enkelt, fælles kodebase. Dette åbner døre for webudviklere, der ønsker at udvide deres kompetencer til mobiludvikling uden at skulle lære to separate native sprog. Mens den native iOS-komponentudvikling og selve macOS stadig udgør den største udfordring, har React Native banet vejen for en mere tilgængelig udviklingsproces.

Denne artikel vil guide dig igennem processen med at sætte udvikling og distribution af iOS-apps op uden brug af macOS. Vi vil fokusere på at anvende Linux som primært udviklingsmiljø og demonstrere, hvordan man udfører manuel code signing med Codemagic. Målet er at give dig de nødvendige værktøjer og metoder til at mestre iOS-app-udvikling på tværs af platforme.

Udvikling af React Native-apps på Linux

React Native har transformeret måden, vi tænker mobilapp-udvikling på. Som et open-source framework muliggør det genbrug af kode og komponenter, hvilket reducerer udviklingstid og omkostninger. Mens Android-apps kan bygges og testes relativt ubesværet på Linux, har iOS-apps historisk krævet et macOS-miljø til kompilering og signing.

Men med den rette tilgang kan dette problem omgås. En af de mest effektive metoder involverer at udnytte React Native's cross-platform natur og kombinere den med værktøjer, der kan håndtere iOS-specifikke opgaver uden for macOS. Artiklen vil tage udgangspunkt i et projekt som ReactNativeAppSigning for at illustrere, hvordan man bygger både Android- og iOS-versioner af en applikation fra en enkelt kodebase på Linux.

Metoder til React Native-appudvikling på Linux

Der er primært tre veje at gå, når man ønsker at udvikle React Native-apps på Linux:

  1. Byg apps ved hjælp af en Linux-maskine: Hvis du allerede har en Linux-maskine, er dette den mest direkte metode. Det kræver installation af Android SDK og React Native på din maskine. Derefter kan du klone det relevante repository og begynde udviklingen.
  2. Byg apps ved hjælp af en Docker-container: For dem uden en dedikeret Linux-maskine eller som ønsker et isoleret og reproducerbart miljø, er Docker en ideel løsning. En Docker-container kan konfigureres med alle nødvendige afhængigheder, herunder Android SDK og React Native.
  3. Byg apps ved hjælp af Codemagic: Til automatisering af byggeprocessen og især til distribution, er Codemagic et kraftfuldt CI/CD-værktøj, der understøtter React Native og muliggør iOS-builds uden macOS.

Udvikling med Docker

Docker tilbyder en fleksibel og isoleret måde at oprette et konsistent udviklingsmiljø på. Dette er især nyttigt, når du arbejder med teknologier, der har specifikke afhængigheder, som i tilfældet med React Native og iOS-builds.

Opsætning af Docker-miljø

Hvis du ikke er bekendt med Docker, kan processen virke kompleks, men grundprincipperne er ligetil. Du skal oprette en Dockerfile, som definerer de trin, der skal udføres for at bygge dit container-image. Denne fil indeholder instruktioner til installation af software, konfiguration af miljøet og kopiering af din applikationskode.

Her er et eksempel på en Dockerfile, der sætter et React Native-miljø op:

FROM node:latest LABEL version=1.2.1 ENV ADB_IP="192.168.1.1" ENV REACT_NATIVE_PACKAGER_HOSTNAME="192.255.255.255" EXPOSE 19000 EXPOSE 19001 RUN mkdir /reactnativeappsinging WORKDIR /reactnativeappsinging ADD . /reactnativeappsinging RUN apt-get update && \ apt-get install android-tools-adb WORKDIR /app COPY package.json yarn.lock app.json ./ RUN yarn --network-timeout 100000 CMD adb connect $ADB_IP && \ yarn run android 

Denne Dockerfile bruger et officielt Node.js-image, installerer Android Debug Bridge (ADB) og konfigurerer miljøet til at køre React Native-apps. Den eksporterer også nødvendige porte (19000 og 19001) for Expo, som ofte bruges med React Native.

Efter at have konfigureret din Dockerfile og installeret Docker, kan du bygge og køre din container:

docker build -t reactnativeappsigning . docker run -e ADB_IP=192.168.112.101 \ -e REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.1 \ -p 19000:19000 \ -p 19001:19001 \ name expo-ios 

Disse kommandoer bygger et Docker-image med din app og starter en container, der er klar til at køre React Native-applikationen.

Udvikling og Distribution med Codemagic

Codemagic er en cloud-baseret Continuous Integration/Continuous Deployment (CI/CD) platform, der er specielt designet til mobiludvikling. Den tilbyder omfattende understøttelse af cross-platform frameworks som React Native og automatiserer bygge-, test- og distributionsprocesserne.

Opsætning af Codemagic til React Native

For at komme i gang med Codemagic, skal du først oprette en konto. Derefter kan du oprette et nyt projekt og vælge React Native som dit framework. Codemagic vil guide dig gennem opsætningen og generere en codemagic.yaml fil, som definerer dine build-workflows.

En typisk codemagic.yaml fil for React Native ser således ud:

workflows: react-native: name: reactnativeappsigning environment: vars: XCODE_WORKSPACE: "{{ ADD WORKSPACE NAME HERE }}" XCODE_SCHEME: "{{ ADD SCHEME NAME HERE }}" node: latest scripts: - npm install - echo "sdk.dir=$ANDROID_SDK_ROOT" > "$FCI_BUILD_DIR/android/local.properties" - | # build Android cd android ./gradlew assembleDebug - | # build iOS cd ios pod install xcodebuild build -workspace "$XCODE_WORKSPACE.xcworkspace" -scheme "$XCODE_SCHEME" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO artifacts: - android/app/build/outputs///*.apk - $HOME/Library/Developer/Xcode/DerivedData//Build//*.app 

Denne konfiguration specificerer, hvordan Codemagic skal håndtere installation af afhængigheder, bygge Android-apps (APK) og iOS-apps (IPA). Bemærk brugen af `CODE_SIGNING_REQUIRED=NO` og `CODE_SIGNING_ALLOWED=NO` i iOS-build-kommandoen, som er nødvendig, når man ikke udfører signing direkte i dette trin.

Manuel Code Signing med Codemagic

For at kunne distribuere iOS-apps er code signing en essentiel proces. Dette involverer at signere din app med et udviklings- eller distributionscertifikat og et provisioning profile, som beviser, at din app er godkendt af Apple.

Når du bruger Codemagic til iOS-builds uden en Mac, skal du håndtere code signing manuelt ved at uploade dine certifikater og profiler til Codemagic. Dette gøres typisk ved at kryptere disse filer og uploade dem som miljøvariabler i Codemagic's projektindstillinger.

Processen involverer følgende trin:

  1. Generer Code Signing Assets fra App Store Connect: Du skal bruge et Apple Developer-konto, et udviklings- eller distributionscertifikat (i .p12 format), din App ID og et provisioning profile. Disse kan downloades fra Apple Developer Portal.
  2. Upload Certifikater og Profiler til Codemagic: Dine certifikater og profiler skal uploades som krypterede miljøvariabler (f.eks. CM_CERTIFICATE, CM_CERTIFICATE_PASSWORD, CM_PROVISIONING_PROFILE) i Codemagic's build-indstillinger.
  3. Konfigurer Build-scripts: I din codemagic.yaml fil skal du tilføje scripts til at initialisere keychain, installere certifikater og profiler samt udføre selve build-processen.

Her er et uddrag af, hvordan disse scripts kan se ud i codemagic.yaml:

# ... (tidligere dele af workflow) scripts: # ... (npm install, android build) - | # setup provisioning profiles PROFILES_HOME="$HOME/Library/MobileDevice/Provisioning Profiles" mkdir -p "$PROFILES_HOME" PROFILE_PATH="$(mktemp "$PROFILES_HOME"/$(uuidgen).mobileprovision)" echo ${CM_PROVISIONING_PROFILE} | base64 --decode > $PROFILE_PATH echo "Saved provisioning profile $PROFILE_PATH" - | # setup signing certificate echo $CM_CERTIFICATE | base64 --decode > /tmp/certificate.p12 keychain add-certificates --certificate /tmp/certificate.p12 --certificate-password $CM_CERTIFICATE_PASSWORD - xcode-project use-profiles - | # build iOS cd ios pod install - xcode-project build-ipa --workspace "ios/$XCODE_WORKSPACE.xcworkspace" --scheme "$XCODE_SCHEME" # ... (artifacts) 

Opdatering af Xcode-projektfiler

For at manuel code signing kan fungere korrekt, skal visse indstillinger i dit Xcode-projekt opdateres. Dette inkluderer at specificere dit Development Team ID, sætte ProvisioningStyle til Manual og angive navnet på dit provisioning profile.Disse ændringer skal foretages i filen ios/YOUR_APP.xcodeproj/project.pbxproj. Du skal sikre dig, at disse ændringer anvendes korrekt for både debug- og release-konfigurationer, afhængigt af dit formål.

Automatisk Code Signing med Codemagic

Codemagic har også introduceret en automatisk code signing-funktion, der forenkler processen yderligere. Ved at integrere med Apple Developer Portal via App Store Connect API-nøgler, kan Codemagic automatisk håndtere certifikater og provisioning profiles. Dette eliminerer behovet for manuel uploading og reducerer risikoen for fejl relateret til udløbne sessioner eller to-faktor-autentificering.

Hvis du bliver bedt om at forbinde din Apple Developer Portal-integration, skal du følge instruktionerne i Codemagic's dokumentation. Med automatisk signing bliver hele processen mere strømlinet og mindre fejlbehæftet.

Distribution til Apple App Store

Når du har succesfuldt bygget en test-version af din iOS-app (typisk en debug-version), er næste skridt distributionen til Apple App Store. For at gøre dette skal du bygge din app i release-mode og bruge distributionscertifikatet samt et produktions-provisioning profile.

Forberedelse til App Store Distribution

Processen ligner den for manuel signing, men med et par vigtige forskelle:

  • Distributionscertifikat: Brug dit distributionscertifikat, som er udstedt til App Store-distribution.
  • Produktions-provisioning Profile: Opret et provisioning profile specifikt til App Store-distribution. Dette profil vil tillade din app at køre på enhver iOS-enhed, uden at du behøver at specificere individuelle enheds-ID'er.

Konfiguration i Codemagic til Release Build

I Codemagic skal du vælge 'Release' i build-sektionen og angive build-argumenter som release i stedet for debug. I 'Publish'-sektionen skal du uploade dit distributionscertifikat og produktions-provisioning profile.

Når Codemagic har genereret build-artefakterne (IPA-filen), kan du uploade den til App Store Connect (tidligere iTunes Connect). Følg App Store Guidelines for at sikre, at din app opfylder alle krav, før du indsender den til anmeldelse.

Fordele og Overvejelser

At kunne udvikle og distribuere iOS-apps uden en Mac åbner op for nye muligheder for udviklere, især dem der primært arbejder med Linux eller ønsker at optimere deres workflow.

Fordele

  • Omkostningsbesparelser: Undgår den høje pris for en Mac.
  • Fleksibilitet: Udvikl hvor som helst, uanset dit primære operativsystem.
  • Effektivitet: CI/CD-automatisering med Codemagic sparer tid og reducerer manuelle fejl.
  • Cross-Platform: Udnyt React Native's styrker til at bygge apps til både iOS og Android fra en enkelt kodebase.

Overvejelser

  • Debugging: Selvom det er muligt, kan debugging af iOS-specifikke problemer uden direkte adgang til et macOS-miljø være mere udfordrende.
  • Signing Kompleksitet: Manuel code signing kræver omhyggelig konfiguration og forståelse af Apple's signing-processer.
  • Afhængighed af Tredjeparts Værktøjer: Brug af Codemagic og Docker kræver fortrolighed med disse platforme.

Konklusion

Kombinationen af React Native som et cross-platform framework og Codemagic som en kraftfuld CI/CD-løsning gør det absolut muligt at udvikle og distribuere iOS-apps uden at eje en Mac. Selvom der kan opstå visse udfordringer, især inden for debugging, er potentialet for at spare omkostninger og øge fleksibiliteten enormt. Ved at følge de beskrevne trin og udnytte de tilgængelige værktøjer kan udviklere effektivt navigere i iOS-app-udvikling fra et Linux-miljø og bringe deres applikationer til Apple App Store.

Ofte Stillede Spørgsmål (FAQ)

Kan jeg virkelig bygge og udgive iOS-apps uden en Mac?

Ja, det er muligt ved at bruge cross-platform frameworks som React Native i kombination med CI/CD-værktøjer som Codemagic, der kan håndtere iOS-builds på deres servere. Du skal dog stadig have en Apple Developer-konto.

Hvad er React Native?

React Native er et open-source framework udviklet af Facebook, der giver udviklere mulighed for at bygge native mobile apps til iOS og Android ved hjælp af JavaScript og React.

Hvad er Codemagic?

Codemagic er en CI/CD-platform designet specifikt til mobiludvikling. Den automatiserer bygge-, test- og distributionsprocesserne for apps udviklet med frameworks som React Native, Flutter og native iOS/Android.

Hvad er code signing?

Code signing er processen med at digitalt signere din applikationskode. For iOS-apps sikrer det, at appen kommer fra en verificeret udvikler, og at den ikke er blevet manipuleret siden signeringen. Det er påkrævet for at kunne distribuere apps via App Store eller til test på enheder.

Hvorfor er manuel code signing nødvendigt, når man bygger uden Mac?

Når du bygger en iOS-app uden en Mac, mangler du det native miljø, hvor Xcode normalt håndterer code signing automatisk. Derfor skal du manuelt levere og konfigurere dine udviklings- og distributionscertifikater samt provisioning profiles via et CI/CD-værktøj som Codemagic.

Hvis du vil læse andre artikler, der ligner React Native: iOS udvikling uden Mac, kan du besøge kategorien Teknologi.

Go up