gym 0.5.0 → 0.6.0
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 +9 -0
- data/lib/assets/GymfileTemplate +1 -1
- data/lib/gym.rb +11 -9
- data/lib/gym/generators/README.md +1 -0
- data/lib/gym/{build_command_generator.rb → generators/build_command_generator.rb} +0 -0
- data/lib/gym/generators/package_command_generator.rb +34 -0
- data/lib/gym/{package_command_generator.rb → generators/package_command_generator_legacy.rb} +2 -4
- data/lib/gym/generators/package_command_generator_xcode7.rb +64 -0
- data/lib/gym/manager.rb +1 -1
- data/lib/gym/options.rb +10 -0
- data/lib/gym/runner.rb +21 -6
- data/lib/gym/version.rb +1 -1
- data/lib/gym/xcode.rb +20 -0
- data/lib/gym/xcodebuild_fixes/package_application_fix.rb +1 -1
- data/lib/gym/xcodebuild_fixes/swift_fix.rb +5 -1
- data/lib/gym/xcodebuild_fixes/watchkit_fix.rb +1 -1
- metadata +24 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30a7b849f783846aa81e20f82a41ba031c9aabef
|
4
|
+
data.tar.gz: bcdf8bb5946c5bad1f28c104d5f739674d6bda8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70ef804df96c4bdae6d005ba422c2cc7676998c9a8573427038473fe67d8ea4f44a50f3b4eb55227763ad78e4742834dbafe81ff4f6ac0f027b76e845fde1c3a
|
7
|
+
data.tar.gz: edca9aacc075e79583f7642c6277bfb10b71cd95b1223aa4a5fa9af3df99b86c5f2459e5cbfd6d7efe31eb3059c26655b05e4e65691cf4d088f3bd2c65a5ae8b
|
data/README.md
CHANGED
@@ -116,6 +116,10 @@ That's all you need to build your application. If you want more control, here ar
|
|
116
116
|
|
117
117
|
gym --workspace "Example.xcworkspace" --scheme "AppName" --clean
|
118
118
|
|
119
|
+
If you need to use a different xcode install, use xcode-select or define DEVELOPER_DIR:
|
120
|
+
|
121
|
+
DEVELOPER_DIR="/Applications/Xcode6.2.app" gym
|
122
|
+
|
119
123
|
For a list of all available parameters use
|
120
124
|
|
121
125
|
gym --help
|
@@ -125,6 +129,11 @@ If you run into any issues, use the `verbose` mode to get more information
|
|
125
129
|
|
126
130
|
gym --verbose
|
127
131
|
|
132
|
+
To pass boolean parameters make sure to use `gym` like this:
|
133
|
+
|
134
|
+
gym --upload_bitcode true --upload_symbols true
|
135
|
+
|
136
|
+
|
128
137
|
# Gymfile
|
129
138
|
|
130
139
|
Since you might want to manually trigger a new build but don't want to specify all the parameters every time, you can store your defaults in a so called `Gymfile`.
|
data/lib/assets/GymfileTemplate
CHANGED
data/lib/gym.rb
CHANGED
@@ -2,17 +2,13 @@ require 'json'
|
|
2
2
|
require 'gym/version'
|
3
3
|
require 'gym/manager'
|
4
4
|
require 'gym/project'
|
5
|
-
require 'gym/build_command_generator'
|
6
|
-
require 'gym/package_command_generator'
|
5
|
+
require 'gym/generators/build_command_generator'
|
6
|
+
require 'gym/generators/package_command_generator'
|
7
7
|
require 'gym/runner'
|
8
8
|
require 'gym/error_handler'
|
9
9
|
require 'gym/options'
|
10
10
|
require 'gym/detect_values'
|
11
|
-
|
12
|
-
# Import all the fixes
|
13
|
-
require 'gym/xcodebuild_fixes/swift_fix'
|
14
|
-
require 'gym/xcodebuild_fixes/watchkit_fix'
|
15
|
-
require 'gym/xcodebuild_fixes/package_application_fix'
|
11
|
+
require 'gym/xcode'
|
16
12
|
|
17
13
|
require 'fastlane_core'
|
18
14
|
require 'terminal-table'
|
@@ -32,10 +28,16 @@ module Gym
|
|
32
28
|
"Gymfile"
|
33
29
|
end
|
34
30
|
|
35
|
-
def
|
36
|
-
|
31
|
+
def init_libs
|
32
|
+
return unless Xcode.pre_7?
|
33
|
+
# Import all the fixes
|
34
|
+
require 'gym/xcodebuild_fixes/swift_fix'
|
35
|
+
require 'gym/xcodebuild_fixes/watchkit_fix'
|
36
|
+
require 'gym/xcodebuild_fixes/package_application_fix'
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
|
41
|
+
|
42
|
+
Gym.init_libs
|
41
43
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
All the classes that generate commands we want to execute
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
3
|
+
# The concrete implementations
|
4
|
+
require 'gym/generators/package_command_generator_legacy'
|
5
|
+
require 'gym/generators/package_command_generator_xcode7'
|
6
|
+
|
7
|
+
module Gym
|
8
|
+
class PackageCommandGenerator
|
9
|
+
class << self
|
10
|
+
def generate
|
11
|
+
generator.generate
|
12
|
+
end
|
13
|
+
|
14
|
+
def appfile_path
|
15
|
+
generator.appfile_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def ipa_path
|
19
|
+
generator.ipa_path
|
20
|
+
end
|
21
|
+
|
22
|
+
def dsym_path
|
23
|
+
generator.dsym_path
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# The generator we need to use for the currently used Xcode version
|
29
|
+
def generator
|
30
|
+
Xcode.pre_7? ? PackageCommandGeneratorLegacy : PackageCommandGeneratorXcode7
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/gym/{package_command_generator.rb → generators/package_command_generator_legacy.rb}
RENAMED
@@ -1,11 +1,9 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
|
3
1
|
module Gym
|
4
|
-
# Responsible for building the fully working xcodebuild command
|
2
|
+
# Responsible for building the fully working xcodebuild command on Xcode < 7
|
5
3
|
#
|
6
4
|
# Because of a known bug in PackageApplication Perl script used by Xcode the packaging process is performed with
|
7
5
|
# a patched version of the script.
|
8
|
-
class
|
6
|
+
class PackageCommandGeneratorLegacy
|
9
7
|
class << self
|
10
8
|
def generate
|
11
9
|
parts = ["/usr/bin/xcrun #{XcodebuildFixes.patch_package_application} -v"]
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Gym
|
2
|
+
# Responsible for building the fully working xcodebuild command
|
3
|
+
class PackageCommandGeneratorXcode7
|
4
|
+
class << self
|
5
|
+
def generate
|
6
|
+
if Gym.config[:provisioning_profile_path]
|
7
|
+
Helper.log.info "You're using Xcode 7, the `provisioning_profile_path` value will be ignored".yellow
|
8
|
+
Helper.log.info "Please follow the Code Signing Guide: https://github.com/KrauseFx/fastlane/blob/master/docs/CodeSigning.md".yellow
|
9
|
+
end
|
10
|
+
|
11
|
+
parts = ["/usr/bin/xcrun xcodebuild -exportArchive"]
|
12
|
+
parts += options
|
13
|
+
parts += pipe
|
14
|
+
|
15
|
+
File.write(config_path, config_content) # overwrite everytime. Could be optimized
|
16
|
+
|
17
|
+
parts
|
18
|
+
end
|
19
|
+
|
20
|
+
def options
|
21
|
+
options = []
|
22
|
+
|
23
|
+
options << "-exportOptionsPlist '#{config_path}'"
|
24
|
+
options << "-archivePath '#{BuildCommandGenerator.archive_path}'"
|
25
|
+
options << "-exportPath '#{BuildCommandGenerator.build_path}'" # we move it once the binary is finished
|
26
|
+
|
27
|
+
options
|
28
|
+
end
|
29
|
+
|
30
|
+
def pipe
|
31
|
+
[""]
|
32
|
+
end
|
33
|
+
|
34
|
+
def ipa_path
|
35
|
+
File.join(BuildCommandGenerator.build_path, "#{Gym.config[:output_name]}.ipa")
|
36
|
+
end
|
37
|
+
|
38
|
+
# The path the the dsym file for this app. Might be nil
|
39
|
+
def dsym_path
|
40
|
+
Dir[BuildCommandGenerator.archive_path + "/**/*.app.dSYM"].last
|
41
|
+
end
|
42
|
+
|
43
|
+
# The path the config file we use to sign our app
|
44
|
+
def config_path
|
45
|
+
@config_path ||= "/tmp/gym_config_#{Time.now.to_i}.plist"
|
46
|
+
return @config_path
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def config_content
|
52
|
+
require 'plist'
|
53
|
+
symbols = (Gym.config[:upload_symbols] ? true : false)
|
54
|
+
bitcode = (Gym.config[:upload_bitcode] ? true : false)
|
55
|
+
|
56
|
+
{
|
57
|
+
method: 'app-store',
|
58
|
+
uploadSymbols: symbols,
|
59
|
+
uploadBitcode: bitcode
|
60
|
+
}.to_plist
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/gym/manager.rb
CHANGED
@@ -19,7 +19,7 @@ module Gym
|
|
19
19
|
rows << ["Configuration", config[:configuration]] if config[:configuration]
|
20
20
|
rows << ["Archive Path", config[:archive_path]] if config[:archive_path]
|
21
21
|
rows << ["Platform", Gym.project.ios? ? "iOS" : "Mac"]
|
22
|
-
rows << ["Xcode Path",
|
22
|
+
rows << ["Xcode Path", Xcode.xcode_path.gsub("/Contents/Developer", "")]
|
23
23
|
|
24
24
|
puts ""
|
25
25
|
puts Terminal::Table.new(
|
data/lib/gym/options.rb
CHANGED
@@ -101,6 +101,16 @@ module Gym
|
|
101
101
|
verify_block: proc do |value|
|
102
102
|
raise "File not found at path '#{File.expand_path(value)}'".red unless File.exist?(value)
|
103
103
|
end),
|
104
|
+
FastlaneCore::ConfigItem.new(key: :upload_symbols,
|
105
|
+
short_option: "-m",
|
106
|
+
env_name: "GYM_UPLOAD_SYMBOLS",
|
107
|
+
description: "Should the ipa file include symbols?",
|
108
|
+
default_value: true),
|
109
|
+
FastlaneCore::ConfigItem.new(key: :upload_bitcode,
|
110
|
+
short_option: "-z",
|
111
|
+
env_name: "GYM_UPLOAD_BITCODE",
|
112
|
+
description: "Should the ipa include bitcode?",
|
113
|
+
default_value: false),
|
104
114
|
FastlaneCore::ConfigItem.new(key: :provisioning_profile_path,
|
105
115
|
short_option: "-e",
|
106
116
|
env_name: "GYM_PROVISIONING_PROFILE_PATH",
|
data/lib/gym/runner.rb
CHANGED
@@ -14,10 +14,7 @@ module Gym
|
|
14
14
|
|
15
15
|
if Gym.project.ios?
|
16
16
|
package_app
|
17
|
-
|
18
|
-
Gym::XcodebuildFixes.watchkit_fix
|
19
|
-
Gym::XcodebuildFixes.clear_patched_package_application
|
20
|
-
|
17
|
+
fix_package
|
21
18
|
compress_and_move_dsym
|
22
19
|
move_ipa
|
23
20
|
elsif Gym.project.mac?
|
@@ -60,11 +57,19 @@ module Gym
|
|
60
57
|
#####################################################
|
61
58
|
|
62
59
|
def clear_old_files
|
63
|
-
|
60
|
+
return unless Xcode.pre_7?
|
61
|
+
if File.exist?(PackageCommandGenerator.ipa_path)
|
64
62
|
File.delete(PackageCommandGenerator.ipa_path)
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
66
|
+
def fix_package
|
67
|
+
return unless Xcode.pre_7?
|
68
|
+
Gym::XcodebuildFixes.swift_library_fix
|
69
|
+
Gym::XcodebuildFixes.watchkit_fix
|
70
|
+
Gym::XcodebuildFixes.clear_patched_package_application
|
71
|
+
end
|
72
|
+
|
68
73
|
# Builds the app and prepares the archive
|
69
74
|
def build_app
|
70
75
|
command = BuildCommandGenerator.generate
|
@@ -114,7 +119,7 @@ module Gym
|
|
114
119
|
|
115
120
|
puts "" # new line
|
116
121
|
|
117
|
-
Helper.log.info "Successfully exported and compressed dSYM file
|
122
|
+
Helper.log.info "Successfully exported and compressed dSYM file".green
|
118
123
|
end
|
119
124
|
|
120
125
|
# Moves over the binary and dsym file to the output directory
|
@@ -141,5 +146,15 @@ module Gym
|
|
141
146
|
Helper.log.info app_path
|
142
147
|
app_path
|
143
148
|
end
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def find_archive_path
|
153
|
+
if Xcode.pre_7?
|
154
|
+
BuildCommandGenerator.archive_path
|
155
|
+
else
|
156
|
+
Dir.glob(File.join(BuildCommandGenerator.build_path, "*.ipa")).last
|
157
|
+
end
|
158
|
+
end
|
144
159
|
end
|
145
160
|
end
|
data/lib/gym/version.rb
CHANGED
data/lib/gym/xcode.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Gym
|
2
|
+
class Xcode
|
3
|
+
class << self
|
4
|
+
def xcode_path
|
5
|
+
Helper.xcode_path
|
6
|
+
end
|
7
|
+
|
8
|
+
def xcode_version
|
9
|
+
Helper.xcode_version
|
10
|
+
end
|
11
|
+
|
12
|
+
# Below Xcode 7 (which offers a new nice API to sign the app)
|
13
|
+
def pre_7?
|
14
|
+
v = xcode_version
|
15
|
+
is_pre = v.split('.')[0].to_i < 7
|
16
|
+
is_pre
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -18,7 +18,7 @@ module Gym
|
|
18
18
|
expected_md5 = File.read(path)
|
19
19
|
|
20
20
|
# If that location changes, search it using xcrun --sdk iphoneos -f PackageApplication
|
21
|
-
package_application_path = "#{
|
21
|
+
package_application_path = "#{Xcode.xcode_path}/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication"
|
22
22
|
|
23
23
|
raise "Unable to patch the `PackageApplication` script bundled in XCode. This is not supported." unless expected_md5 == Digest::MD5.file(package_application_path).hexdigest
|
24
24
|
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# from http://stackoverflow.com/a/9857493/445598
|
3
|
+
# because of
|
4
|
+
# `incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)`
|
1
5
|
require 'zip'
|
2
6
|
|
3
7
|
module Gym
|
@@ -23,7 +27,7 @@ module Gym
|
|
23
27
|
ipa_swift_frameworks.each do |path|
|
24
28
|
framework = File.basename(path)
|
25
29
|
|
26
|
-
FileUtils.copy_file("#{
|
30
|
+
FileUtils.copy_file("#{Xcode.xcode_path}/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/#{framework}", File.join(swift_support, framework))
|
27
31
|
end
|
28
32
|
|
29
33
|
# Add "SwiftSupport" to the .ipa archive
|
@@ -13,7 +13,7 @@ module Gym
|
|
13
13
|
Dir.mkdir(watchkit_support)
|
14
14
|
|
15
15
|
# Copy WK from Xcode into WatchKitSupport
|
16
|
-
FileUtils.copy_file("#{
|
16
|
+
FileUtils.copy_file("#{Xcode.xcode_path}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/Library/Application Support/WatchKit/WK", File.join(watchkit_support, "WK"))
|
17
17
|
|
18
18
|
# Add "WatchKitSupport" to the .ipa archive
|
19
19
|
Dir.chdir(tmpdir) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gym
|
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-09-
|
11
|
+
date: 2015-09-18 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.17.0
|
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.17.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.0
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: plist
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: rubyzip
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,16 +230,20 @@ files:
|
|
216
230
|
- lib/assets/package_application_patches/0002_no_strict_parameter_patch.diff
|
217
231
|
- lib/assets/package_application_patches/PackageApplication_MD5
|
218
232
|
- lib/gym.rb
|
219
|
-
- lib/gym/build_command_generator.rb
|
220
233
|
- lib/gym/commands_generator.rb
|
221
234
|
- lib/gym/detect_values.rb
|
222
235
|
- lib/gym/error_handler.rb
|
236
|
+
- lib/gym/generators/README.md
|
237
|
+
- lib/gym/generators/build_command_generator.rb
|
238
|
+
- lib/gym/generators/package_command_generator.rb
|
239
|
+
- lib/gym/generators/package_command_generator_legacy.rb
|
240
|
+
- lib/gym/generators/package_command_generator_xcode7.rb
|
223
241
|
- lib/gym/manager.rb
|
224
242
|
- lib/gym/options.rb
|
225
|
-
- lib/gym/package_command_generator.rb
|
226
243
|
- lib/gym/project.rb
|
227
244
|
- lib/gym/runner.rb
|
228
245
|
- lib/gym/version.rb
|
246
|
+
- lib/gym/xcode.rb
|
229
247
|
- lib/gym/xcodebuild_fixes/README.md
|
230
248
|
- lib/gym/xcodebuild_fixes/package_application_fix.rb
|
231
249
|
- lib/gym/xcodebuild_fixes/swift_fix.rb
|