Is there a bug in Xamarin Studio?

Løsning af iOS Kode-Signeringsfejl i Xamarin

24/05/2023

Rating: 4.91 (15837 votes)

At udvikle mobile applikationer kan være en givende, men til tider også en udfordrende proces. Især når det kommer til iOS-platformen, kan kode-signering og provisionering ofte føles som en uigennemtrængelig mur af fejlmeddelelser. En af de mest almindelige og frustrerende fejl, Xamarin-udviklere støder på, er: "No Valid iOS code signing keys found in keychain. Please enable Automatic Provisioning from the iOS Bundle Signing page". Denne artikel vil dykke ned i roden af dette problem og give dig en omfattende guide til at løse det, samt relaterede udfordringer, der kan opstå undervejs.

How to remove entitlements in Xamarin?
On the Xamarin forums I found the following solution that worked for me: Open your Xamarin.Forms projects. Unload the iOS project in Visual Studio. Remove ‘ Entitlements.plist’ from the ‘CodesignEntitlements’

Målet er at give dig en klar forståelse af, hvad kode-signering indebærer, hvorfor det er så vigtigt for iOS, og hvordan du effektivt kan fejlfinde og løse de mest almindelige problemer, der forhindrer din Xamarin-app i at køre på en iOS-simulator eller en fysisk enhed. Uanset om du bruger Xamarin.Forms, Xamarin Studio, eller Visual Studio på Windows med en Mac-byggehost, vil denne guide forsyne dig med de nødvendige værktøjer og trin til at komme videre.

Indholdsfortegnelse

Hvad er iOS Kode-Signering, og hvorfor er det Nødvendigt?

Før vi kaster os ud i fejlfindingen, er det essentielt at forstå fundamentet for iOS kode-signering. Apple har et strengt sikkerheds- og økosystemkontrolsystem, der sikrer, at kun betroede og godkendte applikationer kan installeres og køre på deres enheder. Dette opnås gennem en proces kaldet kode-signering.

Kode-signering er Apples måde at verificere appens oprindelse og integritet på. Når du bygger en iOS-app, skal den signeres digitalt med et certifikat, der er udstedt af Apple. Dette certifikat beviser, at appen kommer fra en verificeret udvikler (dig!) og ikke er blevet manipuleret med, siden den blev signeret. Certifikatet er knyttet til en privat nøgle, som skal opbevares sikkert i din Mac's nøglering (Keychain Access).

Ud over selve kode-signeringen skal iOS-apps også have en provisioneringsprofil. En provisioneringsprofil er en fil, der binder din apps App ID (en unik identifikator for din app), dine udviklercertifikater og de enheder, som appen må køre på, sammen. Den indeholder også information om appens rettigheder (entitlements), som er specifikke funktioner, din app kan bruge, såsom push-notifikationer, Apple Pay eller HealthKit-integration. Uden den korrekte provisioneringsprofil kan din app ikke installeres eller køre på en iOS-enhed.

Når Xamarin bygger din iOS-app, udføres alle disse trin – appen signeres med dit udviklercertifikat, og den pakkes med den korrekte provisioneringsprofil. Fejlmeddelelsen "No Valid iOS code signing keys found in keychain" indikerer typisk, at Xamarin (eller mere specifikt, den Mac-byggehost, den kommunikerer med) ikke kan finde eller få adgang til de nødvendige certifikater og nøgler i Mac'ens nøglering.

How do I add capabilities to a Xamarin application?
In addition, it's recommended that you use Apple Account Management with VS (Tools > Options > Xamarin > Apple Accounts, enter the App Store Connect API key) and re-download the certificates and profiles. Besides, do you add capabilities to your application? Adding capabilities to an application often requires additional provisioning setup.

Fejlfinding: "No Valid iOS Code Signing Keys Found in Keychain" og Relaterede Problemer

Lad os nu dykke ned i de specifikke scenarier og løsninger, der kan hjælpe dig med at overvinde disse irriterende kode-signeringsfejl.

Løsning 1: Aktivering af Automatisk Provisionering

Apples automatiske provisionering er designet til at forenkle processen betydeligt ved at lade Xcode eller Visual Studio automatisk oprette og administrere dine certifikater og provisioneringsprofiler. Dette er ofte den nemmeste vej at gå, især for nye projekter eller hvis du ikke har brug for avancerede app-rettigheder.

For at aktivere automatisk provisionering i Visual Studio (som også gælder for Xamarin):

  1. Åbn dit Xamarin iOS-projekt i Visual Studio.
  2. Højreklik på iOS-projektet i Solution Explorer, og vælg Egenskaber (Properties).
  3. Gå til fanen iOS Bundle Signing.
  4. Vælg din Apple Developer-konto under 'Signing Identity'. Hvis du ikke har en, skal du tilføje den ved at klikke på 'Add Account...' og logge ind med dit Apple ID, der er tilknyttet en udviklerkonto.
  5. Vælg Automatic Provisioning som 'Provisioning Profile'.
  6. Visual Studio vil nu forsøge at oprette eller hente de nødvendige certifikater og profiler. Sørg for, at din Mac-byggehost er forbundet og tilgængelig, da certifikaterne installeres på Mac'ens nøglering.

Vigtig Note: Begrænsninger ved Automatisk Provisionering

Selvom automatisk provisionering er praktisk, understøtter den ikke alle app-rettigheder. Hvis din app har brug for specifikke funktioner, kan du stadig støde på problemer. De mest almindelige rettigheder, der ikke understøttes af automatisk provisionering, inkluderer:

Rettighed (Entitlement)Beskrivelse
App GroupsDeling af data mellem apps eller app-udvidelser.
Associated DomainsTil at linke din app til specifikke domæner (f.eks. universelle links).
Apple PayIntegration af betalinger via Apple Pay.
Game CenterIntegration med Apples spilnetværk.
HealthKitAdgang til sundhedsdata.
HomeKitInteraktion med smarte hjemmeenheder.
In-App PurchaseKøb inde i appen.
Push NotificationsModtagelse af push-notifikationer.
WalletAdgang til Wallet (tidligere Passbook).

Hvis din app kræver en eller flere af disse rettigheder, skal du sandsynligvis benytte dig af manuel provisionering.

Løsning 2: Manuel Provisionering

Manuel provisionering giver dig fuld kontrol over certifikater og profiler, men kræver mere opsætning på Apple Developer-portalen. Dette er nødvendigt, hvis automatisk provisionering ikke fungerer, eller hvis din app har brug for de førnævnte rettigheder.

Processen involverer typisk:

  1. Oprettelse af et App ID for din app på Apple Developer-portalen.
  2. Oprettelse af et udviklercertifikat (og en privat nøgle) og installation af det i Mac'ens nøglering.
  3. Registrering af de enheder, du vil teste på, på portalen.
  4. Oprettelse af en udviklingsprovisioneringsprofil, der binder App ID, certifikater og enheder sammen.
  5. Download af provisioneringsprofilen og installation af den i Xcode på din Mac.
  6. I Visual Studio, under iOS Bundle Signing, skal du vælge dit manuelt oprettede certifikat og provisioneringsprofil.

Det er afgørende, at certifikatet og den private nøgle er korrekt installeret i Mac'ens nøglering (under 'Login' eller 'System' keychains) for at Xamarin kan finde dem.

Is there a bug in Xamarin Studio?
Yeah it seems bug in Xamarin Studio It has work around that you must have AppleID just to login on XCode. Try following: Now go back to Xamarin Studio and try to build your application again on simulator. Try to rebuild and issues gone!! Even if you have already done this and it was working in the past, check this area.

Løsning 3: Specifikke Problemer med Xamarin.Forms Projekter (Entitlements.plist)

En specifik situation, der ofte opstår i Xamarin.Forms-projekter, er en fejl relateret til Entitlements.plist, selvom du ikke eksplicit bruger særlige rettigheder. Fejlmeddelelsen kan være den samme, men årsagen er en anden.

Den rapporterede løsning, der har virket for mange, involverer at redigere .csproj-filen for dit iOS-projekt:

  1. Åbn dit Xamarin.Forms-projekt i Visual Studio.
  2. Højreklik på iOS-projektet i Solution Explorer, og vælg 'Unload Project'.
  3. Højreklik igen på det nu 'unloaded' projekt, og vælg 'Edit [YourProjectName].csproj'.
  4. Søg efter elementet <CodesignEntitlements>. Det vil ofte være inde i en <PropertyGroup>, der ligner dette:
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
    </PropertyGroup>
  5. Fjern indholdet Entitlements.plist fra <CodesignEntitlements>-tagget, så det enten er tomt eller fjernet helt, afhængigt af konteksten. For eksempel: <CodesignEntitlements></CodesignEntitlements> eller fjern linjen helt, hvis den ikke er nødvendig for andre konfigurationer.
  6. Gem .csproj-filen.
  7. Højreklik på iOS-projektet i Solution Explorer igen, og vælg 'Reload Project'.
  8. Prøv at bygge din app igen.

Denne løsning virker, fordi nogle Xamarin.Forms-skabeloner automatisk inkluderer en reference til Entitlements.plist, selvom filen måske ikke er nødvendig eller korrekt konfigureret, især for simulator-builds, hvilket kan forvirre kode-signeringsprocessen.

Løsning 4: Xamarin Studio / Xcode Forbindelse (Log ind med Apple ID)

Hvis du oplever problemer, især med ældre versioner af Xamarin Studio eller når du arbejder med simulatorer, kan problemet ligge i Xcodes evne til at 'se' dine udviklerkonti. Selvom det kan virke som en fejl i Xamarin, er løsningen ofte at sikre, at Xcode er korrekt konfigureret med dit Apple ID.

Trin til løsning:

  1. Sørg for, at du har en gyldig Apple Developer-konto. Hvis ikke, skal du oprette en på Apple Developer-webstedet.
  2. Åbn Xcode på din Mac.
  3. Gå til Xcode-menuen > Preferences > Accounts.
  4. Klik på '+'-knappen nederst til venstre og tilføj dit Apple ID. Log ind med de legitimationsoplysninger, der er tilknyttet din udviklerkonto.
  5. Når du er logget ind, vil Xcode synkronisere dine udviklerkonti, certifikater og provisioneringsprofiler.
  6. Gå tilbage til Visual Studio (eller Xamarin Studio) på din Windows-maskine, og prøv at genopbygge din applikation.

Denne handling sikrer, at Xcode har de nødvendige oplysninger til at administrere dine kode-signeringsressourcer, hvilket Xamarin derefter kan udnytte via sin forbindelse til Mac'en.

Løsning 5: Fejl ved Brug af Remote Mac (Windows-udvikling)

Når du udvikler Xamarin.iOS på Windows, forbindes Visual Studio til en Mac-byggehost. Fejlen "iOS code signing key 'Apple Development: John Doe (5L4565FZ2L)' not found in keychain" indikerer, at den specifikke kode-signeringsnøgle, der skal bruges, ikke kan findes på den Mac'ens nøglering, som Visual Studio kommunikerer med.

How do I enable automatic provisioning from the iOS bundle signing page?
I'm using Maui, and in my case this error came followed by the sentence "Please enable automatic provisioning from the ios bundle signing page". So right click your project on Solution Explorer, click on Properties, expand iOS node, and select "Bundle Signing".

Vigtigt: Certifikatet og den private nøgle skal være installeret på Mac'en, ikke på din Windows-maskine eller den fysiske iPhone.

Fejlfindingstrin:

  1. Verificer certifikatinstallation på Mac:
    • Åbn Keychain Access på din Mac (Finder > Applications > Utilities > Keychain Access).
    • Vælg 'Login' eller 'System' nøglering.
    • Søg efter dit 'Apple Development' eller 'iPhone Developer' certifikat. Sørg for, at der er en lille trekant ved siden af certifikatet, som du kan udvide for at afsløre den tilhørende private nøgle. Hvis den private nøgle mangler, er certifikatet ikke korrekt installeret, eller du installerede kun den offentlige del.
    • Hvis certifikatet mangler eller er ufuldstændigt, skal du genoprette og geninstallere det. Den nemmeste måde er ofte at lade Xcode eller Visual Studio med automatisk provisionering gøre det for dig (se Løsning 1).
  2. Tjek Apple ID i Xcode: Som beskrevet i Løsning 4, sørg for, at dit Apple ID er korrekt tilføjet og aktivt under Xcode > Preferences > Accounts.
  3. Genstart Visual Studio og Mac Build Host: Nogle gange kan en simpel genstart af både Visual Studio på Windows og Xamarin Mac Agent (eller genstart af Mac'en) løse forbindelses- og synkroniseringsproblemer.
  4. Kontroller provisioneringsprofiler på Mac: Åbn Xcode > Preferences > Accounts, vælg din konto, og klik på 'Download Manual Profiles' eller 'Manage Certificates'. Sørg for, at de korrekte provisioneringsprofiler er tilgængelige og ikke er udløbet.

Den fejlmeddelelse du ser, refererer direkte til Mac'ens nøglering, da det er Mac'en, der udfører den faktiske kode-signering.

Hvad med Android Emulatoren?

Du nævnte også, at din Android-emulator ikke virker. Det er vigtigt at bemærke, at problemer med Android-emulatorer normalt er helt uafhængige af iOS kode-signeringsproblemer. Disse to platforme har separate udviklingsmiljøer og krav.

Almindelige årsager til Android-emulatorproblemer inkluderer:

  • Mangler i Android SDK-installationen.
  • Problemer med virtualiseringsteknologier som HAXM (Intel) eller Hyper-V (Microsoft).
  • Korrupt emulator-billede.
  • Utilstrækkelig RAM eller CPU tildelt emulatoren.

For at fejlfinde Android-emulatorproblemer bør du fokusere på Android SDK Manager i Visual Studio, kontrollere Hyper-V-indstillinger på Windows (hvis relevant) og sikre, at du har nok systemressourcer.

Ofte Stillede Spørgsmål

Hvad er forskellen på automatisk og manuel provisionering?

Automatisk provisionering er en forenklet metode, hvor Xcode eller Visual Studio automatisk opretter og administrerer dine udviklercertifikater og provisioneringsprofiler baseret på din Apple Developer-konto. Det er hurtigt og nemt, men har begrænsninger med hensyn til understøttede app-rettigheder (f.eks. push-notifikationer, Apple Pay). Manuel provisionering giver dig fuld kontrol. Du opretter og administrerer selv alle certifikater, App ID'er og provisioneringsprofiler via Apple Developer-portalen. Det er mere komplekst at sætte op, men nødvendigt for apps, der kræver specifikke eller avancerede rettigheder.

Are there valid IOS code signing keys found in Keychain?
No "No Valid iOS code signing keys found in keychain. Please enable Automatic Provisioning from the iOS Bundle Signing page" Also wondering if there is way to run the Development on Local Android Device as well similar to iPhone Local Device?

Hvorfor skal jeg logge ind på Xcode med mit Apple ID?

At logge ind på Xcode med dit Apple ID (tilknyttet en udviklerkonto) er afgørende for, at Xcode kan administrere dine udviklerressourcer. Xcode fungerer som broen mellem din lokale udviklingsmaskine (Mac) og Apples udviklerportal. Ved at logge ind får Xcode adgang til at oprette, forny og downloade certifikater og provisioneringsprofiler direkte, hvilket er essentielt for både automatisk og manuel provisionering. Uden denne forbindelse kan Xcode ikke hente de nødvendige nøgler til kode-signering, hvilket forhindrer Xamarin i at bygge din app.

Kan jeg udvikle iOS-apps på Windows uden en Mac?

Teknisk set kan du bruge Xamarin.Forms' Hot Restart-funktion, som giver dig mulighed for at bygge og fejlfinde iOS-apps direkte på en lokal iPhone fra din Windows-maskine, uden en Mac-byggehost. Dog har Hot Restart betydelige begrænsninger: Det understøtter ikke alle app-rettigheder (som nævnt tidligere), og det er primært beregnet til hurtig iteration under udvikling, ikke til den endelige byggeproces eller apps med komplekse funktioner. For fuld iOS-udvikling med Xamarin på Windows er en forbundet Mac-byggehost stadig et krav.

Hvad er Entitlements (Rettigheder), og hvorfor er de vigtige?

Entitlements, eller rettigheder, er specifikke funktioner eller privilegier, som din iOS-app anmoder om fra operativsystemet. De er defineret i din apps Entitlements.plist-fil og er en del af din provisioneringsprofil. Disse rettigheder er afgørende for at give din app adgang til bestemte hardwarefunktioner, systemtjenester eller særlige API'er, der ellers ville være begrænset af sikkerhedsforanstaltninger. Eksempler inkluderer adgang til kameraet, placeringstjenester, push-notifikationer, adgang til Apple Pay, HealthKit-data eller evnen til at køre i baggrunden. Uden de korrekte rettigheder kan din app ikke bruge disse funktioner, og den vil sandsynligvis crashe, hvis den forsøger.

Konklusion

iOS kode-signering i Xamarin kan virke som en kompleks labyrint, men med den rette forståelse og de rigtige fejlfindingstrin er det en udfordring, der kan overvindes. Kernen i de fleste problemer ligger i enten manglende eller forkert konfigurerede certifikater og provisioneringsprofiler på din Mac's nøglering, eller en manglende forbindelse mellem Xcode/din Apple ID og din udviklerkonto.

Husk altid at tjekke din Mac's nøglering, Xcodes kontoindstillinger og dine projekts provisioneringsindstillinger i Visual Studio. Ved at følge de trin, der er beskrevet i denne guide, burde du være i stand til at løse de mest almindelige kode-signeringsfejl og få dine Xamarin-apps til at køre problemfrit på iOS-platformen. Tålmodighed og systematisk fejlfinding er dine bedste venner i denne proces!

Hvis du vil læse andre artikler, der ligner Løsning af iOS Kode-Signeringsfejl i Xamarin, kan du besøge kategorien Teknologi.

Go up