14

TLDR:

A. Ausgabe App mit Enterprise-CertDistributing iOS App im App Store und Enterprise

Fehler beim Export: Wildcard-App-ID kann nicht verwendet in Haus Provisioning Profile

erstellen werden

B. richtige Ansatz App auf Unternehmen und App Store zu verteilen

Seit Jahren vertreiben wir Apps im AppStore von Apple, Enterprise ist neu hinzugekommen. - App hat Watch App und unterstützt iOS 8+.

Was ist bis jetzt getan:
- Zwei verschiedene Dev-Konten und Zertifikate.
- Separate Provisioning-Profile auf jeder Konten
- Build-Config und Schema für Unternehmen ein App Store
- Schema/Config zwischen den Einstellungen wie bund wechseln usw.
- Erfolgreich Archiv Enterprise Application

I haben keine separaten info.plist oder Berechtigungen erstellt (muss ich?)

Issue: Enterprise Archive zu exportieren Wenn ich versuche, erhalte ich Fehler

Wildcard App-ID kann nicht Profile <

Ich habe erstellt richtige Provisioning-Profile tun zu schaffen, in Haus-Bereitstellung verwendet werden. Keine von ihnen ist Platzhalter, außer von Xcode erstellt.

Ich habe this post gelesen, die besagt, dass verschiedene Ziele erstellt werden müssen. Das ist der Aufwand, um beide Ziele synchron zu halten.

Frage:

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

Haben Sie sichergestellt, dass alle Schritte im folgenden Link ausgeführt werden? https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/DistributingEnterpriseProgramApps/DistributingEnterpriseProgramApps.html – uchiha

+0

ja, ich habe. Danke – kthorat

Antwort

4

Verwenden von Targets

Neue Ziele tun einigen Aufwand erstellen (neue Dateien müssen auf alle relevanten Ziele hinzugefügt werden). Neue Ziele ermöglichen, welche Datei wo geht, bieten eine Plattform für separate plist & config, Unit-Tests leicht compartmentalize usw.

Denken Sie daran, dass App Store ausführbare und Unternehmen ausführbar sind zwei verschiedene Anwendungen mit unterschiedlichen Zertifikaten und Signaturen.(1)


separates Ziel Empfehlungen (von einem tatsächlichen Produkt)

  • Geteilt Entitlements
  • PROJECT> Ziele> Allgemein> Team>holen separate Teams gibt
  • < deinTarget>. xconfig (optional & handlich)
  • .plist (wahrscheinlich, aber nicht erforderlich) (2)

(1) Same kann über Apple-Uhr-Executables gesagt werden
(2) Separate plist erlaubt für Runtime Magic: Single-Code von Ressourcen gesteuert.

+0

Danke für die Antwort. Ich kann verschiedene Provisioning-Profile, Zertifikate und Bundle-IDs mithilfe der Build-Konfiguration verwalten. Was Teams übrig lässt, muss ich noch manuell managen. Ich denke, das ist besser als zwei Ziele zu verwalten. – kthorat

+1

Können Sie eine Antwort auf Ihre eigene Frage mit Details posten, damit andere Ihre Erfahrungen nutzen können? – SwiftArchitect

+0

Wahrscheinlich wirst du irgendwann Unterschiede in den Berechtigungen haben, ich wäre daran interessiert, wie man mit denen ohne unterschiedliche Ziele umgehen kann! – dogsgod

1

Es ist ziemlich einfach zu tun, wenn Sie separate Build-Skript für jede Anwendung erstellen können. Kein separates Ziel erforderlich.

Hier ist mein Build-Skript: # Erstellt von Nguyen Tuan am 08.10.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 

Und dann zwei Befehls bauen, eine für Unternehmen zu bauen und einen für App-Store zu bauen, so etwas wie dieses:

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" 

Im Fall, dass Sie die copy_resource Skript :

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 

Von nun an laufen nur den Befehl, und Sie werden einen Build entweder in Arbeitsordner oder in Xcode Organizer

0 sehen
+0

IMHO, (Ziel)> (Skript), ** 0 Zeilen ** Code. – SwiftArchitect

+0

Es kommt darauf an. Mein Projekt enthält viele Anwendungen mit unterschiedlichen Einstellungen. Ich kann das Skript mit kleinen Änderungen auch wiederverwenden. – sahara108

1

Scheint wie das Bereitstellungsprofil nicht richtig festgelegt ist.

Der einfachste Weg, dies zu tun, ist eine zusätzliche Konfiguration zu erstellen.

Wählen Sie das Projekt im Navigator aus. Kopieren Sie dann die Version Konfiguration und benennen Sie sie in Enterprise Distribution oder Enterprise Release um.

enter image description here

Dann wird Ihr Ziel auswählen und zu Build-Einstellungen gehen. Dort können Sie die Einstellungen für Code Signing Identität, Provisioning Profil entfalten. Sie müssen auch eine andere Paketkennung verwenden.

Überprüfen Sie, welche Konfiguration Sie auch im Archivschema verwenden.

+0

Dies ist alles richtig eingerichtet. Ich habe verschiedene Bündel-IDs für App-, Extension- und Watch-Ziele. Ich kann auch archivieren. – kthorat

0

Wir hatten den Fehler

Wildcard App-ID kann nicht Profile

Wir lösten es durch manuell Verteilung (im Haus) Hinzufügen zu schaffen, in Haus-Bereitstellung verwendet werden Provisioning-Profil in das Apple Developer Portal ...

enter image description here