NativeScript / NativeScript/nativescript-cli

Distribution build for watch target fails

Aperta
#5,291 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug os: ios
Lingua principale
JavaScript
Stelle
1.1k
Fork
204
Merge medio
1g 9h
PR unite (30g)
8

Descrizione

Environment
Provide version numbers for the following components (information can be retrieved by running tns info in your project folder or by inspecting the package.json of the project):

  • CLI: 6.4.1
  • Cross-platform modules: 6.4.2
  • iOS Runtime: 6.4.2

Describe the bug

I have added a watch project to my Nativescript project by following the instructions from here #4589 . I can successfully run tns prepare ios and the watch project is included in the xcode project afterwards.
I am using manual code signing to sign the iOS app as well as the watchOS app. Which both works perfectly fine as long as I do a development build.

But once I try to run the distribution build by providing the distribution profile via the --provision option I get the following error:

error: Provisioning profile "Generic Profile for Internal Deployment" doesn't include signing certificate "Apple Development: John Doe (XXXXX)". (in target 'watchapp Extension' from project '...')

So it looks like Provisioning Profile is updated but the wrong signing certificate is used. So looking into the autogenerated project.pbxproj reveals the following build setting for the watchapp and watchextension:
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";

This will apply the code settings only to iOS SDK targets. And hence the signing certificates for the watch project don't get updated. Changing the build setting for the watch targets to
"CODE_SIGN_IDENTITY" = "iPhone Distribution";
fixes the problem.

I assume the fix could be done simply by checking for the target in here:
pbxproj-dom

Unfortunately the code signing still fails for the distribution build after this fix. The --provision option makes sure that the correct provisioning profile is used when exporting the archive and building the ipa.
This is done by passing an exportOptions.plist file to xcodebuild.

This file is autogenerated by Nativescript during the tns build and it needs to state the correct provisioning profile for each target. But unfortunately the export-options-plist-service.ts provides only the profile for the iOS target. And therefore the archive export fails with the follwoing error:

Error Domain=IDEProvisioningErrorDomain Code=9 ""watchapp.app" requires a provisioning profile." UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription="watchapp.app" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

Adding the following lines in export-options-plist-service.ts fixes the issue
<key>${projectData.projectIdentifiers.ios}.watchkitapp</key> <string>${provision}</string> <key>${projectData.projectIdentifiers.ios}.watchkitapp.watchkitextension</key> <string>${provision}</string>

To Reproduce
Run Nativescript project with watch extension and provide distribution profile via the --provision option

Expected behavior
ipa should be successfully created and signed

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo una build di distribuzione per un progetto NativeScript con un’estensione watch usando l’opzione --provision. Leggi lib/services/ios/export-options-plist-service.ts e ispeziona il project.pbxproj generato, quindi esamina la gestione del target pbxproj-dom referenziato. Il lavoro è completato quando l’app iOS, l’app watch e l’estensione watch usano i profili di firma richiesti e viene creato correttamente un IPA firmato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
ios, javascript
Ambito
build-system, cli, mobile-dev
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.