So aktualisieren Sie die App Store-Beschreibung in Google Spreadsheets und Fastlane automatisch

** Ich möchte die schwierigen Dinge so weit wie möglich der Maschine überlassen. ** ** **

Um die iOS-App zu aktualisieren, muss natürlich auch der Inhalt des Updates aktualisiert werden.

Bisher habe ich den App-Wortlaut, den der Betreiber in die Google-Tabelle eingegeben hat, nacheinander kopiert und in den App Store Connect eingefügt.

Gelegentlich gibt es kein Problem, aber mit zunehmender Anzahl wird es schwierig. Ich möchte automatisieren und es einfacher machen. Ich möchte es einfacher machen. Es war einfach!

Es hat also funktioniert. ** Ich werde eine Prozedur schreiben, um die Aktualisierung der App Store-Beschreibung mithilfe von Google Spreadsheet und Fastlane zu automatisieren. ** ** **

1. Was ist vorzubereiten?

2. Erstellen Sie eine Google-Tabelle mit der App Store-Beschreibung

Dieses Mal werde ich es als Beispiel dafür schreiben, wie der Wortlaut des App Store mit diesem Inhalt aus der Tabelle abgerufen wird.

Blätter nach Sprache trennen (Blattnamen sind "ja" für Japanisch und "en-US" für Englisch)

Japanisch

App Name Untertitel Beförderung Einzelheiten Inhalt aktualisieren Stichwort
Vollautomatisches Schultermassagegerät Bitte verbessern Sie die Durchblutung Bitte benutzen Sie es. Dies ist eine sehr gesunde App. Kleinere Korrekturen vorgenommen Vollautomatisch, Massine

Englisch

App Name Untertitel Beförderung Einzelheiten Inhalt aktualisieren Stichwort
Full Auto Shoulder massager Please improve blood flow. Please use it. It's a very healthy app. bugfix Full Auto、 Let's

Screen_Shot_2020-09-08_at_18_52_32.png

3. Richten Sie die Google Cloud Platform für die Verwendung von "Google Drive API" und "Google Spreadsheet API" ein.

Sie müssen auf "Google Drive API" und "Google SpreadSheet API" klicken, um den Wortlaut aus der Google-Tabelle zu erhalten.

Um diese APIs von CI aus zu erreichen, müssen Sie ein Dienstkonto bei GCP erstellen.

Gehen Sie zu Google Cloud Platform und erstellen Sie ein Projekt.

Screen_Shot_2020-09-04_at_14_28_51.png

Gehen Sie zu APIs & Services> Anmeldeinformationen, klicken Sie auf Anmeldeinformationen erstellen und dann auf Dienstkonto.

Screen_Shot_2020-09-04_at_14_29_56.png

Geben Sie Ihren Namen, Ihre ID und die Beschreibung Ihres Dienstkontos ein und klicken Sie auf die Schaltfläche Erstellen.

Screen_Shot_2020-09-04_at_14_32_46.png

Bestimmen Sie die Berechtigungen des Dienstkontos. Dieses Mal möchte ich die Google-Tabelle laden. Fragen Sie den Betrachter (wählen Sie die entsprechenden Berechtigungen rechtzeitig aus) und klicken Sie auf die Schaltfläche Weiter.

Screen_Shot_2020-09-04_at_14_33_07.png

Klicken Sie auf die Schaltfläche Fertig stellen.

Screen_Shot_2020-09-04_at_14_37_24.png

Der Spalte Dienstkonto wurde ein neues Element hinzugefügt. Klicken.

Screen_Shot_2020-09-08_at_19_03_24.png

Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.

Screen_Shot_2020-09-08_at_19_03_48.png

Ein Dialogfeld wie dieses wird angezeigt. Geben Sie JSON an und klicken Sie auf Erstellen. ** Benennen Sie die gespeicherte JSON-Datei in config.json um. ** ** **

Screen_Shot_2020-09-08_at_19_04_03.png

Suchen Sie anschließend unter API Services> API Library nach "Google Drive API" und "Google Spreadsheet API", aktivieren Sie jede API, und die Einstellung ist abgeschlossen.

Screen Shot 2020-09-08 at 19.12.03.png

4. Erstellen Sie Ihre eigene Fastlane-Aktion

Sie können es in das Fastfile schreiben, aber um das Fastfile nicht aufzublähen, erstellen Sie Ihre eigene Aktion und teilen Sie die Verarbeitung auf.

Drücken Sie den folgenden Befehl.

bundle exec fastlane new action

Sie werden nach einem Namen gefragt, raten Sie also einen geeigneten Namen. Soll ich ** Metadaten ** sagen?

[20:28:11]: Name of your action: metadata

Eine Datei mit dem Namen "fastlane / action / metadata.rb" wird generiert.

5. Verwenden Sie "google-drive-Ruby", um die App Store-Beschreibung aus der Google-Tabelle zu laden

Vorbereitung

Verwenden Sie das Juwel google-drive-ruby, um die Google-Tabelle zu laden.

Fügen Sie dem Gemfile Folgendes hinzu:

gem "google_drive"

Installation.

bundle install

Fügen Sie den von Google Cloud Platform generierten Dienstkontoschlüssel (config.json) in "fastlane / action /" ein (Hier springen, wenn Sie den Dienstkontoschlüssel nicht eingeben möchten / items / 0f15157e93b8b9339656 # 7-fastlane-plugin und veröffentlicht))

Code schreiben

Fügen Sie am Anfang von fastlane / action / metadata.rb Folgendes hinzu.

require "google_drive"

Schreiben Sie den folgenden Code in "self.run (params)". Geben Sie den Inhalt der am Anfang geschriebenen Tabelle als die folgenden Konstanten an.

--LANGUAGES gibt den Blattnamen an --COLUMNS gibt den Fastlane-Textdateinamen für jedes Element von links an (Siehe Lieferung für jeden Textdateinamen)

LANGUAGES = ["ja", "en-US"]
COLUMNS = ["name", "subtitle", "promotional_text", "description", "release_notes", "keywords"]

Laden Sie die Tabelle und geben Sie den Pfad der Dienstkontoschlüsseldatei und die Tabellenkalkulations-ID an.

session = GoogleDrive::Session.from_config("config.json")
spreadsheet = session.spreadsheet_by_key("Tabellenkalkulations-ID")

Sie müssen lediglich den Text für jede Spalte aus der letzten Zeile des Blattes für jede Sprache abrufen und in jeder Textdatei speichern.

LANGUAGES.each do |language|
  spreadsheet.worksheet_by_title(language).rows.last.each_with_index do |text, i|
    File.open("#{FastlaneCore::FastlaneFolder.path}metadata/#{language}/#{COLUMNS[i]}.txt", mode = "wb") do |f| f.write(text) end
  end
end

Vollständiger Code

require "google_drive"

module Fastlane
  module Actions
    class MetadataAction < Action
      def self.run(params)
        LANGUAGES = ["ja", "en-US"]
        COLUMNS = ["name", "subtitle", "promotional_text", "description", "release_notes", "keywords"]

        session = GoogleDrive::Session.from_config("config.json")
        spreadsheet = session.spreadsheet_by_key("Tabellenkalkulations-ID")

        LANGUAGES.each do |language|
          spreadsheet.worksheet_by_title(language).rows.last.each_with_index do |text, i|
            File.open("#{FastlaneCore::FastlaneFolder.path}metadata/#{language}/#{COLUMNS[i]}.txt", mode = "wb") do |f| f.write(text) end
          end
        end
      end

      def self.description
        "A short description with <= 80 characters of what this action does"
      end

      def self.details
        "You can use this action to do cool things..."
      end

      def self.available_options
        []
      end

      def self.authors
        ["Your GitHub/Twitter Name"]
      end

      def self.is_supported?(platform)
        platform == :ios
      end
    end
  end
end

6. Führen Sie mit Fastfile aus

Wenn Sie danach Metadaten in Fastfile ausführen, werden die aus der Google-Tabelle gelesenen Elemente in jeder Textdatei gespeichert.

Führen Sie dann "liefern (skip_metadata: false)" aus, um die App Store-Beschreibung zu aktualisieren.

lane :deploy_appstore do
  metadata
  deliver(skip_metadata: false)
end

Übrigens, wenn Sie eine Pull-Anfrage stellen, wenn ein Diff angezeigt wird, wird dies empfohlen, da der Unterschied zwischen den vorherigen Versionen auf einen Blick offensichtlich ist.

7. Ich habe es zu einem Fastlane Plugin gemacht und veröffentlicht

Was ich bisher erklärt habe, habe ich mit dem Fastlane Plugin versucht.

Es gab andere Plug-Ins mit demselben Zweck, aber ** damit kann ich die Dienstkonto-Schlüsseldatei in einer Umgebungsvariablen angeben, da ich sie nicht in Git verwalten wollte. ** Wenn Sie in Spalten Name der Textdatei, die nicht zum Aktualisieren von Metadaten verwendet wird angeben, wird die dortige Spalte ignoriert. Ich bin.

Sie können es so verwenden.

fetch_metadata_from_google_sheets(
  languages: ["ja", "en-US"],
  columns: ["version", "name", "subtitle", "release_notes", "promotional_text", "description", "keywords"],
  spreadsheet_id: ENV["TEST_APP_STORE_METADATA_SPREADSHEET_ID"],
  project_id: ENV["TEST_GCP_PROJECT_ID"],
  service_account_private_key_id: ENV["TEST_GCP_SERVICE_ACCOUNT_PRIVATE_KEY_ID"],
  service_account_private_key: ENV["TEST_GCP_SERVICE_ACCOUNT_PRIVATE_KEY"],
  service_account_client_email: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_EMAIL"],
  service_account_client_id: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_ID"],
  service_account_auth_uri: ENV["TEST_GCP_SERVICE_ACCOUNT_AUTH_URI"],
  service_account_token_uri: ENV["TEST_GCP_SERVICE_ACCOUNT_TOKEN_URI"],
  service_account_auth_provider_x509_cert_url: ENV["TEST_GCP_SERVICE_ACCOUNT_AUTH_PROVIDER_X509_CERT_URL"],
  service_account_client_x509_cert_url: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_X509_CERT_URL"]
)

Einzelheiten entnehmen Sie bitte den folgenden Ribodigries.

kurarararara/fastlane-plugin-fetch_metadata_from_google_sheets https://github.com/kurarararara/fastlane-plugin-fetch_metadata_from_google_sheets

8. Schließlich

Bis jetzt war ich verwirrt darüber, jedes Mal Fehler zu machen, wenn ich kopierte und einfügte, aber nach dem automatischen Update machte ich keine Fehler und es wurde viel einfacher.

Wenn Sie Probleme haben, versuchen Sie es bitte.

Bitte lesen Sie auch diesen Artikel.

Beachten Sie im Detail das Verfahren zum Aufrufen der Qiita-API in GAS und zum automatischen Ausfüllen der Ergebnisse in eine Google-Tabelle

Recommended Posts

So aktualisieren Sie die App Store-Beschreibung in Google Spreadsheets und Fastlane automatisch
Speichern Sie auf Japanisch in StringProperty im Google App Engine-Datenspeicher
So aktualisieren Sie Google Sheets von Python
Verwendung von Google Test in C-Sprache
Verwendung ist und == in Python
So generieren Sie eine Sequenz in Python und C ++
So zeigen Sie Videos in Google Colab inline an
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So führen Sie AutoGluon in einer Google Colab-GPU-Umgebung aus
So definieren Sie Decorator und Decomaker mit einer Funktion
So verwenden Sie eine Bibliothek, die ursprünglich nicht in Google App Engine enthalten war
So speichern Sie eine Python-Funktion im Wert eines Wörterbuchs (dict) und rufen die Funktion gemäß dem Schlüssel auf
So laden Sie Dateien in Google Drive mit Google Colaboratory
So installieren Sie Google Test / Google Mock in Visual Studio 2019
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
Verwendung von Django mit Google App Engine / Python
Wie man Decorator in Django benutzt und wie man es macht
Verwendung des japanischen Spacy-Modells mit Google Colaboratory
So erhalten Sie RGB- und HSV-Histogramme mit OpenCV
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
Ausländer sprechen: Wie man Klassen und Methoden auf Englisch benennt
So extrahieren Sie einen Termin in Google Kalender mit Python
[Google Colab] So unterbrechen Sie das Lernen und setzen es dann fort
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
[Blender] Umgang mit Maus- und Tastaturereignissen in Blender-Skripten
[TF] Laden / Speichern von Modell und Parameter in Keras
SSH in Azure App Service und Aktivieren von venv
Ausführen externer Shell-Skripte und -Befehle in Python
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Wie man in Python entwickelt
So verwenden Sie Google Colaboratory
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
Repeated @ app.callback in Dash So schreiben Sie Input und State ordentlich
So zeigen Sie Formeln in Latex an, wenn Sie sympy (> = 1.4) in Google Colaboratory verwenden
Geben und meinen Sie die Einschränkungsoption in scipy.optimize.minimize
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Verwendung von Google Colaboratory und Verwendungsbeispiel (PyTorch × DCGAN)
[ROS2] Beschreibung der Neuzuordnung und der Parameter beim Start des Python-Formats
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
[Rails 6] Betten Sie Google Map in die App ein und fügen Sie der eingegebenen Adresse einen Marker hinzu. [Bestätigung der Details]
Kopieren und Einfügen des Inhalts eines Blattes im JSON-Format mit einer Google-Tabelle (mithilfe von Google Colab)
[Python] Wie man PCA mit Python macht
Umgang mit Sitzungen in SQLAlchemy
[Rails] So zeigen Sie Google Map an
So installieren und verwenden Sie Tesseract-OCR
Verwendung von Klassen in Theano
Wie man nüchtern mit Pandas schreibt
So sammeln Sie Bilder in Python
So aktualisieren Sie Spyder in Anaconda
Verwendung von SQLite in Python