| Index: pylib/gyp/xcode_emulation.py
|
| diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py
|
| index 859cd5a93722e9c1efb9f4cb210be180e03e7b11..2f34bc6f169055e95c87f41881c376a622e345f7 100644
|
| --- a/pylib/gyp/xcode_emulation.py
|
| +++ b/pylib/gyp/xcode_emulation.py
|
| @@ -218,6 +218,9 @@ class XcodeSettings(object):
|
| def _IsBundle(self):
|
| return int(self.spec.get('mac_bundle', 0)) != 0
|
|
|
| + def _IsIosAppExtension(self):
|
| + return int(self.spec.get('ios_app_extension', 0)) != 0
|
| +
|
| def GetFrameworkVersion(self):
|
| """Returns the framework version of the current target. Only valid for
|
| bundles."""
|
| @@ -237,7 +240,10 @@ class XcodeSettings(object):
|
| 'WRAPPER_EXTENSION', default=default_wrapper_extension)
|
| return '.' + self.spec.get('product_extension', wrapper_extension)
|
| elif self.spec['type'] == 'executable':
|
| - return '.' + self.spec.get('product_extension', 'app')
|
| + if self._IsIosAppExtension():
|
| + return '.' + self.spec.get('product_extension', 'appex')
|
| + else:
|
| + return '.' + self.spec.get('product_extension', 'app')
|
| else:
|
| assert False, "Don't know extension for '%s', target '%s'" % (
|
| self.spec['type'], self.spec['target_name'])
|
| @@ -292,6 +298,10 @@ class XcodeSettings(object):
|
|
|
| def GetProductType(self):
|
| """Returns the PRODUCT_TYPE of this target."""
|
| + if self._IsIosAppExtension():
|
| + assert self._IsBundle(), ('ios_app_extension flag requires mac_bundle '
|
| + '(target %s)' % self.spec['target_name'])
|
| + return 'com.apple.product-type.app-extension'
|
| if self._IsBundle():
|
| return {
|
| 'executable': 'com.apple.product-type.application',
|
| @@ -794,6 +804,18 @@ class XcodeSettings(object):
|
| for directory in framework_dirs:
|
| ldflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
|
|
|
| + if sdk_root and self._IsIosAppExtension():
|
| + # Adds the link flags for extensions. These flags are common for all
|
| + # extensions and provide loader and main function.
|
| + # These flags reflect the compilation options used by xcode to compile
|
| + # extensions.
|
| + ldflags.append('-lpkstart')
|
| + ldflags.append(sdk_root +
|
| + '/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit')
|
| + ldflags.append('-fapplication-extension')
|
| + ldflags.append('-Xlinker -rpath '
|
| + '-Xlinker @executable_path/../../Frameworks')
|
| +
|
| self._Appendf(ldflags, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
|
|
|
| self.configname = None
|
| @@ -921,7 +943,7 @@ class XcodeSettings(object):
|
| """Return a shell command to codesign the iOS output binary so it can
|
| be deployed to a device. This should be run as the very last step of the
|
| build."""
|
| - if not (self.isIOS and self.spec['type'] == "executable"):
|
| + if not (self.isIOS and self.spec['type'] == 'executable'):
|
| return []
|
|
|
| settings = self.xcode_settings[configname]
|
|
|