OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 Google Inc. All rights reserved. | 2 # Copyright (c) 2012 Google Inc. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Utility functions to perform Xcode-style build steps. | 6 """Utility functions to perform Xcode-style build steps. |
7 | 7 |
8 These functions are executed via gyp-mac-tool when using the Makefile generator. | 8 These functions are executed via gyp-mac-tool when using the Makefile generator. |
9 """ | 9 """ |
10 | 10 |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 subprocess.check_call(command_line) | 398 subprocess.check_call(command_line) |
399 | 399 |
400 def ExecMergeInfoPlist(self, output, *inputs): | 400 def ExecMergeInfoPlist(self, output, *inputs): |
401 """Merge multiple .plist files into a single .plist file.""" | 401 """Merge multiple .plist files into a single .plist file.""" |
402 merged_plist = {} | 402 merged_plist = {} |
403 for path in inputs: | 403 for path in inputs: |
404 plist = self._LoadPlistMaybeBinary(path) | 404 plist = self._LoadPlistMaybeBinary(path) |
405 self._MergePlist(merged_plist, plist) | 405 self._MergePlist(merged_plist, plist) |
406 plistlib.writePlist(merged_plist, output) | 406 plistlib.writePlist(merged_plist, output) |
407 | 407 |
408 def ExecCodeSignBundle(self, key, entitlements, provisioning): | 408 def ExecCodeSignBundle(self, key, entitlements, provisioning, path, preserve): |
409 """Code sign a bundle. | 409 """Code sign a bundle. |
410 | 410 |
411 This function tries to code sign an iOS bundle, following the same | 411 This function tries to code sign an iOS bundle, following the same |
412 algorithm as Xcode: | 412 algorithm as Xcode: |
413 1. pick the provisioning profile that best match the bundle identifier, | 413 1. pick the provisioning profile that best match the bundle identifier, |
414 and copy it into the bundle as embedded.mobileprovision, | 414 and copy it into the bundle as embedded.mobileprovision, |
415 2. copy Entitlements.plist from user or SDK next to the bundle, | 415 2. copy Entitlements.plist from user or SDK next to the bundle, |
416 3. code sign the bundle. | 416 3. code sign the bundle. |
417 """ | 417 """ |
418 substitutions, overrides = self._InstallProvisioningProfile( | 418 substitutions, overrides = self._InstallProvisioningProfile( |
419 provisioning, self._GetCFBundleIdentifier()) | 419 provisioning, self._GetCFBundleIdentifier()) |
420 entitlements_path = self._InstallEntitlements( | 420 entitlements_path = self._InstallEntitlements( |
421 entitlements, substitutions, overrides) | 421 entitlements, substitutions, overrides) |
422 subprocess.check_call([ | 422 |
423 'codesign', '--force', '--sign', key, '--entitlements', | 423 args = ['codesign', '--force', '--sign', key] |
424 entitlements_path, '--timestamp=none', os.path.join( | 424 if preserve == 'True': |
425 os.environ['TARGET_BUILD_DIR'], | 425 args.extend(['--deep', '--preserve-metadata=identifier,entitlements']) |
426 os.environ['FULL_PRODUCT_NAME'])]) | 426 else: |
| 427 args.extend(['--entitlements', entitlements_path]) |
| 428 args.extend(['--timestamp=none', path]) |
| 429 subprocess.check_call(args) |
427 | 430 |
428 def _InstallProvisioningProfile(self, profile, bundle_identifier): | 431 def _InstallProvisioningProfile(self, profile, bundle_identifier): |
429 """Installs embedded.mobileprovision into the bundle. | 432 """Installs embedded.mobileprovision into the bundle. |
430 | 433 |
431 Args: | 434 Args: |
432 profile: string, optional, short name of the .mobileprovision file | 435 profile: string, optional, short name of the .mobileprovision file |
433 to use, if empty or the file is missing, the best file installed | 436 to use, if empty or the file is missing, the best file installed |
434 will be used | 437 will be used |
435 bundle_identifier: string, value of CFBundleIdentifier from Info.plist | 438 bundle_identifier: string, value of CFBundleIdentifier from Info.plist |
436 | 439 |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 out.write(struct.pack('<s', '\0')) | 702 out.write(struct.pack('<s', '\0')) |
700 base = os.path.dirname(path) + os.sep | 703 base = os.path.dirname(path) + os.sep |
701 out.write(struct.pack('<%ds' % len(base), base)) | 704 out.write(struct.pack('<%ds' % len(base), base)) |
702 out.write(struct.pack('<s', '\0')) | 705 out.write(struct.pack('<s', '\0')) |
703 path = os.path.basename(path) | 706 path = os.path.basename(path) |
704 out.write(struct.pack('<%ds' % len(path), path)) | 707 out.write(struct.pack('<%ds' % len(path), path)) |
705 out.write(struct.pack('<s', '\0')) | 708 out.write(struct.pack('<s', '\0')) |
706 | 709 |
707 if __name__ == '__main__': | 710 if __name__ == '__main__': |
708 sys.exit(main(sys.argv[1:])) | 711 sys.exit(main(sys.argv[1:])) |
OLD | NEW |