toolchain: create new Xcode template, based on cookie cutter tempting system.
20
toolchain.py
|
@ -13,7 +13,6 @@ from os import listdir, unlink, makedirs, environ, chdir
|
|||
import zipfile
|
||||
import tarfile
|
||||
import importlib
|
||||
import sh
|
||||
import io
|
||||
import json
|
||||
import shutil
|
||||
|
@ -23,6 +22,11 @@ try:
|
|||
except ImportError:
|
||||
from urllib import FancyURLopener
|
||||
|
||||
curdir = dirname(__file__)
|
||||
sys.path.insert(0, join(curdir, "tools", "external"))
|
||||
|
||||
import sh
|
||||
|
||||
|
||||
IS_PY3 = sys.version_info[0] >= 3
|
||||
|
||||
|
@ -840,7 +844,21 @@ Available commands:
|
|||
def create(self):
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Create a new xcode project")
|
||||
parser.add_argument("name", help="Name of your project")
|
||||
parser.add_argument("directory", help="Directory where your project live")
|
||||
args = parser.parse_args(sys.argv[2:])
|
||||
|
||||
from cookiecutter.main import cookiecutter
|
||||
ctx = Context()
|
||||
template_dir = join(curdir, "tools", "templates")
|
||||
context = {
|
||||
"title": args.name,
|
||||
"project_name": args.name.lower(),
|
||||
"domain_name": "org.kivy.{}".format(args.name.lower()),
|
||||
"project_dir": realpath(args.directory),
|
||||
"version": "1.0.0",
|
||||
"dist_dir": ctx.dist_dir,
|
||||
}
|
||||
cookiecutter(template_dir, no_input=True, extra_context=context)
|
||||
|
||||
ToolchainCL()
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
try () {
|
||||
"$@" || exit -1
|
||||
}
|
||||
|
||||
. $(dirname $0)/environment.sh
|
||||
|
||||
APPNAME=$1
|
||||
SRCDIR=$2
|
||||
APPID=$(echo $APPNAME | tr '[A-Z]' '[a-z]')
|
||||
TEMPLATESDIR=$(dirname $0)/templates/
|
||||
APPDIR=$KIVYIOSROOT/app-$APPID
|
||||
OLD_LC_CTYPE=$LC_CTYPE
|
||||
OLD_LANG=$LANG
|
||||
|
||||
# fix for -> sed: RE error: illegal byte sequence
|
||||
LC_CTYPE=C
|
||||
LANG=C
|
||||
|
||||
if [ "X$APPNAME" == "X" ]; then
|
||||
echo $(basename $0) "<appname> <source directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "X$SRCDIR" == "X" ]; then
|
||||
echo $(basename $0) "<appname> <source directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
echo "-> Create $APPDIR directory"
|
||||
try mkdir $APPDIR
|
||||
|
||||
echo "-> Copy templates"
|
||||
try cp $TEMPLATESDIR/main.m $APPDIR/main.m
|
||||
try cp $TEMPLATESDIR/bridge.h $APPDIR/bridge.h
|
||||
try cp $TEMPLATESDIR/bridge.m $APPDIR/bridge.m
|
||||
try cp $TEMPLATESDIR/icon.png $APPDIR/icon.png
|
||||
try cp $TEMPLATESDIR/template-Info.plist $APPDIR/$APPID-Info.plist
|
||||
try cp -a $TEMPLATESDIR/template.xcodeproj $APPDIR/$APPID.xcodeproj
|
||||
|
||||
echo "-> Customize templates"
|
||||
try find $APPDIR -type f -not -iname '*.png' -exec sed -i '' "s/##APPID##/$APPID/g" {} \;
|
||||
try find $APPDIR -type f -not -iname '*.png' -exec sed -i '' "s/##APPNAME##/$APPNAME/g" {} \;
|
||||
try find $APPDIR -type f -not -iname '*.png' -exec sed -i '' "s/##SDKVER##/$SDKVER/g" {} \;
|
||||
try find $APPDIR -type f -not -iname '*.png' -exec sed -i '' "s^##SRCDIR##^$SRCDIR^g" {} \;
|
||||
|
||||
LC_CTYPE=$OLD_LC_CTYPE
|
||||
LANG=$OLD_LANG
|
||||
|
||||
echo "-> Done !"
|
||||
echo
|
||||
echo "Your project is available at $APPDIR"
|
||||
echo
|
||||
echo "You can now type: open $APPDIR/$APPID.xcodeproj"
|
||||
echo
|
0
tools/external/__init__.py
vendored
Normal file
16
tools/external/cookiecutter/__init__.py
vendored
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter
|
||||
------------
|
||||
|
||||
Main package for Cookiecutter.
|
||||
"""
|
||||
from .compat import OLD_PY2
|
||||
|
||||
__version__ = '0.9.0'
|
||||
|
||||
if OLD_PY2:
|
||||
msg = 'Python 2.6 support was removed from cookiecutter in release 1.0.0.'
|
||||
raise DeprecationWarning(msg)
|
70
tools/external/cookiecutter/cli.py
vendored
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.cli
|
||||
-----------------
|
||||
|
||||
Main `cookiecutter` CLI.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
|
||||
import click
|
||||
|
||||
from cookiecutter import __version__
|
||||
from cookiecutter.main import cookiecutter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def print_version(context, param, value):
|
||||
if not value or context.resilient_parsing:
|
||||
return
|
||||
click.echo('Cookiecutter %s from %s (Python %s)' % (
|
||||
__version__,
|
||||
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
|
||||
sys.version[:3]
|
||||
))
|
||||
context.exit()
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument('template')
|
||||
@click.option(
|
||||
'--no-input', is_flag=True,
|
||||
help='Do not prompt for parameters and only use cookiecutter.json '
|
||||
'file content',
|
||||
)
|
||||
@click.option(
|
||||
'-c', '--checkout',
|
||||
help='branch, tag or commit to checkout after git clone',
|
||||
)
|
||||
@click.option(
|
||||
'-V', '--version',
|
||||
is_flag=True, help='Show version information and exit.',
|
||||
callback=print_version, expose_value=False, is_eager=True,
|
||||
)
|
||||
@click.option(
|
||||
'-v', '--verbose',
|
||||
is_flag=True, help='Print debug information', default=False
|
||||
)
|
||||
def main(template, no_input, checkout, verbose):
|
||||
"""Create a project from a Cookiecutter project template (TEMPLATE)."""
|
||||
if verbose:
|
||||
logging.basicConfig(
|
||||
format='%(levelname)s %(filename)s: %(message)s',
|
||||
level=logging.DEBUG
|
||||
)
|
||||
else:
|
||||
# Log info and above to console
|
||||
logging.basicConfig(
|
||||
format='%(levelname)s: %(message)s',
|
||||
level=logging.INFO
|
||||
)
|
||||
|
||||
cookiecutter(template, checkout, no_input)
|
140
tools/external/cookiecutter/compat.py
vendored
Normal file
|
@ -0,0 +1,140 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
PY3 = sys.version_info[0] == 3
|
||||
OLD_PY2 = sys.version_info[:2] < (2, 7)
|
||||
|
||||
if PY3: # pragma: no cover
|
||||
input_str = 'builtins.input'
|
||||
iteritems = lambda d: iter(d.items())
|
||||
from unittest.mock import patch
|
||||
from io import StringIO
|
||||
|
||||
def read_response(prompt=''):
|
||||
"""
|
||||
Prompt the user for a response.
|
||||
|
||||
Prints the given prompt (which should be a Unicode string),
|
||||
and returns the text entered by the user as a Unicode string.
|
||||
|
||||
:param prompt: A Unicode string that is presented to the user.
|
||||
"""
|
||||
# The Python 3 input function does exactly what we want
|
||||
return input(prompt)
|
||||
|
||||
else: # pragma: no cover
|
||||
from __builtin__ import raw_input
|
||||
input = raw_input
|
||||
input_str = '__builtin__.raw_input'
|
||||
iteritems = lambda d: d.iteritems()
|
||||
from mock import patch
|
||||
from cStringIO import StringIO
|
||||
|
||||
def read_response(prompt=''):
|
||||
"""
|
||||
Prompt the user for a response.
|
||||
|
||||
Prints the given prompt (which should be a Unicode string),
|
||||
and returns the text entered by the user as a Unicode string.
|
||||
|
||||
:param prompt: A Unicode string that is presented to the user.
|
||||
"""
|
||||
# For Python 2, raw_input takes a byte string argument for the prompt.
|
||||
# This must be encoded using the encoding used by sys.stdout.
|
||||
# The result is a byte string encoding using sys.stdin.encoding.
|
||||
# However, if the program is not being run interactively, sys.stdout
|
||||
# and sys.stdin may not have encoding attributes.
|
||||
# In that case we don't print a prompt (stdin/out isn't interactive,
|
||||
# so prompting is pointless), and we assume the returned data is
|
||||
# encoded using sys.getdefaultencoding(). This may not be right,
|
||||
# but it's likely the best we can do.
|
||||
# Isn't Python 2 encoding support wonderful? :-)
|
||||
if sys.stdout.encoding:
|
||||
prompt = prompt.encode(sys.stdout.encoding)
|
||||
else:
|
||||
prompt = ''
|
||||
enc = sys.stdin.encoding or sys.getdefaultencoding()
|
||||
return raw_input(prompt).decode(enc)
|
||||
|
||||
|
||||
if PY3: # Forced testing
|
||||
|
||||
from shutil import which
|
||||
|
||||
else: # Forced testing
|
||||
|
||||
def is_exe(program):
|
||||
"""
|
||||
Returns whether or not a file is an executable.
|
||||
"""
|
||||
return os.path.isfile(program) and os.access(program, os.X_OK)
|
||||
|
||||
def which(cmd, mode=os.F_OK | os.X_OK, path=None):
|
||||
"""Given a command, mode, and a PATH string, return the path which
|
||||
conforms to the given mode on the PATH, or None if there is no such
|
||||
file.
|
||||
`mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
|
||||
of os.environ.get("PATH"), or can be overridden with a custom search
|
||||
path.
|
||||
|
||||
Note: This function was backported from the Python 3 source code.
|
||||
"""
|
||||
# Check that a given file can be accessed with the correct mode.
|
||||
# Additionally check that `file` is not a directory, as on Windows
|
||||
# directories pass the os.access check.
|
||||
def _access_check(fn, mode):
|
||||
return (os.path.exists(fn) and os.access(fn, mode)
|
||||
and not os.path.isdir(fn))
|
||||
|
||||
# If we're given a path with a directory part, look it up directly
|
||||
# rather than referring to PATH directories. This includes checking
|
||||
# relative to the current directory, e.g. ./script
|
||||
if os.path.dirname(cmd):
|
||||
if _access_check(cmd, mode):
|
||||
return cmd
|
||||
return None
|
||||
|
||||
if path is None:
|
||||
path = os.environ.get("PATH", os.defpath)
|
||||
if not path:
|
||||
return None
|
||||
path = path.split(os.pathsep)
|
||||
|
||||
if sys.platform == "win32":
|
||||
# The current directory takes precedence on Windows.
|
||||
if os.curdir not in path:
|
||||
path.insert(0, os.curdir)
|
||||
|
||||
# PATHEXT is necessary to check on Windows.
|
||||
pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
|
||||
# See if the given file matches any of the expected path
|
||||
# extensions. This will allow us to short circuit when given
|
||||
# "python.exe". If it does match, only test that one, otherwise we
|
||||
# have to try others.
|
||||
if any(cmd.lower().endswith(ext.lower()) for ext in pathext):
|
||||
files = [cmd]
|
||||
else:
|
||||
files = [cmd + ext for ext in pathext]
|
||||
else:
|
||||
# On other platforms you don't have things like PATHEXT to tell you
|
||||
# what file suffixes are executable, so just pass on cmd as-is.
|
||||
files = [cmd]
|
||||
|
||||
seen = set()
|
||||
for dir in path:
|
||||
normdir = os.path.normcase(dir)
|
||||
if normdir not in seen:
|
||||
seen.add(normdir)
|
||||
for thefile in files:
|
||||
name = os.path.join(dir, thefile)
|
||||
if _access_check(name, mode):
|
||||
return name
|
||||
return None
|
||||
|
||||
|
||||
def is_string(obj):
|
||||
"""Determine if an object is a string."""
|
||||
return isinstance(obj, str if PY3 else basestring)
|
||||
|
||||
|
||||
_hush_pyflakes = (patch, StringIO, which)
|
64
tools/external/cookiecutter/config.py
vendored
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.config
|
||||
-------------------
|
||||
|
||||
Global configuration handling
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import copy
|
||||
import logging
|
||||
import os
|
||||
import io
|
||||
|
||||
import yaml
|
||||
|
||||
from .exceptions import ConfigDoesNotExistException
|
||||
from .exceptions import InvalidConfiguration
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_CONFIG = {
|
||||
'cookiecutters_dir': os.path.expanduser('~/.cookiecutters/'),
|
||||
'default_context': {}
|
||||
}
|
||||
|
||||
|
||||
def get_config(config_path):
|
||||
"""
|
||||
Retrieve the config from the specified path, returning it as a config dict.
|
||||
"""
|
||||
|
||||
if not os.path.exists(config_path):
|
||||
raise ConfigDoesNotExistException
|
||||
|
||||
logger.debug('config_path is {0}'.format(config_path))
|
||||
with io.open(config_path, encoding='utf-8') as file_handle:
|
||||
try:
|
||||
yaml_dict = yaml.safe_load(file_handle)
|
||||
except yaml.scanner.ScannerError:
|
||||
raise InvalidConfiguration(
|
||||
'{0} is no a valid YAML file'.format(config_path))
|
||||
|
||||
config_dict = copy.copy(DEFAULT_CONFIG)
|
||||
config_dict.update(yaml_dict)
|
||||
|
||||
return config_dict
|
||||
|
||||
|
||||
def get_user_config():
|
||||
"""
|
||||
Retrieve config from the user's ~/.cookiecutterrc, if it exists.
|
||||
Otherwise, return None.
|
||||
"""
|
||||
|
||||
# TODO: test on windows...
|
||||
USER_CONFIG_PATH = os.path.expanduser('~/.cookiecutterrc')
|
||||
|
||||
if os.path.exists(USER_CONFIG_PATH):
|
||||
return get_config(USER_CONFIG_PATH)
|
||||
return copy.copy(DEFAULT_CONFIG)
|
64
tools/external/cookiecutter/exceptions.py
vendored
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.exceptions
|
||||
-----------------------
|
||||
|
||||
All exceptions used in the Cookiecutter code base are defined here.
|
||||
"""
|
||||
|
||||
|
||||
class CookiecutterException(Exception):
|
||||
"""
|
||||
Base exception class. All Cookiecutter-specific exceptions should subclass
|
||||
this class.
|
||||
"""
|
||||
|
||||
|
||||
class NonTemplatedInputDirException(CookiecutterException):
|
||||
"""
|
||||
Raised when a project's input dir is not templated.
|
||||
The name of the input directory should always contain a string that is
|
||||
rendered to something else, so that input_dir != output_dir.
|
||||
"""
|
||||
|
||||
|
||||
class UnknownTemplateDirException(CookiecutterException):
|
||||
"""
|
||||
Raised when Cookiecutter cannot determine which directory is the project
|
||||
template, e.g. more than one dir appears to be a template dir.
|
||||
"""
|
||||
|
||||
|
||||
class MissingProjectDir(CookiecutterException):
|
||||
"""
|
||||
Raised during cleanup when remove_repo() can't find a generated project
|
||||
directory inside of a repo.
|
||||
"""
|
||||
|
||||
|
||||
class ConfigDoesNotExistException(CookiecutterException):
|
||||
"""
|
||||
Raised when get_config() is passed a path to a config file, but no file
|
||||
is found at that path.
|
||||
"""
|
||||
|
||||
|
||||
class InvalidConfiguration(CookiecutterException):
|
||||
"""
|
||||
Raised if the global configuration file is not valid YAML or is
|
||||
badly contructed.
|
||||
"""
|
||||
|
||||
|
||||
class UnknownRepoType(CookiecutterException):
|
||||
"""
|
||||
Raised if a repo's type cannot be determined.
|
||||
"""
|
||||
|
||||
|
||||
class VCSNotInstalled(CookiecutterException):
|
||||
"""
|
||||
Raised if the version control system (git or hg) is not installed.
|
||||
"""
|
42
tools/external/cookiecutter/find.py
vendored
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.find
|
||||
-----------------
|
||||
|
||||
Functions for finding Cookiecutter templates and other components.
|
||||
"""
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
from .exceptions import NonTemplatedInputDirException
|
||||
|
||||
|
||||
def find_template(repo_dir):
|
||||
"""
|
||||
Determines which child directory of `repo_dir` is the project template.
|
||||
|
||||
:param repo_dir: Local directory of newly cloned repo.
|
||||
:returns project_template: Relative path to project template.
|
||||
"""
|
||||
|
||||
logging.debug('Searching {0} for the project template.'.format(repo_dir))
|
||||
|
||||
repo_dir_contents = os.listdir(repo_dir)
|
||||
|
||||
project_template = None
|
||||
for item in repo_dir_contents:
|
||||
if 'cookiecutter' in item and '{{' in item and '}}' in item:
|
||||
project_template = item
|
||||
break
|
||||
|
||||
if project_template:
|
||||
project_template = os.path.join(repo_dir, project_template)
|
||||
logging.debug(
|
||||
'The project template appears to be {0}'.format(project_template)
|
||||
)
|
||||
return project_template
|
||||
else:
|
||||
raise NonTemplatedInputDirException
|
198
tools/external/cookiecutter/generate.py
vendored
Executable file
|
@ -0,0 +1,198 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.generate
|
||||
---------------------
|
||||
|
||||
Functions for generating a project from a project template.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
from collections import OrderedDict
|
||||
import io
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from jinja2 import FileSystemLoader, Template
|
||||
from jinja2.environment import Environment
|
||||
from jinja2.exceptions import TemplateSyntaxError
|
||||
from binaryornot.check import is_binary
|
||||
|
||||
from .exceptions import NonTemplatedInputDirException
|
||||
from .find import find_template
|
||||
from .utils import make_sure_path_exists, work_in
|
||||
from .hooks import run_hook
|
||||
|
||||
|
||||
def generate_context(context_file='cookiecutter.json', default_context=None,
|
||||
extra_context=None):
|
||||
"""
|
||||
Generates the context for a Cookiecutter project template.
|
||||
Loads the JSON file as a Python object, with key being the JSON filename.
|
||||
|
||||
:param context_file: JSON file containing key/value pairs for populating
|
||||
the cookiecutter's variables.
|
||||
:param default_context: Dictionary containing config to take into account.
|
||||
:param extra_context: Dictionary containing configuration overrides
|
||||
"""
|
||||
|
||||
context = {}
|
||||
|
||||
file_handle = open(context_file)
|
||||
obj = json.load(file_handle, object_pairs_hook=OrderedDict)
|
||||
|
||||
# Add the Python object to the context dictionary
|
||||
file_name = os.path.split(context_file)[1]
|
||||
file_stem = file_name.split('.')[0]
|
||||
context[file_stem] = obj
|
||||
|
||||
# Overwrite context variable defaults with the default context from the
|
||||
# user's global config, if available
|
||||
if default_context:
|
||||
obj.update(default_context)
|
||||
if extra_context:
|
||||
obj.update(extra_context)
|
||||
|
||||
logging.debug('Context generated is {0}'.format(context))
|
||||
return context
|
||||
|
||||
|
||||
def generate_file(project_dir, infile, context, env):
|
||||
"""
|
||||
1. Render the filename of infile as the name of outfile.
|
||||
2. Deal with infile appropriately:
|
||||
|
||||
a. If infile is a binary file, copy it over without rendering.
|
||||
b. If infile is a text file, render its contents and write the
|
||||
rendered infile to outfile.
|
||||
|
||||
Precondition:
|
||||
|
||||
When calling `generate_file()`, the root template dir must be the
|
||||
current working directory. Using `utils.work_in()` is the recommended
|
||||
way to perform this directory change.
|
||||
|
||||
:param project_dir: Absolute path to the resulting generated project.
|
||||
:param infile: Input file to generate the file from. Relative to the root
|
||||
template dir.
|
||||
:param context: Dict for populating the cookiecutter's variables.
|
||||
:param env: Jinja2 template execution environment.
|
||||
"""
|
||||
|
||||
logging.debug('Generating file {0}'.format(infile))
|
||||
|
||||
# Render the path to the output file (not including the root project dir)
|
||||
outfile_tmpl = Template(infile)
|
||||
outfile = os.path.join(project_dir, outfile_tmpl.render(**context))
|
||||
logging.debug('outfile is {0}'.format(outfile))
|
||||
|
||||
# Just copy over binary files. Don't render.
|
||||
logging.debug("Check {0} to see if it's a binary".format(infile))
|
||||
if is_binary(infile):
|
||||
logging.debug('Copying binary {0} to {1} without rendering'
|
||||
.format(infile, outfile))
|
||||
shutil.copyfile(infile, outfile)
|
||||
else:
|
||||
# Force fwd slashes on Windows for get_template
|
||||
# This is a by-design Jinja issue
|
||||
infile_fwd_slashes = infile.replace(os.path.sep, '/')
|
||||
|
||||
# Render the file
|
||||
try:
|
||||
tmpl = env.get_template(infile_fwd_slashes)
|
||||
except TemplateSyntaxError as exception:
|
||||
# Disable translated so that printed exception contains verbose
|
||||
# information about syntax error location
|
||||
exception.translated = False
|
||||
raise
|
||||
rendered_file = tmpl.render(**context)
|
||||
|
||||
logging.debug('Writing {0}'.format(outfile))
|
||||
|
||||
with io.open(outfile, 'w', encoding='utf-8') as fh:
|
||||
fh.write(rendered_file)
|
||||
|
||||
# Apply file permissions to output file
|
||||
shutil.copymode(infile, outfile)
|
||||
|
||||
|
||||
def render_and_create_dir(dirname, context, output_dir):
|
||||
"""
|
||||
Renders the name of a directory, creates the directory, and
|
||||
returns its path.
|
||||
"""
|
||||
|
||||
name_tmpl = Template(dirname)
|
||||
rendered_dirname = name_tmpl.render(**context)
|
||||
logging.debug('Rendered dir {0} must exist in output_dir {1}'.format(
|
||||
rendered_dirname,
|
||||
output_dir
|
||||
))
|
||||
dir_to_create = os.path.normpath(
|
||||
os.path.join(output_dir, rendered_dirname)
|
||||
)
|
||||
make_sure_path_exists(dir_to_create)
|
||||
return dir_to_create
|
||||
|
||||
|
||||
def ensure_dir_is_templated(dirname):
|
||||
"""
|
||||
Ensures that dirname is a templated directory name.
|
||||
"""
|
||||
if '{{' in dirname and '}}' in dirname:
|
||||
return True
|
||||
else:
|
||||
raise NonTemplatedInputDirException
|
||||
|
||||
|
||||
def generate_files(repo_dir, context=None, output_dir='.'):
|
||||
"""
|
||||
Renders the templates and saves them to files.
|
||||
|
||||
:param repo_dir: Project template input directory.
|
||||
:param context: Dict for populating the template's variables.
|
||||
:param output_dir: Where to output the generated project dir into.
|
||||
"""
|
||||
|
||||
template_dir = find_template(repo_dir)
|
||||
logging.debug('Generating project from {0}...'.format(template_dir))
|
||||
context = context or {}
|
||||
|
||||
unrendered_dir = os.path.split(template_dir)[1]
|
||||
ensure_dir_is_templated(unrendered_dir)
|
||||
project_dir = render_and_create_dir(unrendered_dir, context, output_dir)
|
||||
|
||||
# We want the Jinja path and the OS paths to match. Consequently, we'll:
|
||||
# + CD to the template folder
|
||||
# + Set Jinja's path to '.'
|
||||
#
|
||||
# In order to build our files to the correct folder(s), we'll use an
|
||||
# absolute path for the target folder (project_dir)
|
||||
|
||||
project_dir = os.path.abspath(project_dir)
|
||||
logging.debug('project_dir is {0}'.format(project_dir))
|
||||
|
||||
# run pre-gen hook from repo_dir
|
||||
with work_in(repo_dir):
|
||||
run_hook('pre_gen_project', project_dir, context)
|
||||
|
||||
with work_in(template_dir):
|
||||
env = Environment(keep_trailing_newline=True)
|
||||
env.loader = FileSystemLoader('.')
|
||||
|
||||
for root, dirs, files in os.walk('.'):
|
||||
for d in dirs:
|
||||
unrendered_dir = os.path.join(project_dir,
|
||||
os.path.join(root, d))
|
||||
render_and_create_dir(unrendered_dir, context, output_dir)
|
||||
|
||||
for f in files:
|
||||
infile = os.path.join(root, f)
|
||||
logging.debug('f is {0}'.format(f))
|
||||
generate_file(project_dir, infile, context, env)
|
||||
|
||||
# run post-gen hook from repo_dir
|
||||
with work_in(repo_dir):
|
||||
run_hook('post_gen_project', project_dir, context)
|
107
tools/external/cookiecutter/hooks.py
vendored
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.hooks
|
||||
------------------
|
||||
|
||||
Functions for discovering and executing various cookiecutter hooks.
|
||||
"""
|
||||
|
||||
import io
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
from jinja2 import Template
|
||||
|
||||
from cookiecutter import utils
|
||||
|
||||
_HOOKS = [
|
||||
'pre_gen_project',
|
||||
'post_gen_project',
|
||||
# TODO: other hooks should be listed here
|
||||
]
|
||||
|
||||
|
||||
def find_hooks():
|
||||
"""
|
||||
Must be called with the project template as the current working directory.
|
||||
Returns a dict of all hook scripts provided.
|
||||
Dict's key will be the hook/script's name, without extension, while
|
||||
values will be the absolute path to the script.
|
||||
Missing scripts will not be included in the returned dict.
|
||||
"""
|
||||
hooks_dir = 'hooks'
|
||||
r = {}
|
||||
logging.debug('hooks_dir is {0}'.format(hooks_dir))
|
||||
if not os.path.isdir(hooks_dir):
|
||||
logging.debug('No hooks/ dir in template_dir')
|
||||
return r
|
||||
for f in os.listdir(hooks_dir):
|
||||
basename = os.path.splitext(os.path.basename(f))[0]
|
||||
if basename in _HOOKS:
|
||||
r[basename] = os.path.abspath(os.path.join(hooks_dir, f))
|
||||
return r
|
||||
|
||||
|
||||
def run_script(script_path, cwd='.'):
|
||||
"""
|
||||
Executes a script from a working directory.
|
||||
|
||||
:param script_path: Absolute path to the script to run.
|
||||
:param cwd: The directory to run the script from.
|
||||
"""
|
||||
run_thru_shell = sys.platform.startswith('win')
|
||||
if script_path.endswith('.py'):
|
||||
script_command = [sys.executable, script_path]
|
||||
else:
|
||||
script_command = [script_path]
|
||||
|
||||
utils.make_executable(script_path)
|
||||
|
||||
proc = subprocess.Popen(
|
||||
script_command,
|
||||
shell=run_thru_shell,
|
||||
cwd=cwd
|
||||
)
|
||||
proc.wait()
|
||||
|
||||
|
||||
def run_script_with_context(script_path, cwd, context):
|
||||
"""
|
||||
Executes a script after rendering with it Jinja.
|
||||
|
||||
:param script_path: Absolute path to the script to run.
|
||||
:param cwd: The directory to run the script from.
|
||||
:param context: Cookiecutter project template context.
|
||||
"""
|
||||
_, extension = os.path.splitext(script_path)
|
||||
|
||||
contents = io.open(script_path, 'r', encoding='utf-8').read()
|
||||
|
||||
with tempfile.NamedTemporaryFile(
|
||||
delete=False,
|
||||
mode='w',
|
||||
suffix=extension
|
||||
) as temp:
|
||||
temp.write(Template(contents).render(**context))
|
||||
|
||||
run_script(temp.name, cwd)
|
||||
|
||||
|
||||
def run_hook(hook_name, project_dir, context):
|
||||
"""
|
||||
Try to find and execute a hook from the specified project directory.
|
||||
|
||||
:param hook_name: The hook to execute.
|
||||
:param project_dir: The directory to execute the script from.
|
||||
:param context: Cookiecutter project context.
|
||||
"""
|
||||
script = find_hooks().get(hook_name)
|
||||
if script is None:
|
||||
logging.debug('No hooks found')
|
||||
return
|
||||
return run_script_with_context(script, project_dir, context)
|
103
tools/external/cookiecutter/main.py
vendored
Executable file
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.main
|
||||
-----------------
|
||||
|
||||
Main entry point for the `cookiecutter` command.
|
||||
|
||||
The code in this module is also a good example of how to use Cookiecutter as a
|
||||
library rather than a script.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import logging
|
||||
import os
|
||||
|
||||
from .config import get_user_config
|
||||
from .prompt import prompt_for_config
|
||||
from .generate import generate_context, generate_files
|
||||
from .vcs import clone
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
builtin_abbreviations = {
|
||||
'gh': 'https://github.com/{0}.git',
|
||||
'bb': 'https://bitbucket.org/{0}',
|
||||
}
|
||||
|
||||
|
||||
def expand_abbreviations(template, config_dict):
|
||||
"""
|
||||
Expand abbreviations in a template name.
|
||||
|
||||
:param template: The project template name.
|
||||
:param config_dict: The user config, which will contain abbreviation
|
||||
definitions.
|
||||
"""
|
||||
|
||||
abbreviations = builtin_abbreviations.copy()
|
||||
abbreviations.update(config_dict.get('abbreviations', {}))
|
||||
|
||||
if template in abbreviations:
|
||||
return abbreviations[template]
|
||||
|
||||
# Split on colon. If there is no colon, rest will be empty
|
||||
# and prefix will be the whole template
|
||||
prefix, sep, rest = template.partition(':')
|
||||
if prefix in abbreviations:
|
||||
return abbreviations[prefix].format(rest)
|
||||
|
||||
return template
|
||||
|
||||
|
||||
def cookiecutter(template, checkout=None, no_input=False, extra_context=None):
|
||||
"""
|
||||
API equivalent to using Cookiecutter at the command line.
|
||||
|
||||
:param template: A directory containing a project template directory,
|
||||
or a URL to a git repository.
|
||||
:param checkout: The branch, tag or commit ID to checkout after clone.
|
||||
:param no_input: Prompt the user at command line for manual configuration?
|
||||
:param extra_context: A dictionary of context that overrides default
|
||||
and user configuration.
|
||||
"""
|
||||
|
||||
# Get user config from ~/.cookiecutterrc or equivalent
|
||||
# If no config file, sensible defaults from config.DEFAULT_CONFIG are used
|
||||
config_dict = get_user_config()
|
||||
|
||||
template = expand_abbreviations(template, config_dict)
|
||||
|
||||
# TODO: find a better way to tell if it's a repo URL
|
||||
if 'git@' in template or 'https://' in template:
|
||||
repo_dir = clone(
|
||||
repo_url=template,
|
||||
checkout=checkout,
|
||||
clone_to_dir=config_dict['cookiecutters_dir'],
|
||||
no_input=no_input
|
||||
)
|
||||
else:
|
||||
# If it's a local repo, no need to clone or copy to your
|
||||
# cookiecutters_dir
|
||||
repo_dir = template
|
||||
|
||||
context_file = os.path.join(repo_dir, 'cookiecutter.json')
|
||||
logging.debug('context_file is {0}'.format(context_file))
|
||||
|
||||
context = generate_context(
|
||||
context_file=context_file,
|
||||
default_context=config_dict['default_context'],
|
||||
extra_context=extra_context,
|
||||
)
|
||||
|
||||
# prompt the user to manually configure at the command line.
|
||||
# except when 'no-input' flag is set
|
||||
context['cookiecutter'] = prompt_for_config(context, no_input)
|
||||
|
||||
# Create project from local context and project template.
|
||||
generate_files(
|
||||
repo_dir=repo_dir,
|
||||
context=context
|
||||
)
|
80
tools/external/cookiecutter/prompt.py
vendored
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.prompt
|
||||
---------------------
|
||||
|
||||
Functions for prompting the user for project info.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import sys
|
||||
|
||||
from .compat import iteritems, read_response, is_string
|
||||
from jinja2.environment import Environment
|
||||
|
||||
|
||||
def prompt_for_config(context, no_input=False):
|
||||
"""
|
||||
Prompts the user to enter new config, using context as a source for the
|
||||
field names and sample values.
|
||||
|
||||
:param no_input: Prompt the user at command line for manual configuration?
|
||||
"""
|
||||
cookiecutter_dict = {}
|
||||
env = Environment()
|
||||
|
||||
for key, raw in iteritems(context['cookiecutter']):
|
||||
raw = raw if is_string(raw) else str(raw)
|
||||
val = env.from_string(raw).render(cookiecutter=cookiecutter_dict)
|
||||
|
||||
if not no_input:
|
||||
prompt = '{0} (default is "{1}")? '.format(key, val)
|
||||
|
||||
new_val = read_response(prompt).strip()
|
||||
|
||||
if new_val != '':
|
||||
val = new_val
|
||||
|
||||
cookiecutter_dict[key] = val
|
||||
return cookiecutter_dict
|
||||
|
||||
|
||||
def query_yes_no(question, default='yes'):
|
||||
"""
|
||||
Ask a yes/no question via `read_response()` and return their answer.
|
||||
|
||||
:param question: A string that is presented to the user.
|
||||
:param default: The presumed answer if the user just hits <Enter>.
|
||||
It must be "yes" (the default), "no" or None (meaning
|
||||
an answer is required of the user).
|
||||
|
||||
The "answer" return value is one of "yes" or "no".
|
||||
|
||||
Adapted from
|
||||
http://stackoverflow.com/questions/3041986/python-command-line-yes-no-input
|
||||
http://code.activestate.com/recipes/577058/
|
||||
|
||||
"""
|
||||
valid = {'yes': True, 'y': True, 'ye': True, 'no': False, 'n': False}
|
||||
if default is None:
|
||||
prompt = ' [y/n] '
|
||||
elif default == 'yes':
|
||||
prompt = ' [Y/n] '
|
||||
elif default == 'no':
|
||||
prompt = ' [y/N] '
|
||||
else:
|
||||
raise ValueError('Invalid default answer: "{0}"'.format(default))
|
||||
|
||||
while True:
|
||||
sys.stdout.write(question + prompt)
|
||||
choice = read_response().lower()
|
||||
|
||||
if default is not None and choice == '':
|
||||
return valid[default]
|
||||
elif choice in valid:
|
||||
return valid[choice]
|
||||
else:
|
||||
sys.stdout.write('Please respond with "yes" or "no" '
|
||||
'(or "y" or "n").\n')
|
79
tools/external/cookiecutter/utils.py
vendored
Executable file
|
@ -0,0 +1,79 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.utils
|
||||
------------------
|
||||
|
||||
Helper functions used throughout Cookiecutter.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import contextlib
|
||||
import errno
|
||||
import logging
|
||||
import os
|
||||
import stat
|
||||
import shutil
|
||||
|
||||
|
||||
def force_delete(func, path, exc_info):
|
||||
"""
|
||||
Error handler for `shutil.rmtree()` equivalent to `rm -rf`
|
||||
Usage: `shutil.rmtree(path, onerror=force_delete)`
|
||||
From stackoverflow.com/questions/1889597
|
||||
"""
|
||||
|
||||
os.chmod(path, stat.S_IWRITE)
|
||||
func(path)
|
||||
|
||||
|
||||
def rmtree(path):
|
||||
"""
|
||||
Removes a directory and all its contents. Like rm -rf on Unix.
|
||||
|
||||
:param path: A directory path.
|
||||
"""
|
||||
|
||||
shutil.rmtree(path, onerror=force_delete)
|
||||
|
||||
|
||||
def make_sure_path_exists(path):
|
||||
"""
|
||||
Ensures that a directory exists.
|
||||
|
||||
:param path: A directory path.
|
||||
"""
|
||||
|
||||
logging.debug('Making sure path exists: {0}'.format(path))
|
||||
try:
|
||||
os.makedirs(path)
|
||||
except OSError as exception:
|
||||
if exception.errno != errno.EEXIST:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def work_in(dirname=None):
|
||||
"""
|
||||
Context manager version of os.chdir. When exited, returns to the working
|
||||
directory prior to entering.
|
||||
"""
|
||||
curdir = os.getcwd()
|
||||
try:
|
||||
if dirname is not None:
|
||||
os.chdir(dirname)
|
||||
yield
|
||||
finally:
|
||||
os.chdir(curdir)
|
||||
|
||||
|
||||
def make_executable(script_path):
|
||||
"""
|
||||
Makes `script_path` executable
|
||||
|
||||
:param script_path: The file to change
|
||||
"""
|
||||
status = os.stat(script_path)
|
||||
os.chmod(script_path, status.st_mode | stat.S_IEXEC)
|
113
tools/external/cookiecutter/vcs.py
vendored
Executable file
|
@ -0,0 +1,113 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
cookiecutter.vcs
|
||||
----------------
|
||||
|
||||
Helper functions for working with version control systems.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from .compat import which
|
||||
from .exceptions import UnknownRepoType, VCSNotInstalled
|
||||
from .prompt import query_yes_no
|
||||
from .utils import make_sure_path_exists, rmtree
|
||||
|
||||
|
||||
def prompt_and_delete_repo(repo_dir, no_input=False):
|
||||
"""
|
||||
Asks the user whether it's okay to delete the previously-cloned repo.
|
||||
If yes, deletes it. Otherwise, Cookiecutter exits.
|
||||
|
||||
:param repo_dir: Directory of previously-cloned repo.
|
||||
:param no_input: Suppress prompt to delete repo and just delete it.
|
||||
"""
|
||||
|
||||
# Suppress prompt if called via API
|
||||
if no_input:
|
||||
ok_to_delete = True
|
||||
else:
|
||||
ok_to_delete = query_yes_no(
|
||||
"You've cloned {0} before. "
|
||||
'Is it okay to delete and re-clone it?'.format(repo_dir),
|
||||
default='yes'
|
||||
)
|
||||
|
||||
if ok_to_delete:
|
||||
rmtree(repo_dir)
|
||||
else:
|
||||
sys.exit()
|
||||
|
||||
|
||||
def identify_repo(repo_url):
|
||||
"""
|
||||
Determines if `repo_url` should be treated as a URL to a git or hg repo.
|
||||
|
||||
:param repo_url: Repo URL of unknown type.
|
||||
:returns: "git", "hg", or None.
|
||||
"""
|
||||
|
||||
if 'git' in repo_url:
|
||||
return 'git'
|
||||
elif 'bitbucket' in repo_url:
|
||||
return 'hg'
|
||||
else:
|
||||
raise UnknownRepoType
|
||||
|
||||
|
||||
def is_vcs_installed(repo_type):
|
||||
"""
|
||||
Check if the version control system for a repo type is installed.
|
||||
|
||||
:param repo_type:
|
||||
"""
|
||||
return bool(which(repo_type))
|
||||
|
||||
|
||||
def clone(repo_url, checkout=None, clone_to_dir=".", no_input=False):
|
||||
"""
|
||||
Clone a repo to the current directory.
|
||||
|
||||
:param repo_url: Repo URL of unknown type.
|
||||
:param checkout: The branch, tag or commit ID to checkout after clone.
|
||||
:param clone_to_dir: The directory to clone to.
|
||||
Defaults to the current directory.
|
||||
:param no_input: Suppress all user prompts when calling via API.
|
||||
"""
|
||||
|
||||
# Ensure that clone_to_dir exists
|
||||
clone_to_dir = os.path.expanduser(clone_to_dir)
|
||||
make_sure_path_exists(clone_to_dir)
|
||||
|
||||
# identify the repo_type
|
||||
repo_type = identify_repo(repo_url)
|
||||
|
||||
# check that the appropriate VCS for the repo_type is installed
|
||||
if not is_vcs_installed(repo_type):
|
||||
msg = "'{0}' is not installed.".format(repo_type)
|
||||
raise VCSNotInstalled(msg)
|
||||
|
||||
tail = os.path.split(repo_url)[1]
|
||||
if repo_type == 'git':
|
||||
repo_dir = os.path.normpath(os.path.join(clone_to_dir,
|
||||
tail.rsplit('.git')[0]))
|
||||
elif repo_type == 'hg':
|
||||
repo_dir = os.path.normpath(os.path.join(clone_to_dir, tail))
|
||||
logging.debug('repo_dir is {0}'.format(repo_dir))
|
||||
|
||||
if os.path.isdir(repo_dir):
|
||||
prompt_and_delete_repo(repo_dir, no_input=no_input)
|
||||
|
||||
if repo_type in ['git', 'hg']:
|
||||
subprocess.check_call([repo_type, 'clone', repo_url], cwd=clone_to_dir)
|
||||
if checkout is not None:
|
||||
subprocess.check_call([repo_type, 'checkout', checkout],
|
||||
cwd=repo_dir)
|
||||
|
||||
return repo_dir
|
2386
tools/external/mock.py
vendored
Normal file
2352
tools/external/sh.py
vendored
Normal file
|
@ -1,38 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
try () {
|
||||
"$@" || exit -1
|
||||
}
|
||||
|
||||
. $(dirname $0)/environment.sh
|
||||
|
||||
APPNAME=$1
|
||||
APPID=$(echo $APPNAME | tr '[A-Z]' '[a-z]')
|
||||
APPDIR=$KIVYIOSROOT/app-$APPID
|
||||
SRCDIR=$2
|
||||
|
||||
set -x
|
||||
if [ "X$APPNAME" == "X" ]; then
|
||||
echo $(basename $0) "<appname> <source directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "X$SRCDIR" == "X" ]; then
|
||||
echo $(basename $0) "<appname> <source directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "-> Copy $SRCDIR to $APPDIR/YourApp"
|
||||
YOURAPPDIR=$APPDIR/YourApp
|
||||
|
||||
echo "-> Synchronize source code"
|
||||
try rsync -av --delete $SRCDIR/ $YOURAPPDIR
|
||||
|
||||
echo "-> Compile to pyo"
|
||||
$HOSTPYTHON -OO -m compileall $YOURAPPDIR
|
||||
|
||||
echo "-> Remove unused files (pyc, py)"
|
||||
find $YOURAPPDIR -iname '*.py' -exec rm {} \;
|
||||
find $YOURAPPDIR -iname '*.pyc' -exec rm {} \;
|
||||
|
||||
echo "-> Source code of $APPNAME updated."
|
1
tools/templates/cookiecutter.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -1,423 +0,0 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
010731C2137F20B800A8D3A0 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 010731C1137F20B800A8D3A0 /* AudioToolbox.framework */; };
|
||||
010731C4137F20C300A8D3A0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 010731C3137F20C300A8D3A0 /* QuartzCore.framework */; };
|
||||
01532DAA137C099F0076F6BF /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 01532DA9137C099F0076F6BF /* icon.png */; };
|
||||
01790B81137E5ED900E037D1 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01790B7A137E5ED900E037D1 /* OpenGLES.framework */; };
|
||||
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
||||
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
||||
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
|
||||
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
|
||||
2C18EF8C17CBD2900041C0E1 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C18EF8A17CBD2900041C0E1 /* libffi.a */; };
|
||||
2C18EF8D17CBD2900041C0E1 /* libpyobjus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C18EF8B17CBD2900041C0E1 /* libpyobjus.a */; };
|
||||
2CB5F34417D51580006187AB /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CB5F34317D51580006187AB /* CoreMotion.framework */; };
|
||||
2CB5F34717D5233A006187AB /* bridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB5F34617D5233A006187AB /* bridge.m */; };
|
||||
596C7514150CFC75003F57D9 /* include in Resources */ = {isa = PBXBuildFile; fileRef = 596C7513150CFC75003F57D9 /* include */; };
|
||||
5983EC97163CB90D00475EFB /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5983EC96163CB90D00475EFB /* libsqlite3.dylib */; };
|
||||
598E034D14F80187000D1362 /* libSDL_mixer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598E034C14F80187000D1362 /* libSDL_mixer.a */; };
|
||||
598E035414F80578000D1362 /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598E035314F80578000D1362 /* libogg.a */; };
|
||||
598E035A14F8177A000D1362 /* libvorbisidec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598E035914F8177A000D1362 /* libvorbisidec.a */; };
|
||||
59994D8D148D48E300863906 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D8C148D48E300863906 /* ImageIO.framework */; };
|
||||
59994D90148D686900863906 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D8F148D686900863906 /* libbz2.dylib */; };
|
||||
59994D9E148E353000863906 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D9D148E352F00863906 /* libz.dylib */; };
|
||||
59994DAD148E558600863906 /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994DA8148E558600863906 /* libfreetype.a */; };
|
||||
59994DAE148E558600863906 /* libkivy.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994DA9148E558600863906 /* libkivy.a */; };
|
||||
59994DAF148E558600863906 /* libpython2.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994DAA148E558600863906 /* libpython2.7.a */; };
|
||||
59994DB0148E558600863906 /* libSDL_ttf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994DAB148E558600863906 /* libSDL_ttf.a */; };
|
||||
59994DB1148E558600863906 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994DAC148E558600863906 /* libSDL2.a */; };
|
||||
59994DB3148E564400863906 /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 59994DB2148E564400863906 /* lib */; };
|
||||
59994E3B148E85C800863906 /* YourApp in Resources */ = {isa = PBXBuildFile; fileRef = 59994E3A148E85C800863906 /* YourApp */; };
|
||||
59ED7D08150E0C4400A92BEE /* libios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59ED7D07150E0C4400A92BEE /* libios.a */; };
|
||||
59ED7D0B150E325100A92BEE /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59ED7D0A150E325100A92BEE /* MessageUI.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
010731C1137F20B800A8D3A0 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
010731C3137F20C300A8D3A0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
01532DA9137C099F0076F6BF /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = "<group>"; };
|
||||
01790B7A137E5ED900E037D1 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
|
||||
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
1D6058910D05DD3D006BFB54 /* ##APPNAME##.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ##APPNAME##.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
2C18EF8A17CBD2900041C0E1 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libffi.a; path = ../build/lib/libffi.a; sourceTree = "<group>"; };
|
||||
2C18EF8B17CBD2900041C0E1 /* libpyobjus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpyobjus.a; path = ../build/lib/libpyobjus.a; sourceTree = "<group>"; };
|
||||
2CB5F34317D51580006187AB /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
|
||||
2CB5F34517D5233A006187AB /* bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bridge.h; sourceTree = SOURCE_ROOT; };
|
||||
2CB5F34617D5233A006187AB /* bridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bridge.m; sourceTree = SOURCE_ROOT; };
|
||||
596C7513150CFC75003F57D9 /* include */ = {isa = PBXFileReference; lastKnownFileType = folder; name = include; path = ../build/python/embed/include; sourceTree = "<group>"; };
|
||||
5983EC96163CB90D00475EFB /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
||||
598E034C14F80187000D1362 /* libSDL_mixer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSDL_mixer.a; path = ../build/lib/libSDL_mixer.a; sourceTree = "<group>"; };
|
||||
598E035314F80578000D1362 /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libogg.a; path = ../build/lib/libogg.a; sourceTree = "<group>"; };
|
||||
598E035914F8177A000D1362 /* libvorbisidec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisidec.a; path = ../build/lib/libvorbisidec.a; sourceTree = "<group>"; };
|
||||
59994D8C148D48E300863906 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
|
||||
59994D8F148D686900863906 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
|
||||
59994D9D148E352F00863906 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
|
||||
59994DA8148E558600863906 /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = ../build/lib/libfreetype.a; sourceTree = "<group>"; };
|
||||
59994DA9148E558600863906 /* libkivy.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkivy.a; path = ../build/lib/libkivy.a; sourceTree = "<group>"; };
|
||||
59994DAA148E558600863906 /* libpython2.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpython2.7.a; path = ../build/lib/libpython2.7.a; sourceTree = "<group>"; };
|
||||
59994DAB148E558600863906 /* libSDL_ttf.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSDL_ttf.a; path = ../build/lib/libSDL_ttf.a; sourceTree = "<group>"; };
|
||||
59994DAC148E558600863906 /* libSDL2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSDL2.a; path = ../build/lib/libSDL2.a; sourceTree = "<group>"; };
|
||||
59994DB2148E564400863906 /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = ../build/python/lib; sourceTree = SOURCE_ROOT; };
|
||||
59994E3A148E85C800863906 /* YourApp */ = {isa = PBXFileReference; lastKnownFileType = folder; path = YourApp; sourceTree = "<group>"; };
|
||||
59ED7D07150E0C4400A92BEE /* libios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libios.a; path = ../build/lib/libios.a; sourceTree = "<group>"; };
|
||||
59ED7D0A150E325100A92BEE /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
8D1107310486CEB800E47090 /* ##APPID##-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "##APPID##-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2CB5F34417D51580006187AB /* CoreMotion.framework in Frameworks */,
|
||||
2C18EF8C17CBD2900041C0E1 /* libffi.a in Frameworks */,
|
||||
2C18EF8D17CBD2900041C0E1 /* libpyobjus.a in Frameworks */,
|
||||
5983EC97163CB90D00475EFB /* libsqlite3.dylib in Frameworks */,
|
||||
59ED7D0B150E325100A92BEE /* MessageUI.framework in Frameworks */,
|
||||
59ED7D08150E0C4400A92BEE /* libios.a in Frameworks */,
|
||||
598E035A14F8177A000D1362 /* libvorbisidec.a in Frameworks */,
|
||||
598E035414F80578000D1362 /* libogg.a in Frameworks */,
|
||||
598E034D14F80187000D1362 /* libSDL_mixer.a in Frameworks */,
|
||||
59994DAD148E558600863906 /* libfreetype.a in Frameworks */,
|
||||
59994DAE148E558600863906 /* libkivy.a in Frameworks */,
|
||||
59994DAF148E558600863906 /* libpython2.7.a in Frameworks */,
|
||||
59994DB0148E558600863906 /* libSDL_ttf.a in Frameworks */,
|
||||
59994DB1148E558600863906 /* libSDL2.a in Frameworks */,
|
||||
59994D90148D686900863906 /* libbz2.dylib in Frameworks */,
|
||||
59994D9E148E353000863906 /* libz.dylib in Frameworks */,
|
||||
59994D8D148D48E300863906 /* ImageIO.framework in Frameworks */,
|
||||
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
|
||||
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
|
||||
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
|
||||
01790B81137E5ED900E037D1 /* OpenGLES.framework in Frameworks */,
|
||||
010731C2137F20B800A8D3A0 /* AudioToolbox.framework in Frameworks */,
|
||||
010731C4137F20C300A8D3A0 /* QuartzCore.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2CB5F34517D5233A006187AB /* bridge.h */,
|
||||
2CB5F34617D5233A006187AB /* bridge.m */,
|
||||
);
|
||||
path = Classes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1D6058910D05DD3D006BFB54 /* ##APPNAME##.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
080E96DDFE201D6D7F000001 /* Classes */,
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||
);
|
||||
name = CustomTemplate;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
596C7513150CFC75003F57D9 /* include */,
|
||||
29B97316FDCFA39411CA2CEA /* main.m */,
|
||||
);
|
||||
name = "Other Sources";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
59994DB2148E564400863906 /* lib */,
|
||||
59994E3A148E85C800863906 /* YourApp */,
|
||||
01532DA9137C099F0076F6BF /* icon.png */,
|
||||
8D1107310486CEB800E47090 /* ##APPID##-Info.plist */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2CB5F34317D51580006187AB /* CoreMotion.framework */,
|
||||
2C18EF8A17CBD2900041C0E1 /* libffi.a */,
|
||||
2C18EF8B17CBD2900041C0E1 /* libpyobjus.a */,
|
||||
5983EC96163CB90D00475EFB /* libsqlite3.dylib */,
|
||||
59994DA8148E558600863906 /* libfreetype.a */,
|
||||
59994DA9148E558600863906 /* libkivy.a */,
|
||||
59994DAA148E558600863906 /* libpython2.7.a */,
|
||||
59994DAB148E558600863906 /* libSDL_ttf.a */,
|
||||
598E035914F8177A000D1362 /* libvorbisidec.a */,
|
||||
598E035314F80578000D1362 /* libogg.a */,
|
||||
598E034C14F80187000D1362 /* libSDL_mixer.a */,
|
||||
59994DAC148E558600863906 /* libSDL2.a */,
|
||||
59ED7D07150E0C4400A92BEE /* libios.a */,
|
||||
59994D9D148E352F00863906 /* libz.dylib */,
|
||||
59994D8F148D686900863906 /* libbz2.dylib */,
|
||||
59994D8C148D48E300863906 /* ImageIO.framework */,
|
||||
59ED7D0A150E325100A92BEE /* MessageUI.framework */,
|
||||
010731C1137F20B800A8D3A0 /* AudioToolbox.framework */,
|
||||
010731C3137F20C300A8D3A0 /* QuartzCore.framework */,
|
||||
01790B7A137E5ED900E037D1 /* OpenGLES.framework */,
|
||||
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
|
||||
1D30AB110D05D00D00671497 /* Foundation.framework */,
|
||||
288765FC0DF74451002DB57D /* CoreGraphics.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
1D6058900D05DD3D006BFB54 /* ##APPNAME## */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "##APPID##" */;
|
||||
buildPhases = (
|
||||
113D17E2153E3DB5001310A5 /* ShellScript */,
|
||||
1D60588D0D05DD3D006BFB54 /* Resources */,
|
||||
1D60588E0D05DD3D006BFB54 /* Sources */,
|
||||
1D60588F0D05DD3D006BFB54 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ##APPID##;
|
||||
productName = ##APPID##;
|
||||
productReference = 1D6058910D05DD3D006BFB54 /* ##APPNAME##.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0420;
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "##APPID##" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
English,
|
||||
Japanese,
|
||||
French,
|
||||
German,
|
||||
);
|
||||
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
1D6058900D05DD3D006BFB54 /* ##APPID## */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
1D60588D0D05DD3D006BFB54 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
01532DAA137C099F0076F6BF /* icon.png in Resources */,
|
||||
59994DB3148E564400863906 /* lib in Resources */,
|
||||
59994E3B148E85C800863906 /* YourApp in Resources */,
|
||||
596C7514150CFC75003F57D9 /* include in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
113D17E2153E3DB5001310A5 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 12;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "../tools/populate-project.sh ##APPNAME## ##SRCDIR## ";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
1D60588E0D05DD3D006BFB54 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
|
||||
2CB5F34717D5233A006187AB /* bridge.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1D6058940D05DD3E006BFB54 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"\"$(PROJECT_DIR)/../build/include\"",
|
||||
"\"$(PROJECT_DIR)/../build/python/include\"",
|
||||
);
|
||||
INFOPLIST_FILE = "##APPID##-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = ##SDKVER##;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(PROJECT_DIR)/../build/lib\"",
|
||||
);
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
OTHER_LDFLAGS = "-all_load";
|
||||
PRODUCT_NAME = ##APPNAME##;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
USER_HEADER_SEARCH_PATHS = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1D6058950D05DD3E006BFB54 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"\"$(PROJECT_DIR)/../build/include\"",
|
||||
"\"$(PROJECT_DIR)/../build/python/include\"",
|
||||
);
|
||||
INFOPLIST_FILE = "##APPID##-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = ##SDKVER##;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(PROJECT_DIR)/../build/lib\"",
|
||||
);
|
||||
OTHER_LDFLAGS = "-all_load";
|
||||
PRODUCT_NAME = ##APPNAME##;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = NO;
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
C01FCF4F08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = c99;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
HEADER_SEARCH_PATHS = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = ##SDKVER##;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
STRIP_STYLE = all;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = 2;
|
||||
VALID_ARCHS = armv7;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
C01FCF5008A954540054247B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = c99;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = ##SDKVER##;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = 2;
|
||||
USER_HEADER_SEARCH_PATHS = "";
|
||||
VALID_ARCHS = armv7;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "##APPID##" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1D6058940D05DD3E006BFB54 /* Debug */,
|
||||
1D6058950D05DD3E006BFB54 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "##APPID##" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C01FCF4F08A954540054247B /* Debug */,
|
||||
C01FCF5008A954540054247B /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
}
|
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 9 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 9 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 526 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4 KiB |
|
@ -0,0 +1,20 @@
|
|||
Pictures
|
||||
========
|
||||
|
||||
A very simple image browser, supporting the reading only from images/
|
||||
directory right now.
|
||||
So put any images files inside images/ directory, and start the app !
|
||||
|
||||
Android
|
||||
-------
|
||||
|
||||
You can copy/paste this directory into /sdcard/kivy/pictures in your
|
||||
android device.
|
||||
|
||||
|
||||
Licences
|
||||
--------
|
||||
|
||||
* faust_github.jpg: lucie's cat accepted to share his face
|
||||
* 5552597274_de8b3fb5d2_b.jpg: http://www.flickr.com/photos/chialin-gallery/5552597274/sizes/l/
|
||||
* 5509213687_ffd18df0b9_b.jpg: http://www.flickr.com/photos/orsomk/5509213687/sizes/l/
|
|
@ -0,0 +1,3 @@
|
|||
title=Pictures
|
||||
author=Kivy team
|
||||
orientation=landscape
|
After Width: | Height: | Size: 321 KiB |
After Width: | Height: | Size: 428 KiB |
After Width: | Height: | Size: 220 KiB |
|
@ -0,0 +1,57 @@
|
|||
#:kivy 1.0
|
||||
#:import kivy kivy
|
||||
#:import win kivy.core.window
|
||||
|
||||
FloatLayout:
|
||||
canvas:
|
||||
Color:
|
||||
rgb: 1, 1, 1
|
||||
Rectangle:
|
||||
source: 'data/images/background.jpg'
|
||||
size: self.size
|
||||
|
||||
BoxLayout:
|
||||
padding: 10
|
||||
spacing: 10
|
||||
size_hint: 1, None
|
||||
pos_hint: {'top': 1}
|
||||
height: 44
|
||||
Image:
|
||||
size_hint: None, None
|
||||
size: 24, 24
|
||||
source: 'data/logo/kivy-icon-24.png'
|
||||
Label:
|
||||
height: 24
|
||||
text_size: self.width, None
|
||||
color: (1, 1, 1, .8)
|
||||
text: 'Kivy %s - Pictures' % kivy.__version__
|
||||
|
||||
|
||||
|
||||
<Picture>:
|
||||
# each time a picture is created, the image can delay the loading
|
||||
# as soon as the image is loaded, ensure that the center is changed
|
||||
# to the center of the screen.
|
||||
on_size: self.center = win.Window.center
|
||||
size: image.size
|
||||
size_hint: None, None
|
||||
|
||||
Image:
|
||||
id: image
|
||||
source: root.source
|
||||
|
||||
# create initial image to be 400 pixels width
|
||||
size: 400, 400 / self.image_ratio
|
||||
|
||||
# add shadow background
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: 1,1,1,1
|
||||
BorderImage:
|
||||
source: 'shadow32.png'
|
||||
border: (36,36,36,36)
|
||||
size:(self.width+72, self.height+72)
|
||||
pos: (-36,-36)
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
|
@ -1,12 +1,14 @@
|
|||
//
|
||||
// main.m
|
||||
// iOS-python-test
|
||||
// {{ cookiecutter.project_name }}
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#include <python2.7/Python.h>
|
||||
#include "SDL/SDL_main.h"
|
||||
//#include <python2.7/Python.h>
|
||||
//#include <Python.h>
|
||||
#include "../dist/root/python/include/python2.7/Python.h"
|
||||
#include "../dist/include/common/sdl2/SDL_main.h"
|
||||
#include <dlfcn.h>
|
||||
|
||||
void export_orientation();
|
||||
|
@ -32,7 +34,7 @@ int main(int argc, char *argv[]) {
|
|||
putenv("KIVY_BUILD=ios");
|
||||
putenv("KIVY_NO_CONFIG=1");
|
||||
putenv("KIVY_NO_FILELOG=1");
|
||||
putenv("KIVY_WINDOW=sdl");
|
||||
putenv("KIVY_WINDOW=sdl2");
|
||||
putenv("KIVY_IMAGE=imageio,tex");
|
||||
putenv("KIVY_AUDIO=sdl");
|
||||
#ifndef DEBUG
|
||||
|
@ -97,7 +99,7 @@ void export_orientation() {
|
|||
}
|
||||
|
||||
putenv((char *)[result UTF8String]);
|
||||
//NSLog(@"Available orientation: %@", result);
|
||||
NSLog(@"Available orientation: %@", result);
|
||||
}
|
||||
|
||||
void load_custom_builtin_importer() {
|
||||
|
@ -128,7 +130,7 @@ void load_custom_builtin_importer() {
|
|||
" f = fullname.replace('.', '_')\n" \
|
||||
" mod = sys.modules.get(f)\n" \
|
||||
" if mod is None:\n" \
|
||||
" #print 'LOAD DYNAMIC', f\n" \
|
||||
" #print 'LOAD DYNAMIC', f, sys.modules.keys()\n" \
|
||||
" try:\n" \
|
||||
" mod = imp.load_dynamic(f, f)\n" \
|
||||
" except ImportError:\n" \
|
|
@ -8,26 +8,10 @@
|
|||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>icon.png</string>
|
||||
</array>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>icon.png</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict/>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.kivy.##APPID##</string>
|
||||
<string>{{ cookiecutter.domain_name }}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
|
@ -36,16 +20,25 @@
|
|||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,481 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
010731C2137F20B800A8D3A0 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 010731C1137F20B800A8D3A0 /* AudioToolbox.framework */; };
|
||||
010731C4137F20C300A8D3A0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 010731C3137F20C300A8D3A0 /* QuartzCore.framework */; };
|
||||
01532DAA137C099F0076F6BF /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 01532DA9137C099F0076F6BF /* icon.png */; };
|
||||
01790B81137E5ED900E037D1 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01790B7A137E5ED900E037D1 /* OpenGLES.framework */; };
|
||||
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
||||
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
||||
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
|
||||
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
|
||||
2CB5F34417D51580006187AB /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CB5F34317D51580006187AB /* CoreMotion.framework */; };
|
||||
2CB5F34717D5233A006187AB /* bridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB5F34617D5233A006187AB /* bridge.m */; };
|
||||
597360631A8A7ABD001B2C0C /* libkivy.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5973605B1A8A7ABD001B2C0C /* libkivy.a */; };
|
||||
597360641A8A7ABD001B2C0C /* libpython.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5973605C1A8A7ABD001B2C0C /* libpython.a */; };
|
||||
597360651A8A7ABD001B2C0C /* libsdl2_mixer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5973605D1A8A7ABD001B2C0C /* libsdl2_mixer.a */; };
|
||||
597360661A8A7ABD001B2C0C /* libsdl2_ttf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5973605E1A8A7ABD001B2C0C /* libsdl2_ttf.a */; };
|
||||
597360671A8A7ABD001B2C0C /* libsdl2_image.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5973605F1A8A7ABD001B2C0C /* libsdl2_image.a */; };
|
||||
597360681A8A7ABD001B2C0C /* libsdl2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 597360601A8A7ABD001B2C0C /* libsdl2.a */; };
|
||||
5973606A1A8A7ABD001B2C0C /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 597360621A8A7ABD001B2C0C /* libfreetype.a */; };
|
||||
59738AAC1A8AE4DB001B2C0C /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59738AAB1A8AE4DB001B2C0C /* Accelerate.framework */; };
|
||||
59738AB01A8AF5B7001B2C0C /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 59738AAF1A8AF5B7001B2C0C /* libc++.dylib */; };
|
||||
59738AB21A8AF870001B2C0C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59738AB11A8AF870001B2C0C /* MobileCoreServices.framework */; };
|
||||
59738AB31A8AFACA001B2C0C /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 597360611A8A7ABD001B2C0C /* libffi.a */; };
|
||||
59738AB51A8BB5D8001B2C0C /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 59738AB41A8BB5D8001B2C0C /* lib */; };
|
||||
59738AB71A8BB71F001B2C0C /* include in Resources */ = {isa = PBXBuildFile; fileRef = 59738AB61A8BB71F001B2C0C /* include */; };
|
||||
59738AB91A8C1C82001B2C0C /* libios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 59738AB81A8C1C82001B2C0C /* libios.a */; };
|
||||
59738ABB1A8E19AA001B2C0C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 59738ABA1A8E19AA001B2C0C /* Images.xcassets */; };
|
||||
59738ADB1A8E62D6001B2C0C /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD01A8E62D6001B2C0C /* Default-568h@2x.png */; };
|
||||
59738ADC1A8E62D6001B2C0C /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD11A8E62D6001B2C0C /* Default-667h@2x.png */; };
|
||||
59738ADD1A8E62D6001B2C0C /* Default-763h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD21A8E62D6001B2C0C /* Default-763h@3x.png */; };
|
||||
59738ADE1A8E62D6001B2C0C /* Default-Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD31A8E62D6001B2C0C /* Default-Landscape.png */; };
|
||||
59738ADF1A8E62D6001B2C0C /* Default-Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD41A8E62D6001B2C0C /* Default-Landscape@2x.png */; };
|
||||
59738AE01A8E62D6001B2C0C /* Default-Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD51A8E62D6001B2C0C /* Default-Portrait.png */; };
|
||||
59738AE11A8E62D6001B2C0C /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD61A8E62D6001B2C0C /* Default-Portrait@2x~ipad.png */; };
|
||||
59738AE21A8E62D6001B2C0C /* Default-Portrait@3x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD71A8E62D6001B2C0C /* Default-Portrait@3x~ipad.png */; };
|
||||
59738AE31A8E62D6001B2C0C /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD81A8E62D6001B2C0C /* Default.png */; };
|
||||
59738AE41A8E62D6001B2C0C /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738AD91A8E62D6001B2C0C /* Default@2x.png */; };
|
||||
59738AE51A8E62D6001B2C0C /* Default@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 59738ADA1A8E62D6001B2C0C /* Default@3x.png */; };
|
||||
5983EC97163CB90D00475EFB /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5983EC96163CB90D00475EFB /* libsqlite3.dylib */; };
|
||||
59994D8D148D48E300863906 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D8C148D48E300863906 /* ImageIO.framework */; };
|
||||
59994D90148D686900863906 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D8F148D686900863906 /* libbz2.dylib */; };
|
||||
59994D9E148E353000863906 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 59994D9D148E352F00863906 /* libz.dylib */; };
|
||||
59994E3B148E85C800863906 /* YourApp in Resources */ = {isa = PBXBuildFile; fileRef = 59994E3A148E85C800863906 /* YourApp */; };
|
||||
59ED7D0B150E325100A92BEE /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59ED7D0A150E325100A92BEE /* MessageUI.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
010731C1137F20B800A8D3A0 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
010731C3137F20C300A8D3A0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
01532DA9137C099F0076F6BF /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = "<group>"; };
|
||||
01790B7A137E5ED900E037D1 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
|
||||
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
1D6058910D05DD3D006BFB54 /* {{ cookiecutter.project_name }}.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = {{ cookiecutter.project_name }}.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
2CB5F34317D51580006187AB /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
|
||||
2CB5F34517D5233A006187AB /* bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bridge.h; sourceTree = SOURCE_ROOT; };
|
||||
2CB5F34617D5233A006187AB /* bridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bridge.m; sourceTree = SOURCE_ROOT; };
|
||||
5973605B1A8A7ABD001B2C0C /* libkivy.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libkivy.a; path = {{ cookiecutter.dist_dir }}/lib/libkivy.a; sourceTree = "<group>"; };
|
||||
5973605C1A8A7ABD001B2C0C /* libpython.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpython.a; path = {{ cookiecutter.dist_dir }}/lib/libpython.a; sourceTree = "<group>"; };
|
||||
5973605D1A8A7ABD001B2C0C /* libsdl2_mixer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsdl2_mixer.a; path = {{ cookiecutter.dist_dir }}/lib/libsdl2_mixer.a; sourceTree = "<group>"; };
|
||||
5973605E1A8A7ABD001B2C0C /* libsdl2_ttf.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsdl2_ttf.a; path = {{ cookiecutter.dist_dir }}/lib/libsdl2_ttf.a; sourceTree = "<group>"; };
|
||||
5973605F1A8A7ABD001B2C0C /* libsdl2_image.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsdl2_image.a; path = {{ cookiecutter.dist_dir }}/lib/libsdl2_image.a; sourceTree = "<group>"; };
|
||||
597360601A8A7ABD001B2C0C /* libsdl2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsdl2.a; path = {{ cookiecutter.dist_dir }}/lib/libsdl2.a; sourceTree = "<group>"; };
|
||||
597360611A8A7ABD001B2C0C /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libffi.a; path = {{ cookiecutter.dist_dir }}/lib/libffi.a; sourceTree = "<group>"; };
|
||||
597360621A8A7ABD001B2C0C /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = {{ cookiecutter.dist_dir }}/lib/libfreetype.a; sourceTree = "<group>"; };
|
||||
59738AAB1A8AE4DB001B2C0C /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; };
|
||||
59738AAD1A8AE57F001B2C0C /* libgcc_s.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgcc_s.1.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/libgcc_s.1.dylib; sourceTree = DEVELOPER_DIR; };
|
||||
59738AAF1A8AF5B7001B2C0C /* libc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.dylib"; path = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/libc++.dylib"; sourceTree = DEVELOPER_DIR; };
|
||||
59738AB11A8AF870001B2C0C /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; };
|
||||
59738AB41A8BB5D8001B2C0C /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = {{ cookiecutter.dist_dir }}/root/python/lib; sourceTree = "<group>"; };
|
||||
59738AB61A8BB71F001B2C0C /* include */ = {isa = PBXFileReference; lastKnownFileType = folder; name = include; path = {{ cookiecutter.dist_dir }}/hostpython/include; sourceTree = "<group>"; };
|
||||
59738AB81A8C1C82001B2C0C /* libios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libios.a; path = {{ cookiecutter.dist_dir }}/lib/libios.a; sourceTree = "<group>"; };
|
||||
59738ABA1A8E19AA001B2C0C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = {{ cookiecutter.project_name }}/Images.xcassets; sourceTree = "<group>"; };
|
||||
59738AD01A8E62D6001B2C0C /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "LaunchImages/Default-568h@2x.png"; sourceTree = "<group>"; };
|
||||
59738AD11A8E62D6001B2C0C /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-667h@2x.png"; path = "LaunchImages/Default-667h@2x.png"; sourceTree = "<group>"; };
|
||||
59738AD21A8E62D6001B2C0C /* Default-763h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-763h@3x.png"; path = "LaunchImages/Default-763h@3x.png"; sourceTree = "<group>"; };
|
||||
59738AD31A8E62D6001B2C0C /* Default-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape.png"; path = "LaunchImages/Default-Landscape.png"; sourceTree = "<group>"; };
|
||||
59738AD41A8E62D6001B2C0C /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x.png"; path = "LaunchImages/Default-Landscape@2x.png"; sourceTree = "<group>"; };
|
||||
59738AD51A8E62D6001B2C0C /* Default-Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait.png"; path = "LaunchImages/Default-Portrait.png"; sourceTree = "<group>"; };
|
||||
59738AD61A8E62D6001B2C0C /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "LaunchImages/Default-Portrait@2x~ipad.png"; sourceTree = "<group>"; };
|
||||
59738AD71A8E62D6001B2C0C /* Default-Portrait@3x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@3x~ipad.png"; path = "LaunchImages/Default-Portrait@3x~ipad.png"; sourceTree = "<group>"; };
|
||||
59738AD81A8E62D6001B2C0C /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = LaunchImages/Default.png; sourceTree = "<group>"; };
|
||||
59738AD91A8E62D6001B2C0C /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "LaunchImages/Default@2x.png"; sourceTree = "<group>"; };
|
||||
59738ADA1A8E62D6001B2C0C /* Default@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@3x.png"; path = "LaunchImages/Default@3x.png"; sourceTree = "<group>"; };
|
||||
5983EC96163CB90D00475EFB /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
|
||||
59994D8C148D48E300863906 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
|
||||
59994D8F148D686900863906 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
|
||||
59994D9D148E352F00863906 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
|
||||
59994E3A148E85C800863906 /* YourApp */ = {isa = PBXFileReference; lastKnownFileType = folder; path = YourApp; sourceTree = "<group>"; };
|
||||
59ED7D0A150E325100A92BEE /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
8D1107310486CEB800E47090 /* {{ cookiecutter.project_name }}-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "{{ cookiecutter.project_name }}-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
59738AB91A8C1C82001B2C0C /* libios.a in Frameworks */,
|
||||
59738AB31A8AFACA001B2C0C /* libffi.a in Frameworks */,
|
||||
59738AB21A8AF870001B2C0C /* MobileCoreServices.framework in Frameworks */,
|
||||
59738AB01A8AF5B7001B2C0C /* libc++.dylib in Frameworks */,
|
||||
59738AAC1A8AE4DB001B2C0C /* Accelerate.framework in Frameworks */,
|
||||
2CB5F34417D51580006187AB /* CoreMotion.framework in Frameworks */,
|
||||
5973606A1A8A7ABD001B2C0C /* libfreetype.a in Frameworks */,
|
||||
59994D8D148D48E300863906 /* ImageIO.framework in Frameworks */,
|
||||
597360671A8A7ABD001B2C0C /* libsdl2_image.a in Frameworks */,
|
||||
597360681A8A7ABD001B2C0C /* libsdl2.a in Frameworks */,
|
||||
5983EC97163CB90D00475EFB /* libsqlite3.dylib in Frameworks */,
|
||||
59ED7D0B150E325100A92BEE /* MessageUI.framework in Frameworks */,
|
||||
59994D90148D686900863906 /* libbz2.dylib in Frameworks */,
|
||||
59994D9E148E353000863906 /* libz.dylib in Frameworks */,
|
||||
597360661A8A7ABD001B2C0C /* libsdl2_ttf.a in Frameworks */,
|
||||
597360641A8A7ABD001B2C0C /* libpython.a in Frameworks */,
|
||||
597360651A8A7ABD001B2C0C /* libsdl2_mixer.a in Frameworks */,
|
||||
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
|
||||
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
|
||||
288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
|
||||
597360631A8A7ABD001B2C0C /* libkivy.a in Frameworks */,
|
||||
01790B81137E5ED900E037D1 /* OpenGLES.framework in Frameworks */,
|
||||
010731C2137F20B800A8D3A0 /* AudioToolbox.framework in Frameworks */,
|
||||
010731C4137F20C300A8D3A0 /* QuartzCore.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2CB5F34517D5233A006187AB /* bridge.h */,
|
||||
2CB5F34617D5233A006187AB /* bridge.m */,
|
||||
);
|
||||
path = Classes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1D6058910D05DD3D006BFB54 /* {{ cookiecutter.project_name }}.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
080E96DDFE201D6D7F000001 /* Classes */,
|
||||
29B97315FDCFA39411CA2CEA /* Sources */,
|
||||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||
);
|
||||
name = CustomTemplate;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97315FDCFA39411CA2CEA /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
29B97316FDCFA39411CA2CEA /* main.m */,
|
||||
59994E3A148E85C800863906 /* YourApp */,
|
||||
);
|
||||
name = "Sources";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
59738ABA1A8E19AA001B2C0C /* Images.xcassets */,
|
||||
59738AB61A8BB71F001B2C0C /* include */,
|
||||
59738AB41A8BB5D8001B2C0C /* lib */,
|
||||
01532DA9137C099F0076F6BF /* icon.png */,
|
||||
8D1107310486CEB800E47090 /* {{ cookiecutter.project_name }}-Info.plist */,
|
||||
59738AD01A8E62D6001B2C0C /* Default-568h@2x.png */,
|
||||
59738AD11A8E62D6001B2C0C /* Default-667h@2x.png */,
|
||||
59738AD21A8E62D6001B2C0C /* Default-763h@3x.png */,
|
||||
59738AD31A8E62D6001B2C0C /* Default-Landscape.png */,
|
||||
59738AD41A8E62D6001B2C0C /* Default-Landscape@2x.png */,
|
||||
59738AD51A8E62D6001B2C0C /* Default-Portrait.png */,
|
||||
59738AD61A8E62D6001B2C0C /* Default-Portrait@2x~ipad.png */,
|
||||
59738AD71A8E62D6001B2C0C /* Default-Portrait@3x~ipad.png */,
|
||||
59738AD81A8E62D6001B2C0C /* Default.png */,
|
||||
59738AD91A8E62D6001B2C0C /* Default@2x.png */,
|
||||
59738ADA1A8E62D6001B2C0C /* Default@3x.png */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5973605B1A8A7ABD001B2C0C /* libkivy.a */,
|
||||
5973605C1A8A7ABD001B2C0C /* libpython.a */,
|
||||
5973605D1A8A7ABD001B2C0C /* libsdl2_mixer.a */,
|
||||
5973605E1A8A7ABD001B2C0C /* libsdl2_ttf.a */,
|
||||
5973605F1A8A7ABD001B2C0C /* libsdl2_image.a */,
|
||||
597360601A8A7ABD001B2C0C /* libsdl2.a */,
|
||||
597360611A8A7ABD001B2C0C /* libffi.a */,
|
||||
597360621A8A7ABD001B2C0C /* libfreetype.a */,
|
||||
59738AB81A8C1C82001B2C0C /* libios.a */,
|
||||
5983EC96163CB90D00475EFB /* libsqlite3.dylib */,
|
||||
59994D8F148D686900863906 /* libbz2.dylib */,
|
||||
59738AAF1A8AF5B7001B2C0C /* libc++.dylib */,
|
||||
59994D9D148E352F00863906 /* libz.dylib */,
|
||||
59738AAD1A8AE57F001B2C0C /* libgcc_s.1.dylib */,
|
||||
59738AAB1A8AE4DB001B2C0C /* Accelerate.framework */,
|
||||
59ED7D0A150E325100A92BEE /* MessageUI.framework */,
|
||||
010731C1137F20B800A8D3A0 /* AudioToolbox.framework */,
|
||||
010731C3137F20C300A8D3A0 /* QuartzCore.framework */,
|
||||
01790B7A137E5ED900E037D1 /* OpenGLES.framework */,
|
||||
1D30AB110D05D00D00671497 /* Foundation.framework */,
|
||||
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
|
||||
59738AB11A8AF870001B2C0C /* MobileCoreServices.framework */,
|
||||
288765FC0DF74451002DB57D /* CoreGraphics.framework */,
|
||||
2CB5F34317D51580006187AB /* CoreMotion.framework */,
|
||||
59994D8C148D48E300863906 /* ImageIO.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
1D6058900D05DD3D006BFB54 /* {{ cookiecutter.project_name }} */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "{{ cookiecutter.project_name }}" */;
|
||||
buildPhases = (
|
||||
113D17E2153E3DB5001310A5 /* ShellScript */,
|
||||
113D17E2153E3DB5001310A6 /* ShellScript */,
|
||||
113D17E2153E3DB5001310A7 /* ShellScript */,
|
||||
1D60588D0D05DD3D006BFB54 /* Resources */,
|
||||
1D60588E0D05DD3D006BFB54 /* Sources */,
|
||||
1D60588F0D05DD3D006BFB54 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = {{ cookiecutter.project_name }};
|
||||
productName = {{ cookiecutter.project_name }};
|
||||
productReference = 1D6058910D05DD3D006BFB54 /* {{ cookiecutter.project_name }}.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0610;
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "{{ cookiecutter.project_name }}" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
English,
|
||||
Japanese,
|
||||
French,
|
||||
German,
|
||||
);
|
||||
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
1D6058900D05DD3D006BFB54 /* {{ cookiecutter.project_name }} */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
1D60588D0D05DD3D006BFB54 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
59738AE41A8E62D6001B2C0C /* Default@2x.png in Resources */,
|
||||
59738AB51A8BB5D8001B2C0C /* lib in Resources */,
|
||||
59738ABB1A8E19AA001B2C0C /* Images.xcassets in Resources */,
|
||||
59738ADE1A8E62D6001B2C0C /* Default-Landscape.png in Resources */,
|
||||
59738AE31A8E62D6001B2C0C /* Default.png in Resources */,
|
||||
01532DAA137C099F0076F6BF /* icon.png in Resources */,
|
||||
59994E3B148E85C800863906 /* YourApp in Resources */,
|
||||
59738AE11A8E62D6001B2C0C /* Default-Portrait@2x~ipad.png in Resources */,
|
||||
59738AE01A8E62D6001B2C0C /* Default-Portrait.png in Resources */,
|
||||
59738ADC1A8E62D6001B2C0C /* Default-667h@2x.png in Resources */,
|
||||
59738ADB1A8E62D6001B2C0C /* Default-568h@2x.png in Resources */,
|
||||
59738ADD1A8E62D6001B2C0C /* Default-763h@3x.png in Resources */,
|
||||
59738AE21A8E62D6001B2C0C /* Default-Portrait@3x~ipad.png in Resources */,
|
||||
59738AB71A8BB71F001B2C0C /* include in Resources */,
|
||||
59738AE51A8E62D6001B2C0C /* Default@3x.png in Resources */,
|
||||
59738ADF1A8E62D6001B2C0C /* Default-Landscape@2x.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
113D17E2153E3DB5001310A5 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 12;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "rsync -av --delete \"{{ cookiecutter.project_dir }}\"/ \"$PROJECT_DIR\"/YourApp";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
113D17E2153E3DB5001310A6 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 12;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "{{ cookiecutter.dist_dir }}/hostpython/bin/python -OO -m compileall \"$PROJECT_DIR\"/YourApp";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
113D17E2153E3DB5001310A7 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 12;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/bash;
|
||||
shellScript = "find \"$PROJECT_DIR\"/YourApp/ -iname '*.py' -exec rm {} \\; -or -iname '*.pyc' -exec rm {} \\;";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
1D60588E0D05DD3D006BFB54 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
|
||||
2CB5F34717D5233A006187AB /* bridge.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1D6058940D05DD3E006BFB54 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"{{ cookiecutter.dist_dir }}/root/python/include",
|
||||
"{{ cookiecutter.dist_dir }}/include/common/sdl2",
|
||||
);
|
||||
INFOPLIST_FILE = "{{ cookiecutter.project_name }}-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"{{ cookiecutter.dist_dir }}/lib"
|
||||
);
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
OTHER_LDFLAGS = "-all_load";
|
||||
PRODUCT_NAME = {{ cookiecutter.project_name }};
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
USER_HEADER_SEARCH_PATHS = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1D6058950D05DD3E006BFB54 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"\"$(PROJECT_DIR)/../build/include\"",
|
||||
"\"$(PROJECT_DIR)/../build/python/include\"",
|
||||
);
|
||||
INFOPLIST_FILE = "{{ cookiecutter.project_name }}-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.1;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(PROJECT_DIR)/../build/lib\"",
|
||||
"/Users/tito/code/ios/kivy-ios/dist/lib",
|
||||
"/Users/tito/code/ios/kivy-ios/dist/root/python/lib",
|
||||
"/Users/tito/code/ios/kivy-ios/dist/root/python/lib/python2.7/config",
|
||||
);
|
||||
OTHER_LDFLAGS = "-all_load";
|
||||
PRODUCT_NAME = {{ cookiecutter.project_name }};
|
||||
PROVISIONING_PROFILE = "";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = NO;
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
C01FCF4F08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
USER_HEADER_SEARCH_PATHS = {{ cookiecutter.dist_dir }}/root/include/;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
C01FCF5008A954540054247B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
USER_HEADER_SEARCH_PATHS = {{ cookiecutter.dist_dir }}/root/include/;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "{{ cookiecutter.project_name }}" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1D6058940D05DD3E006BFB54 /* Debug */,
|
||||
1D6058950D05DD3E006BFB54 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "{{ cookiecutter.project_name }}" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
C01FCF4F08A954540054247B /* Debug */,
|
||||
C01FCF5008A954540054247B /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
}
|
|
@ -2,6 +2,6 @@
|
|||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:##APPID##.xcodeproj">
|
||||
location = "self:{{ cookiecutter.project_name }}.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|