sigh 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/sigh/download_all.rb +4 -4
- data/lib/sigh/local_manage.rb +23 -25
- data/lib/sigh/options.rb +1 -1
- data/lib/sigh/repair.rb +6 -6
- data/lib/sigh/resign.rb +9 -7
- data/lib/sigh/runner.rb +29 -29
- data/lib/sigh/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9589402f17e4e3c23d0511b977fa7346999dea3f
|
4
|
+
data.tar.gz: 8980cd98b9bd6e6ab7dd2dd7b73d1dc4ce292a93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0933b80dfa931ab145d08c9c42229913ccecde99acf6060a3efb458a3b3648d49feb54c74af817640c31d26d8f5fa5f08e2a53df20646801ba7f731f1537deb
|
7
|
+
data.tar.gz: 4b9e228b65c5edef013145cde661982b30229a1e860f22b72c57fb68de3836e8439c930c73a181c9fd33df42a349e05383b188dc7549f50b4f078236f5a94a81
|
data/README.md
CHANGED
@@ -250,6 +250,9 @@ If you also want to create a new App Identifier on the Apple Developer Portal, c
|
|
250
250
|
# Need help?
|
251
251
|
Please submit an issue on GitHub and provide information about your setup
|
252
252
|
|
253
|
+
# Code of Conduct
|
254
|
+
Help us keep `sigh` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/code-of-conduct).
|
255
|
+
|
253
256
|
# License
|
254
257
|
This project is licensed under the terms of the MIT license. See the LICENSE file.
|
255
258
|
|
data/lib/sigh/download_all.rb
CHANGED
@@ -2,17 +2,17 @@ module Sigh
|
|
2
2
|
class DownloadAll
|
3
3
|
# Download all valid provisioning profiles
|
4
4
|
def download_all
|
5
|
-
|
5
|
+
UI.message "Starting login with user '#{Sigh.config[:username]}'"
|
6
6
|
Spaceship.login(Sigh.config[:username], nil)
|
7
7
|
Spaceship.select_team
|
8
|
-
|
8
|
+
UI.message "Successfully logged in"
|
9
9
|
|
10
10
|
Spaceship.provisioning_profile.all.each do |profile|
|
11
11
|
if profile.valid?
|
12
|
-
|
12
|
+
UI.message "Downloading profile '#{profile.name}'..."
|
13
13
|
download_profile(profile)
|
14
14
|
else
|
15
|
-
|
15
|
+
UI.important "Skipping invalid/expired profile '#{profile.name}'"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/sigh/local_manage.rb
CHANGED
@@ -13,7 +13,7 @@ module Sigh
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.install_profile(profile)
|
16
|
-
|
16
|
+
UI.message "Installing provisioning profile..."
|
17
17
|
profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/"
|
18
18
|
profile_filename = ENV["SIGH_UDID"] + ".mobileprovision"
|
19
19
|
destination = profile_path + profile_filename
|
@@ -27,9 +27,9 @@ module Sigh
|
|
27
27
|
FileUtils.copy profile, destination
|
28
28
|
|
29
29
|
if File.exist? destination
|
30
|
-
|
30
|
+
UI.success "Profile installed at \"#{destination}\""
|
31
31
|
else
|
32
|
-
|
32
|
+
UI.user_error!("Failed installation of provisioning profile at location: #{destination}")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -40,7 +40,6 @@ module Sigh
|
|
40
40
|
return command, clean_expired, clean_pattern
|
41
41
|
end
|
42
42
|
|
43
|
-
# rubocop:disable Metrics/AbcSize
|
44
43
|
def self.list_profiles
|
45
44
|
profiles = load_profiles
|
46
45
|
|
@@ -49,62 +48,61 @@ module Sigh
|
|
49
48
|
|
50
49
|
profiles_valid = profiles.select { |profile| profile["ExpirationDate"] > now && profile["ExpirationDate"] > soon }
|
51
50
|
if profiles_valid.count > 0
|
52
|
-
|
53
|
-
|
51
|
+
UI.message "Provisioning profiles installed"
|
52
|
+
UI.message "Valid:"
|
54
53
|
profiles_valid.each do |profile|
|
55
|
-
|
54
|
+
UI.message profile["Name"].green
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
58
|
profiles_soon = profiles.select { |profile| profile["ExpirationDate"] > now && profile["ExpirationDate"] < soon }
|
60
59
|
if profiles_soon.count > 0
|
61
|
-
|
62
|
-
|
60
|
+
UI.message ""
|
61
|
+
UI.message "Expiring within 30 day:"
|
63
62
|
profiles_soon.each do |profile|
|
64
|
-
|
63
|
+
UI.message profile["Name"].yellow
|
65
64
|
end
|
66
65
|
end
|
67
66
|
|
68
67
|
profiles_expired = profiles.select { |profile| profile["ExpirationDate"] < now }
|
69
68
|
if profiles_expired.count > 0
|
70
|
-
|
71
|
-
|
69
|
+
UI.message ""
|
70
|
+
UI.message "Expired:"
|
72
71
|
profiles_expired.each do |profile|
|
73
|
-
|
72
|
+
UI.message profile["Name"].red
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
76
|
+
UI.message ""
|
77
|
+
UI.message "Summary"
|
78
|
+
UI.message "#{profiles.count} installed profiles"
|
79
|
+
UI.message "#{profiles_expired.count} are expired".red
|
80
|
+
UI.message "#{profiles_soon.count} are valid but will expire within 30 days".yellow
|
81
|
+
UI.message "#{profiles_valid.count} are valid".green
|
83
82
|
|
84
|
-
|
83
|
+
UI.message "You can remove all expired profiles using `sigh manage -e`" if profiles_expired.count > 0
|
85
84
|
end
|
86
|
-
# rubocop:enable Metrics/AbcSize
|
87
85
|
|
88
86
|
def self.cleanup_profiles(expired = false, pattern = nil)
|
89
87
|
now = DateTime.now
|
90
88
|
|
91
89
|
profiles = load_profiles.select { |profile| (expired && profile["ExpirationDate"] < now) || (!pattern.nil? && profile["Name"] =~ pattern) }
|
92
90
|
|
93
|
-
|
91
|
+
UI.message "The following provisioning profiles are either expired or matches your pattern:"
|
94
92
|
profiles.each do |profile|
|
95
|
-
|
93
|
+
UI.message profile["Name"].red
|
96
94
|
end
|
97
95
|
|
98
96
|
if agree("Delete these provisioning profiles #{profiles.length}? (y/n) ", true)
|
99
97
|
profiles.each do |profile|
|
100
98
|
File.delete profile["Path"]
|
101
99
|
end
|
102
|
-
|
100
|
+
UI.success "\n\nDeleted #{profiles.length} profiles"
|
103
101
|
end
|
104
102
|
end
|
105
103
|
|
106
104
|
def self.load_profiles
|
107
|
-
|
105
|
+
UI.message "Loading Provisioning profiles from ~/Library/MobileDevice/Provisioning Profiles/"
|
108
106
|
profiles_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/*.mobileprovision"
|
109
107
|
profile_paths = Dir[profiles_path]
|
110
108
|
|
data/lib/sigh/options.rb
CHANGED
@@ -88,7 +88,7 @@ module Sigh
|
|
88
88
|
optional: true,
|
89
89
|
description: "Filename to use for the generated provisioning profile (must include .mobileprovision)",
|
90
90
|
verify_block: proc do |value|
|
91
|
-
|
91
|
+
UI.user_error!("The output name must end with .mobileprovision") unless value.end_with?(".mobileprovision")
|
92
92
|
end),
|
93
93
|
FastlaneCore::ConfigItem.new(key: :skip_fetch_profiles,
|
94
94
|
env_name: "SIGH_SKIP_FETCH_PROFILES",
|
data/lib/sigh/repair.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Sigh
|
2
2
|
class Repair
|
3
3
|
def repair_all
|
4
|
-
|
4
|
+
UI.message "Starting login with user '#{Sigh.config[:username]}'"
|
5
5
|
Spaceship.login(Sigh.config[:username], nil)
|
6
6
|
Spaceship.select_team
|
7
|
-
|
7
|
+
UI.message "Successfully logged in"
|
8
8
|
|
9
9
|
# Select all 'Invalid' or 'Expired' provisioning profiles
|
10
10
|
broken_profiles = Spaceship.provisioning_profile.all.find_all do |profile|
|
@@ -12,19 +12,19 @@ module Sigh
|
|
12
12
|
end
|
13
13
|
|
14
14
|
if broken_profiles.count == 0
|
15
|
-
|
15
|
+
UI.success "All provisioning profiles are valid, nothing to do"
|
16
16
|
return
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
UI.success "Going to repair #{broken_profiles.count} provisioning profiles"
|
20
20
|
|
21
21
|
# Iterate over all broken profiles and repair them
|
22
22
|
broken_profiles.each do |profile|
|
23
|
-
|
23
|
+
UI.message "Repairing profile '#{profile.name}'..."
|
24
24
|
profile.repair! # yes, that's all you need to repair a profile
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
UI.success "Successfully repaired #{broken_profiles.count} provisioning profiles"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/sigh/resign.rb
CHANGED
@@ -41,10 +41,10 @@ module Sigh
|
|
41
41
|
puts `#{command}`
|
42
42
|
|
43
43
|
if $?.to_i == 0
|
44
|
-
|
44
|
+
UI.success "Successfully signed #{ipa}!"
|
45
45
|
true
|
46
46
|
else
|
47
|
-
|
47
|
+
UI.error "Something went wrong while code signing #{ipa}"
|
48
48
|
false
|
49
49
|
end
|
50
50
|
end
|
@@ -76,7 +76,7 @@ module Sigh
|
|
76
76
|
|
77
77
|
def find_signing_identity(signing_identity)
|
78
78
|
until installed_identies.include?(signing_identity)
|
79
|
-
|
79
|
+
UI.error "Couldn't find signing identity '#{signing_identity}'."
|
80
80
|
signing_identity = ask_for_signing_identity
|
81
81
|
end
|
82
82
|
|
@@ -90,19 +90,21 @@ module Sigh
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def validate_resign_path(resign_path)
|
93
|
-
|
93
|
+
UI.user_error!('Could not find resign.sh file. Please try re-installing the gem') unless File.exist?(resign_path)
|
94
94
|
end
|
95
95
|
|
96
96
|
def validate_ipa_file(ipa)
|
97
|
-
|
97
|
+
UI.user_error!("ipa file could not be found or is not an ipa file (#{ipa})") unless File.exist?(ipa) && ipa.end_with?('.ipa')
|
98
98
|
end
|
99
99
|
|
100
100
|
def validate_provisioning_file(provisioning_profile)
|
101
|
-
|
101
|
+
unless File.exist?(provisioning_profile) && provisioning_profile.end_with?('.mobileprovision')
|
102
|
+
UI.user_error!("Provisioning profile file could not be found or is not a .mobileprovision file (#{provisioning_profile})")
|
103
|
+
end
|
102
104
|
end
|
103
105
|
|
104
106
|
def print_available_identities
|
105
|
-
|
107
|
+
UI.message "Available identities: \n\t#{installed_identies.join("\n\t")}\n"
|
106
108
|
end
|
107
109
|
|
108
110
|
def ask_for_signing_identity
|
data/lib/sigh/runner.rb
CHANGED
@@ -11,35 +11,35 @@ module Sigh
|
|
11
11
|
hide_keys: [:output_path],
|
12
12
|
title: "Summary for sigh #{Sigh::VERSION}")
|
13
13
|
|
14
|
-
|
14
|
+
UI.message "Starting login with user '#{Sigh.config[:username]}'"
|
15
15
|
Spaceship.login(Sigh.config[:username], nil)
|
16
16
|
Spaceship.select_team
|
17
|
-
|
17
|
+
UI.message "Successfully logged in"
|
18
18
|
|
19
19
|
profiles = [] if Sigh.config[:skip_fetch_profiles]
|
20
20
|
profiles ||= fetch_profiles # download the profile if it's there
|
21
21
|
|
22
22
|
if profiles.count > 0
|
23
|
-
|
23
|
+
UI.success "Found #{profiles.count} matching profile(s)"
|
24
24
|
profile = profiles.first
|
25
25
|
|
26
26
|
if Sigh.config[:force]
|
27
27
|
if profile_type == Spaceship.provisioning_profile::AppStore or profile_type == Spaceship.provisioning_profile::InHouse
|
28
|
-
|
28
|
+
UI.important "Updating the provisioning profile"
|
29
29
|
else
|
30
|
-
|
30
|
+
UI.important "Updating the profile to include all devices"
|
31
31
|
profile.devices = Spaceship.device.all_for_profile_type(profile.type)
|
32
32
|
end
|
33
33
|
|
34
34
|
profile = profile.update! # assign it, as it's a new profile
|
35
35
|
end
|
36
36
|
else
|
37
|
-
|
37
|
+
UI.important "No existing profiles found, that match the certificates you have installed, creating a new one for you"
|
38
38
|
ensure_app_exists!
|
39
39
|
profile = create_profile!
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
UI.user_error!("Something went wrong fetching the latest profile") unless profile
|
43
43
|
|
44
44
|
if profile_type == Spaceship.provisioning_profile.in_house
|
45
45
|
ENV["SIGH_PROFILE_ENTERPRISE"] = "1"
|
@@ -64,7 +64,7 @@ module Sigh
|
|
64
64
|
|
65
65
|
# Fetches a profile matching the user's search requirements
|
66
66
|
def fetch_profiles
|
67
|
-
|
67
|
+
UI.message "Fetching profiles..."
|
68
68
|
results = profile_type.find_by_bundle_id(Sigh.config[:app_identifier]).find_all(&:valid?)
|
69
69
|
|
70
70
|
# Take the provisioning profile name into account
|
@@ -100,12 +100,12 @@ module Sigh
|
|
100
100
|
|
101
101
|
unless Sigh.config[:skip_fetch_profiles]
|
102
102
|
if Spaceship.provisioning_profile.all.find { |p| p.name == name }
|
103
|
-
|
103
|
+
UI.error "The name '#{name}' is already taken, using another one."
|
104
104
|
name += " #{Time.now.to_i}"
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
|
108
|
+
UI.important "Creating new provisioning profile for '#{Sigh.config[:app_identifier]}' with name '#{name}'"
|
109
109
|
profile = profile_type.create!(name: name,
|
110
110
|
bundle_id: bundle_id,
|
111
111
|
certificate: cert)
|
@@ -137,11 +137,11 @@ module Sigh
|
|
137
137
|
end
|
138
138
|
|
139
139
|
if certificates.count > 1 and !Sigh.config[:development]
|
140
|
-
|
141
|
-
|
140
|
+
UI.important "Found more than one code signing identity. Choosing the first one. Check out `sigh --help` to see all available options."
|
141
|
+
UI.important "Available Code Signing Identities for current filters:"
|
142
142
|
certificates.each do |c|
|
143
143
|
str = ["\t- Name:", c.owner_name, "- ID:", c.id + "- Expires", c.expires.strftime("%d/%m/%Y")].join(" ")
|
144
|
-
|
144
|
+
UI.message str.green
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -149,8 +149,8 @@ module Sigh
|
|
149
149
|
filters = ""
|
150
150
|
filters << "Owner Name: '#{Sigh.config[:cert_owner_name]}' " if Sigh.config[:cert_owner_name]
|
151
151
|
filters << "Certificate ID: '#{Sigh.config[:cert_id]}' " if Sigh.config[:cert_id]
|
152
|
-
|
153
|
-
|
152
|
+
UI.important "No certificates for filter: #{filters}" if filters.length > 0
|
153
|
+
UI.user_error!("Could not find a matching code signing identity for #{profile_type}. You can use cert to generate one (https://github.com/fastlane/cert)")
|
154
154
|
end
|
155
155
|
|
156
156
|
return certificates if Sigh.config[:development] # development profiles support multiple certificates
|
@@ -160,7 +160,7 @@ module Sigh
|
|
160
160
|
|
161
161
|
# Downloads and stores the provisioning profile
|
162
162
|
def download_profile(profile)
|
163
|
-
|
163
|
+
UI.important "Downloading provisioning profile..."
|
164
164
|
profile_name ||= "#{profile.class.pretty_type}_#{Sigh.config[:app_identifier]}.mobileprovision" # default name
|
165
165
|
profile_name += '.mobileprovision' unless profile_name.include? 'mobileprovision'
|
166
166
|
|
@@ -170,7 +170,7 @@ module Sigh
|
|
170
170
|
f.write(profile.download)
|
171
171
|
end
|
172
172
|
|
173
|
-
|
173
|
+
UI.success "Successfully downloaded provisioning profile..."
|
174
174
|
return output_path
|
175
175
|
end
|
176
176
|
|
@@ -178,21 +178,21 @@ module Sigh
|
|
178
178
|
def ensure_app_exists!
|
179
179
|
return if Spaceship::App.find(Sigh.config[:app_identifier])
|
180
180
|
print_produce_command(Sigh.config)
|
181
|
-
|
181
|
+
UI.user_error!("Could not find App with App Identifier '#{Sigh.config[:app_identifier]}'")
|
182
182
|
end
|
183
183
|
|
184
184
|
def print_produce_command(config)
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
185
|
+
UI.message ""
|
186
|
+
UI.message "==========================================".yellow
|
187
|
+
UI.message "Could not find App ID with bundle identifier '#{config[:app_identifier]}'"
|
188
|
+
UI.message "You can easily generate a new App ID on the Developer Portal using 'produce':"
|
189
|
+
UI.message ""
|
190
|
+
UI.message "produce -u #{config[:username]} -a #{config[:app_identifier]} --skip_itc".yellow
|
191
|
+
UI.message ""
|
192
|
+
UI.message "You will be asked for any missing information, like the full name of your app"
|
193
|
+
UI.message "If the app should also be created on iTunes Connect, remove the " + "--skip_itc".yellow + " from the command above"
|
194
|
+
UI.message "==========================================".yellow
|
195
|
+
UI.message ""
|
196
196
|
end
|
197
197
|
end
|
198
198
|
end
|
data/lib/sigh/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sigh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.36.1
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.0.0
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.36.1
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.0
|