2016-07-11 16 views
6

Şu anda çalışma zamanında Pod'umun geçerli sürümünü günlüğe kaydetmenin bir yolunu oluşturmaya çalışıyorum, aklıma gelen birkaç yol var, ama açık bir şeyi kaçırmadığımdan emin olmak için buraya sormak istedim.Belirli bir CocoaPod sürümünü çalışma zamanında elde etmenin en iyi yolu nedir?

şimdiye kadar yaptığım Ne: Cocoapods aşağıdaki ihraç eden myPod-umbrella.h başlık dosyası oluşturur öğrendim

  • :

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

    Onlar sadece myPodVersionNumber erişilebilir gibi görünüyor ve bu her zaman 1.0 için bir neden var, bu doğru çalışma için bir yol var, çünkü bu uygun bir yol olduğunu hissettim ama ben yanlış yapılandırılmış.

  • Oluşturulan çerçevenin Info.plist'ini tutmaya çalışın ve buradaki sürümü okuyun, ancak bu biraz sorunlu görünüyor, bir geliştiricinin bölmeyle ne yapacağına dair bir garantim yok ve sonuçta olabilir Paketin farklı bir lokasyonu ile, hatta projeye erişilemez.

  • Sürüm numarasıyla sabit kodlanmış bir özellik oluşturun, bu açıkça işe yarar, ancak hataya çok yer katar ve bunu uygulamak için doğru yol gibi hissetmezsiniz, ancak CocoaPod'ların etrafında dolaşmanın başka bir yolu yoksa Bunu yapmak zorunda kalabilirim.

  • PodSpec'i okuyacak ve Pod'la ilgili meta verileri içeren basit bir sınıf oluşturacak, bir önceki noktadan biraz daha iyi hissedecek bir Yapılandırma adımına sahip olun, ancak aradığım şey için hala biraz daha fazla bir his duyuyorsunuz.

Kimsenin daha iyi bir fikri var mı, yoksa doğru yönde mi işaret edebilir?

Ne i elde etmek çalışıyorum bu

print("Current version: \(myPod.version) "gibi bir şey)

çalıştırmak için muktedir olduğunu ve konsolda

#Current version: 1.2.0

+0

Bunun yerine "Podfile.lock" dosyasındaki verileri okumaya baktınız mı? Bu yüklü Pod'ların tüm sürümlerini listeler. – Hodson

+0

Çalışma sırasında bunu yapmam gerekiyor, bu benim ana sorunum –

cevap

2

düzgün dışarı oturum var URLForResource kullanma hakkında bilgi İstediğiniz baskı deyimiyle çalışma zamanında güzelce yazdırır.

enter image description here

Bu sürüm, tüm kilit dosyasını konsola yazdırır.

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 

Bu sonraki sürüm, belirli satır numaralarını yazdırır. componentsSeparatedByString("-") kullanarak, pod adından önce - karakterini temizleyebilmem için temiz görünüyor. Kilit dosyaları, pod adları listesindeki her satırda - kullandığı için bu çalışır. Dikkat edin, pathForResourceURLForResource burada kullanıyoruz.

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): 

Bu sonraki sürümde iki satır yazdırıyoruz. data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) yöntemini kullanıyoruz.Bu durumda, bu durumda - kaldırmak için ayrıntılı hale gelir, bu yüzden buna değmez.

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 Merhaba. Cevabım iyi mi? Kod, çalışma zamanında konsolda istediğiniz herhangi bir satırı günlüğe kaydeden bir baskı bildirimi sağlar. Sadece kilit dosyasını projenize yerleştirin ve işte bu kadar. – tymac

+0

Merhaba @tymac, cevabınız için teşekkürler, kulağa hoş geliyor ve kesinlikle işe yarayacak, ama bu "başına" uygun bir çözüm değil, IMO eksik gibi görünüyor bir şey için bir geçici çözüm, ben de eklemek istemem proje için doğrudan ilişkili olmadığı ve XCode dışında yaşamak istediği için proje için Podfile, eğer resmi bir çözüm yoksa, sadece bu dosyayı ayrıştıran ve "podsVersions.json" türünü ekleyen bir derleme betiğiyle gideceğim o zaman projemde kullanabileceğim dosya –

İlgili konular