Dans iOS 8, lorsque nous créons une nouvelle extension, nous devons décider à quelle cible elle est attachée. L'extension aura le même préfixe d'ID de bundle que la cible.
Voici ma configuration: j'ai 3 cibles (production, staging, local) et une cible d'extension que je ne veux pas dupliquer 3 fois.
Juste pour clarifier la réponse de Neo Chen , modifiez chacun des schémas de vos cibles parentales:
Générer> Pré-actions> Nouvelle action de script d'exécution> Fournir les paramètres de génération à partir de (schéma parent).
Collez ceci pour chaque extension:
#!/bin/bash
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="notification-service"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
Semble fonctionner sur la première version.
Il semble que vous devriez pouvoir simplement dupliquer la cible d'extension avec son propre Info.plist, mais pas autre chose.
Cependant, lorsque vous créez une extension, Xcode ajoute des "extensions d'application intégrées" aux phases de génération de la cible de l'application, comme indiqué ci-dessous, et il n'y a pas encore d'interface utilisateur pour le faire.
Néanmoins, vous pouvez créer l'extension pour la deuxième cible, puis supprimer tous les fichiers sauf le .plist et corriger ce qui doit être corrigé. Voici une étape par étape:
J'ai créé un script d'exécution pour prendre en charge cette exigence
#!/bin/sh
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${SRCROOT}/ImagePush/Info.plist"
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion" "${SRCROOT}/ImagePush/Info.plist"
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.ImagePush" "${SRCROOT}/ImagePush/Info.plist"
ImagePush est mon extension
ajoutez à la cible celle dont vous avez besoin et ajoutez assurez-vous que ce script s'exécute avant votre paramètre d'extension dans les phases de construction, puis il vous suffit de faire l'action de construction deux fois (PS: la première fois, il échouera, essaiera de s'améliorer) et il prendre en charge plusieurs cibles
Vous devez créer plusieurs extensions pour chaque ID, mais vous pouvez créer un cadre dynamique et simplement le lier à chaque extension. Vous n'aurez alors pas besoin de dupliquer votre code.