Xcode/XcodeXIPUnpacker.py (41 lines of code) (raw):

#!/usr/bin/python # # Copyright (c) Facebook, Inc. and its affiliates. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """Unpack an Xcode XIP.""" import os import subprocess from autopkglib import Processor, ProcessorError __all__ = ["XcodeXIPUnpacker"] class XcodeXIPUnpacker(Processor): """Unpack a XIP file from Apple.""" description = "Unpack an Apple XIP file." input_variables = { "PKG": {"required": True, "description": "Path to an Xcode .xip file."}, "output_path": { "required": False, "description": ( "Path to unpack the contents. Defaults to " "%RECIPE_CACHE_DIR%/%NAME%_unpack." ), }, } output_variables = {} __doc__ = description def main(self): """Main.""" xip_path = self.env["PKG"] if self.env.get("output_path"): output = self.env["output_path"] else: output = os.path.join( self.env["RECIPE_CACHE_DIR"], self.env["NAME"] + "_unpack" ) if not os.path.isdir(output): os.makedirs(output) self.output( "Extracting xip archive, please be patient, this could take a long time..." ) os.chdir(output) cmd = ["/usr/bin/xip", "--expand", xip_path] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (out, err) = proc.communicate() if err: raise ProcessorError(err) self.output("Finished xip unpack.") if __name__ == "__main__": processor = XcodeXIPUnpacker() processor.execute_shell()