Как добавить язык локализации Xcode через скрипт Fastlane

У меня есть проект с несколькими целями приложения и должен иметь возможность добавить существующий английский локализованный строковый файл в одну из целей только для разработки.

вот мой сценарий:

  1. Target a использует английский + несколько неанглийских локализованных файлов строк.
  2. Target B использует только 1 неанглийский локализованный файл строк.
  3. Target B не может иметь английские строки, включенные в App Store опирающийся.

однако, чтобы помочь во время разработки, мы в настоящее время вручную добавляем английские строки в файлы локализации Target B (используя существующий файл из цели A при появлении запроса), и удалить его до отправки App Store.

поскольку мы уже запускаем скрипты Fastlane setup/teardown, я хотел бы автоматизировать добавление/удаление английских строк из скриптов, поэтому нам не нужно делать это вручную каждый раз.

в Fastfile, I знаете, как добавить файл в целевой B, но поскольку файлы/ссылки локализации структурированы немного иначе в Xcode, чем обычные файлы, я не уверен, что это правильный способ сделать.

вот что у меня пока есть:

def add_english_localization()
    require 'xcodeproj'

    project = Xcodeproj::Project.open("../Code/#{XCODE_PROJ}")

    app_target = project.targets.first #Target B
    english_file_ref = project.main_group.new_file('../Code/TargetA/Application/Supporting Files/en.lproj') #Existing english file in Target A's directory
    app_target.add_file_references([english_file_ref]) #This adds the file but doesn't properly update Xcode's Localization references...?

    project.save
  end

скриншоты:

enter image description here
enter image description here


enter image description here
enter image description here

1 ответов


вот немного ruby script, используя xcodeproj для удаления и добавления локализации:

убрать язык (французский в этом примере):

require 'xcodeproj'
project_path = './Whatever.xcodeproj'
project = Xcodeproj::Project.open(project_path)

for o in project.objects do 
    if o.is_a? Xcodeproj::Project::Object::PBXGroup
        if o.hierarchy_path == "/TargetA/Localizable.strings"
            group = o
            break
        end
    end
end


files = group.files
for file in files do

    if file.path == "fr.lproj/Localizable.strings"
        file.remove_from_project
        puts "Removed " + file.path
    end
end

project.save

добавить язык (французский):

require 'xcodeproj'
project_path = './Whatever.xcodeproj'
project = Xcodeproj::Project.open(project_path)

for o in project.objects do 
    if o.is_a? Xcodeproj::Project::Object::PBXGroup
        if o.hierarchy_path == "/TargetA/Localizable.strings"
            group = o
            break
        end
    end
end

file = project.new_file("fr.lproj/Localizable.strings")
file.move(group)
file.name = "fr"

project.save

вы должны быть в состоянии вызвать его в fastfile, но я не проверял это... Вы можете вызвать его напрямую, используя sh("ruby ./name.rb")