如何通过 Fastlane 脚本添加 Xcode 本地化语言
How to add a Xcode localization language via Fastlane script
我有一个包含多个应用程序目标的项目,需要能够将现有的英语本地化字符串文件添加到目标之一,仅供开发使用。
这是我的场景:
- 目标 A 使用英文 + 多个 non-English 本地化字符串文件。
- 目标 B 仅使用 1 个 non-English 本地化字符串文件。
- 目标 B 不能在 App Store 构建中包含英文字符串。
但是,为了在开发过程中提供帮助,我们目前手动将英文字符串添加到目标 B 的本地化文件中 (出现提示时使用目标 A 中的现有文件),并在之前将其删除App Store 提交。
由于我们已经 运行 Fastlane setup/teardown 脚本,我想自动 adding/removing 来自脚本的英文字符串,这样我们就不必每次都手动执行。
在 Fastfile 中,我知道如何将文件添加到目标 B,但是由于本地化 files/references 在 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
截图:
这里有一个小 ruby 脚本,使用 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")
调用它
我有一个包含多个应用程序目标的项目,需要能够将现有的英语本地化字符串文件添加到目标之一,仅供开发使用。
这是我的场景:
- 目标 A 使用英文 + 多个 non-English 本地化字符串文件。
- 目标 B 仅使用 1 个 non-English 本地化字符串文件。
- 目标 B 不能在 App Store 构建中包含英文字符串。
但是,为了在开发过程中提供帮助,我们目前手动将英文字符串添加到目标 B 的本地化文件中 (出现提示时使用目标 A 中的现有文件),并在之前将其删除App Store 提交。
由于我们已经 运行 Fastlane setup/teardown 脚本,我想自动 adding/removing 来自脚本的英文字符串,这样我们就不必每次都手动执行。
在 Fastfile 中,我知道如何将文件添加到目标 B,但是由于本地化 files/references 在 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
截图:
这里有一个小 ruby 脚本,使用 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")