Sign in to PrePAN


User's Modules

Config::Apple::Profile Object-oriented interface for creating and maintaining Apple configuration profiles

(Should I call this XML::AppleConfigProfile or XML::Apple::ConfigProfile ? I'm starting to lean to XML::Apple::ConfigProfile)

Apple provides users with a way to configure Apple devices (running iOS or Mac OS X) using ready-made configuration files, which Apple calls Configuration Profiles. This suite of Perl modules is intended to aid people who would like to generate their own configuration profiles, without having to mess around with the XML themselves.

Configuration profiles can be used by iOS and Mac OS X to set a number of general and user-specific items. Examples include:

  • Configuring an LDAP server, for directory search in Mail and Contacts.
  • Specifying password requirements to match company policy (and common sense).
  • Configuring an email account, with or without a user's credentials.
  • Adding new certificate authorities.

Configuration profiles can be pre-made static files, or they can be dynamically-generated with configurations (such as usernames and passwords) that are specific to a user. Configuration profiles may be encrypted (so they may only be read on a specific device) and signed (to verify that they have not been modified by anyone other than the profile's creator).

The Configuration Profile Reference is publicly available here:

My ultimate goal is to have a suite of modules that will be able to create, export, and import all of the configuration profile payload types defined in the reference above, with the ability to sign and encrypt. However, in order to get the software out sooner, here are the milestones I'm trying to meet, with releases happening as each milestone is met.

  1. Finalize the class hierarchy, so new classes immediately have a place to live. Create all of the common payload-related code, so that adding new payloads will be easier. Implement some of the payload types. Profiles can be created and exported at this point, as long as their classes have been written.
  2. Continue adding support for additional payload types, eventually supporting all payload types.
  3. Add support for importing existing un-encrypted un-signed .mobileconfig files.
  4. Add support for signing, using OpenSSL's smime command (OpenSSL 0.9.8+).
  5. Add support for encryption, using OpenSSL's cms command (OpenSSL 1+).

Unit tests will be created as code is written. Travis-CI and are used to keep track of test success and code coverage.

akkornel@github 3 comments