Awesome
SmallStrings | Reduce localized .strings file sizes by 80%
Maintained by Emerge Tools
How does it work
- Convert .strings files (of the form App.app/*.lproj/Localizable.strings only) into a minified form
- Eliminate key duplication (read more about the strategy), this typically reduces the size by about 50%
- Keep small files in a compressed form on disk, using LZFSE, to reduce the size further
- Replace the original language.lproj/Localizable.strings with placeholders that have one key-value pair each. This shows Apple that the same languages are still supported, so that it can pick the correct one based on the user's settings.
- Use the iOS library that replaces
NSLocalizedString
with a new version,SSTStringForKey
that fetches values for keys from this minified format.
Usage
Cocoapods
Add this to your Podfile:
pod 'SmallStrings'
Then add a Run Script build phase after the "Copy bundle resources" phase:
cd ${PODS_ROOT}/SmallStrings && ./localize.sh ${CODESIGNING_FOLDER_PATH} ${DERIVED_FILES_DIR}/SmallStrings.cache
Lastly, replace all usages of NSLocalizedString(key, comment)
with SSTStringForKey(key)
.
Manual
- Add
Source/SSTSmallStrings.{h,m}
to your project. - Create a
compress
binary viaclang -O3 compress.m -framework Foundation -lcompression -o compress
and put the executable in the same directory aslocalize.{rb,sh}
. - Add a build step with
cd /path/to/SmallStrings && ./localize.sh ${CODESIGNING_FOLDER_PATH} ${DERIVED_FILES_DIR}/SmallStrings.cache
. - Lastly, replace all usages of
NSLocalizedString(key, comment)
withSSTStringForKey(key)
.