2017-03-03 4 views
3

Ich habe eine Xcode-Projekt-Setup mit mehreren Zielen/Schemata, so dass ich mehrere Anwendungen unter der gleichen Codebasis haben.Holen Sie sich Bundle-Kennung von Plist automatisch basierend auf Schema/Ziel mit fastlane

Ich habe die folgende Prüfstrasse in meinem Fastfile, die für jede meiner apps die „Seufzer“ Tool läuft:

lane :testing do 
    ["First", "Second", "Third", "Fourth"].each do |scheme_name| 
     sigh 
    end 
end 

an der fastlane Dokumentation der Suche, ich sehe Sie ein Bündel Kennung definieren können, die Seufzer benutzt. Aber ich brauche es, um automatisch die aktuelle Bündelkennung von jedem Ziel/Schema zu holen und diese für Seufzer zu verwenden. Kann dies erreicht werden?

So etwas wie (Pseudo-Code):

bundle_id = get_bundle_id_from_plist 
sigh(app_identifier: bundle_id) 

Ich habe versucht, dieses Plugin: https://github.com/SiarheiFedartsou/fastlane-plugin-versioning, die für das Erhalten plist Weg eine Methode hat. Ich lief dann diesen Code:

bundle_id = get_info_plist_value(path: get_info_plist_path(target: scheme_name), key: 'CFBundleIdentifier') 
puts bundle_id 

Der Ausgang ist $ (PRODUCT_BUNDLE_IDENTIFIER), die eigentlich das, was in dem plist Wert ist, so dass ich immer näher. Aber ich brauche das, um die tatsächliche Bündel-ID zurückzugeben, nicht nur die Variable, auf die sie zeigt.

Der Grund, warum ich seufzen möchte, ist, dass jede App/Target eigene Provisioning-Profile hat, die ich aufgrund der CarPlay-Berechtigung zunächst manuell generieren musste. Ich möchte, dass automatisch neue Bereitstellungsprofile für jedes Ziel erstellt werden, wenn sie ablaufen.

Antwort

5

Ich weiß nicht von irgendwelchen fastlane Aktionen, die eine solche Funktionalität bieten, aber Sie können eine lokale fastlane action aufbauen können, oder erstellen und eine fastlane plugin teilen, das bietet die CFBundleIdentifier die code that updates an info plist using the scheme name als Beispiel.

Dieser Code verwendet das xcodeproj Ruby-Juwel, um die Info.plist-Datei aus dem Scheme zu erhalten. Es ändert dann die Plist-Werte und speichert dann die Plist-Datei. Sie könnten etwas Ähnliches tun, außer nur die CFBundleIdentifier aus dem Plist zurückgeben.

Wenn Sie das Plugin nicht erstellen möchten, kann ich es später in dieser Woche erstellen, da dies mich interessiert.

Dieser Code sollte für Sie arbeiten, bis ich das Plugin fertig bekommen:

# At the top of your Fastfile; you may need to add "gem 'xcodeproj'" to your Gemfile and then do a bundle install 
    require 'xcodeproj' 

    def product_bundle_id(scheme) 
     project = Xcodeproj::Project.open('path/to/your/xcodeproj') 
     scheme = project.native_targets.find { |target| target.name == scheme } 
     build_configuration = scheme.build_configurations.first 
     build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] 
    end 

    lane :testing do 
     ["First", "Second", "Third", "Fourth"].each do |scheme_name| 
     sigh(app_identifier: product_bundle_id(scheme_name)) 
     end 
    end 
+0

Danke für die Info. Bitte sehen Sie meine aktualisierte Antwort. Ich konnte den Wert zurückgeben, aber es gibt $ (PRODUCT_BUNDLE_IDENTIFIER) anstelle der tatsächlichen Paket-ID zurück. – codeman

+0

Es hat funktioniert! Vielen Dank! – codeman

+1

Gern geschehen! Ich habe das Plugin veröffentlicht. Um es zu installieren, führen Sie 'fastlane add_plugin get_product_bundle_id' von der Kommandozeile aus. Siehe https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Plugins.md für Dokumente. Um es aufzurufen, 'get_product_bundle_id (project_filepath: project_path, schema: 'Schema Name')' –

Verwandte Themen