Separate Ziele für jeden Client sollte der Weg sein. Für die Funktionen würde ich vorschlagen, zuerst ein Makro zu erstellen, das den Client in den Zieleinstellungen identifiziert (unter "Präprozessor-Makros" auf der Registerkarte "Erstellen") und dann über FeatureDefines verfügt.h-Datei, die wie folgt aussieht:
#ifdef macroClientA // assume client A wants features 1 and 3
# define macroFeature1
# define macroFeature3
#endif
// and similarly for the other clients
Jetzt können Sie
verwenden
#import featureDefines
#ifdef macroFeature1
jeder Ort, den Sie brauchen, um zu testen, ob Merkmal 1 erwünscht ist oder nicht.
Für die separaten Symbole können Ihre Zieleinstellungen für jeden Client eine andere Datei info.plist angeben, und diese Dateien können wiederum einen anderen Dateinamen für das Symbol angeben.
Für die separaten Begrüßungsbildschirme erfordert iOS immer, dass der Begrüßungsbildschirm den Namen Default.png trägt. Sie können jedoch in verschiedene Unterverzeichnisse Ihres Projektverzeichnisses wechseln. Sie können steuern, welche für welches Ziel verwendet wird, indem Sie mit der rechten Maustaste auf Xcode "Gruppen & Dateien" klicken, Zielmitgliedschaft auswählen, das Kontrollkästchen für das gewünschte markieren und sicherstellen, dass die anderen nicht markiert sind.
Für Ressourcen, würde ich vorschlagen, Ihre Ressource-Dateien wie diese Namensgebung: verwendet werden
resourceName.ext // generische Ressource, wenn es keine kundenspezifische eines
resource-clientName.ext ist // client- spezifische Ressource
Als nächstes setzen eine allgemeine Ressource-Finder-Methode auf, die etwa wie folgt aussieht:
-(NSString *) resourcePathForResourceName: (NSString *) resourceName extension: (NSString *) ext {
NSString *clientName;
#ifdef macroClientA
clientName = @"clientA";
#endif // and similarly for the other clients
NSString *clientSpecificName = [NSString stringWithFormat: @"%@-%@.%@", resourceName, clientName, ext];
NSString *genericName = [NSString stringWithFormat: @"%@.%@"];
if ([[NSFileManager defaultManager] fileExistsAtPath: clientSpecificName])
return clientSpecificName;
else if ([[NSFileManager defaultManager] fileExistsAtPath: genericName])
return genericName;
else
// handle the error
}
alle Datei Ihre Ressource Lauf greift durch diese Methode wird es Ihnen ermöglichen, Fügen Sie Ihrem Projekt mandantenspezifische Ressourcen hinzu, ohne eine einzelne Codezeile zu ändern.
Vielen Dank für eine Prämie für das Aufstellen. Selbes Problem hier. FWIW, siehe meine Frage zu einem ähnlichen Thema: http://stackoverflow.com/questions/4112483/how-does-xcode-handle-import-header-statements-in-with-multiple-targets – makdad