sigh 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|