* Parse minimum system version for launch image assets.
A system version has at least two components separated by dots, with
an optional third component separated by an additional dot.
* Compile launch image assets.
Launch images are copied to the output, and metadata is added to the
partial info plist to describe the launch images.
Instead of checking if strings are empty, use optionals to store if
the arguments were passed at all. Additionally, add a few utility
methods to the option parser to simplify various tool option classes.
- Separate out PNG loading into a separate module.
- Refactor PNG loading to be less tied to asset compliation.
- Add an implementation of PNG loading using ImageIO when available.
- Add a unit test for loading various types of PNG images.
Using iterators, each stream is read or written a byte at a time, which
is inefficient. Instead, treat the buffers as buffers and read or write
in blocks.
Normalizing a path doesn't remove trailing directory separators, so
all paths relative to the working directory gained an extra separator
when the working directory itself ended in a separator.
* Pass through info and dependency info options to asset compile output.
Fixes writing out additional info plist and dependency info.
* Add initial implementation of compiling app icons.
Supports copying the images and writing the icon metadata to info
plist additions. Current implementation has two limitations:
- All idioms are copied for all target platforms. For example, watch
images are copied for asset compilation targeting a phone.
- The size of images is not verified against the specified dimensions.
In addition to the SDK, toolchains, and developer root. Also, refactor
executable search paths to require explicitly searching `PATH` rather
than treating it as a default.
- Refactor some logic out into separate functions.
- Cleanup code style nits for consistency.
- Use filesystem to read JPEG images as well as PNG.
- Move image set compilation into namespace and class.
- Avoid unnecessary explicit casts to optional types.
- Only test rendition behavior in rendition tests. Attribute list
(de-)serialization tests are only needed once, in their tests.
- Simplify rendition tests to focus more on the tested feature.
- Add additional documentation to comment headers.
- Use `size_t` instead of other integer types when appropriate.
The optional configuration file is at `/var/db/xcsdk_configuration.plist`
unless `XCSDK_CONFIGURATION_PATH` is specified in the environment.
In the configuration, the key `ExtraPlatformsPaths` specifies paths with
additional `.platform` bundles to load, and `ExtraToolchainsPaths` lists
directories with additional `.xctoolchain` bundles.
A unit test is added to test that these paths are searched when specified.
This addresses #2 by implementing a `-help` action. `-help` prints
`-usage`, then lists explanations of each option. Options that are not
yet implemented are clearly marked as such to avoid confusion.