📄 umake_pb.py
字号:
if path: p, ext=os.path.splitext(path) if ext == ".strings": self.fileEncoding=10 self.expectedFileType="text.plist.strings" if ext == ".plist": self.fileEncoding=4 self.expectedFileType="text.plist" if ext == ".bundle": self.expectedFileType="wrapper.cfbundle" if ext == ".app": self.expectedFileType="wrapper.application" if ext == ".nib": self.expectedFileType="wrapper.nib" if ext == ".framework": self.expectedFileType="wrapper.framework" if ext == ".a": self.expectedFileType="archive.ar" if string.lower(ext) in [".c"]: self.expectedFileType="sourcecode.c.c" if string.lower(ext) in [".cpp",".cc",".cxx"]: self.expectedFileType="sourcecode.cpp.cpp" if string.lower(ext) in [".h",".hh"]: self.expectedFileType="sourcecode.c.h" if self.__class__ != PBXFileReference: self.fallbackIsa="PBXFileReference" def copy(self): return selfclass PBXApplicationReference(PBXFileReference): pass class PBXLibraryReference(PBXFileReference): pass class PBXFrameworkReference(PBXFileReference): passclass PBXFolderReference(PBXFileReference): passclass PBXBundleReference(PBXFileReference): passclass PBXBuildFile: def __init__(self, ref = None, settings = None): self.settings={} ## Hash, { "ATTRIBUTES":[] } self.fileRef=ref ## PBXFileReference if settings: self.settings = settings def copy(self): return copy.copy(self)class PBXBuildStyle: def __init__(self): self.buildRules = [] ## array of ??????? self.buildSettings = {} ## hash, overrides settings in PBX*Target ? self.name = None ## Name of this build style def copy(self): ret=self.copy(ret) ret.buildRules=copy_array(self.BuildRules) ret.buildSettings=copy.copy(ret.buildSettings) return ret class PBXExecutable: def copy(self): return selfclass PBXBuildPhase: def __init__(self): self.buildActionMask = 0x7fffffff ## int self.files = [] ## array of PBXBuildFile self.runOnlyForDeploymentPostprocessing = 0 ## int def copy(self): ret = copy.copy(self) ret.files=copy_array(self.files) return retclass PBXHeadersBuildPhase(PBXBuildPhase): passclass PBXResourcesBuildPhase(PBXBuildPhase): passclass PBXSourcesBuildPhase(PBXBuildPhase): passclass PBXFrameworksBuildPhase(PBXBuildPhase): passclass PBXRezBuildPhase(PBXBuildPhase): passclass PBXShellScriptBuildPhase(PBXBuildPhase): def __init__(self, cmd="", shell="/bin/sh"): PBXBuildPhase.__init__(self) self.neededFileNames=[] self.generatedFileNames=[] self.shellPath=shell self.shellScript=cmd def copy(self): ret = copy.copy(self) ret.neededFileNames=copy_array(self.neededFileNames) ret.generatedFileNames=copy_array(self.generatedFileNames) return retclass PBXCopyFilesBuildPhase(PBXBuildPhase): def __init__(self, to=None): PBXBuildPhase.__init__(self) if to: self.dstPath=to self.dstSubfolderSpec=16 ## product relativedef copy_array(arr): ret=[] for x in arr: ret.append(x.copy()) return retclass PBXNativeTarget: def __init__(self, name = None): self.buildPhases = [] ## array of PBX*BuildPhase self.buildSettings = {} ## A bunch of settingss self.dependencies = [] ## Array of PBXTargetDependency self.name = name ## string, name of target self.productName = "Ribosome Project" ## String, purpose ? self.productSettingsXML = None ## XML data (optional?) def copy(self): ret = copy.copy(self) ret.buildSettings = copy.copy(ret.buildSettings) ret.buildPhases = copy_array(ret.buildPhases) ret.dependencies = copy_array(self.dependencies) return retclass PBXLibraryTarget(PBXNativeTarget): passclass PBXBundleTarget(PBXNativeTarget): passclass PBXApplicationTarget(PBXNativeTarget): passclass PBXFrameworkTarget(PBXNativeTarget): passclass PBXAggregateTarget(PBXNativeTarget): passif objectVersion > 38: def PBXLibraryTarget(name=None): ret=PBXNativeTarget(name) ret.productType="com.apple.product-type.library.static" return ret; def PBXApplicationTarget(name=None): ret=PBXNativeTarget(name) ret.productType="com.apple.product-type.application" return ret; def PBXBundleTarget(name=None): ret=PBXNativeTarget(name) ret.productType="com.apple.product-type.bundle" return ret; def PBXFrameworkTarget(name=None): ret=PBXNativeTarget(name) ret.productType="com.apple.product-type.framework" return ret;class PBXLegacyTarget(PBXNativeTarget): def __init__(self, name = None): PBXNativeTarget.__init__(self, name) self.buildArgumentsString="$ACTION" self.settingsToPassInEnvironment = -1 self.settingsToExpand=0 self.settingsToPassOnCommandLine=0 self.passBuildSettingsInEnvironment=1 self.buildToolPath="/usr/bin/gnumake" def copy(self): return copy.copy(self)class PBXContainerItemProxy: def __init__(self, remote=None, containerportal=None): self.proxyType=1 if remote: self.remoteGlobalIDString = remote self.remoteInfo = remote.name self.containerPortal = containerportal def copy(self): return copy.copy(self)class PBXGroup: def set_path(self, path = None): if path: self.refType = 4 self.path = path if os.path.isabs(path): self.refType = 0 if objectVersion > 38: self.sourceTree = "<group>" if self.refType == 0: self.sourceTree = "<absolute>" def __init__(self, name=None, path=None): self.children = [] ## array of objects (references?) self.name = name ## String self.refType = 4 ## int # self.path def copy(self): return self def add(self, pbxsomething): self.children.append(pbxsomething) def add_file(self, sourcefile): self.add(PBXFileReference(sourcefile)) class PBXVariantGroup(PBXGroup): passclass PBXProject: def __init__(self): self.buildStyles = [] ## array of PBXBuildStyle self.hasScannedForEncodings=1 ## int self.mainGroup = PBXGroup("All Files") ## PBXGroup self.projectDirPath="" ## string self.targets = [] ## array of PBX*Target # self.projectRefGroup = None ## PBXGroup def copy(self): return selfclass PBXTargetDependency: def __init__(self, target = None, root=None): self.target=target # a PBX*Target if objectVersion > 38: self.targetProxy = PBXContainerItemProxy(target, root) def copy(self): return copy.copy(self)########################################################### class projectbuilder: def __init__(self): self.pbx=PBXProject() self.group_cache={ "/": self.pbx.mainGroup, "": self.pbx.mainGroup } self.file_cache = {} self.basename="" def create_group(self, path): if self.group_cache.has_key(path): return self.group_cache[path] dir, name = os.path.split(path) parent = self.create_group(dir) if name: group = PBXGroup(name) parent.add(group) else: group = parent self.group_cache[path] = group return group def add_file(self, file, cls, prefix, where): if self.file_cache.has_key(prefix+file): return self.file_cache[prefix+file] dir, name = os.path.split(file) g=self.create_group(os.path.join(self.basename, where, dir)) f=cls(file) g.add(f) f.name=name self.file_cache[prefix+file]=f return f def add_file_basename(self, file, cls, prefix, where): if self.file_cache.has_key(prefix+file): return self.file_cache[prefix+file] dir, name = os.path.split(file) g=self.create_group(os.path.join(self.basename, where)) f=cls(file) f.name=name g.add(f) self.file_cache[prefix+file]=f return f def add_source_file(self, file, where="Sources"): return self.add_file(file, PBXFileReference, "F", where); def add_library(self, file, where="Libraries & Frameworks"): return self.add_file_basename(file, PBXLibraryReference, "L", where); def add_framework(self, file, where="Libraries & Frameworks"): return self.add_file_basename(file, PBXFrameworkReference, "F", where); def add_application(self, file, where="Products"): return self.add_file(file, PBXApplicationReference, "A", where); def add_bundle(self, file, where="Products"): return self.add_file(file, PBXBundleReference, "B", where); def add_bundle(self, file, where="Products"): return self.add_file(file, PBXFrameworkReference, "f", where); def add_resource_file(self, file, where="Resources"): return self.add_file_basename(file, PBXFileReference, "r", where); def add_resource_folder(self, file, where="Resources"): return self.add_file_basename(file, PBXFolderReference, "R", where); def quicksave(self, name): c=codec() sdata=c.convert(self.pbx) marshal.dump(sdata, open(name+"-pbtmp","w")) def save(self, name): if objectVersion == 38: dirname="%s.pbproj" else: dirname="%s.xcode" dirname = dirname % name #print "Saving: %s/project.pbxproj" % dirname shell.mkdir(dirname) c=codec() sdata=c.convert(self.pbx) data=c.serialize(sdata); file=dirname+"/project.pbxproj" contents="" if os.path.exists(file): contents=open(file,"r").read()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -