2014-09-11 18 views
15

W moim projekcie Xcode mam 4 różne schematy (prod, dev, inscenizacja, inscenizacja2), które zmieniają identyfikator pakietu aplikacji, która zostanie zainstalowana w telefonie. W ten sposób mogę mieć wszystkie 4 wersje zainstalowane obok siebie, podobne do this technique.Uzyskaj identyfikator pakietu od innego celu

Teraz buduję dziś rozszerzenie na iOS 8. Jest to nowy obiekt docelowy, który wymaga własnego identyfikatora pakietu.

Identyfikator pakietu rozszerzenia muszą być poprzedzone Dominującej Identyfikator pakietu aplikacji, czy jest ostrzeżenie rzucone:

error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier. 

    Embedded Binary Bundle Identifier: com.company.app.TodayExtension 
    Parent App Bundle Identifier:  com.company.app.staging 

W tym przypadku wbudowania Binary Bundle Identyfikator musi być com.company.app.staging.TodayExtension.

Czy istnieje sposób, w jaki mogę skonfigurować mój cel rozszerzenia Dzisiaj, aby ustawić identyfikator pakietu, najpierw sprawdzając identyfikator pakietu nadrzędnego celu? Być może poprzez niestandardową fazę tworzenia skryptów Run?

+1

Czy możesz wyjaśnić bardziej szczegółowo, w jaki sposób rozwiązałeś ten problem? W odpowiedzi Jafara poniżej, czy byłeś w stanie ustawić PARENT_APP_BUNDLE_IDENTIFIER tylko przez zmianę schematów, a jeśli tak, to w jaki sposób? Lub w inny sposób co określiłeś dla identyfikatorów pakietów i PARENT_APP_BUNDLE_IDENTIFIER w każdym celu (w tym celu rozszerzenia)? Dzięki! – qix

+3

W Ustawieniach projektu | Ustawienia kompilacji | Zdefiniowane przez użytkownika, utwórz nowy wpis o nazwie PARENT_APP_BUNDLE_ID. Mam 4 konfiguracje, dodaję wartość dla każdego (com.company.app.staging, com.company.app.de, itp.). W głównej aplikacji docelowej Info.plist ustaw identyfikator pakietu na $ (PARENT_APP_BUNDLE_ID). Na liście Info.plist rozszerzenia celu ustaw jego identyfikator pakietu na $ (PARENT_APP_BUNDLE_ID) .NameOfYourExtension. – djibouti33

+2

Aha, całkowicie pominęło to, że robiłeś to przez dodatkowe niestandardowe konfiguracje kompilacji (Projekt | Info | Konfiguracje) i ustawianie różnej wartości PARENT_APP_BUNDLE_ID dla każdej konfiguracji na poziomie Projektu, zamiast tego myśląc, że w jakiś sposób zrobiłeś to przez przesłonięcie indywidualnych ustawień celu . Nadal możesz przełączać schematy tak, aby tworzyły różne identyfikatory pakietów, ponieważ każdy schemat używa innego zestawu konfiguracji kompilacji. Świetne, działa dla mnie i pomaga mi w oczyszczaniu zduplikowanych obiektów docelowych i plików plist! – qix

Odpowiedz

18

Ustawienia kompilacji celów nie są dostępne dla innych obiektów docelowych. Jednak ustawienia kompilacji PROJEKTU są dostępne.

Można w ten sposób dodać ustawienie kompilacji zdefiniowane przez użytkownika w projekcie i nazwać je PARENT_APP_BUNDLE_IDENTIFIER i ustawić poprawny identyfikator pakietu dla wszystkich schematów.

Następnie w zakładce informacji o celu rozszerzenie aplikacji ustawić identyfikator wiązki do

$(PARENT_APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME:rfc1034identifier) 

To działało perfekcyjnie dla mnie.

+0

Cudownie! To oszczędza mi tyle frustracji! – djibouti33

+0

uruchamiam ten sam problem .. postępowałem zgodnie z powyższym trybem ... ale nie udało mi się .. zaktualizowałem ios 8.0.2 i xcode 6.0.1 (z oficjalną wersją) mam 8.0 w tym, że działało dobrze dla mnie .. – Sri