2015-02-11 5 views
10

Mein XCode-Projekt wurde auf verschiedene Arten eingerichtet, so dass ich die gleiche Codebasis für verschiedene Varianten meiner App verwenden kann, aber eindeutige Elemente wie App-Name, Version , bündeln Kennung, Symbol, Start-Bildschirm, usw. habe ich diese Website, um anschließend die meisten der Einrichtung zu tun: http://appfoundry.be/blog/2014/07/04/Xcode-Env-Configuration/Bedingte App mit verschiedenen Asset-Katalogen

ich habe auch eine config.plist verschiedene einzigartige Einstellungen enthält, mit jedem XCode Konfiguration zugeordnet, die erfolgreich wird erst beim Aufbau kopiert. Hier ist ein Ausschnitt des Run Script Build Phase, um das zu tun:

RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/config/${CONFIGURATION} 

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app 

echo "Copying all files under ${RESOURCE_PATH} to ${BUILD_APP_DIR}" 
cp -v "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/" 

Mein nächstes Ziel ist es, eine bestimmte Konfiguration des Vermögens Katalog kopieren, wenn gebaut, um zu vermeiden, all die unterschiedlichen Konfiguration der Bündelung Bilder in den Build, wodurch es aufgebläht wird. Ich habe die gleiche Lösung wie oben mit dem Run Script versucht, die Kopie Linie der Änderung der rekursiven Option, um (da Asset-Katalog im Wesentlichen ein Verzeichnis ist):

cp -rv "${RESOURCE_PATH}/"* "${BUILD_APP_DIR}/" 

Allerdings, wenn ich dies tun, meine app nicht zu bauen und sagt, es ist nicht in der Lage, das App-Symbol zu finden und Image zu starten. Irgendwelche Ideen? Diese

+0

Können Sie ein Beispielprojekt einrichten, in dem Sie dies versuchen? Ich denke an ein paar Probleme, aber es hängt alles davon ab, wie Sie Ihren Asset-Katalog in Ihrem Projekt einrichten. Ich würde gerne helfen, es ist eine sehr interessante Idee! –

+0

In der Zwischenzeit habe ich ein wenig untersucht. Ich könnte mich irren, aber wenn ich in meine gebauten Pakete schaue, sehe ich nur die richtigen App-Icons und nicht die anderen. Es scheint, dass Ihr Problem tatsächlich von xcode-Mechanik unter der Haube behoben wird. Könnten Sie das überprüfen? –

+0

Entschuldigen Sie, dass Sie so lange brauchen, um zu antworten. Es ist ein bisschen schwierig, ein Beispielprojekt zu erstellen. Nicht sicher, was du meinst, dass Xcode tatsächlich mein Problem behebt. Könntest du erklären? Es kann sich nicht beschweren, es kann meinen Startbildschirm und das Icon nicht finden. Grundsätzlich habe ich einen Asset-Katalog namens Bilder.xcasset für jede Konfiguration in einem Konfigurationsordner. Es wird kopiert wie config.plist. – codeman

Antwort

13

ist das, was Sie tun können, um diese Arbeit zu machen:

  • In einem separaten Asset-Katalog pro Konfiguration, wie Sie in der Regel einen Asset-Katalog zum Projekt würden hinzufügen. Nehmen wir an, für dieses Beispiel nennen wir diese Kataloge MediaForDebug.xcassets, MediaForAdHoc.xcassets und MediaForRelease.xcassets.
  • Stellen Sie sicher, dass die neu erstellten Asset-Kataloge alle Mitglieder Ihres Ziels sind (also NICHT hier ausschließen, wir werden das später tun on)
  • Fügen Sie jetzt eine benutzerdefinierte benutzerdefinierte Einstellung EXCLUDED_SOURCE_FILE_NAMES hinzu, wenn Sie Ihren Buildeinstellungen nicht bereits hinzugefügt wurde.
  • In der folgenden Abbildung sehen Sie die Werte für diese benutzerdefinierte Einstellung.

EXCLUDED_SOURCE_FILE_NAMES for config dependant asset catalogs

Auf diese Weise wird Xcode nur die entsprechenden Asset-Kataloge, kompilieren und die anderen ignorieren. Ich habe dies an einem unserer Projekte getestet und es funktioniert wie vorgesehen.

Viel Glück!

ANMERKUNG: Wenn Sie CocoaPods verwenden, können Probleme auftreten, da CocoaPods einen eigenen Build-Schritt hinzufügt, um Ihre Assets und die Ihrer Abhängigkeiten in einer .car-Datei zu kompilieren. Siehe https://github.com/CocoaPods/CocoaPods/issues/1546 für die Diskussion zu diesem Thema. TL; DR: Stellen Sie sicher, dass dieser Schritt nicht in der Build-Phase ausgeführt wird, oder bearbeiten Sie das CocoaPods-Skript, das ausgeführt wird, um das Asset Building nicht auszuführen.

+1

Genau was ich brauchte. Vielen Dank!!! – Nerrolken

+0

Falls Sie eine Menge verschiedener Konfigurationen, die folgende nützlich sein könnten: EXCLUDED_SOURCE_FILE_NAMES = Medien * .xcassets INCLUDED_SOURCE_FILE_NAMES = MediaForAdHoc.xcassets diese Weise können Sie nicht über die Vermögenswerte einer nach dem anderen auszuschließen. – Damnum

+0

"Fügen Sie einen separaten Asset-Katalog pro Konfiguration hinzu, genauso wie Sie normalerweise einen Asset-Katalog zu Ihrem Projekt hinzufügen würden." - Wie fügen Sie einen separaten Asset-Katalog pro Konfiguration hinzu? – Chris