14

TLDR:

A. Problema nell'esportazione di app con Enterprise CertDistribuzione iOS App su App Store e Enterprise

Errore: carattere jolly ID applicazione non può essere utilizzato per creare in casa provisioning profili

approccio

B. Diritto di distribuire app su AppStore Enterprise e

Da anni distribuiamo app su AppStore di Apple, Enterprise è una nuova aggiunta. - L'app ha l'app di controllo e supporta iOS 8+.

Cosa è stato fatto finora:
- Due account e certificati dev diversi.
- profili di provisioning separati su ciascuna conti
- Costruire Config e Scheme for Enterprise un AppStore
- utilizzando Scheme/Config per passare da impostazioni come BundleID, ecc
- con successo Archivio Enterprise Application

I NON hanno creato info.plist o diritti separato (ho bisogno di?)

Problema: quando si tenta di esportare Enterprise Archive, sto errore

ottenendo

jolly ID applicazione non può essere utilizzato per creare in casa provisioning profili <

Io ho profili di provisioning adeguati creati. Nessuno di questi è jolly, tranne che creato da Xcode.

Ho letto this post, che dice che è necessario creare obiettivi diversi. Questo è il costo di mantenere sincronizzati entrambi gli obiettivi.

Domanda:

bool itIsPossible = Can this be achieved with Configuration/Schemes? 

if (itIsPossible){ 
– What else I need to create separate entitlements etc? 
}else{ 
– Do I have to create new target to support Enterprise App? 
– Separate Target for Watch and Extension? 
– What else I need to create separately Info.plist, entitlements etc? 
} 
+0

Ti sei assicurato che tutti i passaggi nel link sottostante siano stati eseguiti? https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/DistributingEnterpriseProgramApps/DistributingEnterpriseProgramApps.html – uchiha

+0

sì, ho. Grazie – kthorat

risposta

4

Utilizzando Obiettivi

Nuovi obiettivi Do creare un certo overhead (nuovi file devono essere aggiunti a tutti gli obiettivi importanti). Nuovi obiettivi consentono di compartimenti stagni facilmente quale file va dove, fornire una piattaforma per separati plist & config, unit test, ecc

Ricordate che App Store eseguibile e Enterprise eseguibile sono due applicazioni diverse, con diversi certificati e firme.(1)


obiettivo distinto raccomandazioni (da un prodotto reale)

  • Entitlement condivise
  • PROGETTO> OBIETTIVI> Generale> Team>raccogliere squadre separate ci
  • < yourTarget>. xconfig (opzionale & a portata di mano)
  • .plist (molto probabilmente, ma non obbligatorio) (2)

(1) Lo stesso si può dire per Apple Osservare eseguibili
(2) separata plist permette per magia runtime: codice singolo controllato dalle risorse.

+0

Grazie per la risposta. Sono in grado di gestire diversi profili di provisioning, certificati e ID bundle utilizzando la configurazione di build. Che lascia i team, che devo ancora gestire manualmente. Penso che sia meglio che gestire due obiettivi. – kthorat

+1

Puoi pubblicare una risposta alla tua stessa domanda con i dettagli, affinché altri facciano leva sulla tua esperienza? – SwiftArchitect

+0

Probabilmente avrai delle differenze nei diritti a un certo punto, sarei interessato a gestire quelli senza target diversi! – dogsgod

1

È abbastanza facile da eseguire se è possibile creare script di compilazione separati per ciascuna applicazione. Non c'è bisogno di avere un obiettivo separato.

Ecco il mio script di costruzione: # Creato da Nguyen Tuan il 10/8/14. ! #!/Bin/sh

AP_NAME="$1" 
echo "App name $AP_NAME" 
FILE_NAME="$2" 
echo "FILE_NAME $FILE_NAME" 
SCHEME="$3" 
echo "SCHEME $SCHEME" 
PROVISIONING_NAME="$4" 
echo "provisioning $PROVISIONING_NAME" 
BUNDLE_ID="$5" 
echo "BUNDLE_ID $BUNDLE_ID" 
AP_ICON="$6" 
echo "AP_ICON $AP_ICON" 
PARENT_FOLDER="$7" 
echo "PARENT_FOLDER $PARENT_FOLDER" 
CONFIG="$8" 
echo "CONFIG $CONFIG" 

PROJECT_HOME_DIR="$9" 

#Goto working folder 
MY_PATH="`dirname \"$0\"`" 
cd $MY_PATH 
echo "build sh: This is the current working directory: $MY_PATH" 
SCRIPT_FOLDER=$(basename "$MY_PATH") 

MY_NAME=$(whoami) 
echo "Script Folder $SCRIPT_FOLDER" 
sudo sh sudo.sh 
echo "Global PATH: \n$PATH" 

#Go up to Project folder 
cd ../../ 
rm -r -f build/$PARENT_FOLDER 

PLIST=$PROJECT_HOME_DIR/Info.plist 
echo "Please enter build number" 
#BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PLIST") 
#BUILD_NUMBER=$(expr $BUILD_NUMBER + 1) 
BUILD_NUMBER=`git rev-list HEAD --count` 
echo "Get provisioning file: UUID + name for $PROVISIONING_NAME" 

if test -d ~/Library/MobileDevice/Provisioning\ Profiles/; then 
    ProfilesDir=~/Library/MobileDevice/Provisioning\ Profiles/ 
else 
    ProfilesDir=/Library/Developer/XcodeServer/ProvisioningProfiles/ 
fi 

array=$(ls "$ProfilesDir") 
provi="" 
for i in $array; \ 
do output=$(/usr/libexec/PlistBuddy -c 'Print :Name' /dev/stdin <<< $(security cms -D -i "$ProfilesDir/${i%%/}") 2>&1); \ 
echo $output; \ 
if [ "$output" == "$PROVISIONING_NAME" ]; then provi=$(/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i "$ProfilesDir/${i%%/}") 2>&1); break; fi;\ 
done 

#echo PROVISIONING_UUID=$provi >> provisioning.properties 
echo "selected profile $provi" 

/usr/libexec/Plistbuddy -c "Set CFBundleVersion $BUILD_NUMBER" "$PLIST" 
/usr/libexec/Plistbuddy -c "Set CFBundleIdentifier $BUNDLE_ID" "$PLIST" 
xcodebuild -alltargets -configuration "$CONFIG" clean 
xcodebuild -scheme $SCHEME PRODUCT_BUNDLE_IDENTIFIER=$BUNDLE_ID ONLY_ACTIVE_ARCH=NO ARCHS="armv7 arm64" PROVISIONING_PROFILE=$provi PRODUCT_NAME="$AP_NAME" ASSETCATALOG_COMPILER_APPICON_NAME=$AP_ICON archive -archivePath "build/$PARENT_FOLDER/$FILE_NAME.xcarchive" 
#xcodebuild -exportArchive -archivePath "build/$PARENT_FOLDER/$FILE_NAME.xcarchive" -exportPath "build/$PARENT_FOLDER" 
#-exportOptionsPlist $PLIST 
echo "export ipa file" 
rm -r -f build/$PARENT_FOLDER/$FILE_NAME.ipa 
sh $MY_PATH/create_ipa.sh build/$PARENT_FOLDER/$FILE_NAME.xcarchive build/$PARENT_FOLDER/$FILE_NAME.ipa 
mv build/$PARENT_FOLDER/**You need to change this to your app name**/.ipa build/$PARENT_FOLDER/$FILE_NAME.ipa 
rm -r -f $HOME/Dropbox/$FILE_NAME.ipa 
cp build/$PARENT_FOLDER/$FILE_NAME.ipa $HOME/Dropbox/$FILE_NAME.ipa 

rm -r -f "build/$CONFIG-iphoneos" 

echo "copy xcarchive file into organizer" 
sh $MY_PATH/copy_resource.sh build/$PARENT_FOLDER/$FILE_NAME.xcarchive $MY_NAME 

e quindi creare due comando build, uno per le imprese di costruzione e uno per App Store di build, qualcosa di simile:

AP_NAME="ABCD" 
FILE_NAME="An App Name" 
SCHEME="Scheme for enterprise build" 
PROVISIONING_NAME="Expected provisioning profile, what is shown in XCode" 
BUNDLE_ID="app bundle Id" 
AP_ICON="custom icon if need?" 
PARENT_FOLDER="the folder that will contains the build" 
CONFIG="Release" 

#Goto working folder 
MY_PATH="`dirname \"$0\"`" 
sh $MY_PATH/build.sh "$AP_NAME" "$FILE_NAME" "$SCHEME" "$PROVISIONING_NAME" "$BUNDLE_ID" "$AP_ICON" "$PARENT_FOLDER" "$CONFIG" 

In caso di necessità lo script copy_resource :

path=$1 
user=$2 
echo $path 
filename=$(basename "$path") 
extension="${filename##*.}" 
filename="${filename%.*}" 
now=`date +%Y-%m-%d` 
et=`date +%H:%M:%S` 
PATH="/Users/$user/Library/Developer/Xcode/Archives/$now" 
echo $PATH 
/bin/mkdir -p $PATH 
PATH=$PATH/$filename$et.$extension 
/bin/mv $path $PATH 

D'ora in poi, basta eseguire il comando e vedrete una build sia nella cartella di lavoro o in Xcode Organizer

+0

IMHO, (obiettivo)> (script), ** 0 righe ** di codice. – SwiftArchitect

+0

Dipende. Il mio progetto contiene molte applicazioni con impostazioni diverse. Posso anche riutilizzare lo script con piccole modifiche. – sahara108

1

Sembra che il profilo di provisioning non sia impostato correttamente.

Il modo più semplice per farlo è creare una configurazione aggiuntiva.

Selezionare il progetto nel navigatore. Quindi duplicare la configurazione Release e rinominarla in Distribuzione aziendale o Enterprise Release.

enter image description here

quindi selezionare la destinazione e andare a Creare Impostazioni. Qui è possibile aprire le impostazioni per Identificazione codice di identificazione, Profilo di provisioning. È inoltre necessario utilizzare un identificatore di bundle diverso.

Verificare la configurazione utilizzata nello schema di archiviazione.

+0

Questo è tutto configurato correttamente. Ho diversi ID di bundle per gli obiettivi App, Extension e Watch. Sono anche in grado di archiviare. – kthorat

0

Abbiamo avuto l'errore

jolly ID applicazione non può essere utilizzato per creare in casa provisioning profili

Abbiamo risolto con l'aggiunta manualmente una Distribuzione (In House) profilo di fornitura in il Portale per gli sviluppatori Apple ...

enter image description here

Problemi correlati