2012-09-14 15 views
9

Wolałbym użyć tej samej konfiguracji kompilacji dla TestFlight vs. App Store. Czy istnieje sposób na wykrycie w czasie wykonywania aplikacji aplikacji TestFlight lub App Store? (Myślę, że zadzwonię tylko pod numer takeOff, jeśli nie jest on zainstalowany przez App Store.)Wykryj TestFlight?

Chcę uniknąć używania TestFlight w kompilacjach App Store, aby chronić prywatność moich użytkowników, a także aby uniknąć potencjalnego wykolejenia się sieci omówione here.

+0

Co z różnymi celami? – Jessedc

+0

Myślę, że złamałoby to archiwa Xcode'a. Myślę, że zadaję tutaj niewłaściwe pytanie. Jeśli ktoś nie ma lepszego pomysłu, dodam tylko przełącznik TestFlight do mojej aplikacji i domyślnie go wyłączę. –

+1

Archiwum Xcode jest w porządku z różnymi celami. Często używam różnych celów dla wewnętrznych wydań, inni dla sklepu z aplikacjami. Pozwalają na takie same konfiguracje (debugowanie, wydanie), ale można skonfigurować różne ustawienia kompilacji, aby skompilować TF z celów sklepu produkcyjnego/aplikacji. – Jessedc

Odpowiedz

4

Uważam, że jest to wystarczająco blisko duplikatu Check if iOS app is live in app store, że można go zamknąć.

Możesz sprawdzić, czy Twoja aplikacja została rozprowadzona w sklepie z aplikacjami, sprawdzając, czy nie ma w niej miejsca: embedded.mobileprovision. Ten plik jest uwzględniony tylko w kompilacjach adhoc. Wynika z tego, że jeśli rozpowszechniasz kompilacje tylko za pośrednictwem TestFlight lub HockeyApp i jest to kompilacja sklepu, to nie musi to być kompilacja TestFlight lub HockeyApp.

Jak to:

if ([[NSBundle mainBundle] pathForResource:@"embedded" 
            ofType:@"mobileprovision"]) { 
    // not from app store 
} else { 
    // from app store 
} 

Ta technika jest od the HockeyApp SDK.

+0

Domyślam się, że nie będzie działać, ponieważ TestFlight akceptuje produkcje kompilacji w sekcji Apple – zaplitny

+1

Oficjalne wydania sklepowe nie powinny zawierać 'embedded.mobileprovision'. Nowe kompilacje iTunes Connect TestFlight mogą, ale nie muszą; prawdopodobnie powinieneś po prostu sprawdzić. –

+0

Potwierdzam, że ta technika nie działa, ponieważ 'iOS 9.1' + TestFlight z budową produkcji. – loretoparisi

0

Można zrobić coś podobnego do tego, co docs wskazują na wezwanie setDeviceIdenifier:

The Beta Testing i różnicowania Zwolnij odcinek SDK Documentation proponuje następujące być umieszczony przed [TestFlight takeOff:@"api-token"];:

#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#endif 

Kiedy przychodzi czas na wydanie aplikacji, sugerujemy, aby wypowiedzieć linię #define TESTING 1 tak, aby kolejne wywołanie do setDeviceIdentifier być pominiętym. Twój kod będzie wtedy wyglądać następująco:

//#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#endif 

Twoje rozwiązanie

Aby zapobiec takeOff od miano można umieścić go tuż pod setDeviceIdentifier i wykomentuj #define TESTING 1, jak powyższej sugestii. Co dałoby Ci:

//#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
    [TestFlight takeOff:@"api-token"]; 
#endif 

HTH


Możesz przeczytać więcej o #ifdefhere jeśli nie jesteś zaznajomiony.

+0

Używasz Makra preprocesora są niepoprawne, powinieneś umieścić je w kluczu 'Preprocessor Makra' w ustawieniach budowania twojego projektu, ALE stwierdzono, że potrzebna jest ta sama konfiguracja kompilacji, dlatego makra preprocesora będą dawały taką samą wartość, więc potrzebujesz znać różnica w czasie pracy, taka jak Steven Fisher, była właściwa. Poza tym nie należy używać takich rozwiązań, jak komentowanie, bardzo amatorskie i łatwe do zapomnienia. – Laszlo

1

Aby ustalić Debug TestFlight lub wdrożenie AppStore w Swift:

private static let isTestFlight = NSBundle.mainBundle().appStoreReceiptURL?.lastPathComponent == "sandboxReceipt" 

    // This can be used to add debug statements. 
    static var isDebug: Bool { 
    #if DEBUG 
     return true 
    #else 
     return false 
    #endif 
    } 

Kompletne źródła i próbki: https://stackoverflow.com/a/33830605/639227

0

Here jest blogu, który pokazuje, jak dodać dodatkowe konfiguracje oprócz Debug i Release (np. Beta).

Po dodaniu konfiguracji Beta tworzy się inny schemat projektu. A następnie edytuj ten nowy schemat. W sekcji Archiwum wybierz, aby korzystać z konfiguracji Beta. Następnie użyjesz tego schematu do archiwizacji w przypadku Testflight i poprzedniego schematu dla sklepu z aplikacjami.