2015-12-03 10 views
15

Mam różne konfiguracje kompilacji (Debug, scena, Prod) zdefiniowane dla mojego app i używam zdefiniowane przez użytkownika ustawienia produkcji:Stosować zdefiniowane przez użytkownika ustawienia budować w zwyczaju .plist złożyć

enter image description here

skonfigurować Facebook login i inne rzeczy w Info.plist pliku:

enter image description here

w tym scenariuszu $(USER_DEFINED_SETTINGS) notacja wykonuje pracę.

Kiedy próbowałem skonfigurować Google signin, który wymaga zastosowania dodatkowych .plist plik (GoogleService-Info.plist) i użyłem zdefiniowane przez użytkownika ustawienia w taki sam sposób, co robię w pliku Info.plist, to nie działa .

Jak mogę użyć ustawień zdefiniowanych przez użytkownika w niestandardowych plikach .plist? Jeśli nie mogę, jak mogę to obejść?

Odpowiedz

28

To NIE możliwe użycie zdefiniowane przez użytkownika ustawienia w zwyczaj .plist pliku, więc trzeba sobie z tym poradzić w inny sposób.

Chociaż można skopiować swój zwyczaj .plist złożyć we właściwym miejscu:

  1. Utwórz nowy folder (na przykład: GoogleServiceInfoPlists).
  2. skopiować tam wszystkie pliki .plist dla każdego środowiska (na przykład: GoogleService-Info-Debug.plist,GoogleService-Info-Stage.plist i GoogleService-Info-Prod.plist).
  3. Dodaj nowy Run Script Phase (Xcode: Target-> Build Phases -> "+" button).
  4. Użyj skryptu poniżej skopiować (wymienić) .plist pliku dla danego środowiska do głównego katalogu (to src w moim przypadku):

    cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist" 
    

${SRCROOT} - predefiniowane, wskazuje lokalizacji projektu .

$CONFIGURATION - wstępnie zdefiniowana konfiguracja konfiguracji, w moim przypadku: Debug, Stage, Prod. Możesz to zmienić w Xcode: Projekt (brak celu!) ->Info.

Uwaga src/GoogleService-Info.plist plik musi zostać dodany do projektu Xcode (Budowa Phases-> Kopiuj pakunku zasobów s) podczas /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-* plików nie koniecznie.

UPDATE:

Pamiętaj, że Twój nowy skrypt Run musi być umieszczony przed Kopiowanie Bundle Resources fazie kompilacji. W przeciwnym razie nie będzie działać, ponieważ zostanie on skopiowany zbyt późno i zostanie użyta domyślna wersja pliku .plist.

+1

+1 Chociaż nie podoba mi się samo rozwiązanie, nie mogę znaleźć innego sposobu, aby to osiągnąć. Google powinien zapewnić przynajmniej sposób zmiany identyfikatora śledzenia za pośrednictwem interfejsu API (i nie modyfikować samej listy.). – GoRoS

+0

@GoRoS Zgadzam się, że to nie jest najlepsze rozwiązanie, jakie mogę sobie wyobrazić, ale niestety, jest to jedyny sposób, w jaki mogę to osiągnąć po spędzeniu dużej ilości czasu, starając się rozwiązać to ładnie. – KlimczakM

+1

Myślę, że możesz użyć $ {USER_DEFINED_SETTINGS} nie w niestandardowym plist, ale w swoim Info.plist projektu, ale jeszcze go nie wypróbowałem. – dan

1

Do mojego projektu wstawiłem dwa pliki o tej samej nazwie GoogleService-Info.plist.

enter image description here

Jednym z nich jest u nasady, jeden znajduje się w folderze o nazwie „staging”, tak aby uniknąć konfliktów nazw w systemie plików.

Include the plist in only one project each

tym jeden w jeden cel, a drugi w innym czyni go tak, że każdy cel ma unikalny plik plist z poprawną nazwą.

Powiązane problemy