#!/usr/bin/python import lutinDebug as debug import lutinTarget import lutinTools import os import stat import lutinExtProjectGeneratorXCode import lutinMultiprocess import random class Target(lutinTarget.Target): def __init__(self, typeCompilator, debugMode, generatePackage): cross = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/" if typeCompilator == "gcc": debug.info("compile only with clang for IOs"); typeCompilator = "clang" # http://biolpc22.york.ac.uk/pub/linux-mac-cross/ # http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt lutinTarget.Target.__init__(self, "IOs", typeCompilator, debugMode, generatePackage, "i386", cross) # remove unneeded ranlib ... self.ranlib="" self.folder_bin="" self.folder_data="/share" self.folder_doc="/doc" self.suffix_lib_static='.a' self.suffix_lib_dynamic='.dylib' self.suffix_binary='' self.suffix_package='' self.sysroot = "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk" self.global_flags_ld.append([ "-mios-simulator-version-min=7.0", "-Xlinker", "-objc_abi_version", "-Xlinker 2", "-Xlinker", "-no_implicit_dylibs", "-stdlib=libc++", "-fobjc-arc", "-fobjc-link-runtime"]) self.global_flags_cc.append("-mios-simulator-version-min=7.0") self.global_flags_m.append("-fobjc-arc") #self.global_flags_m.append("-fmodules") #add a project generator: self.externProjectManager = lutinExtProjectGeneratorXCode.ExtProjectGeneratorXCode() def get_staging_folder(self, binaryName): return lutinTools.get_run_folder() + self.folder_out + self.folder_staging + "/" + binaryName + ".app/" def get_staging_folder_data(self, binaryName): return self.get_staging_folder(binaryName) + self.folder_data + "/" def make_package(self, pkgName, pkgProperties, basePkgPath): debug.debug("------------------------------------------------------------------------") debug.info("Generate package '" + pkgName + "'") debug.debug("------------------------------------------------------------------------") if "ICON" in pkgProperties.keys() \ and pkgProperties["ICON"] != "": lutinTools.copy_file(pkgProperties["ICON"], self.get_staging_folder_data(pkgName) + "/icon.icns", True) # http://www.sandroid.org/imcross/#Deployment infoFile=self.get_staging_folder(pkgName) + "/Info.plist" # Create the info file tmpFile = open(infoFile, 'w') tmpFile.write("\n") tmpFile.write("\n") tmpFile.write("\n") tmpFile.write(" \n") tmpFile.write(" CFBundleDevelopmentRegion\n") tmpFile.write(" en\n") tmpFile.write(" CFBundleDisplayName\n") tmpFile.write(" " + pkgProperties["NAME"] + "\n") tmpFile.write(" CFBundleExecutable\n") tmpFile.write(" " + pkgName + "\n") tmpFile.write(" CFBundleIdentifier\n") tmpFile.write(" com." + pkgProperties["COMPAGNY_NAME2"] + "." + pkgName + "\n") """ tmpFile.write(" CFBundleIconFile\n") tmpFile.write(" icon.icns\n") """ tmpFile.write(" CFBundleInfoDictionaryVersion\n") tmpFile.write(" 6.0\n") tmpFile.write(" CFBundleName\n") tmpFile.write(" " + pkgName + "\n") tmpFile.write(" CFBundlePackageType\n") tmpFile.write(" APPL\n") tmpFile.write(" CFBundleShortVersionString\n") tmpFile.write(" 1.0\n") tmpFile.write(" CFBundleSignature\n") tmpFile.write(" ????\n") tmpFile.write(" CFBundleSupportedPlatforms\n") tmpFile.write(" \n") tmpFile.write(" iPhoneSimulator\n") tmpFile.write(" \n") """ tmpFile.write(" CFBundleVersion\n") tmpFile.write(" 1.0\n") """ tmpFile.write(" DTPlatformName\n") tmpFile.write(" iphonesimulator\n") tmpFile.write(" DTSDKName\n") tmpFile.write(" iphonesimulator7.0\n") """ tmpFile.write(" LSRequiresIPhoneOS\n") tmpFile.write(" \n") """ tmpFile.write(" UIDeviceFamily\n") tmpFile.write(" \n") tmpFile.write(" 1\n") tmpFile.write(" 2\n") tmpFile.write(" \n") """ tmpFile.write(" UILaunchImages\n") tmpFile.write(" \n") tmpFile.write(" \n") tmpFile.write(" UILaunchImageMinimumOSVersion\n") tmpFile.write(" 7.0\n") tmpFile.write(" UILaunchImageName\n") tmpFile.write(" LaunchImage-700-568h\n") tmpFile.write(" UILaunchImageOrientation\n") tmpFile.write(" Portrait\n") tmpFile.write(" UILaunchImageSize\n") tmpFile.write(" {320, 568}\n") tmpFile.write(" \n") tmpFile.write(" \n") """ """ tmpFile.write(" UIMainStoryboardFile\n") tmpFile.write(" Main_iPhone\n") tmpFile.write(" UIMainStoryboardFile~ipad\n") tmpFile.write(" Main_iPad\n") """ tmpFile.write(" UIRequiredDeviceCapabilities\n") tmpFile.write(" \n") tmpFile.write(" armv7\n") tmpFile.write(" \n") tmpFile.write(" UIStatusBarHidden\n") tmpFile.write(" \n") tmpFile.write(" UISupportedInterfaceOrientations\n") tmpFile.write(" \n") tmpFile.write(" UIInterfaceOrientationPortrait\n") tmpFile.write(" UIInterfaceOrientationPortraitUpsideDown\n") tmpFile.write(" UIInterfaceOrientationLandscapeLeft\n") tmpFile.write(" UIInterfaceOrientationLandscapeRight\n") tmpFile.write(" \n") tmpFile.write(" UISupportedInterfaceOrientations~ipad\n") tmpFile.write(" \n") tmpFile.write(" UIInterfaceOrientationPortrait\n") tmpFile.write(" UIInterfaceOrientationPortraitUpsideDown\n") tmpFile.write(" UIInterfaceOrientationLandscapeLeft\n") tmpFile.write(" UIInterfaceOrientationLandscapeRight\n") tmpFile.write(" \n") tmpFile.write(" \n") tmpFile.write("\n") tmpFile.write("\n\n") tmpFile.flush() tmpFile.close() """ builtin-infoPlistUtility /Users/edouarddupin/dev/exampleProjectXcode/projectName/projectName/projectName-Info.plist -genpkginfo /Users/edouarddupin/Library/Developer/Xcode/DerivedData/projectName-gwycnyyzohokcmalgodeucqppxro/Build/Products/Debug-iphonesimulator/projectName.app/PkgInfo -expandbuildsettings -format binary -platform iphonesimulator -additionalcontentfile /Users/edouarddupin/Library/Developer/Xcode/DerivedData/projectName-gwycnyyzohokcmalgodeucqppxro/Build/Intermediates/projectName.build/Debug-iphonesimulator/projectName.build/assetcatalog_generated_info.plist -o /Users/edouarddupin/Library/Developer/Xcode/DerivedData/projectName-gwycnyyzohokcmalgodeucqppxro/Build/Products/Debug-iphonesimulator/projectName.app/Info.plist """ #/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil /Users/edouarddupin/Library/Developer/Xcode/DerivedData/projectName-gwycnyyzohokcmalgodeucqppxro/Build/Products/Debug-iphonesimulator/projectName.app/projectName -o /Users/edouarddupin/Library/Developer/Xcode/DerivedData/projectName-gwycnyyzohokcmalgodeucqppxro/Build/Products/Debug-iphonesimulator/projectName.app.dSYM infoFile=self.get_staging_folder(pkgName) + "/PkgInfo" # Create the info file tmpFile = open(infoFile, 'w') tmpFile.write("APPL????") tmpFile.flush() tmpFile.close() # Simulateur folder : #~/Library/Application\ Support/iPhone\ Simulator/7.0.3/Applications/ # must have a 'uuidgen' UID generate value with this elemennt ... # get the bundle path : ==> maybe usefull in MocOS ... # NSLog(@"%@",[[NSBundle mainBundle] bundlePath]); # Must create the tarball of the application #cd $(TARGET_OUT_FINAL)/; tar -cf $(PROJECT_NAME).tar $(PROJECT_NAME).app #cd $(TARGET_OUT_FINAL)/; tar -czf $(PROJECT_NAME).tar.gz $(PROJECT_NAME).app def createRandomNumber(self, len): out = "" for iii in range(0,len): out += random.choice(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]) return out def install_package(self, pkgName): debug.debug("------------------------------------------------------------------------") debug.info("Install package '" + pkgName + "'") debug.debug("------------------------------------------------------------------------") simulatorIdFile = ".iosSimutatorId_" + pkgName + ".txt" if lutinTools.file_size(simulatorIdFile) < 10: #create the file: tmpFile = open(simulatorIdFile, 'w') tmpFile.write(self.createRandomNumber(8)) tmpFile.write("-") tmpFile.write(self.createRandomNumber(4)) tmpFile.write("-") tmpFile.write(self.createRandomNumber(4)) tmpFile.write("-") tmpFile.write(self.createRandomNumber(4)) tmpFile.write("-") tmpFile.write(self.createRandomNumber(12)) tmpFile.flush() tmpFile.close() simulatorId = lutinTools.file_read_data(simulatorIdFile) home = os.path.expanduser("~") destinationFolderBase = home + "/Library/Application\\ Support/iPhone\\ Simulator/7.0.3/Applications/" + simulatorId destinationFolder = home + "/Library/Application Support/iPhone Simulator/7.0.3/Applications/" + simulatorId + "/" + pkgName + ".app" destinationFolder2 = home + "/Library/Application\\ Support/iPhone\\ Simulator/7.0.3/Applications/" + simulatorId + "/" + pkgName + ".app" debug.info("install in simulator : " + destinationFolder) lutinTools.create_directory_of_file(destinationFolder + "/plop.txt") cmdLine = "cp -rf " + self.get_staging_folder(pkgName) + " " + destinationFolder2 lutinMultiprocess.run_command(cmdLine) cmdLine = "touch " + destinationFolderBase lutinMultiprocess.run_command(cmdLine) #sudo dpkg -i $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package def un_install_package(self, pkgName): debug.debug("------------------------------------------------------------------------") debug.info("Un-Install package '" + pkgName + "'") debug.debug("------------------------------------------------------------------------") simulatorIdFile = ".iosSimutatorId_" + pkgName + ".txt" if lutinTools.file_size(simulatorIdFile) < 10: debug.warning("Can not get simulation O_ID : " + simulatorIdFile) #sudo dpkg -r $(TARGET_OUT_FINAL)/$(PROJECT_NAME) + self.suffix_package def Log(self, pkgName): debug.debug("------------------------------------------------------------------------") debug.info("log of iOs board") debug.debug("------------------------------------------------------------------------") cmdLine = "tail -f ~/Library/Logs/iOS\ Simulator/7.0.3/system.log" lutinMultiprocess.run_command(cmdLine)