nixenvironment 0.0.70 → 0.0.71
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/nixenvironment +39 -102
- data/lib/nixenvironment.rb +2 -0
- data/lib/nixenvironment/archiver.rb +43 -50
- data/lib/nixenvironment/build_env_vars_loader.rb +69 -6
- data/lib/nixenvironment/config.rb +9 -5
- data/lib/nixenvironment/deployer.rb +129 -0
- data/lib/nixenvironment/scm.rb +179 -0
- data/lib/nixenvironment/version.rb +1 -1
- data/lib/nixenvironment/xcodebuild.rb +6 -0
- data/nixenvironment.gemspec +2 -1
- metadata +20 -13
- data/legacy/CleanWorkingCopy.sh +0 -69
- data/legacy/DeployIPA.sh +0 -125
- data/legacy/DetectSCM.sh +0 -11
- data/legacy/LoadBuildEnvVars.sh +0 -123
- data/legacy/MakeTag.sh +0 -94
- data/legacy/SaveRevision.sh +0 -122
- data/legacy/VerifyBinarySigning.py +0 -80
- data/legacy/svn-clean.pl +0 -246
- data/legacy/svncopy.pl +0 -1134
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ae2568f0e26258c2c5e3f378a4aee05e0b81fd2
|
4
|
+
data.tar.gz: 5d6ad9e68cd00116e9b6d2d7d43bd37dc6aa1ce2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6f8c13907d4f803eb394d014e5806f77a703df837fade6863486ae6c485e373ebf834517ba79b92c5e620d0dd31ac41d6149fc42f044a1b28dfe7a492c8b770
|
7
|
+
data.tar.gz: b52b91be9c13277b93325dc528308b7256d218f6c32ab3cc9c1bb80fbfdad0f3b72ac24480f3974b0fbacdfe30a3358d50c701fcd8af788b6e16f2d63a67bbc3
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ Nixenvironment installs, updates and manages inner NIX environment stuff to make
|
|
37
37
|
Then run this in Execute shell:
|
38
38
|
|
39
39
|
# See credentials for deploy on https://qwiki.nixsolutions.com/display/IPT/Credentials
|
40
|
-
$ ./gemify.sh && bundle update && sudo gem install nixenvironment --verbose
|
40
|
+
$ ./gemify.sh && bundle update && sudo gem install nixenvironment --verbose --no-document
|
41
41
|
|
42
42
|
NOTE! CI must be configured with UTF-8 locale! Please see how to implement it for Jenkins:
|
43
43
|
|
data/bin/nixenvironment
CHANGED
@@ -226,18 +226,6 @@ command :code_duplication_report do |c|
|
|
226
226
|
end
|
227
227
|
end
|
228
228
|
|
229
|
-
command :tag do |c|
|
230
|
-
c.syntax = 'nixenvironment tag'
|
231
|
-
c.description = 'Make SVN/git/mercurial tag, SCM_USERNAME and SCM_PASSWORD must be defined on calling this target'
|
232
|
-
c.action { tag }
|
233
|
-
end
|
234
|
-
|
235
|
-
command :svn_tag_from_jenkins do |c|
|
236
|
-
c.syntax = 'nixenvironment svn_tag_from_jenkins'
|
237
|
-
c.description = 'Make tag by finding the first credential in local credential storage'
|
238
|
-
c.action { svn_tag_from_jenkins }
|
239
|
-
end
|
240
|
-
|
241
229
|
command :clean_working_copy do |c|
|
242
230
|
c.syntax = 'nixenvironment clean_working_copy'
|
243
231
|
c.description = 'Make working copy clean'
|
@@ -378,9 +366,9 @@ end
|
|
378
366
|
def update_config_settings(key, value, table, need_separator)
|
379
367
|
if value
|
380
368
|
@config_settings[key] = value
|
381
|
-
spec_column = "
|
369
|
+
spec_column = "Specified directly"
|
382
370
|
else
|
383
|
-
spec_column = "
|
371
|
+
spec_column = "Used from Config"
|
384
372
|
end
|
385
373
|
|
386
374
|
table.add_row [key, spec_column, @config_settings[key]]
|
@@ -388,25 +376,11 @@ def update_config_settings(key, value, table, need_separator)
|
|
388
376
|
end
|
389
377
|
|
390
378
|
def revision
|
391
|
-
|
379
|
+
BuildEnvVarsLoader.load_last_revision['REVISION']
|
392
380
|
end
|
393
381
|
|
394
382
|
def monotonic_revision
|
395
|
-
|
396
|
-
end
|
397
|
-
|
398
|
-
def working_copy_is_clean?
|
399
|
-
system("
|
400
|
-
source \"_last_revision.sh\"
|
401
|
-
|
402
|
-
if [ ${WORKING_COPY_IS_CLEAN} -eq 1 ]; then
|
403
|
-
echo \"Working copy is clean. Continuing ...\"
|
404
|
-
else
|
405
|
-
echo \"error: working copy must not have local modifications.\" 1>&2
|
406
|
-
echo \"You must add following files and folders to .gitignore:\"
|
407
|
-
echo \"#{Git.status(:porcelain => true)}\"
|
408
|
-
exit 1
|
409
|
-
fi")
|
383
|
+
BuildEnvVarsLoader.load_last_revision['MONOTONIC_REVISION']
|
410
384
|
end
|
411
385
|
|
412
386
|
def save_build_env_vars
|
@@ -425,7 +399,7 @@ def save_build_env_vars
|
|
425
399
|
|
426
400
|
system("
|
427
401
|
echo \"#!/bin/sh\
|
428
|
-
|
402
|
+
#{AUTOGENERATED_FILES_HEADER}
|
429
403
|
PROJECT='#{@config_settings[PROJECT_KEY]}'
|
430
404
|
BUILT_PRODUCTS_DIR='#{@config_settings[BUILT_PRODUCTS_DIR_KEY]}'
|
431
405
|
OBJECTS_NORMAL_DIR='#{@config_settings[OBJECT_FILE_DIR_NORMAL_KEY]}'
|
@@ -447,13 +421,13 @@ RESIGNED_WIDGET_BUNDLE_ID='#{@config_settings[RESIGNED_WIDGET_BUNDLE_ID_KEY]}'
|
|
447
421
|
RESIGNED_BUNDLE_NAME='#{@config_settings[RESIGNED_BUNDLE_NAME_KEY]}'
|
448
422
|
RESIGNED_ENTITLEMENTS_PATH='#{@config_settings[RESIGNED_ENTITLEMENTS_PATH_KEY]}'
|
449
423
|
RESIGNED_WATCHKIT_EXTENSION_ENTITLEMENTS_PATH='#{resigned_watchkit_extension_entitlements_path}'
|
450
|
-
RESIGNED_WIDGET_ENTITLEMENTS_PATH='#{resigned_widget_entitlements_path}'\" >
|
424
|
+
RESIGNED_WIDGET_ENTITLEMENTS_PATH='#{resigned_widget_entitlements_path}'\" > #{AUTOGENERATED_LAST_BUILD_VARS}
|
451
425
|
")
|
452
426
|
end
|
453
427
|
|
454
428
|
def prebuild(config)
|
455
|
-
|
456
|
-
error('Error! Working copy is not clean!') unless working_copy_is_clean?
|
429
|
+
SCM.save_revision
|
430
|
+
error('Error! Working copy is not clean!') unless BuildEnvVarsLoader.working_copy_is_clean?
|
457
431
|
backup_info_plists
|
458
432
|
save_build_env_vars
|
459
433
|
update_info_plists(config)
|
@@ -488,6 +462,8 @@ def build(config, ipa, ndsym, icon_tagger)
|
|
488
462
|
|
489
463
|
success("Make 'macos_zip' complete!")
|
490
464
|
elsif sdk.include?('iphoneos')
|
465
|
+
puts
|
466
|
+
|
491
467
|
if config == 'Release'
|
492
468
|
puts 'IconTagger: configuration is Release. Skipping ...'
|
493
469
|
else
|
@@ -499,6 +475,8 @@ def build(config, ipa, ndsym, icon_tagger)
|
|
499
475
|
end
|
500
476
|
end
|
501
477
|
|
478
|
+
puts
|
479
|
+
|
502
480
|
ipa.split.each do |current_ipa|
|
503
481
|
begin
|
504
482
|
case current_ipa
|
@@ -522,8 +500,8 @@ def build(config, ipa, ndsym, icon_tagger)
|
|
522
500
|
end
|
523
501
|
|
524
502
|
def unity_build(configuration, unity_platform, unity_path, development_build, keystore_path, keystore_password, key_alias_name, key_alias_password)
|
525
|
-
|
526
|
-
error('Error! Working copy is not clean!') unless working_copy_is_clean?
|
503
|
+
SCM.save_revision
|
504
|
+
error('Error! Working copy is not clean!') unless BuildEnvVarsLoader.working_copy_is_clean?
|
527
505
|
|
528
506
|
if File.directory?(UNITY_EDITOR_DIR)
|
529
507
|
FileUtils.cp_r(UNITY_BUILD_SCRIPTS_DIR, UNITY_EDITOR_DIR)
|
@@ -539,7 +517,7 @@ def unity_build(configuration, unity_platform, unity_path, development_build, ke
|
|
539
517
|
puts 'Generating IOS project from UNITY project ...'
|
540
518
|
unity_success = system("#{unity_path} -projectPath '#{Dir.pwd}' -batchmode -logFile -quit -executeMethod NIXBuilder.MakeiOSBuild -customArgs:'#{build_path_arg}#{development_build_arg}'")
|
541
519
|
error('iOS build unity error!') unless unity_success
|
542
|
-
success(
|
520
|
+
success("IOS project was generated.\n")
|
543
521
|
when 'macos'
|
544
522
|
build_path_arg = "buildPath=#{UNITY_MACOS_BUILD_PATH}"
|
545
523
|
development_build_arg = development_build ? ';developmentBuild=' : ''
|
@@ -569,7 +547,7 @@ def unity_build(configuration, unity_platform, unity_path, development_build, ke
|
|
569
547
|
|
570
548
|
clean_working_copy(false)
|
571
549
|
|
572
|
-
success(
|
550
|
+
success("Unity build complete!\n")
|
573
551
|
end
|
574
552
|
|
575
553
|
def tag_icon(short_version)
|
@@ -591,10 +569,12 @@ def tag_icon(short_version)
|
|
591
569
|
end
|
592
570
|
|
593
571
|
def backup_info_plists
|
572
|
+
puts
|
594
573
|
@info_plist_backup_name = backup_info_plist(@config_settings[PRODUCT_SETTINGS_PATH_KEY], nil)
|
595
574
|
@watchkit_app_info_plist_backup_name = backup_info_plist(@config_settings[WATCHKIT_APP_PRODUCT_SETTINGS_PATH_KEY], WATCHKIT_APP_PREFIX)
|
596
575
|
@watchkit_extension_info_plist_backup_name = backup_info_plist(@config_settings[WATCHKIT_EXTENSION_PRODUCT_SETTINGS_PATH_KEY], WATCHKIT_EXTENSION_PREFIX)
|
597
576
|
@widget_info_plist_backup_name = backup_info_plist(@config_settings[WIDGET_PRODUCT_SETTINGS_PATH_KEY], WIDGET_PREFIX)
|
577
|
+
puts
|
598
578
|
end
|
599
579
|
|
600
580
|
def backup_info_plist(product_settings_path, description)
|
@@ -634,14 +614,17 @@ def update_info_plist(product_settings_path, monotonic_revision, revision, bundl
|
|
634
614
|
error("Update #{description}Info.plist error!", e)
|
635
615
|
end
|
636
616
|
|
637
|
-
|
617
|
+
puts "#{description}Info.plist was updated."
|
618
|
+
puts
|
638
619
|
end
|
639
620
|
|
640
621
|
def restore_info_plists
|
622
|
+
puts
|
641
623
|
restore_info_plist(@config_settings[PRODUCT_SETTINGS_PATH_KEY], @info_plist_backup_name, nil)
|
642
624
|
restore_info_plist(@config_settings[WATCHKIT_APP_PRODUCT_SETTINGS_PATH_KEY], @watchkit_app_info_plist_backup_name, WATCHKIT_APP_PREFIX)
|
643
625
|
restore_info_plist(@config_settings[WATCHKIT_EXTENSION_PRODUCT_SETTINGS_PATH_KEY], @watchkit_extension_info_plist_backup_name, WATCHKIT_EXTENSION_PREFIX)
|
644
626
|
restore_info_plist(@config_settings[WIDGET_PRODUCT_SETTINGS_PATH_KEY], @widget_info_plist_backup_name, WIDGET_PREFIX)
|
627
|
+
puts
|
645
628
|
end
|
646
629
|
|
647
630
|
def restore_info_plist(product_settings_path, info_plist_backup_name, description)
|
@@ -659,55 +642,22 @@ def deploy(deliver_deploy)
|
|
659
642
|
deploy_password = @config_settings[DEPLOY_PASSWORD_KEY].blank? ? ENV[DEPLOY_PASSWORD_KEY] : @config_settings[DEPLOY_PASSWORD_KEY]
|
660
643
|
deploy_itunesconnect_username = @config_settings[DEPLOY_ITUNESCONNECT_USERNAME_KEY].blank? ? ENV[DEPLOY_ITUNESCONNECT_USERNAME_KEY] : @config_settings[DEPLOY_ITUNESCONNECT_USERNAME_KEY]
|
661
644
|
|
662
|
-
|
663
|
-
deliver_deploy = deliver_deploy ? 1 : 0
|
664
|
-
|
665
|
-
sdk_name = %x[ source _last_build_vars.sh && echo ${SDK_NAME} ].strip!
|
666
|
-
|
667
|
-
if sdk_name.include?('macos')
|
668
|
-
build_env_vars = BuildEnvVarsLoader.load
|
669
|
-
ipa_bundle_id = build_env_vars[IPA_BUNDLE_ID_KEY]
|
670
|
-
current_app_version = build_env_vars[CURRENT_APP_VERSION_KEY]
|
671
|
-
current_build_version = build_env_vars[CURRENT_BUILD_VERSION_KEY]
|
672
|
-
name_for_deployment = build_env_vars[NAME_FOR_DEPLOYMENT_KEY]
|
673
|
-
executable_name = build_env_vars[EXECUTABLE_NAME_KEY]
|
674
|
-
ipa_product = build_env_vars[IPA_PRODUCT_KEY]
|
675
|
-
app_dsym = build_env_vars[APP_DSYM_KEY]
|
676
|
-
built_products_dir = build_env_vars[BUILT_PRODUCTS_DIR_KEY]
|
677
|
-
|
678
|
-
local_path_to_app = File.join(Dir.tmpdir, ipa_bundle_id)
|
679
|
-
local_path_to_build = File.join(local_path_to_app, "v.#{current_app_version}_#{current_build_version}")
|
680
|
-
FileUtils.rm_rf(local_path_to_build)
|
681
|
-
FileUtils.mkdir_p(local_path_to_build)
|
682
|
-
|
683
|
-
configuration_full_path = File.join(local_path_to_build, name_for_deployment)
|
684
|
-
FileUtils.mkdir(configuration_full_path)
|
685
|
-
FileUtils.cp(ipa_product, File.join(configuration_full_path, executable_name) + ZIP_EXT)
|
686
|
-
|
687
|
-
# TODO: mds currently doesn't support dsym for mac projects. Will be implemented later.
|
688
|
-
# if File.exist?(app_dsym)
|
689
|
-
# Dir.chdir(built_products_dir)
|
690
|
-
# destination = File.join(configuration_full_path, "#{executable_name + APP_EXT + DSYM_EXT + ZIP_EXT}")
|
691
|
-
# system("zip -r '#{destination}' '#{executable_name + APP_EXT + DSYM_EXT}'")
|
692
|
-
# end
|
693
|
-
|
694
|
-
deploy_path = @config_settings[DEPLOY_PATH_KEY].blank? ? MACOS_PROJECTS_DEPLOY_PATH : @config_settings[DEPLOY_PATH_KEY]
|
695
|
-
deploy_success = system("#{DEPLOY_SCRIPT_PATH} #{deploy_host} #{deploy_path} #{deploy_username} #{deploy_password} #{local_path_to_app}")
|
696
|
-
else
|
697
|
-
deploy_path = @config_settings[DEPLOY_PATH_KEY].blank? ? ENV[DEPLOY_PATH_KEY] : @config_settings[DEPLOY_PATH_KEY]
|
698
|
-
deploy_success = system("#{DEPLOY_IPA_SCRIPT_PATH} #{deploy_host} #{deploy_path} #{deploy_username} #{deploy_password} #{deploy_itunesconnect_username} #{deliver_deploy}")
|
699
|
-
end
|
645
|
+
sdk_name = BuildEnvVarsLoader.load_last_build_vars[SDK_NAME_KEY]
|
700
646
|
|
701
|
-
|
647
|
+
deploy_path = sdk_name.include?('macos') ? MACOS_PROJECTS_DEPLOY_PATH : ENV[DEPLOY_PATH_KEY]
|
648
|
+
deploy_path = @config_settings[DEPLOY_PATH_KEY] if @config_settings[DEPLOY_PATH_KEY].present?
|
649
|
+
Deployer.deploy(deploy_host, deploy_path, deploy_username, deploy_password, deploy_itunesconnect_username, deliver_deploy)
|
650
|
+
|
651
|
+
success('Deploy complete!')
|
702
652
|
end
|
703
653
|
|
704
654
|
def clean
|
705
655
|
FileUtils.rm_f(Dir.glob('*.pyc'))
|
706
|
-
FileUtils.rm_f(
|
707
|
-
FileUtils.rm_f(
|
708
|
-
FileUtils.rm_f(
|
709
|
-
FileUtils.rm_f(
|
710
|
-
FileUtils.rm_rf(
|
656
|
+
FileUtils.rm_f(AUTOGENERATED_LAST_REVISION)
|
657
|
+
FileUtils.rm_f(AUTOGENERATED_LAST_BUILD_VARS)
|
658
|
+
FileUtils.rm_f(AUTOGENERATED_COVERAGE)
|
659
|
+
FileUtils.rm_f(AUTOGENERATED_DUPLICATION)
|
660
|
+
FileUtils.rm_rf(AUTOGENERATED_TEST_RESULTS)
|
711
661
|
Xcodebuild.clean_all_targets
|
712
662
|
end
|
713
663
|
|
@@ -738,32 +688,18 @@ def code_coverage
|
|
738
688
|
end
|
739
689
|
|
740
690
|
def code_duplication_report
|
741
|
-
duplication_success = system("#{CODE_DUPLICATION_REPORT_SCRIPT_PATH}
|
691
|
+
duplication_success = system("#{CODE_DUPLICATION_REPORT_SCRIPT_PATH} '#{@config_settings[EXCLUDE_PATTERN_FOR_CODE_DUPLICATION_KEY]}' #{AUTOGENERATED_DUPLICATION}")
|
742
692
|
error('Generate code duplication error!') unless duplication_success
|
743
693
|
end
|
744
694
|
|
745
|
-
def tag
|
746
|
-
tag_success = system("#{MAKE_TAG_SCRIPT_PATH} \"#{ENV[SCM_USERNAME_KEY]}\" \"#{ENV[SCM_PASSWORD_KEY]}\"")
|
747
|
-
error('Make tag error!') unless tag_success
|
748
|
-
end
|
749
|
-
|
750
|
-
# Jenkins stores SVN credentials locally in XML, so this command gets and uses them on making tag by finding the first credential in local credential storage
|
751
|
-
# ATTENTION: if this command picks up wrong credentials, then you should manually edit subversion.credentials file on Jenkins in order to remove the wrong credential
|
752
|
-
# Additional |echo| is needed in order to add newline, otherwise base64 encoding doesn't work
|
753
|
-
def svn_tag_from_jenkins
|
754
|
-
ENV[SCM_USERNAME_KEY]=%x[ $(shell xpath ../subversion.credentials \(//userName\)[1]/text\(\)) ]
|
755
|
-
ENV[SCM_PASSWORD_KEY]=%x[ $(shell echo $$(xpath ../subversion.credentials \(//password\)[1]/text\(\) 2>/dev/null && echo) | openssl base64 -d) ]
|
756
|
-
|
757
|
-
tag
|
758
|
-
end
|
759
|
-
|
760
695
|
def clean_working_copy(all)
|
761
|
-
|
762
|
-
|
763
|
-
error('Clean working copy error!') unless clean_success
|
696
|
+
SCM.clean_working_copy(all)
|
697
|
+
error('Clean working copy error!') unless $?.success?
|
764
698
|
end
|
765
699
|
|
766
700
|
def error(msg, e = nil)
|
701
|
+
puts
|
702
|
+
|
767
703
|
if e.present?
|
768
704
|
puts e.inspect
|
769
705
|
puts e.backtrace
|
@@ -773,5 +709,6 @@ def error(msg, e = nil)
|
|
773
709
|
end
|
774
710
|
|
775
711
|
def success(msg)
|
712
|
+
puts
|
776
713
|
puts msg.green.bold
|
777
714
|
end
|
data/lib/nixenvironment.rb
CHANGED
@@ -50,16 +50,18 @@ module Nixenvironment
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def make_macos_zip
|
53
|
-
|
54
|
-
built_products_dir
|
55
|
-
executable_name
|
56
|
-
target_name
|
57
|
-
configuration
|
58
|
-
app_product
|
53
|
+
load_last_build_vars = BuildEnvVarsLoader.load_last_build_vars
|
54
|
+
built_products_dir = load_last_build_vars[BUILT_PRODUCTS_DIR_KEY].presence
|
55
|
+
executable_name = load_last_build_vars[EXECUTABLE_NAME_KEY].presence
|
56
|
+
target_name = load_last_build_vars[TARGET_NAME_KEY].presence
|
57
|
+
configuration = load_last_build_vars[CONFIGURATION_KEY].presence
|
58
|
+
app_product = load_last_build_vars[APP_PRODUCT_KEY].presence
|
59
59
|
|
60
60
|
new_ipa_name = "#{executable_name}-#{target_name}-#{configuration}"
|
61
61
|
new_ipa_path = File.join(built_products_dir, new_ipa_name) + ZIP_EXT
|
62
|
+
puts
|
62
63
|
puts "IPA_PRODUCT = #{new_ipa_path}"
|
64
|
+
puts
|
63
65
|
|
64
66
|
Dir.mktmpdir do |tmp_dir|
|
65
67
|
dest_app_dir = File.join(tmp_dir, new_ipa_name)
|
@@ -77,10 +79,7 @@ module Nixenvironment
|
|
77
79
|
end
|
78
80
|
|
79
81
|
puts "--> Zip '#{tmp_dir}' into '#{new_ipa_path}' ..."
|
80
|
-
Dir.chdir(tmp_dir)
|
81
|
-
zip_success = system("/usr/bin/zip --symlinks --verbose --recurse-paths \"#{new_ipa_path}\" .")
|
82
|
-
raise unless zip_success
|
83
|
-
end
|
82
|
+
Dir.chdir(tmp_dir) { system("/usr/bin/zip --symlinks --verbose --recurse-paths '#{new_ipa_path}' .") }
|
84
83
|
end
|
85
84
|
|
86
85
|
ipa_bundle_id = get_bundle_id(File.join(app_product, 'Contents'))
|
@@ -89,7 +88,7 @@ module Nixenvironment
|
|
89
88
|
IPA_PRODUCT='#{new_ipa_path}'
|
90
89
|
IPA_BUNDLE_ID='#{ipa_bundle_id}'
|
91
90
|
NAME_FOR_DEPLOYMENT='#{configuration}'
|
92
|
-
\" >>
|
91
|
+
\" >> #{AUTOGENERATED_LAST_BUILD_VARS}")
|
93
92
|
end
|
94
93
|
|
95
94
|
private
|
@@ -99,43 +98,34 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
99
98
|
is_appstore = ipa_product_suffix.present? && ipa_product_suffix.include?('Appstore')
|
100
99
|
is_adhoc = ipa_product_suffix.present? && ipa_product_suffix.include?('AdHoc')
|
101
100
|
|
102
|
-
|
103
|
-
built_products_dir
|
104
|
-
executable_name
|
105
|
-
target_name
|
106
|
-
configuration
|
107
|
-
app_product
|
108
|
-
|
109
|
-
watchkit_app_relative_product =
|
110
|
-
watchkit_extension_relative_product =
|
111
|
-
widget_relative_product =
|
112
|
-
|
113
|
-
resigned_bundle_id = is_resigned ?
|
114
|
-
resigned_watchkit_app_bundle_id = is_resigned ?
|
115
|
-
resigned_watchkit_extension_bundle_id = is_resigned ?
|
116
|
-
resigned_widget_bundle_id = is_resigned ?
|
117
|
-
resigned_bundle_name = is_resigned ?
|
118
|
-
resigned_entitlements_path = is_resigned ?
|
119
|
-
resigned_watchkit_extension_entitlements_path = is_resigned ?
|
120
|
-
resigned_widget_entitlements_path = is_resigned ?
|
101
|
+
load_last_build_vars = BuildEnvVarsLoader.load_last_build_vars
|
102
|
+
built_products_dir = load_last_build_vars[BUILT_PRODUCTS_DIR_KEY].presence
|
103
|
+
executable_name = load_last_build_vars[EXECUTABLE_NAME_KEY].presence
|
104
|
+
target_name = load_last_build_vars[TARGET_NAME_KEY].presence
|
105
|
+
configuration = load_last_build_vars[CONFIGURATION_KEY].presence
|
106
|
+
app_product = load_last_build_vars[APP_PRODUCT_KEY].presence
|
107
|
+
|
108
|
+
watchkit_app_relative_product = load_last_build_vars['WATCHKIT_APP_RELATIVE_PRODUCT'].presence
|
109
|
+
watchkit_extension_relative_product = load_last_build_vars['WATCHKIT_EXTENSION_RELATIVE_PRODUCT'].presence
|
110
|
+
widget_relative_product = load_last_build_vars['WIDGET_RELATIVE_PRODUCT'].presence
|
111
|
+
|
112
|
+
resigned_bundle_id = is_resigned ? load_last_build_vars[RESIGNED_BUNDLE_ID_KEY].presence : nil
|
113
|
+
resigned_watchkit_app_bundle_id = is_resigned ? load_last_build_vars[RESIGNED_WATCHKIT_APP_BUNDLE_ID_KEY].presence : nil
|
114
|
+
resigned_watchkit_extension_bundle_id = is_resigned ? load_last_build_vars[RESIGNED_WATCHKIT_EXTENSION_BUNDLE_ID_KEY].presence : nil
|
115
|
+
resigned_widget_bundle_id = is_resigned ? load_last_build_vars[RESIGNED_WIDGET_BUNDLE_ID_KEY].presence : nil
|
116
|
+
resigned_bundle_name = is_resigned ? load_last_build_vars[RESIGNED_BUNDLE_NAME_KEY].presence : nil
|
117
|
+
resigned_entitlements_path = is_resigned ? load_last_build_vars[RESIGNED_ENTITLEMENTS_PATH_KEY].presence : nil
|
118
|
+
resigned_watchkit_extension_entitlements_path = is_resigned ? load_last_build_vars[RESIGNED_WATCHKIT_EXTENSION_ENTITLEMENTS_PATH_KEY].presence : nil
|
119
|
+
resigned_widget_entitlements_path = is_resigned ? load_last_build_vars[RESIGNED_WIDGET_ENTITLEMENTS_PATH_KEY].presence : nil
|
121
120
|
|
122
121
|
ipa_product = "#{built_products_dir}/#{executable_name}-#{target_name}-#{configuration}#{ipa_product_suffix}.ipa"
|
123
122
|
puts "#{ipa_product_key} = #{ipa_product}"
|
124
123
|
|
125
|
-
if is_appstore
|
126
|
-
app_name = File.basename(app_product)
|
127
|
-
temp_app_product = File.join(Dir.tmpdir, app_name)
|
128
|
-
|
129
|
-
FileUtils.cp_r(app_product, temp_app_product)
|
130
|
-
|
131
|
-
set_plist_values_in_app_path(temp_app_product, 'Configuration' => 'Appstore')
|
132
|
-
end
|
133
|
-
|
134
124
|
@valid_keychain_identities_cache = get_valid_keychain_identities
|
135
125
|
|
136
126
|
resign(app_product, ipa_product, watchkit_app_relative_product, watchkit_extension_relative_product, widget_relative_product,
|
137
127
|
resigned_bundle_id, resigned_watchkit_app_bundle_id, resigned_watchkit_extension_bundle_id, resigned_widget_bundle_id,
|
138
|
-
resigned_bundle_name, resigned_entitlements_path, resigned_watchkit_extension_entitlements_path, resigned_widget_entitlements_path, profile_type)
|
128
|
+
resigned_bundle_name, resigned_entitlements_path, resigned_watchkit_extension_entitlements_path, resigned_widget_entitlements_path, profile_type, is_appstore)
|
139
129
|
|
140
130
|
ipa_bundle_id = is_resigned ? resigned_bundle_id : get_bundle_id(app_product)
|
141
131
|
|
@@ -147,13 +137,11 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
147
137
|
name_for_deployment = configuration
|
148
138
|
end
|
149
139
|
|
150
|
-
system("echo \"\n
|
140
|
+
system("echo \"\n
|
151
141
|
#{ipa_product_key}='#{ipa_product}'
|
152
142
|
#{ipa_bundle_id_key}='#{ipa_bundle_id}'
|
153
143
|
#{name_for_deployment_key}='#{name_for_deployment}'
|
154
|
-
\" >>
|
155
|
-
|
156
|
-
FileUtils.rm_rf(temp_app_product) if is_appstore
|
144
|
+
\" >> #{AUTOGENERATED_LAST_BUILD_VARS}")
|
157
145
|
end
|
158
146
|
|
159
147
|
# Resigns specified .app product and packages it into .ipa file. Finds best matching provisioning profile based on specified options.
|
@@ -163,7 +151,7 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
163
151
|
def resign(app_product_path, new_ipa_path, watchkit_app_relative_product_path = nil, watchkit_extension_relative_product_path = nil,
|
164
152
|
widget_relative_product_path = nil, new_bundle_id = nil, new_watchkit_app_bundle_id = nil, new_watchkit_extension_bundle_id = nil,
|
165
153
|
new_widget_bundle_id = nil, new_bundle_name = nil, new_entitlements_path = nil, new_watchkit_extension_entitlements_path = nil,
|
166
|
-
new_widget_entitlements_path = nil, profile_type = PROFILE_TYPE_DEVELOPER)
|
154
|
+
new_widget_entitlements_path = nil, profile_type = PROFILE_TYPE_DEVELOPER, is_appstore = false)
|
167
155
|
raise "Unknown profile type '#{profile_type}'! Must be from #{AVAILABLE_PROFILE_TYPES}" unless AVAILABLE_PROFILE_TYPES.include?(profile_type)
|
168
156
|
|
169
157
|
new_bundle_id ||= get_bundle_id(app_product_path)
|
@@ -207,7 +195,7 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
207
195
|
new_bundle_id, new_watchkit_app_bundle_id, new_watchkit_extension_bundle_id, new_widget_bundle_id, new_bundle_name,
|
208
196
|
new_entitlements_path, new_watchkit_extension_entitlements_path, new_widget_entitlements_path,
|
209
197
|
profile_info.path, identity_name, watchkit_app_profile_path, watchkit_app_identity_name, watchkit_extension_profile_path, watchkit_extension_identity_name,
|
210
|
-
widget_profile_path, widget_identity_name)
|
198
|
+
widget_profile_path, widget_identity_name, is_appstore)
|
211
199
|
end
|
212
200
|
|
213
201
|
def find_profile_info_and_identity_name(profile_type, new_bundle_id)
|
@@ -224,12 +212,13 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
224
212
|
profiles_and_identities.each { |item| pp item.first.to_s, item.last }
|
225
213
|
|
226
214
|
puts "--> Looking for the best match among found profiles, based on similarity between profile's app id and desired bundle id ..."
|
227
|
-
best_match = find_best_match_for_bundle_id(profiles_and_identities, new_bundle_id)
|
228
|
-
puts_header "--> Best match: #{best_match.to_s}"
|
229
215
|
|
216
|
+
best_match = find_best_match_for_bundle_id(profiles_and_identities, new_bundle_id)
|
230
217
|
profile_info = best_match.first
|
231
218
|
identity_name = best_match.last
|
232
219
|
|
220
|
+
puts_header "--> Best match: #{profile_info.to_s}, identity_name='#{identity_name}'"
|
221
|
+
|
233
222
|
return profile_info, identity_name
|
234
223
|
end
|
235
224
|
|
@@ -256,7 +245,7 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
256
245
|
new_bundle_id, new_watchkit_app_bundle_id, new_watchkit_extension_bundle_id, new_widget_bundle_id, new_bundle_name,
|
257
246
|
new_entitlements_path, new_watchkit_extension_entitlements_path, new_widget_entitlements_path,
|
258
247
|
profile_path, identity_name, watchkit_app_profile_path, watchkit_app_identity_name, watchkit_extension_profile_path, watchkit_extension_identity_name,
|
259
|
-
widget_profile_path, widget_identity_name)
|
248
|
+
widget_profile_path, widget_identity_name, is_appstore)
|
260
249
|
Dir.mktmpdir do |tmp_dir|
|
261
250
|
dest_app_dir = File.join(tmp_dir, "Payload")
|
262
251
|
dest_app_product_path = File.join(dest_app_dir, File.basename(app_product_path))
|
@@ -267,6 +256,8 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
267
256
|
puts "--> Copy '#{app_product_path}' into '#{dest_app_product_path}' ..."
|
268
257
|
FileUtils.cp_r(app_product_path, dest_app_product_path)
|
269
258
|
|
259
|
+
set_plist_values_in_app_path(app_product_path, 'Configuration' => 'Appstore') if is_appstore
|
260
|
+
|
270
261
|
# replace provision, rename bundle_id and bundle_name
|
271
262
|
is_provision_replaced = replace_provision(dest_app_product_path, profile_path)
|
272
263
|
is_bundle_id_or_name_changed = rename_bundle_id_and_name(dest_app_product_path, new_bundle_id, new_bundle_name)
|
@@ -320,11 +311,13 @@ NAME_FOR_DEPLOYMENT='#{configuration}'
|
|
320
311
|
|
321
312
|
if Dir.exist?(new_ipa_path)
|
322
313
|
puts "--> Remove old '#{new_ipa_path}' ..."
|
323
|
-
FileUtils.
|
314
|
+
FileUtils.rm_rf(new_ipa_path)
|
324
315
|
end
|
325
316
|
|
326
317
|
puts "--> Zip '#{tmp_dir}' into '#{new_ipa_path}' ..."
|
327
318
|
Dir.chdir(tmp_dir) { system("/usr/bin/zip --symlinks --verbose --recurse-paths '#{new_ipa_path}' .") }
|
319
|
+
|
320
|
+
puts
|
328
321
|
end
|
329
322
|
end
|
330
323
|
|