ios_dev_tools 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6583165243e7d6849595618aeb25b5bd5b1256ad
4
+ data.tar.gz: 94e721d32ac5b1d4d3b6d489cbd6c1a9e7aa6d68
5
+ SHA512:
6
+ metadata.gz: 5c5ba1b2f24e34e3312c2fed7acde878a77736390952c4eba3ad806cdee64d1fbe8c7d988220456e805e4ffe7a3fa62bbd29c3c6dfee1019f4e10bdd6e001407
7
+ data.tar.gz: 4bd46e0131e5ee9d1f430e9098c45ebb35292d08998eb5794f1dd1423bc3df05391792a8521a5f889e75041065b2cbac094010d3d54e78d14618b2671f001355
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ begin
6
+ require 'ios_dev_tools'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'ios_dev_tools'
10
+ end
11
+
12
+ tool=IOSDevTools::Tool.new
13
+ tool.process_cmd_line_args ARGV
@@ -1,8 +1,14 @@
1
1
 
2
2
  module IOSDevTools
3
3
 
4
- autoload :ApplicationBundle, 'ios_dev_tools/application_bundle'
5
- autoload :ProvisioningProfile, 'ios_dev_tools/provisioning_profile'
6
4
  autoload :VERSION, 'ios_dev_tools/version'
5
+ autoload :ApplicationBundle, 'ios_dev_tools/model/application_bundle'
6
+ autoload :ProvisioningProfile, 'ios_dev_tools/model/provisioning_profile'
7
+ autoload :InfoPlist, 'ios_dev_tools/model/info_plist'
8
+ autoload :Pack, 'ios_dev_tools/commands/pack'
9
+ autoload :Sign, 'ios_dev_tools/commands/sign'
10
+ autoload :Verify, 'ios_dev_tools/commands/verify'
11
+ autoload :Tool, 'ios_dev_tools/commands/tool'
12
+ autoload :Help, 'ios_dev_tools/commands/help'
7
13
 
8
14
  end
@@ -0,0 +1,131 @@
1
+
2
+ #
3
+ #
4
+ #
5
+ module IOSDevTools
6
+
7
+ require 'optparse'
8
+
9
+ #
10
+ #
11
+ #
12
+ class Help
13
+
14
+ #
15
+ #
16
+ #
17
+ def self.create_with_args cmd_line_arguments
18
+
19
+ options=parse_options cmd_line_arguments
20
+ return Help.new options
21
+
22
+ end
23
+
24
+ #
25
+ #
26
+ #
27
+ def self.parse_options(args)
28
+
29
+ options={}
30
+ options[:help_option]=args[0]
31
+
32
+ return options
33
+ end
34
+
35
+ #
36
+ #
37
+ #
38
+ def initialize options
39
+
40
+ @options=options
41
+
42
+ end
43
+
44
+ #
45
+ #
46
+ #
47
+ def execute
48
+
49
+ Help.display_banner
50
+
51
+ if not @options[:help_option]
52
+ # no option give, display generic help
53
+ display_generic_help
54
+ elsif @options[:help_option]=="commands"
55
+ # list of commands requested
56
+ display_available_commands
57
+ else
58
+ # command specific help requested
59
+ command_name=@options[:help_option]
60
+ if not Tool.valid_command_name? command_name
61
+ display_unknown_command command_name
62
+ else
63
+ display_command_specific_help command_name
64
+ end
65
+ end
66
+ end
67
+
68
+ #
69
+ #
70
+ #
71
+ def display_unknown_command command_name
72
+ puts "
73
+ ERROR: Unknown command: #{command_name}
74
+ "
75
+ display_generic_help
76
+ end
77
+
78
+ #
79
+ #
80
+ #
81
+ def self.display_banner
82
+ puts "iOS Development Tools v.#{VERSION}
83
+
84
+ "
85
+ end
86
+
87
+ #
88
+ #
89
+ #
90
+ def display_available_commands
91
+ puts "
92
+ Available commands:
93
+
94
+ sign - sign application bundle/archive
95
+ verify - verify application bundle/archive
96
+ pack - pack application bundle into archive
97
+
98
+ Execute following command to see command specific help
99
+
100
+ ios_tool help [COMMAND NAME]
101
+ "
102
+
103
+ end
104
+
105
+ #
106
+ #
107
+ #
108
+ def display_generic_help
109
+ puts "
110
+
111
+ TODO: ios_tool help
112
+
113
+
114
+ help commands - displays available commands
115
+ help [COMMAND NAME] - displays command specific help
116
+
117
+
118
+ "
119
+
120
+ end
121
+
122
+ #
123
+ #
124
+ #
125
+ def display_command_specific_help command_name
126
+ command_class=Tool.command_name_to_class command_name
127
+ command_class.display_help
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module IOSDevTools
3
+
4
+ class Pack
5
+
6
+ def self.create_with_args cmd_line_arguments
7
+ Pack.new
8
+ end
9
+
10
+ def self.display_help
11
+
12
+ puts "
13
+ TODO: 'pack' command help
14
+ "
15
+ end
16
+
17
+ def execute
18
+ puts "TODO: execute"
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,139 @@
1
+
2
+ module IOSDevTools
3
+
4
+ require 'optparse'
5
+
6
+ class Sign
7
+
8
+ def self.create_with_args cmd_line_arguments
9
+
10
+ options=parse_options cmd_line_arguments
11
+
12
+ return Sign.new options
13
+ end
14
+
15
+ def initialize options
16
+
17
+ @options=options
18
+ @be_verbose=(options[:verbose]!=nil)
19
+
20
+ end
21
+
22
+ def self.display_help
23
+
24
+ Sign.parse_options ["-h"]
25
+
26
+ end
27
+
28
+ def verbose_msg message
29
+
30
+ puts message if @be_verbose
31
+
32
+ end
33
+
34
+ def error_msg message
35
+
36
+ puts "\nERROR:\t#{message}\n"
37
+
38
+ end
39
+
40
+ def execute
41
+
42
+ verbose_msg "Passed options:\n#{@options.inspect}"
43
+
44
+ begin
45
+ provisioning_profile=IOSDevTools::ProvisioningProfile.new @options[:profile_location]
46
+ application_bundle=IOSDevTools::ApplicationBundle.new @options[:input_file] do |ab|
47
+ ab.temp_folder=options[:temp_folder]
48
+ end
49
+ rescue => error
50
+ error_msg error
51
+ exit 1
52
+ end
53
+
54
+ new_bundle_id = @options[:bundle_id]
55
+ new_bundle_id ||= application_bundle.bundle_id
56
+
57
+ if not provisioning_profile.is_compatible_with_bundle_id new_bundle_id
58
+ error_msg "Provisioning profile identifier [#{provisioning_profile.application_identifier}] is not compatible with bundle identifier [#{new_bundle_id}]\n \
59
+ \tMaybe you should use -b switch to overwrite the bundle identifier?"
60
+ exit 1
61
+ end
62
+
63
+ application_bundle.bundle_id = new_bundle_id
64
+ application_bundle.set_provisioning_profile provisioning_profile.profile_location
65
+ application_bundle.sign_with_identity @options[:identity]
66
+ application_bundle.package_to_ipa @options[:output_ipa]
67
+
68
+ puts "\nApplication archive created and signed: #{options[:output_ipa]}"
69
+
70
+ end
71
+
72
+ def self.parse_options(args)
73
+
74
+ options = Hash.new
75
+ OptionParser.new do |opts|
76
+
77
+ opts.banner = "Usage:
78
+ ios_tool sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
79
+
80
+ opts.separator ""
81
+ opts.separator "Options:"
82
+
83
+ opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
84
+ options[:profile_location] = profile_location
85
+ end
86
+
87
+ opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
88
+ options[:bundle_id] = bundle_id
89
+ end
90
+
91
+ opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
92
+ options[:output_ipa] = output_ipa
93
+ end
94
+
95
+ opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
96
+ options[:identity] = identity
97
+ end
98
+
99
+ opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
100
+ options[:temp_folder] = temp_folder
101
+ end
102
+
103
+ opts.separator ""
104
+ opts.separator "Common options:"
105
+
106
+ opts.on("-v", "--verbose", "Run verbosely") do |v|
107
+ options[:verbose] = v
108
+ end
109
+
110
+ opts.on("--version", "Show version and exit") do |v|
111
+ puts "Version: #{IOSDevTools::VERSION}"
112
+ exit
113
+ end
114
+
115
+ # No argument, shows at tail. This will print an options summary.
116
+ # Try it and see!
117
+ opts.on_tail("-h", "--help", "Show this message") do
118
+ puts opts
119
+ exit
120
+ end
121
+
122
+ end.parse!(args)
123
+
124
+ options[:input_file]=ARGV[0]
125
+ mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
126
+ expected_number=mandatory.count
127
+ real_number=mandatory.compact.count
128
+ if expected_number != real_number
129
+ # one of mandatory switches is missing
130
+ # display help and exit
131
+ parse_options ["-h"]
132
+ end
133
+
134
+ return options
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -0,0 +1,122 @@
1
+
2
+ module IOSDevTools
3
+
4
+ require 'optparse'
5
+
6
+ class Tool
7
+
8
+ def process_cmd_line_args cmd_line_arguments
9
+
10
+ command_name=cmd_line_arguments[0]
11
+
12
+ if not command_name or command_name=="-h" or command_name=="--help"
13
+ command_name="help"
14
+ end
15
+
16
+ if not Tool.valid_command_name? command_name
17
+ puts "Unknown command"
18
+ exit
19
+ end
20
+
21
+ # create class definition
22
+ command_class=Tool.command_name_to_class command_name
23
+
24
+ # NOTE:shift argument array to loose first element which is command name
25
+ # the command is already recognised and is not needed any more
26
+ # this simplifies options parsing inside commands
27
+ ARGV.shift
28
+
29
+ # use common factory method to create the command
30
+ command=command_class.create_with_args ARGV
31
+ # execute the command if created
32
+ command.execute if command
33
+
34
+ end
35
+
36
+ def self.valid_command_name? command_name
37
+
38
+ valid_commands=["sign", "pack", "verify", "help"]
39
+ return valid_commands.include? command_name
40
+
41
+ end
42
+
43
+ def self.command_name_to_class command_name
44
+ # convert snake case to camel case
45
+ c=command_name.gsub(/(?<=_|^)(\w)/){$1.upcase}.gsub(/(?:_)(\w)/,'\1')
46
+ # create class definition
47
+ command_class=nil
48
+ begin
49
+ command_class=Object.const_get("IOSDevTools::#{c}")
50
+ rescue NameError,e
51
+ end
52
+ return command_class
53
+ end
54
+
55
+ def self.parse_options(args)
56
+
57
+ options = Hash.new
58
+ OptionParser.new do |opts|
59
+
60
+ opts.banner = "Usage:
61
+ ios_tool sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
62
+
63
+ opts.separator ""
64
+ opts.separator "Options:"
65
+
66
+ opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
67
+ options[:profile_location] = profile_location
68
+ end
69
+
70
+ opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
71
+ options[:bundle_id] = bundle_id
72
+ end
73
+
74
+ opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
75
+ options[:output_ipa] = output_ipa
76
+ end
77
+
78
+ opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
79
+ options[:identity] = identity
80
+ end
81
+
82
+ opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
83
+ options[:temp_folder] = temp_folder
84
+ end
85
+
86
+ opts.separator ""
87
+ opts.separator "Common options:"
88
+
89
+ opts.on("-v", "--verbose", "Run verbosely") do |v|
90
+ options[:verbose] = v
91
+ end
92
+
93
+ opts.on("--version", "Show version and exit") do |v|
94
+ puts "Version: #{IOSDevTools::VERSION}"
95
+ exit
96
+ end
97
+
98
+ # No argument, shows at tail. This will print an options summary.
99
+ # Try it and see!
100
+ opts.on_tail("-h", "--help", "Show this message") do
101
+ puts opts
102
+ exit
103
+ end
104
+
105
+ end.parse!(args)
106
+
107
+ options[:input_file]=ARGV[0]
108
+ mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
109
+ expected_number=mandatory.count
110
+ real_number=mandatory.compact.count
111
+ if expected_number != real_number
112
+ # one of mandatory switches is missing
113
+ # display help and exit
114
+ parse_options ["-h"]
115
+ end
116
+
117
+ return options
118
+ end
119
+
120
+ end
121
+
122
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module IOSDevTools
3
+
4
+ class Verify
5
+
6
+ def self.create_with_args cmd_line_arguments
7
+ Verify.new
8
+ end
9
+
10
+ def self.display_help
11
+
12
+ puts "
13
+ TODO: 'verify' command help
14
+ "
15
+ end
16
+
17
+ def execute
18
+ puts "TODO: execute"
19
+ end
20
+ end
21
+
22
+ end
@@ -15,6 +15,7 @@ module IOSDevTools
15
15
  attr_accessor :temp_folder
16
16
  attr_accessor :plist_buddy_cmd
17
17
  attr_accessor :application_name
18
+ attr_accessor :info_plist
18
19
 
19
20
  def initialize file_or_folder_location
20
21
 
@@ -30,7 +31,6 @@ module IOSDevTools
30
31
 
31
32
  @src_location=file_or_folder_location
32
33
  @temp_folder||="temp"
33
- @plist_buddy_cmd||="/usr/libexec/PlistBuddy"
34
34
 
35
35
  if not @is_application_folder
36
36
  # wipe out temp folder
@@ -44,26 +44,11 @@ module IOSDevTools
44
44
  end
45
45
 
46
46
  @application_name=Pathname.new(@location).basename
47
+ @info_plist=InfoPlist.new "#{@location}/Info.plist"
47
48
 
48
49
  end
49
50
 
50
- def display_name
51
- `#{@plist_buddy_cmd} -c "Print :CFBundleDisplayName" "#{@location}/Info.plist"`.strip
52
- end
53
-
54
- def display_name= new_name
55
- return if not new_name
56
- `#{@plist_buddy_cmd} -c "Set :CFBundleDisplayName #{new_name}" "#{@location}/Info.plist"`
57
- end
58
51
 
59
- def bundle_id
60
- `#{@plist_buddy_cmd} -c "Print :CFBundleIdentifier" "#{@location}/Info.plist"`.strip
61
- end
62
-
63
- def bundle_id= new_bundle_id
64
- return if not new_bundle_id
65
- `#{@plist_buddy_cmd} -c "Set :CFBundleIdentifier #{new_bundle_id}" "#{@location}/Info.plist"`
66
- end
67
52
 
68
53
  def set_provisioning_profile new_provisioning_profile_location
69
54
  return if not new_provisioning_profile_location
@@ -0,0 +1,50 @@
1
+ module IOSDevTools
2
+
3
+ #
4
+ #
5
+ #
6
+ class InfoPlist
7
+
8
+ attr_accessor :info_plist_file_path
9
+ attr_accessor :plist_buddy_cmd
10
+
11
+ def initialize info_plist_file_path
12
+
13
+ @info_plist_file_path=info_plist_file_path
14
+
15
+ yield self if block_given?
16
+
17
+ @plist_buddy_cmd||="/usr/libexec/PlistBuddy"
18
+
19
+ raise "Property list file \"#{info_plist_file_path}\" doesn't exist" if not File.exists? @info_plist_file_path
20
+ raise "Plist editor \"#{info_plist_file_path}\" doesn't exist" if not File.exists? @plist_buddy_cmd
21
+
22
+ end
23
+
24
+ def set_property property_id, property_value
25
+ return if not property_id or not property_value
26
+ `#{@plist_buddy_cmd} -c "Set :#{property_id} #{new_name}" "#{@info_plist_file_path}"`
27
+ end
28
+
29
+ def get_property property_id
30
+ `#{@plist_buddy_cmd} -c "Print :#{property_id}" "#{@info_plist_file_path}"`.strip
31
+ end
32
+
33
+ def display_name
34
+ get_property "CFBundleDisplayName"
35
+ end
36
+
37
+ def display_name= new_name
38
+ set_property "CFBundleDisplayName", new_name
39
+ end
40
+
41
+ def bundle_id
42
+ get_property "CFBundleIdentifier"
43
+ end
44
+
45
+ def bundle_id= new_bundle_id
46
+ set_property "CFBundleIdentifier", new_bundle_id
47
+ end
48
+
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
1
  module IOSDevTools
2
2
 
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
 
5
5
  end
@@ -3,6 +3,18 @@ require 'ios_dev_tools'
3
3
 
4
4
  class ApplicationBundleTest < Test::Unit::TestCase
5
5
 
6
+ def test_create_with_app_folder
7
+
8
+ app_bundle=IOSDevTools::ApplicationBundle.new "test_resources/DummyApp.app"
9
+
10
+ assert_not_nil app_bundle
11
+ info_plist=app_bundle.info_plist
12
+ assert_not_nil info_plist
13
+ assert_equal "Dummy Bundle", app_bundle.info_plist.display_name
14
+ assert_equal "com.csquirrel.dummy.bundle", app_bundle.info_plist.bundle_id
15
+
16
+ end
17
+
6
18
  def test_create_with_not_existing_folder
7
19
 
8
20
  assert_raise RuntimeError do
@@ -0,0 +1,23 @@
1
+ require 'test/unit'
2
+ require 'ios_dev_tools'
3
+
4
+ class ApplicationBundleTest < Test::Unit::TestCase
5
+
6
+ def test_create_with_file
7
+
8
+ info_plist=IOSDevTools::InfoPlist.new "test_resources/DummyApp.app/Info.plist"
9
+
10
+ assert_equal "Dummy Bundle", info_plist.display_name
11
+ assert_equal "com.csquirrel.dummy.bundle", info_plist.bundle_id
12
+
13
+ end
14
+
15
+ def test_create_with_not_existing_file
16
+
17
+ assert_raise RuntimeError do
18
+ IOSDevTools::ApplicationBundle.new "dummy.file.plist"
19
+ end
20
+
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,66 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ios_dev_tools
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Marcin Maciukiewicz
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-12-28 00:00:00 +00:00
18
- default_executable:
11
+ date: 2013-12-28 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
13
  description: Set of ruby wrappers around iOS dev tasks
22
14
  email: mm@csquirrel.com
23
- executables:
24
- - ios_sign
15
+ executables:
16
+ - ios_tool
25
17
  extensions: []
26
-
27
18
  extra_rdoc_files: []
28
-
29
- files:
19
+ files:
30
20
  - lib/ios_dev_tools.rb
31
- - lib/ios_dev_tools/application_bundle.rb
32
- - lib/ios_dev_tools/provisioning_profile.rb
21
+ - lib/ios_dev_tools/commands/help.rb
22
+ - lib/ios_dev_tools/commands/pack.rb
23
+ - lib/ios_dev_tools/commands/sign.rb
24
+ - lib/ios_dev_tools/commands/tool.rb
25
+ - lib/ios_dev_tools/commands/verify.rb
26
+ - lib/ios_dev_tools/model/application_bundle.rb
27
+ - lib/ios_dev_tools/model/info_plist.rb
28
+ - lib/ios_dev_tools/model/provisioning_profile.rb
33
29
  - lib/ios_dev_tools/version.rb
34
- has_rdoc: true
30
+ - test/test_application_bundle.rb
31
+ - test/test_info_plist.rb
32
+ - test/test_provisioning_profile.rb
33
+ - bin/ios_tool
35
34
  homepage: https://github.com/cSquirrel/ios-dev-tools
36
- licenses:
35
+ licenses:
37
36
  - MIT
37
+ metadata: {}
38
38
  post_install_message:
39
39
  rdoc_options: []
40
-
41
- require_paths:
40
+ require_paths:
42
41
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- segments:
48
- - 0
49
- version: "0"
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
57
52
  requirements: []
58
-
59
53
  rubyforge_project: nowarning
60
- rubygems_version: 1.3.6
54
+ rubygems_version: 2.0.3
61
55
  signing_key:
62
- specification_version: 3
56
+ specification_version: 4
63
57
  summary: iOS Dev Tools
64
- test_files:
58
+ test_files:
65
59
  - test/test_application_bundle.rb
60
+ - test/test_info_plist.rb
66
61
  - test/test_provisioning_profile.rb
@@ -1,126 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
-
5
- begin
6
- require 'ios_dev_tools'
7
- rescue LoadError
8
- require 'rubygems'
9
- require 'ios_dev_tools'
10
- end
11
-
12
- $be_verbose=false
13
-
14
- def verbose_msg message
15
-
16
- puts message if $be_verbose
17
-
18
- end
19
-
20
- def error_msg message
21
-
22
- puts "\nERROR:\t#{message}\n"
23
-
24
- end
25
-
26
- def parse_options(args)
27
-
28
- options = Hash.new
29
- OptionParser.new do |opts|
30
-
31
- opts.banner = "Usage: ios_sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
32
-
33
- opts.separator ""
34
- opts.separator "Options:"
35
-
36
- opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
37
- options[:profile_location] = profile_location
38
- end
39
-
40
- opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
41
- options[:bundle_id] = bundle_id
42
- end
43
-
44
- opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
45
- options[:output_ipa] = output_ipa
46
- end
47
-
48
- opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
49
- options[:identity] = identity
50
- end
51
-
52
- opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
53
- options[:temp_folder] = temp_folder
54
- end
55
-
56
- opts.separator ""
57
- opts.separator "Common options:"
58
-
59
- opts.on("-v", "--verbose", "Run verbosely") do |v|
60
- options[:verbose] = v
61
- end
62
-
63
- opts.on("--version", "Show version and exit") do |v|
64
- puts "Version: #{IOSDevTools::VERSION}"
65
- exit
66
- end
67
-
68
- # No argument, shows at tail. This will print an options summary.
69
- # Try it and see!
70
- opts.on_tail("-h", "--help", "Show this message") do
71
- puts opts
72
- exit
73
- end
74
-
75
- end.parse!(args)
76
-
77
- options[:input_file]=ARGV[0]
78
- mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
79
- expected_number=mandatory.count
80
- real_number=mandatory.compact.count
81
- if expected_number != real_number
82
- # one of mandatory switches is missing
83
- # display help and exit
84
- parse_options ["-h"]
85
- end
86
-
87
- $be_verbose=(options[:verbose]!=nil)
88
-
89
- return options
90
- end
91
-
92
- def main
93
-
94
- options=parse_options ARGV
95
-
96
- verbose_msg "Passed options:\n#{options.inspect}"
97
-
98
- begin
99
- provisioning_profile=IOSDevTools::ProvisioningProfile.new options[:profile_location]
100
- application_bundle=IOSDevTools::ApplicationBundle.new options[:input_file] do |ab|
101
- ab.temp_folder=options[:temp_folder]
102
- end
103
- rescue => error
104
- error_msg error
105
- exit 1
106
- end
107
-
108
- new_bundle_id = options[:bundle_id]
109
- new_bundle_id ||= application_bundle.bundle_id
110
-
111
- if not provisioning_profile.is_compatible_with_bundle_id new_bundle_id
112
- error_msg "Provisioning profile identifier [#{provisioning_profile.application_identifier}] is not compatible with bundle identifier [#{new_bundle_id}]\n \
113
- \tMaybe you should use -b switch to overwrite the bundle identifier?"
114
- exit 1
115
- end
116
-
117
- application_bundle.bundle_id = new_bundle_id
118
- application_bundle.set_provisioning_profile provisioning_profile.profile_location
119
- application_bundle.sign_with_identity options[:identity]
120
- application_bundle.package_to_ipa options[:output_ipa]
121
-
122
- puts "\nApplication archive created and signed: #{options[:output_ipa]}"
123
-
124
- end
125
-
126
- main