31/08/2024
Mange udviklere står over for den udfordring, at de mangler en Mac, når de ønsker at udvikle og distribuere apps til iOS. Traditionelt har macOS været en uundværlig del af iOS-udviklingsprocessen. Men med fremkomsten af React Native og avancerede CI/CD-værktøjer som Codemagic er dette ikke længere en absolut nødvendighed. Denne artikel guider dig igennem processen med at sætte iOS-appudvikling op på Linux, herunder manuel code signing, for at opnå fuld uafhængighed af macOS. Vi vil udforske, hvordan React Native, som er bygget på JavaScript, åbner døre for webudviklere, og hvordan man kan udnytte dette til at skabe både iOS- og Android-apps fra en enkelt kodebase.
React Native: En Revolution inden for Cross-Platform Udvikling
React Native har siden 2015 transformeret mobile app-udvikling. Som et cross-platform framework giver det udviklere mulighed for at bygge apps til både iOS og Android med en enkelt JavaScript-kodebase. Dette er en enorm fordel, da det reducerer udviklingstid og -omkostninger markant. For webudviklere betyder det, at de kan anvende deres eksisterende færdigheder i React til at skabe native mobile oplevelser. Den største barriere for iOS-udvikling har historisk været kravet om native iOS-komponenter og macOS. React Native har dog gjort det muligt at omgå dette og levere apps til iOS uden at være fuldstændig afhængig af et macOS-miljø.
Metoder til Udvikling af React Native Apps på Linux
Der findes primært tre veje til at bygge og udgive iOS-apps fra et Linux-miljø ved hjælp af React Native:
1. Direkte Udvikling på en Linux Maskine
Hvis du allerede har en Linux-maskine, er dette den mest ligetil metode. Processen indebærer installation af Android SDK og React Native direkte på din Linux-distribution. Derefter klones det relevante projekt-repository, som indeholder den nødvendige struktur og konfiguration.
2. Brug af Docker Containere
For dem, der ikke har en dedikeret Linux-maskine, eller som foretrækker et isoleret miljø, er Docker en ideel løsning. Du kan oprette en Dockerfile, der indeholder alle nødvendige afhængigheder, herunder Android SDK og React Native. Dette sikrer et konsistent og reproducerbart udviklingsmiljø.
En typisk Dockerfile for et React Native-projekt kunne se således ud:
FROM node:latest LABEL version = 1.2.1 ENV ADBIP = "192.168.1.1" ENV REACTNATIVEPACKAGERHOSTNAME = "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 $ADBIP && \ yarn run androidEfter opsætning af Docker og oprettelse af Dockerfile kan containeren bygges og startes med kommandoer som:
docker build -t reactnativeappsigning . docker run -e ADBIP=192.168.112.101 \ -e REACTNATIVEPACKAGERHOSTNAME=192.168.1.1 \ -p 19000:19000 \ -p 19001:19001 \ name expo-iosDette starter en Docker-container med et fuldt konfigureret React Native-miljø.
3. Anvendelse af Codemagic
Codemagic er en kraftfuld CI/CD-platform, der er specielt designet til mobilapp-udvikling. Den tilbyder omfattende understøttelse for cross-platform frameworks som React Native, hvilket gør det muligt at automatisere build-, test- og distributionsprocesserne.
### Opsætning af iOS App-udvikling med Codemagic
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 din platform. Codemagic vil guide dig gennem opsætningen og generere en codemagic.yaml-fil, der definerer dine build-workflows. Denne fil skal tilføjes til dit lokale repository for at konfigurere Codemagics build-servere.
En grundlæggende codemagic.yaml-fil til React Native-projekter kan se således ud:
workflows: react-native: name: reactnativeappsigning environment: vars: XCODEWORKSPACE: "{{ ADD WORKSPACE NAME HERE }}" XCODESCHEME: "{{ ADD SCHEME NAME HERE }}" node: latest scripts: - npm install - echo "sdk.dir=$ANDROIDSDKROOT" > "$CMBUILDDIR/android/local.properties" - | # build Android cd android ./gradlew assembleDebug - | # build iOS cd ios pod install xcodebuild build -workspace "$XCODEWORKSPACE.xcworkspace" -scheme "$XCODESCHEME" CODESIGNIDENTITY="" CODESIGNINGREQUIRED=NO CODESIGNINGALLOWED=NO artifacts: - android/app/build/outputs///*.apk - $HOME/Library/Developer/Xcode/DerivedData//Build//*.appFor at sikre succesfulde builds, især for iOS, skal du importere dine code signing-certifikater og provisioning-profiler til Codemagic. Dette gøres typisk ved at kryptere disse filer og uploade dem som miljøvariabler.
Processen for at håndtere code signing i Codemagic involverer:
- Initialisering af keychain for at importere dit certifikat.
- Opsætning af stier til provisioning-profiler.
- Dekodning og lagring af certifikatet og profilen.
- Brug af
xcode-project use-profilesogxcode-project build-ipatil at bygge din app.
Et eksempel på scripts til code signing i codemagic.yaml kunne være:
- keychain initialize - | # set up provisioning profiles PROFILESHOME="$HOME/Library/MobileDevice/Provisioning Profiles" mkdir -p "$PROFILESHOME" PROFILEPATH="$(mktemp "$PROFILESHOME"/$(uuidgen).mobileprovision)" echo ${CMPROVISIONINGPROFILE} | base64 --decode > $PROFILEPATH echo "Saved provisioning profile $PROFILEPATH" - | # set up signing certificate echo $CMCERTIFICATE | base64 --decode > /tmp/certificate.p12 keychain add-certificates --certificate /tmp/certificate.p12 --certificate-password $CMCERTIFICATEPASSWORD - xcode-project use-profiles - | # build iOS cd ios pod install - xcode-project build-ipa --workspace "ios/$XCODEWORKSPACE.xcworkspace" --scheme "$XCODESCHEME"Generering af Code Signing Assets fra App Store Connect
For at udføre code signing af iOS-apps er et Apple Developer-konto, udviklings- og distributionscertifikater samt App ID og provisioning-profiler essentielle. Til manuel code signing med Codemagic kræves følgende:
- Et udviklings- eller distributionscertifikat i .P12-format.
- En downloadet provisioning-profil fra Apple Developer Portal.
- Appens Bundle ID.
Disse assets kan downloades fra sektionen 'Certificates, Identifiers & Profiles' i Apple Developer Portal. Når du har indsamlet disse, skal du opdatere din Xcode-projektfil (ios/YOUR_APP.xcodeproj/project.pbxproj) med korrekte værdier for DevelopmentTeam, ProvisioningStyle sat til Manual, og PROVISIONING_PROFILE_SPECIFIER sat til navnet på din provisioning-profil. Disse ændringer skal foretages for både debug- og release-konfigurationer.
Opsætning af Code Signing med Codemagic
Codemagic tilbyder både manuel og automatisk code signing. Tidligere var manuel opsætning tilgængelig via indstillingerne, hvor man uploadede certifikater og profiler. Den nyere, automatiske code signing-metode integrerer direkte med App Store Connect via API-nøgler, hvilket eliminerer problemer med udløbende sessioner og to-faktor-godkendelse.
Når du konfigurerer din build-workflow i Codemagic, skal du sørge for at vælge den korrekte indstilling for code signing. Ved at bruge de krypterede miljøvariabler (som CM_CERTIFICATE, CM_CERTIFICATE_PASSWORD og CM_PROVISIONING_PROFILE) kan Codemagic automatisk håndtere certifikatimport og provisioning-profilopsætning.
Efter en succesfuld build vil Codemagic generere en IPA-fil, som er klar til distribution på provisionerede enheder. Dette giver dig mulighed for at teste din app grundigt, før du sender den til App Store.
Distribution af iOS-appen til Apple App Store
For at distribuere din app til App Store, skal du bygge den i release-mode med dit distributionscertifikat og en produktions-provisioning-profil. Denne profil tillader appen at køre på enhver iOS-enhed uden behov for eksplicit enhedsregistrering. Processen ligner opsætningen for debug-builds, men med fokus på distributionsassets.
I Codemagics Build-sektion vælger du 'Release' mode og angiver de relevante build-argumenter. I Publish-sektionen uploader du distributionscertifikatet og produktions-provisioning-profilen. Når Codemagic har genereret den endelige IPA-fil, kan den uploades til App Store Connect (tidligere iTunes Connect) og indsendes til anmeldelse i overensstemmelse med Apples retningslinjer.
Konklusion
Kombinationen af React Native og en CI/CD-løsning som Codemagic fjerner behovet for en Mac til iOS-appudvikling. Selvom der kan opstå visse udfordringer under debugging, er det fuldt ud muligt at udvikle og udgive iOS-apps til App Store uden at eje en Mac. Ved at udnytte disse værktøjer kan udviklere opnå en mere fleksibel og omkostningseffektiv udviklingsproces.
Ofte Stillede Spørgsmål
Kræver React Native CLI en Mac?
Mens React Native CLI traditionelt har krævet en Mac til iOS-udvikling, muliggør værktøjer som Codemagic og Docker udvikling og build på andre operativsystemer som Linux. Expo CLI tilbyder også en mere tilgængelig vej, der kan fungere uden en Mac.
Hvordan deployer man en React Native app til App Store uden en Mac?
Man kan bruge CI/CD-platforme som Codemagic eller Visual Studio App Center. Disse platforme giver mulighed for at bygge og signere iOS-apps ved hjælp af cloud-baserede ressourcer, hvilket eliminerer behovet for en fysisk Mac. Første gangs deployment kan dog kræve adgang til en Mac, enten direkte eller via en cloud-tjeneste, til den indledende opsætning og upload.
Er Expo kompatibel med iOS?
Ja, Expo er fuldt ud kompatibel med iOS. Expo CLI gør det muligt at udvikle og teste iOS-apps, og mens det kan være mere bekvemt at have en Mac til visse aspekter af deployment, kan man også deploye Expo-apps til App Store uden en Mac ved hjælp af CI/CD-værktøjer.

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