Skip to content

Instantly share code, notes, and snippets.

@OSemenovBoyarka
Last active September 14, 2015 16:34
Show Gist options
  • Save OSemenovBoyarka/0b84606fa1439ebfe802 to your computer and use it in GitHub Desktop.
Save OSemenovBoyarka/0b84606fa1439ebfe802 to your computer and use it in GitHub Desktop.
Deliverfile script parses app metadata from android-like strings.xml and sets up values for deliver tool from Fastlane
###### Simple script parses app metadata from android-like strings.xml and sets up values for deliver
###### You can always last version of this script at https://gist.github.com/SemenovAlexander/0b84606fa1439ebfe802
baseLanguage = "en-US"
# Selecting all subfolder names of metadata directory as available locales
supportedLanguages = Dir.entries('metadata').select {|entry| File.directory? File.join('metadata',entry) and !(entry =='.' || entry == '..') }
# Creating variables for fields in each language, with dummy stub for base language
titleHash = {
baseLanguage => ""
}
descriptionHash = {
baseLanguage => ""
}
keywordsHash = {
baseLanguage => [""]
}
supportUrlHash = {}
marketingUrlHash = {}
privacyUrlHash = {}
verstionWhatsNewHash = {}
#it's not the best solution, but will work for now. We need to loop though base language firstly, to be able spread default values to all languages
supportedLanguages.unshift(baseLanguage)
supportedLanguages.each do |lang|
strings = {}
#reading xml contents
f = File.open("metadata/"+lang+"/store_metadata.xml")
doc = Nokogiri::XML(f)
f.close
# parsing android-style resources
# taking each 'string' node under 'resources' , and building hash from it's 'name' attribute as key and content as value
doc.xpath('//resources/string').each do |node|
strings[node.attribute("name").value] = node.content
end
#copyright is the same for each language
if lang == baseLanguage
#checking if all needed keys are in default locale
['title','description','keywords','copyright'].each do |key|
raise "Default #{baseLanguage} xml file does'n contain mandatory value #{key}" unless strings.has_key?(key)
end
# setting common values to all categories
copyright strings['copyright']
if strings.has_key?('primary_category')
primary_category strings['primary_category']
end
if strings.has_key?('secondary_category')
primary_category strings['secondary_category']
end
if strings.has_key?('primary_subcategories')
primary_category strings['primary_subcategories'].split(',')
end
if strings.has_key?('secondary_subcategories')
primary_category strings['secondary_subcategories'].split(',')
end
end
titleHash[lang] = strings.has_key?('title') ? strings['title'] : titleHash[baseLanguage]
descriptionHash[lang] = strings.has_key?('description') ? strings['description'] : descriptionHash[baseLanguage]
supportUrl = strings.has_key?('support_url') ? strings['support_url'] : supportUrlHash[baseLanguage]
supportUrlHash[lang] = supportUrl unless !supportUrl
marketingUrl = strings.has_key?('marketing_url') ? strings['marketing_url'] : marketingUrlHash[baseLanguage]
marketingUrlHash[lang] = marketingUrl unless !marketingUrl
privacyUrl = strings.has_key?('privacy_url') ? strings['privacy_url'] : privacyUrlHash[baseLanguage]
privacyUrlHash[lang] = privacyUrl unless !privacyUrl
verstionWhatsNew = strings.has_key?('changelog') ? strings['changelog'] : verstionWhatsNewHash[baseLanguage]
verstionWhatsNewHash[lang] = verstionWhatsNew unless !verstionWhatsNew
#keywords should be an array
keywordsArray = strings.has_key?('keywords') ? strings['keywords'].split(',') : keywordsHash[baseLanguage]
keywordsHash[lang] = keywordsArray.collect(&:strip)
end
title(titleHash)
description(descriptionHash)
keywords(keywordsHash)
support_url(supportUrlHash) unless supportUrlHash.empty?
marketing_url(marketingUrlHash) unless marketingUrlHash.empty?
privacy_url(privacyUrlHash) unless privacyUrlHash.empty?
changelog(verstionWhatsNewHash) unless verstionWhatsNewHash.empty?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment