2016-07-11 10 views
6

Obecnie próbuję stworzyć sposób, aby zalogować bieżącą wersję mojego Pod w czasie wykonywania, jest kilka sposobów, które przychodzą na myśl, ale chciałem zapytać tutaj, aby upewnić się, że nie brakuje mi czegoś oczywistego.Jaki jest najlepszy sposób uzyskania konkretnej wersji CocoaPod w czasie wykonywania?

Co zrobiłem do tej pory:

  • okazało się, że Cocoapods generuje plik myPod-umbrella.h nagłówka wywozi następujące:

    FOUNDATION_EXPORT double myPodVersionNumber; 
    FOUNDATION_EXPORT const unsigned char myPodVersionString[]; 
    

    Tylko myPodVersionNumber wydaje się być dostępne, a to zawsze z jakiegoś powodu ma 1.0, czy jest jakiś sposób, żeby to działało, ponieważ mam wrażenie, że jest to właściwy sposób, ale źle go zinterpretowałem.

  • Spróbuj zdobyć utworzoną bibliotekę Info.plist i przeczytaj tam wersję, ale to wydaje się być nieco problematyczne, nie mam żadnej gwarancji, co programista wykona z kartą i może skończyć. z inną lokalizacją pakietu lub nawet uniemożliwić jego realizację.

  • Utwórz nieruchomą właściwość z numerem wersji, to oczywiście działa, ale daje dużo miejsca na błędy i nie wydaje się być właściwym sposobem wdrożenia tego, ale jeśli nie ma innego sposobu na obejście CocoaPods Mogę po prostu to zrobić.

  • Wykonaj krok budowania, który odczyta PodSpec i wygeneruje prostą klasę zawierającą metadane dotyczące kapsuły, czuje się nieco lepiej niż poprzedni punkt, ale wciąż czuje się trochę przesadnie, jeśli chodzi o to, czego szukam.

Czy ktoś ma lepszy pomysł lub może wskazać mi właściwy kierunek?

co próbuję osiągnąć to, aby móc uruchomić coś takiego

print("Current version: \(myPod.version) „)

i to log go prawidłowo w konsoli

#Current version: 1.2.0

+0

Czy zamiast tego zajrzałeś do odczytu danych z pliku 'Podfile.lock'? Zawiera listę wszystkich wersji zainstalowanych kapsuł. – Hodson

+0

Muszę to zrobić podczas uruchamiania, to jest mój główny numer –

Odpowiedz

2

A co z używaniem URLForResource? Ładnie ładuje się w środowisku wykonawczym za pomocą polecenia drukowania, o które prosiłeś ..

enter image description here

Ta wersja drukuje cały plik blokady na konsoli.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")! 
    let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding) 
    print(data) 
} 

/* Prints */ 
// PODS: 
// - Firebase/Analytics (3.3.0): 
// - FirebaseAnalytics (= 3.2.1) 
// - Firebase/Auth (3.3.0): 
// - Firebase/Analytics (= 3.3.0) 
// - FirebaseAuth (= 3.0.3) 
// - Firebase/Core (3.3.0): 
// - Firebase/Analytics (= 3.3.0) 
// - Firebase/Database (3.3.0): 
// - Firebase/Analytics (= 3.3.0) 
// - FirebaseDatabase (= 3.0.2) 
// TL;DR 

Następna wersja drukuje określone numery linii. Używając componentsSeparatedByString("-"), jestem w stanie usunąć znak - przed nazwą pod, aby wyglądał czystszy. Działa to, ponieważ pliki blokujące używają - w każdym wierszu na liście nazw tabletów. Zauważ, że używamy tutaj pathForResource nie URLForResource

do { 
     if let path = NSBundle.mainBundle().pathForResource("/lockfilefolder/Podfile", ofType: "lock"){ 
      let data = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding) 
      let lockFileData = data.componentsSeparatedByString("-") 
      print("Current version: \(lockFileData[6])") 
     } 
    } catch let err as NSError { 
     print(err) 
    } 

/* Prints */ 
// Current version: - Firebase/Core (3.3.0): 

W następnej wersji drukujemy dwie linie. Używamy metody data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()).W tym przypadku bardzo trudno jest usunąć -, więc nie warto.

let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")! 
    let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding) 
    let lockFileData = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) 
    print(lockFileData[72]) 
    print(lockFileData[6]) 

/* Prints */ 
// COCOAPODS: 0.39.0 
// - Firebase/Core (3.3.0): 
+0

@ mostafatorbjørnberg Hi. Czy moja odpowiedź jest w porządku? Kod podaje instrukcję drukowania rejestrującą dowolną linię do konsoli w środowisku wykonawczym. Po prostu umieść plik blokujący w twoim projekcie i to wszystko. – tymac

+0

Witam @tymac, dziękuję za twoją odpowiedź, brzmi dobrze i na pewno zadziała, ale to nie jest "właściwe" rozwiązanie na powiedzenie, jest to obejście czegoś, co wydaje się brakować IMO, ja też nie chciałbym dodać Podfile do projektu, ponieważ nie jest bezpośrednio związany z moim własnym projektem i chcę, aby żył poza XCode, jeśli nie ma oficjalnego rozwiązania, po prostu pójdę ze skryptem kompilacji, który analizuje ten plik i dodaje rodzaj 'podsVersions.json' plik, który będę mógł wykorzystać w moim projekcie –

Powiązane problemy