StringyString part II
A fully automated alternative to STRINGIFY(StringString).
Select your app target in the Project Navigator and select Build Phases.
Click + to create a new Run Script item phase and drag it immediately below the top Target Dependencies item.
Set the shell to /usr/bin/ruby
.
Copy the following into the text area:
strings_path = "#{ENV['SRCROOT']}/path/to/en.lproj/Localizable.strings"
header_path = "#{ENV['SRCROOT']}/path/to/LocalizableStrings.h"
regexp = %r{
^ # start of line
\s* # optional whitespace
" # open quote
(\w+) # captured identifier
" # close quote
\s* # optional whitespace
= # =
\s* # optional whitespace
" # open quote
.* # any text
" # close quote
\s* # optional whitepace
; # semi-colon
}x
if !File.exist?(header_path) ||
File.new(header_path).stat.mtime < File.new(strings_path).stat.mtime then
File.open(header_path, "w") do |f|
IO.readlines(strings_path).each do |line|
match = regexp.match(line)
if match then
f.write("static NSString *#{match[1]} = @\"#{match[1]}\";\n")
end
end
end
end
Edit strings_path
to point to the source Localizable.strings file.
Edit header_path
to point to the desired destination header file.
Add the destination header file to your precompiled (".pch") header file.
When the project is built, the header file will be written if it's missing or out of date. For each string in the .strings file"FooString" = "Hello Foo";
the header file will contain a corresponding string definition
static NSString *FooString = @"FooString";