produce 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +92 -16
- data/bin/produce +84 -0
- data/lib/produce/group.rb +95 -0
- data/lib/produce/options.rb +3 -4
- data/lib/produce/service.rb +186 -0
- data/lib/produce/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93cc031b37e351db3b6af36a95dc165bf9c57a4a
|
4
|
+
data.tar.gz: 10bf2aad9349613fa910b4e74253c2d47ac1175e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ab86cf7c202be714a6ff6ea56e6a0f90d8f0a10f9a116686807492560e9099e39a6385146602754d89b813ef3e2ef372a3c75f9a419de70d91ec06b65c5cdd6
|
7
|
+
data.tar.gz: 99cfc5623466c9135586bccc0917ae1a57aa60ba8fe31db4daca1723e4107251be799fd94993280f8253f795e5e07dd798c0a7ae8db54bd9e1105822f1e97a01
|
data/README.md
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
</a>
|
7
7
|
</h3>
|
8
8
|
<p align="center">
|
9
|
-
<a href="https://github.com/KrauseFx/deliver">deliver</a> •
|
10
|
-
<a href="https://github.com/KrauseFx/snapshot">snapshot</a> •
|
11
|
-
<a href="https://github.com/KrauseFx/frameit">frameit</a> •
|
12
|
-
<a href="https://github.com/KrauseFx/PEM">PEM</a> •
|
13
|
-
<a href="https://github.com/KrauseFx/sigh">sigh</a> •
|
14
|
-
<b>produce</b> •
|
9
|
+
<a href="https://github.com/KrauseFx/deliver">deliver</a> •
|
10
|
+
<a href="https://github.com/KrauseFx/snapshot">snapshot</a> •
|
11
|
+
<a href="https://github.com/KrauseFx/frameit">frameit</a> •
|
12
|
+
<a href="https://github.com/KrauseFx/PEM">PEM</a> •
|
13
|
+
<a href="https://github.com/KrauseFx/sigh">sigh</a> •
|
14
|
+
<b>produce</b> •
|
15
15
|
<a href="https://github.com/KrauseFx/cert">cert</a> •
|
16
16
|
<a href="https://github.com/KrauseFx/codes">codes</a> •
|
17
17
|
<a href="https://github.com/fastlane/spaceship">spaceship</a> •
|
@@ -41,11 +41,11 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
|
|
41
41
|
|
42
42
|
-------
|
43
43
|
<p align="center">
|
44
|
-
<a href="#features">Features</a> •
|
45
|
-
<a href="#installation">Installation</a> •
|
46
|
-
<a href="#usage">Usage</a> •
|
47
|
-
<a href="#how-does-it-work">How does it work?</a> •
|
48
|
-
<a href="#tips">Tips</a> •
|
44
|
+
<a href="#features">Features</a> •
|
45
|
+
<a href="#installation">Installation</a> •
|
46
|
+
<a href="#usage">Usage</a> •
|
47
|
+
<a href="#how-does-it-work">How does it work?</a> •
|
48
|
+
<a href="#tips">Tips</a> •
|
49
49
|
<a href="#need-help">Need help?</a>
|
50
50
|
</p>
|
51
51
|
|
@@ -57,6 +57,9 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
|
|
57
57
|
# Features
|
58
58
|
|
59
59
|
- **Create** new apps on both iTunes Connect and the Apple Developer Portal
|
60
|
+
- **Modify** Application Services on the Apple Developer Portal
|
61
|
+
- **Create** App Groups on the Apple Developer Portal
|
62
|
+
- **Associate** apps with App Groups on the Apple Developer Portal
|
60
63
|
- Support for **multiple Apple accounts**, storing your credentials securely in the Keychain
|
61
64
|
|
62
65
|
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
@@ -66,14 +69,51 @@ Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/Kr
|
|
66
69
|
|
67
70
|
# Usage
|
68
71
|
|
72
|
+
## Creating a new application
|
73
|
+
|
69
74
|
produce
|
70
|
-
|
71
|
-
# Parameters
|
72
75
|
|
73
|
-
|
76
|
+
To get a list of all available parameters:
|
74
77
|
|
75
78
|
produce --help
|
76
79
|
|
80
|
+
```
|
81
|
+
-u, --username STRING Your Apple ID Username (PRODUCE_USERNAME)
|
82
|
+
-a, --app_identifier STRING App Identifier (Bundle ID, e.g. com.krausefx.app) (PRODUCE_APP_IDENTIFIER)
|
83
|
+
-b, --bundle_identifier_suffix STRING App Identifier Suffix (Ignored if App Identifier does not ends with .*)
|
84
|
+
(PRODUCE_APP_IDENTIFIER_SUFFIX)
|
85
|
+
-q, --app_name STRING App Name (PRODUCE_APP_NAME)
|
86
|
+
-z, --app_version STRING Initial version number (e.g. '1.0') (PRODUCE_VERSION)
|
87
|
+
-s, --sku SKU Number (e.g. '1234') (PRODUCE_SKU)
|
88
|
+
-m, --language STRING Primary Language (e.g. 'English', 'German') (PRODUCE_LANGUAGE)
|
89
|
+
-c, --company_name STRING The name of your comapny. Only required if it's the first app you create
|
90
|
+
(PRODUCE_COMPANY_NAME)
|
91
|
+
-i, --skip_itc Skip the creation of the app on iTunes Connect (PRODUCE_SKIP_ITC)
|
92
|
+
-d, --skip_devcenter Skip the creation of the app on the Apple Developer Portal (PRODUCE_SKIP_DEVCENTER)
|
93
|
+
-t, --team_id STRING The ID of your team if you're in multiple teams (PRODUCE_TEAM_ID)
|
94
|
+
-l, --team_name STRING The name of your team if you're in multiple teams (PRODUCE_TEAM_NAME)
|
95
|
+
```
|
96
|
+
|
97
|
+
## Enabling / Disabling Application Services
|
98
|
+
|
99
|
+
If you want to enable Application Services for an App ID (HomeKit and HealthKit in this example):
|
100
|
+
|
101
|
+
produce enable_services --homekit --healthkit
|
102
|
+
|
103
|
+
If you want to disable Application Servies for an App ID (iCloud in this case):
|
104
|
+
|
105
|
+
produce disable_services --icloud
|
106
|
+
|
107
|
+
If you want to create a new App Group:
|
108
|
+
|
109
|
+
produce group -g group.krausefx -n "Example App Group"
|
110
|
+
|
111
|
+
If you want to associate an app with an App Group:
|
112
|
+
|
113
|
+
produce associate_group -a com.krausefx.app group.krausefx
|
114
|
+
|
115
|
+
# Parameters
|
116
|
+
|
77
117
|
```
|
78
118
|
-u, --username STRING Your Apple ID Username (PRODUCE_USERNAME)
|
79
119
|
-a, --app_identifier STRING App Identifier (Bundle ID, e.g. com.krausefx.app) (PRODUCE_APP_IDENTIFIER)
|
@@ -90,19 +130,55 @@ Get the latest list of all available parameters;
|
|
90
130
|
-v, --version Display version information
|
91
131
|
```
|
92
132
|
|
133
|
+
Get a list of all available options using
|
134
|
+
|
135
|
+
produce enable_services --help
|
136
|
+
|
137
|
+
```
|
138
|
+
--app-group Enable App Groups
|
139
|
+
--associated-domains Enable Associated Domains
|
140
|
+
--data-protection STRING Enable Data Protection, suitable values are "complete", "unlessopen" and "untilfirstauth"
|
141
|
+
--healthkit Enable HealthKit
|
142
|
+
--homekit Enable HomeKit
|
143
|
+
--wireless-conf Enable Wireless Accessory Configuration
|
144
|
+
--icloud STRING Enable iCloud, suitable values are "legacy" and "cloudkit"
|
145
|
+
--inter-app-audio Enable Inter-App-Audio
|
146
|
+
--passbook Enable Passbook
|
147
|
+
--push-notification Enable Push notification (only enables the service, does not configure certificates)
|
148
|
+
--vpn-conf Enable VPN Configuration
|
149
|
+
```
|
150
|
+
|
151
|
+
produce disable_services --help
|
152
|
+
|
153
|
+
```
|
154
|
+
--app-group Disable App Groups
|
155
|
+
--associated-domains Disable Associated Domains
|
156
|
+
--data-protection Disable Data Protection
|
157
|
+
--healthkit Disable HealthKit
|
158
|
+
--homekit Disable HomeKit
|
159
|
+
--wireless-conf Disable Wireless Accessory Configuration
|
160
|
+
--icloud Disable iCloud
|
161
|
+
--inter-app-audio Disable Inter-App-Audio
|
162
|
+
--passbook Disable Passbook
|
163
|
+
--push-notification Disable Push notifications
|
164
|
+
--vpn-conf Disable VPN Configuration
|
165
|
+
```
|
166
|
+
|
93
167
|
## Environment Variables
|
94
168
|
In case you want to pass more information to `produce` using environment variables:
|
95
169
|
|
96
170
|
- `PRODUCE_USERNAME` (your iTunes Connect username)
|
97
171
|
- `PRODUCE_APP_IDENTIFIER` (the bundle identifier of the new app)
|
98
172
|
- `PRODUCE_APP_NAME` (the name of the new app)
|
173
|
+
- `PRODUCE_GROUP_IDENTIFIER` (the group identifier of the new app group)
|
174
|
+
- `PRODUCE_GROUP_NAME` (the name of the new app group)
|
99
175
|
- `PRODUCE_LANGUAGE` (the language you want your app to use, e.g. `English`, `German`)
|
100
176
|
- `PRODUCE_VERSION` (the initial app version)
|
101
177
|
- `PRODUCE_SKU` (the SKU you want to use, which must be a unique number)
|
102
178
|
- `PRODUCE_SKIP_ITC` (should iTunes Connect app be created)
|
103
179
|
- `PRODUCE_SKIP_DEVCENTER` (should Apple Developer Portal app be created)
|
104
180
|
- `PRODUCE_TEAM_ID` (the Team ID, e.g. `Q2CBPK58CA`)
|
105
|
-
- `PRODUCE_TEAM_NAME` (the Team Name, e.g. `Felix Krause`)
|
181
|
+
- `PRODUCE_TEAM_NAME` (the Team Name, e.g. `Felix Krause`)
|
106
182
|
|
107
183
|
|
108
184
|
## [`fastlane`](https://github.com/KrauseFx/fastlane) Integration
|
@@ -150,7 +226,7 @@ You'll still have to fill out the remaining information (like screenshots, app d
|
|
150
226
|
- [`codes`](https://github.com/KrauseFx/codes): Create promo codes for iOS Apps using the command line
|
151
227
|
- [`spaceship`](https://github.com/fastlane/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
|
152
228
|
- [`pilot`](https://github.com/fastlane/pilot): The best way to manage your TestFlight testers and builds from your terminal
|
153
|
-
- [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
|
229
|
+
- [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
|
154
230
|
|
155
231
|
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
156
232
|
|
data/bin/produce
CHANGED
@@ -35,6 +35,90 @@ class ProduceApplication
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
command :enable_services do |c|
|
39
|
+
c.syntax = 'produce enable_services -a APP_IDENTIFIER SERVICE1, SERVICE2, ...'
|
40
|
+
c.description = 'Enable specific Application Services for a specific app on the Apple Developer Portal'
|
41
|
+
c.example 'Enable HealthKit, HomeKit and Passbook', 'produce enable_services -a com.example.app --healthkit --homekit --passbook'
|
42
|
+
|
43
|
+
c.option '--app-group', 'Enable App Groups'
|
44
|
+
c.option '--associated-domains', 'Enable Associated Domains'
|
45
|
+
c.option '--data-protection STRING', String, 'Enable Data Protection, suitable values are "complete", "unlessopen" and "untilfirstauth"'
|
46
|
+
c.option '--healthkit', 'Enable HealthKit'
|
47
|
+
c.option '--homekit', 'Enable HomeKit'
|
48
|
+
c.option '--wireless-conf', 'Enable Wireless Accessory Configuration'
|
49
|
+
c.option '--icloud STRING', String, 'Enable iCloud, suitable values are "legacy" and "cloudkit"'
|
50
|
+
c.option '--inter-app-audio', 'Enable Inter-App-Audio'
|
51
|
+
c.option '--passbook', 'Enable Passbook'
|
52
|
+
c.option '--push-notification', 'Enable Push notification (only enables the service, does not configure certificates)'
|
53
|
+
c.option '--vpn-conf', 'Enable VPN Configuration'
|
54
|
+
|
55
|
+
c.action do |args, options|
|
56
|
+
# Filter the options so that we can still build the configuration
|
57
|
+
allowed_keys = Produce::Options.available_options.collect { |config| config.key }
|
58
|
+
Produce.config = FastlaneCore::Configuration.create(Produce::Options.available_options, options.__hash__.select { |key, value| allowed_keys.include? key })
|
59
|
+
|
60
|
+
require 'produce/service'
|
61
|
+
Produce::Service.enable(options, args)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
command :disable_services do |c|
|
66
|
+
c.syntax = 'produce disable_services -a APP_IDENTIFIER SERVICE1, SERVICE2, ...'
|
67
|
+
c.description = 'Disable specific Application Services for a specific app on the Apple Developer Portal'
|
68
|
+
c.example 'Disable HealthKit', 'produce disable_services -a com.example.app --healthkit'
|
69
|
+
|
70
|
+
c.option '--app-group', 'Disable App Groups'
|
71
|
+
c.option '--associated-domains', 'Disable Associated Domains'
|
72
|
+
c.option '--data-protection', 'Disable Data Protection'
|
73
|
+
c.option '--healthkit', 'Disable HealthKit'
|
74
|
+
c.option '--homekit', 'Disable HomeKit'
|
75
|
+
c.option '--wireless-conf', 'Disable Wireless Accessory Configuration'
|
76
|
+
c.option '--icloud', 'Disable iCloud'
|
77
|
+
c.option '--inter-app-audio', 'Disable Inter-App-Audio'
|
78
|
+
c.option '--passbook', 'Disable Passbook'
|
79
|
+
c.option '--push-notification', 'Disable Push notifications'
|
80
|
+
c.option '--vpn-conf', 'Disable VPN Configuration'
|
81
|
+
|
82
|
+
c.action do |args, options|
|
83
|
+
# Filter the options so that we can still build the configuration
|
84
|
+
allowed_keys = Produce::Options.available_options.collect { |config| config.key }
|
85
|
+
Produce.config = FastlaneCore::Configuration.create(Produce::Options.available_options, options.__hash__.select { |key, value| allowed_keys.include? key })
|
86
|
+
|
87
|
+
require 'produce/service'
|
88
|
+
Produce::Service.disable(options, args)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
command :group do |c|
|
93
|
+
c.syntax = 'produce group'
|
94
|
+
c.description = 'Ensure that a specific App Group exists'
|
95
|
+
c.example 'Create group', 'produce group -g group.example.app -n "Example App Group"'
|
96
|
+
|
97
|
+
c.option '-n', '--group_name STRING', String, 'Name for the group that is created (PRODUCE_GROUP_NAME)'
|
98
|
+
c.option '-g', '--group_identifier STRING', String, 'Group identifier for the group (PRODUCE_GROUP_IDENTIFIER)'
|
99
|
+
|
100
|
+
c.action do |args, options|
|
101
|
+
allowed_keys = Produce::Options.available_options.collect { |config| config.key }
|
102
|
+
Produce.config = FastlaneCore::Configuration.create(Produce::Options.available_options, options.__hash__.select { |key, value| allowed_keys.include? key })
|
103
|
+
|
104
|
+
require 'produce/group'
|
105
|
+
Produce::Group.new.create(options, args)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
command :associate_group do |c|
|
110
|
+
c.syntax = 'produce associate_group -a APP_IDENTIFIER GROUP_IDENTIFIER1, GROUP_IDENTIFIER2, ...'
|
111
|
+
c.description = 'Associate with a group, which is create if needed or simply located otherwise'
|
112
|
+
c.example 'Associate with group', 'produce associate-group -a com.example.app group.example.com'
|
113
|
+
|
114
|
+
c.action do |args, options|
|
115
|
+
Produce.config = FastlaneCore::Configuration.create(Produce::Options.available_options, options.__hash__)
|
116
|
+
|
117
|
+
require 'produce/group'
|
118
|
+
Produce::Group.new.associate(options, args)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
38
122
|
default_command :create
|
39
123
|
|
40
124
|
run!
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spaceship'
|
2
|
+
require 'babosa'
|
3
|
+
|
4
|
+
module Produce
|
5
|
+
class Group
|
6
|
+
def create(options, args)
|
7
|
+
login
|
8
|
+
|
9
|
+
ENV["CREATED_NEW_GROUP_ID"] = Time.now.to_i.to_s
|
10
|
+
|
11
|
+
group_identifier = options.group_identifier || ask("Group identifier: ")
|
12
|
+
|
13
|
+
if app_group_exists? group_identifier
|
14
|
+
Helper.log.info "[DevCenter] Group '#{options.group_name} (#{options.group_identifier})' already exists, nothing to do on the Dev Center".green
|
15
|
+
ENV["CREATED_NEW_GROUP_ID"] = nil
|
16
|
+
# Nothing to do here
|
17
|
+
else
|
18
|
+
unless options.group_name
|
19
|
+
group_name = group_identifier.split(".").map(&:capitalize).reverse.join(' ')
|
20
|
+
group_name = valid_name_for(group_name)
|
21
|
+
else
|
22
|
+
group_name = valid_name_for(options.group_name)
|
23
|
+
end
|
24
|
+
|
25
|
+
Helper.log.info "Creating new app group '#{group_name}' with identifier '#{group_identifier}' on the Apple Dev Center".green
|
26
|
+
|
27
|
+
group = Spaceship.app_group.create!(group_id: group_identifier,
|
28
|
+
name: group_name)
|
29
|
+
|
30
|
+
Helper.log.info "Created group #{group.app_group_id}"
|
31
|
+
|
32
|
+
raise "Something went wrong when creating the new app group - it's not listed in the app groups list" unless app_group_exists? group_identifier
|
33
|
+
|
34
|
+
ENV["CREATED_NEW_GROUP_ID"] = Time.now.to_i.to_s
|
35
|
+
|
36
|
+
Helper.log.info "Finished creating new app group '#{group_name}' on the Dev Center".green
|
37
|
+
end
|
38
|
+
|
39
|
+
return true
|
40
|
+
end
|
41
|
+
|
42
|
+
def associate(options, args)
|
43
|
+
login
|
44
|
+
|
45
|
+
if !app_exists?
|
46
|
+
Helper.log.info "[DevCenter] App '#{Produce.config[:app_identifier]}' does not exist, nothing to associate with the groups".red
|
47
|
+
else
|
48
|
+
app = Spaceship.app.find(app_identifier)
|
49
|
+
raise "Something went wrong when fetching the app - it's not listed in the apps list" unless app != nil
|
50
|
+
|
51
|
+
new_groups = Array.new
|
52
|
+
|
53
|
+
Helper.log.info "Validating groups before association"
|
54
|
+
|
55
|
+
for group_identifier in args
|
56
|
+
if !app_group_exists? group_identifier
|
57
|
+
Helper.log.info "[DevCenter] App group '#{group_identifier}' does not exist, please create it first, skipping for now".red
|
58
|
+
else
|
59
|
+
new_groups.push(Spaceship.app_group.find(group_identifier))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Helper.log.info "Finalising association with #{new_groups.count} groups"
|
64
|
+
app.associate_groups(new_groups)
|
65
|
+
Helper.log.info "Done!".green
|
66
|
+
end
|
67
|
+
|
68
|
+
return true
|
69
|
+
end
|
70
|
+
|
71
|
+
def login
|
72
|
+
Helper.log.info "Starting login"
|
73
|
+
Spaceship.login(Produce.config[:username], nil)
|
74
|
+
Spaceship.select_team
|
75
|
+
Helper.log.info "Successfully logged in"
|
76
|
+
end
|
77
|
+
|
78
|
+
def app_identifier
|
79
|
+
Produce.config[:app_identifier].to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
def app_group_exists? (identifier)
|
83
|
+
Spaceship.app_group.find(identifier) != nil
|
84
|
+
end
|
85
|
+
|
86
|
+
def app_exists?
|
87
|
+
Spaceship.app.find(app_identifier) != nil
|
88
|
+
end
|
89
|
+
|
90
|
+
def valid_name_for(input)
|
91
|
+
latinazed = input.to_slug.transliterate.to_s # remove accents
|
92
|
+
latinazed.gsub(/[^0-9A-Za-z\d\s]/, '') # remove non-valid characters
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/produce/options.rb
CHANGED
@@ -39,7 +39,7 @@ module Produce
|
|
39
39
|
description: "Primary Language (e.g. 'English', 'German')",
|
40
40
|
default_value: "English",
|
41
41
|
verify_block: Proc.new do |language|
|
42
|
-
|
42
|
+
|
43
43
|
end),
|
44
44
|
FastlaneCore::ConfigItem.new(key: :company_name,
|
45
45
|
short_option: "-c",
|
@@ -47,7 +47,7 @@ module Produce
|
|
47
47
|
description: "The name of your comapny. Only required if it's the first app you create",
|
48
48
|
optional: true,
|
49
49
|
verify_block: Proc.new do |language|
|
50
|
-
|
50
|
+
|
51
51
|
end),
|
52
52
|
FastlaneCore::ConfigItem.new(key: :skip_itc,
|
53
53
|
short_option: "-i",
|
@@ -78,8 +78,7 @@ module Produce
|
|
78
78
|
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:team_name),
|
79
79
|
verify_block: Proc.new do |value|
|
80
80
|
ENV["FASTLANE_TEAM_NAME"] = value
|
81
|
-
end)
|
82
|
-
|
81
|
+
end)
|
83
82
|
]
|
84
83
|
end
|
85
84
|
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
module Produce
|
2
|
+
class Service
|
3
|
+
def self.enable(options, args)
|
4
|
+
self.new.enable(options, args)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.disable(options, args)
|
8
|
+
self.new.disable(options, args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def enable(options, args)
|
12
|
+
unless app
|
13
|
+
Helper.log.info "[DevCenter] App '#{Produce.config[:app_identifier]}' does not exist".red
|
14
|
+
return
|
15
|
+
end
|
16
|
+
|
17
|
+
Helper.log.info "[DevCenter] App found '#{app.name}'".green
|
18
|
+
Helper.log.info "Enabling services"
|
19
|
+
enabled = update(true, app, options)
|
20
|
+
Helper.log.info "Done! Enabled #{enabled} services.".green
|
21
|
+
end
|
22
|
+
|
23
|
+
def disable(options, args)
|
24
|
+
unless app
|
25
|
+
Helper.log.info "[DevCenter] App '#{Produce.config[:app_identifier]}' does not exist".red
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
29
|
+
Helper.log.info "[DevCenter] App found '#{app.name}'".green
|
30
|
+
Helper.log.info "Disabling services"
|
31
|
+
disabled = update(false, app, options)
|
32
|
+
Helper.log.info "Done! Disabled #{disabled} services.".green
|
33
|
+
end
|
34
|
+
|
35
|
+
def valid_services_for(options)
|
36
|
+
allowed_keys = [:app_group, :associated_domains, :data_protection, :healthkit, :homekit,
|
37
|
+
:wireless_conf, :icloud, :inter_app_audio, :passbook, :push_notification, :vpn_conf]
|
38
|
+
options.__hash__.select { |key, value| allowed_keys.include? key }
|
39
|
+
end
|
40
|
+
|
41
|
+
def update(on, app, options)
|
42
|
+
updated = valid_services_for(options).count
|
43
|
+
|
44
|
+
if options.app_group
|
45
|
+
Helper.log.info "\tApp Groups"
|
46
|
+
|
47
|
+
if on
|
48
|
+
app.update_service(Spaceship.app_service.app_group.on)
|
49
|
+
else
|
50
|
+
app.update_service(Spaceship.app_service.app_group.off)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
if options.associated_domains
|
55
|
+
Helper.log.info "\tAssociated Domains"
|
56
|
+
|
57
|
+
if on
|
58
|
+
app.update_service(Spaceship.app_service.associated_domains.on)
|
59
|
+
else
|
60
|
+
app.update_service(Spaceship.app_service.associated_domains.off)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if options.data_protection
|
65
|
+
Helper.log.info "\tData Protection"
|
66
|
+
|
67
|
+
if on
|
68
|
+
case options.data_protection
|
69
|
+
when "complete"
|
70
|
+
app.update_service(Spaceship.app_service.data_protection.complete)
|
71
|
+
when "unlessopen"
|
72
|
+
app.update_service(Spaceship.app_service.data_proection.unless_open)
|
73
|
+
when "untilfirstauth"
|
74
|
+
app.update_service(Spaceship.app_service.data_protection.until_first_auth)
|
75
|
+
else
|
76
|
+
raise "Unknown service '#{options.data_protection}'. Valid values: 'complete', 'unlessopen', 'untilfirstauth'".red
|
77
|
+
end
|
78
|
+
else
|
79
|
+
app.update_service(Spaceship.app_service.data_protection.off)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
if options.healthkit
|
84
|
+
Helper.log.info "\tHealthKit"
|
85
|
+
|
86
|
+
if on
|
87
|
+
app.update_service(Spaceship.app_service.health_kit.on)
|
88
|
+
else
|
89
|
+
app.update_service(Spaceship.app_service.health_kit.off)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
if options.homekit
|
94
|
+
Helper.log.info "\tHomeKit"
|
95
|
+
|
96
|
+
if on
|
97
|
+
app.update_service(Spaceship.app_service.home_kit.on)
|
98
|
+
else
|
99
|
+
app.update_service(Spaceship.app_service.home_kit.off)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
if options.wireless_conf
|
104
|
+
Helper.log.info "\tWireless Accessory Configuration"
|
105
|
+
|
106
|
+
if on
|
107
|
+
app.update_service(Spaceship.app_service.wireless_accessory.on)
|
108
|
+
else
|
109
|
+
app.update_service(Spaceship.app_service.wireless_accessory.off)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
if options.icloud
|
114
|
+
Helper.log.info "\tiCloud"
|
115
|
+
|
116
|
+
if on
|
117
|
+
case options.icloud
|
118
|
+
when "legacy"
|
119
|
+
app.update_service(Spaceship.app_service.icloud.on)
|
120
|
+
app.update_service(Spaceship.app_service.cloud_kit.xcode5_compatible)
|
121
|
+
when "cloudkit"
|
122
|
+
app.update_service(Spaceship.app_service.icloud.on)
|
123
|
+
app.update_service(Spaceship.app_service.cloud_kit.cloud_kit)
|
124
|
+
else
|
125
|
+
raise "Unknown service '#{options.icloud}'. Valid values: 'legacy', 'cloudkit'".red
|
126
|
+
end
|
127
|
+
else
|
128
|
+
app.update_service(Spaceship.app_service.icloud.off)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
if options.inter_app_audio
|
133
|
+
Helper.log.info "\tInter-App Audio"
|
134
|
+
|
135
|
+
if on
|
136
|
+
app.update_service(Spaceship.app_service.inter_app_audio.on)
|
137
|
+
else
|
138
|
+
app.update_service(Spaceship.app_service.inter_app_audio.off)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
if options.passbook
|
143
|
+
Helper.log.info "\tPassbook"
|
144
|
+
|
145
|
+
if on
|
146
|
+
app.update_service(Spaceship.app_service.passbook.on)
|
147
|
+
else
|
148
|
+
app.update_service(Spaceship.app_service.passbook.off)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
if options.push_notification
|
153
|
+
Helper.log.info "\tPush Notifications"
|
154
|
+
|
155
|
+
if on
|
156
|
+
app.update_service(Spaceship.app_service.push_notification.on)
|
157
|
+
else
|
158
|
+
app.update_service(Spaceship.app_service.push_notification.off)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
if options.vpn_conf
|
163
|
+
Helper.log.info "\tVPN Configuration"
|
164
|
+
|
165
|
+
if on
|
166
|
+
app.update_service(Spaceship.app_service.vpn_configuration.on)
|
167
|
+
else
|
168
|
+
app.update_service(Spaceship.app_service.vpn_configuration.off)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
updated
|
173
|
+
end
|
174
|
+
|
175
|
+
def app
|
176
|
+
return @app if @app
|
177
|
+
|
178
|
+
Helper.log.info "Starting login"
|
179
|
+
Spaceship.login(Produce.config[:username], nil)
|
180
|
+
Spaceship.select_team
|
181
|
+
Helper.log.info "Successfully logged in"
|
182
|
+
|
183
|
+
@app ||= Spaceship.app.find(Produce.config[:app_identifier].to_s)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
data/lib/produce/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: produce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.4.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.4.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,9 +152,11 @@ files:
|
|
152
152
|
- lib/produce/available_default_languages.rb
|
153
153
|
- lib/produce/dependency_checker.rb
|
154
154
|
- lib/produce/developer_center.rb
|
155
|
+
- lib/produce/group.rb
|
155
156
|
- lib/produce/itunes_connect.rb
|
156
157
|
- lib/produce/manager.rb
|
157
158
|
- lib/produce/options.rb
|
159
|
+
- lib/produce/service.rb
|
158
160
|
- lib/produce/version.rb
|
159
161
|
homepage: https://fastlane.tools
|
160
162
|
licenses:
|