diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2835a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.pbxuser +*.perspective +*.perspectivev3 +*.mode1v3 +project.xcworkspace +xcuserdata +tmp +bin +build +*.zip diff --git a/Classes/.gitignore b/Classes/.gitignore new file mode 100644 index 0000000..dc61813 --- /dev/null +++ b/Classes/.gitignore @@ -0,0 +1,2 @@ +ComTiopengles.h +ComTiopengles.m diff --git a/Classes/ComTiopenglesModule.h b/Classes/ComTiopenglesModule.h new file mode 100644 index 0000000..16df8bc --- /dev/null +++ b/Classes/ComTiopenglesModule.h @@ -0,0 +1,13 @@ +/** + * Copyright 2011 LANGRISE Co.,Ltd. All rights reserved. + * + * Appcelerator Titanium is Copyright (c) 2009-2010 by Appcelerator, Inc. + * and licensed under the Apache Public License (version 2) + */ +#import "TiModule.h" + +@interface ComTiopenglesModule : TiModule +{ +} + +@end diff --git a/Classes/ComTiopenglesModule.m b/Classes/ComTiopenglesModule.m new file mode 100644 index 0000000..d4725f7 --- /dev/null +++ b/Classes/ComTiopenglesModule.m @@ -0,0 +1,98 @@ +/** + * Copyright 2011 LANGRISE Co.,Ltd. All rights reserved. + * + * Appcelerator Titanium is Copyright (c) 2009-2010 by Appcelerator, Inc. + * and licensed under the Apache Public License (version 2) + */ +#import "ComTiopenglesModule.h" +#import "ComTiopengles3DModel.h" +#import "TiBase.h" +#import "TiHost.h" +#import "TiUtils.h" + +@implementation ComTiopenglesModule + +#pragma mark Internal + +// this is generated for your module, please do not change it +-(id)moduleGUID +{ + return @"eecef08e-0041-4ceb-b094-43f6cafb8406"; +} + +// this is generated for your module, please do not change it +-(NSString*)moduleId +{ + return @"com.tiopengles"; +} + +#pragma mark Lifecycle + +-(void)startup +{ + // this method is called when the module is first loaded + // you *must* call the superclass + [super startup]; + + NSLog(@"[INFO] %@ loaded",self); +} + +-(void)shutdown:(id)sender +{ + // this method is called when the module is being unloaded + // typically this is during shutdown. make sure you don't do too + // much processing here or the app will be quit forceably + + // you *must* call the superclass + [super shutdown:sender]; +} + +#pragma mark Cleanup + +-(void)dealloc +{ + // release any resources that have been retained by the module + [super dealloc]; +} + +#pragma mark Internal Memory Management + +-(void)didReceiveMemoryWarning:(NSNotification*)notification +{ + // optionally release any resources that can be dynamically + // reloaded once memory is available - such as caches + [super didReceiveMemoryWarning:notification]; +} + +#pragma mark Listener Notifications + +-(void)_listenerAdded:(NSString *)type count:(int)count +{ + if (count == 1 && [type isEqualToString:@"my_event"]) + { + // the first (of potentially many) listener is being added + // for event named 'my_event' + } +} + +-(void)_listenerRemoved:(NSString *)type count:(int)count +{ + if (count == 0 && [type isEqualToString:@"my_event"]) + { + // the last listener called for event named 'my_event' has + // been removed, we can optionally clean up any resources + // since no body is listening at this point for that event + } +} + +#pragma Public APIs + +- (id)load3ds:(id)args +{ + ENSURE_ARRAY(args); + id filename = [args objectAtIndex:0]; + ENSURE_TYPE(filename, NSString); + return [ComTiopengles3DModel load:filename]; +} + +@end diff --git a/Classes/ComTiopenglesModuleAssets.h b/Classes/ComTiopenglesModuleAssets.h new file mode 100644 index 0000000..3461c06 --- /dev/null +++ b/Classes/ComTiopenglesModuleAssets.h @@ -0,0 +1,9 @@ +/** + * This is a generated file. Do not edit or your changes will be lost + */ + +@interface ComTiopenglesModuleAssets : NSObject +{ +} +- (NSData*) moduleAsset; +@end diff --git a/Classes/ComTiopenglesModuleAssets.m b/Classes/ComTiopenglesModuleAssets.m new file mode 100644 index 0000000..8a93fee --- /dev/null +++ b/Classes/ComTiopenglesModuleAssets.m @@ -0,0 +1,15 @@ +/** + * This is a generated file. Do not edit or your changes will be lost + */ +#import "ComTiopenglesModuleAssets.h" + +extern NSData * dataWithHexString (NSString * hexString); + +@implementation ComTiopenglesModuleAssets + +- (NSData*) moduleAsset +{ + return nil; +} + +@end diff --git a/ComTiopengles_Prefix.pch b/ComTiopengles_Prefix.pch new file mode 100644 index 0000000..8bec24f --- /dev/null +++ b/ComTiopengles_Prefix.pch @@ -0,0 +1,4 @@ + +#ifdef __OBJC__ + #import +#endif diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..62a2db6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2011 KATAOKA,Atsushi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/README b/README new file mode 100644 index 0000000..d11f517 --- /dev/null +++ b/README @@ -0,0 +1,151 @@ +Appcelerator Titanium iPhone Module Project +=========================================== + +This is a skeleton Titanium Mobile iPhone module project. Modules can be +used to extend the functionality of Titanium by providing additional native +code that is compiled into your application at build time and can expose certain +APIs into JavaScript. + +MODULE NAMING +-------------- + +Choose a unique module id for your module. This ID usually follows a namespace +convention using DNS notation. For example, com.appcelerator.module.test. This +ID can only be used once by all public modules in Titanium. + + +COMPONENTS +----------- + +Components that are exposed by your module must follow a special naming convention. +A component (widget, proxy, etc) must be named with the pattern: + + TiProxy + +For example, if you component was called Foo, your proxy would be named: + + TiMyfirstFooProxy + +For view proxies or widgets, you must create both a view proxy and a view implementation. +If you widget was named proxy, you would create the following files: + + TiMyfirstFooProxy.h + TiMyfirstFooProxy.m + TiMyfirstFoo.h + TiMyfirstFoo.m + +The view implementation is named the same except it does contain the suffix `Proxy`. + +View implementations extend the Titanium base class `TiUIView`. View Proxies extend the +Titanium base class `TiUIViewProxy` or `TiUIWidgetProxy`. + +For proxies that are simply native objects that can be returned to JavaScript, you can +simply extend `TiProxy` and no view implementation is required. + + +GET STARTED +------------ + +1. Edit manifest with the appropriate details about your module. +2. Edit LICENSE to add your license details. +3. Place any assets (such as PNG files) that are required in the assets folder. +4. Edit the titanium.xcconfig and make sure you're building for the right Titanium version. +5. Code and build. + +BUILD TIME COMPILER CONFIG +-------------------------- + +You can edit the file `module.xcconfig` to include any build time settings that should be +set during application compilation that your module requires. This file will automatically get `#include` in the main application project. + +For more information about this file, please see the Apple documentation at: + + + + +DOCUMENTATION FOR YOUR MODULE +----------------------------- + +You should provide at least minimal documentation for your module in `documentation` folder using the Markdown syntax. + +For more information on the Markdown syntax, refer to this documentation at: + + + + +TEST HARNESS EXAMPLE FOR YOUR MODULE +------------------------------------ + +The `example` directory contains a skeleton application test harness that can be +used for testing and providing an example of usage to the users of your module. + + +INSTALL YOUR MODULE +-------------------- + +1. Run `build.py` which creates your distribution +2. cd to `/Library/Application Support/Titanium` +3. copy this zip file into the folder of your Titanium SDK + +REGISTER YOUR MODULE +--------------------- + +Register your module with your application by editing `tiapp.xml` and adding your module. +Example: + + + com.tiopengles + + +When you run your project, the compiler will know automatically compile in your module +dependencies and copy appropriate image assets into the application. + +USING YOUR MODULE IN CODE +------------------------- + +To use your module in code, you will need to require it. + +For example, + + var my_module = require('com.tiopengles'); + my_module.foo(); + +WRITING PURE JS NATIVE MODULES +------------------------------ + +You can write a pure JavaScript "natively compiled" module. This is nice if you +want to distribute a JS module pre-compiled. + +To create a module, create a file named com.tiopengles.js under the assets folder. +This file must be in the Common JS format. For example: + + exports.echo = function(s) + { + return s; + }; + +Any functions and properties that are exported will be made available as part of your +module. All other code inside your JS will be private to your module. + +For pure JS module, you don't need to modify any of the Objective-C module code. You +can leave it as-is and build. + +TESTING YOUR MODULE +------------------- + +Run the `titanium.py` script to test your module or test from within XCode. +To test with the script, execute: + + titanium run --dir=YOURMODULEDIR + + +This will execute the app.js in the example folder as a Titanium application. + + +DISTRIBUTING YOUR MODULE +------------------------- + +Currently, you will need to manually distribution your module distribution zip file directly. However, in the near future, we will make module distribution and sharing built-in to Titanium Developer and in the Titanium Marketplace! + + +Cheers! diff --git a/assets/README b/assets/README new file mode 100644 index 0000000..64ea452 --- /dev/null +++ b/assets/README @@ -0,0 +1,6 @@ +Place your assets like PNG files in this directory and they will be packaged with your module. + +If you create a file named com.tiopengles.js in this directory, it will be +compiled and used as your module. This allows you to run pure Javascript +modules that are pre-compiled. + diff --git a/build.py b/build.py new file mode 100755 index 0000000..ddea9c7 --- /dev/null +++ b/build.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python +# +# Appcelerator Titanium Module Packager +# +# +import os, sys, glob, string +import zipfile + +cwd = os.path.abspath(os.path.dirname(sys._getframe(0).f_code.co_filename)) +required_module_keys = ['name','version','moduleid','description','copyright','license','copyright','platform','minsdk'] +module_defaults = { + 'description':'My module', + 'author': 'Your Name', + 'license' : 'Specify your license', + 'copyright' : 'Copyright (c) 2010 by Your Company', +} +module_license_default = "TODO: place your license here and we'll include it in the module distribution" + +def replace_vars(config,token): + idx = token.find('$(') + while idx != -1: + idx2 = token.find(')',idx+2) + if idx2 == -1: break + key = token[idx+2:idx2] + if not config.has_key(key): break + token = token.replace('$(%s)' % key, config[key]) + idx = token.find('$(') + return token + + +def read_ti_xcconfig(): + contents = open(os.path.join(cwd,'titanium.xcconfig')).read() + config = {} + for line in contents.splitlines(False): + line = line.strip() + if line[0:2]=='//': continue + idx = line.find('=') + if idx > 0: + key = line[0:idx].strip() + value = line[idx+1:].strip() + config[key] = replace_vars(config,value) + return config + +def generate_doc(config): + docdir = os.path.join(cwd,'documentation') + if not os.path.exists(docdir): + print "Couldn't find documentation file at: %s" % docdir + return None + sdk = config['TITANIUM_SDK'] + support_dir = os.path.join(sdk,'module','support') + sys.path.append(support_dir) + import markdown2 + documentation = [] + for file in os.listdir(docdir): + md = open(os.path.join(docdir,file)).read() + html = markdown2.markdown(md) + documentation.append({file:html}); + return documentation + +def compile_js(manifest,config): + js_file = os.path.join(cwd,'assets','com.tiopengles.js') + if not os.path.exists(js_file): return + + sdk = config['TITANIUM_SDK'] + iphone_dir = os.path.join(sdk,'iphone') + sys.path.insert(0,iphone_dir) + from compiler import Compiler + + path = os.path.basename(js_file) + metadata = Compiler.make_function_from_file(path,js_file) + method = metadata['method'] + eq = path.replace('.','_') + method = ' return %s;' % method + + f = os.path.join(cwd,'Classes','ComTiopenglesModuleAssets.m') + c = open(f).read() + idx = c.find('return ') + before = c[0:idx] + after = """ +} + +@end + """ + newc = before + method + after + + if newc!=c: + x = open(f,'w') + x.write(newc) + x.close() + +def die(msg): + print msg + sys.exit(1) + +def warn(msg): + print "[WARN] %s" % msg + +def validate_license(): + c = open('LICENSE').read() + if c.find(module_license_default)!=1: + warn('please update the LICENSE file with your license text before distributing') + +def validate_manifest(): + path = os.path.join(cwd,'manifest') + f = open(path) + if not os.path.exists(path): die("missing %s" % path) + manifest = {} + for line in f.readlines(): + line = line.strip() + if line[0:1]=='#': continue + if line.find(':') < 0: continue + key,value = line.split(':') + manifest[key.strip()]=value.strip() + for key in required_module_keys: + if not manifest.has_key(key): die("missing required manifest key '%s'" % key) + if module_defaults.has_key(key): + defvalue = module_defaults[key] + curvalue = manifest[key] + if curvalue==defvalue: warn("please update the manifest key: '%s' to a non-default value" % key) + return manifest,path + +ignoreFiles = ['.DS_Store','.gitignore','libTitanium.a','titanium.jar','README','com.tiopengles.js'] +ignoreDirs = ['.DS_Store','.svn','.git','CVSROOT'] + +def zip_dir(zf,dir,basepath,ignore=[]): + for root, dirs, files in os.walk(dir): + for name in ignoreDirs: + if name in dirs: + dirs.remove(name) # don't visit ignored directories + for file in files: + if file in ignoreFiles: continue + e = os.path.splitext(file) + if len(e)==2 and e[1]=='.pyc':continue + from_ = os.path.join(root, file) + to_ = from_.replace(dir, basepath, 1) + zf.write(from_, to_) + +def glob_libfiles(): + files = [] + for libfile in glob.glob('build/**/*.a'): + if libfile.find('Release-')!=-1: + files.append(libfile) + return files + +def build_module(manifest,config): + rc = os.system("xcodebuild -sdk iphoneos -configuration Release") + if rc != 0: + die("xcodebuild failed") + rc = os.system("xcodebuild -sdk iphonesimulator -configuration Release") + if rc != 0: + die("xcodebuild failed") + # build the merged library using lipo + moduleid = manifest['moduleid'] + libpaths = '' + for libfile in glob_libfiles(): + libpaths+='%s ' % libfile + + os.system("lipo %s -create -output build/lib%s.a" %(libpaths,moduleid)) + +def package_module(manifest,mf,config): + name = manifest['name'].lower() + moduleid = manifest['moduleid'].lower() + version = manifest['version'] + modulezip = '%s-iphone-%s.zip' % (moduleid,version) + if os.path.exists(modulezip): os.remove(modulezip) + zf = zipfile.ZipFile(modulezip, 'w', zipfile.ZIP_DEFLATED) + modulepath = 'modules/iphone/%s/%s' % (moduleid,version) + zf.write(mf,'%s/manifest' % modulepath) + libname = 'lib%s.a' % moduleid + zf.write('build/%s' % libname, '%s/%s' % (modulepath,libname)) + docs = generate_doc(config) + if docs!=None: + for doc in docs: + for file, html in doc.iteritems(): + filename = string.replace(file,'.md','.html') + zf.writestr('%s/documentation/%s'%(modulepath,filename),html) + for dn in ('assets','example'): + if os.path.exists(dn): + zip_dir(zf,dn,'%s/%s' % (modulepath,dn),['README']) + zf.write('LICENSE','%s/LICENSE' % modulepath) + zf.write('module.xcconfig','%s/module.xcconfig' % modulepath) + zf.close() + + +if __name__ == '__main__': + manifest,mf = validate_manifest() + validate_license() + config = read_ti_xcconfig() + compile_js(manifest,config) + build_module(manifest,config) + package_module(manifest,mf,config) + sys.exit(0) + diff --git a/documentation/index.md b/documentation/index.md new file mode 100644 index 0000000..94beb41 --- /dev/null +++ b/documentation/index.md @@ -0,0 +1,39 @@ +# tiopengles Module + +## Description + +TODO: Enter your module description here + +## Accessing the tiopengles Module + +To access this module from JavaScript, you would do the following: + + var tiopengles = require("com.tiopengles"); + +The tiopengles variable is a reference to the Module object. + +## Reference + +TODO: If your module has an API, you should document +the reference here. + +### ___PROJECTNAMEASIDENTIFIER__.function + +TODO: This is an example of a module function. + +### ___PROJECTNAMEASIDENTIFIER__.property + +TODO: This is an example of a module property. + +## Usage + +TODO: Enter your usage example here + +## Author + +TODO: Enter your author name, email and other contact +details you want to share here. + +## License + +TODO: Enter your license/legal information here. diff --git a/example/app.js b/example/app.js new file mode 100644 index 0000000..03d832f --- /dev/null +++ b/example/app.js @@ -0,0 +1,36 @@ +// This is a test harness for your module +// You should do something interesting in this harness +// to test out the module and to provide instructions +// to users on how to use it by example. + + +// open a single window +var window = Ti.UI.createWindow({ + backgroundColor:'#411' +}); + +// TODO: write your module tests here +var opengles = require('com.tiopengles'); +var openglesView = opengles.createView({ + zNear:0.01, + zFar:1000.0, + fieldOfView:45.0, + userDepthBuffer:true, + lights: [ { ambient:{r:0.6,g:0.2,b:0.2}, + diffuse:{r:0.7,g:0.3,b:0.3}, + specular:{r:0.7,g:0.3,b:0.3}, + position:{x:5.0,y:5.0,z:5.0}} ] +}); + +var cube1 = opengles.load3ds("cube.3ds"); +cube1.rotation({x:45.0,y:0.0,z:0.0}); +cube1.translation({x:0.0,y:0.0,z:-10.0}); +openglesView.addModel(cube1); + +var cube2 = opengles.load3ds("cube.3ds"); +cube2.rotation({x:45.0,y:0.0,z:45.0}); +cube2.translation({x:3.0,y:3.0,z:-20.0}); +openglesView.addModel(cube2); + +window.add(openglesView); +window.open(); \ No newline at end of file diff --git a/hooks/README b/hooks/README new file mode 100644 index 0000000..66b10a8 --- /dev/null +++ b/hooks/README @@ -0,0 +1 @@ +These files are not yet supported as of 1.4.0 but will be in a near future release. diff --git a/hooks/add.py b/hooks/add.py new file mode 100644 index 0000000..04e1c1d --- /dev/null +++ b/hooks/add.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# +# This is the module project add hook that will be +# called when your module is added to a project +# +import os, sys + +def dequote(s): + if s[0:1] == '"': + return s[1:-1] + return s + +def main(args,argc): + # You will get the following command line arguments + # in the following order: + # + # project_dir = the full path to the project root directory + # project_type = the type of project (desktop, mobile, ipad) + # project_name = the name of the project + # + project_dir = dequote(os.path.expanduser(args[1])) + project_type = dequote(args[2]) + project_name = dequote(args[3]) + + # TODO: write your add hook here (optional) + + + # exit + sys.exit(0) + + + +if __name__ == '__main__': + main(sys.argv,len(sys.argv)) + diff --git a/hooks/install.py b/hooks/install.py new file mode 100644 index 0000000..b423fe9 --- /dev/null +++ b/hooks/install.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# +# This is the module install hook that will be +# called when your module is first installed +# +import os, sys + +def main(args,argc): + + # TODO: write your install hook here (optional) + + # exit + sys.exit(0) + + + +if __name__ == '__main__': + main(sys.argv,len(sys.argv)) + diff --git a/hooks/remove.py b/hooks/remove.py new file mode 100644 index 0000000..f92a234 --- /dev/null +++ b/hooks/remove.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# +# This is the module project remove hook that will be +# called when your module is remove from a project +# +import os, sys + +def dequote(s): + if s[0:1] == '"': + return s[1:-1] + return s + +def main(args,argc): + # You will get the following command line arguments + # in the following order: + # + # project_dir = the full path to the project root directory + # project_type = the type of project (desktop, mobile, ipad) + # project_name = the name of the project + # + project_dir = dequote(os.path.expanduser(args[1])) + project_type = dequote(args[2]) + project_name = dequote(args[3]) + + # TODO: write your remove hook here (optional) + + # exit + sys.exit(0) + + + +if __name__ == '__main__': + main(sys.argv,len(sys.argv)) + diff --git a/hooks/uninstall.py b/hooks/uninstall.py new file mode 100644 index 0000000..a7ffd91 --- /dev/null +++ b/hooks/uninstall.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# +# This is the module uninstall hook that will be +# called when your module is uninstalled +# +import os, sys + +def main(args,argc): + + # TODO: write your uninstall hook here (optional) + + # exit + sys.exit(0) + + +if __name__ == '__main__': + main(sys.argv,len(sys.argv)) + diff --git a/manifest b/manifest new file mode 100644 index 0000000..e642d0c --- /dev/null +++ b/manifest @@ -0,0 +1,17 @@ +# +# this is your module manifest and used by Titanium +# during compilation, packaging, distribution, etc. +# +version: 0.1 +description: OpenGL ES module +author: KATAOKA,Atsushi +license: MIT License +copyright: Copyright (c) 2011 by KATAOKA,Atsushi + + +# these should not be edited +name: tiopengles +moduleid: com.tiopengles +guid: eecef08e-0041-4ceb-b094-43f6cafb8406 +platform: iphone +minsdk: 1.6.0 diff --git a/module.xcconfig b/module.xcconfig new file mode 100644 index 0000000..0097b61 --- /dev/null +++ b/module.xcconfig @@ -0,0 +1,28 @@ +// +// PLACE ANY BUILD DEFINITIONS IN THIS FILE AND THEY WILL BE +// PICKED UP DURING THE APP BUILD FOR YOUR MODULE +// +// see the following webpage for instructions on the settings +// for this file: +// http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/XcodeBuildSystem/400-Build_Configurations/build_configs.html +// + +// +// How to add a Framework (example) +// +// OTHER_LDFLAGS=$(inherited) -framework Foo +// +// Adding a framework for a specific version(s) of iPhone: +// +// OTHER_LDFLAGS[sdk=iphoneos4*]=$(inherited) -framework Foo +// OTHER_LDFLAGS[sdk=iphonesimulator4*]=$(inherited) -framework Foo +// +// +// How to add a compiler define: +// +// OTHER_CFLAGS=$(inherited) -DFOO=1 +// +// +// IMPORTANT NOTE: always use $(inherited) in your overrides +// +OTHER_LDFLAGS=$(inherited) -framework UIKit -framework QuartzCore -framework OpenGLES diff --git a/timodule.xml b/timodule.xml new file mode 100644 index 0000000..60636f1 --- /dev/null +++ b/timodule.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/titanium.xcconfig b/titanium.xcconfig new file mode 100644 index 0000000..1d9ee8c --- /dev/null +++ b/titanium.xcconfig @@ -0,0 +1,19 @@ +// +// +// CHANGE THESE VALUES TO REFLECT THE VERSION (AND LOCATION IF DIFFERENT) +// OF YOUR TITANIUM SDK YOU'RE BUILDING FOR +// +// +TITANIUM_SDK_VERSION = 1.6.0 + + +// +// THESE SHOULD BE OK GENERALLY AS-IS +// +TITANIUM_SDK = /Library/Application Support/Titanium/mobilesdk/osx/$(TITANIUM_SDK_VERSION) +TITANIUM_BASE_SDK = "$(TITANIUM_SDK)/iphone/include" +TITANIUM_BASE_SDK2 = "$(TITANIUM_SDK)/iphone/include/TiCore" +HEADER_SEARCH_PATHS= $(TITANIUM_BASE_SDK) $(TITANIUM_BASE_SDK2) + + +